diff --git a/CHANGES b/CHANGES index 17c5b2735487..8e5d22e400a3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,2248 +1,2461 @@ --- $Id: CHANGES,v 1.619 2018/06/21 09:19:45 tom Exp $ +-- $Id: CHANGES,v 1.723 2021/01/17 20:21:41 tom Exp $ -- Thomas E. Dickey This version of dialog was originally from a Debian snapshot. I've done this to it: +2021/01/17 + + updated dialog.pot + + add option --no-hot-list, to allow suppressing the hotkey feature + from lists. + + increase minimum height of inputbox to avoid input field overlapping + with the button-box (report by Victor Ananjevsky). + + modify options-parsing to permit a "no" on any boolean option and + deprecating the "no" options without a "-" , e.g., generalizing on + "--nook" equivalence to "--no-ok". + +2021/01/12 + + minor spelling fixes, per codespell + + update configure macros, for quoting/escaping fixes per shellcheck + + update config.guess, config.sub + +2020/11/26 + + modify configure script's compiler check to work around Xcode's + useless aliases for standard C. + + enable keep-tite feature for NetBSD 8 and up; earlier releases would + dump core. + > new features/fixes (Glenn Herteg) + + add option "--cursor-off-label" + + add option "--erase-on-exit" + + fix errata in manpage. + + fix logic: dlg_button_to_char() would return wrong value if no + uppercase was found + +2020/11/25 + + add DIALOG_TIMEOUT to sample scripts, and use report-button more + consistently to handle unexpected exit-status values. + +2020/11/24 + + add dlg_getenv_num() and dlg_getenv_str(). + + add DLG_EXIT_TIMEOUT to allow scripts to exit on an expired timeout + with an exit-status different from DLG_EXIT_ERROR or DLG_EXIT_ESC + (patch by Norbert Koch). + +2020/11/23 + + modify dlg_ok_label() and dlg_ok_labels() to ignore --no-ok if all + buttons would be omitted. + + add/use dlg_der_window() to account for derived windows just like + subwindows, to fix regression in dlg_getc() in fselect/dselect + widget. + + modify several widgets to make their handling of --no-ok consistent + with the majority of the widgets: editbox.c, menubox.c, msgbox.c, + rangebox.c, textbox.c, timebox.c + + add ^D as binding for new virtual key DLGK_LEAVE, which will close + the current dialog by activating the currently-selected button. + + improve manual-page description of --no-ok option (reports by + Hans Mueller, Gil Delescluse). + + modify configure script to make Solaris -R rpath feature work + +2020/11/21 + + fix regression in dlg_getc() caused by not taking into account + subwindows used for input (report by Michael Wihl). + +2020/11/20 + + add validity-checks for window pointer (report/testcase by Michael + Wihl). + + improve configure macros: + CF_CLANG_COMPILER: apply compiler-flags needed for test. + CF_WITH_SCREEN_PDCURSES: use this to reduce X11-checks. + +2020/11/17 + + amend initialization for dlg_getc to fix regression in pause widget + from 2020/03/27 changes (reports by Aidan Tessier, Norbert Koch, + Josmar Pierri). + + improve configure macros: + CF_CLANG_COMPILER: split-out check for -Qunused-arguments to ensure + that clang supports it. IBM xlclang does not. + CF_MIXEDCASE_FILENAMES: when cross-compiling to darwin (macOS), + assume the filesystem doesn't support mixed-case + +2020/09/21 + + modify init_dialog's initialization of tab_len and aspect_ratio to + avoid overwriting initialization done in process_common_options + (report/patch by Rainer Weikusat, Debian #970508). + +2020/09/13 + + fix out-of-order description for --tailbox vs --rangebox in manpage + (report by Glenn Herteg). + + updated configure-macros: compiler-warnings and shared-library + options. Changed configure --with-warnings to --enable-warnings for + consistency. + + update config.guess + +2020/04/01 + + updated sq.po from + http://translationproject.org/latest/dialog/ + +2020/03/27 + + add clarification in manual page to show when the single/double + quotes may be needed (prompted by discussion with Danilo G Baio). + + fix an extra ".exe" in makefile.in which prevented Cygwin build. + + fix most cppcheck warnings + + tailbox/tailboxbg's exit-button now works with mouse-clicks + + fix repainting while resizing for the editbox widget. + + add configure-check for curses_exit() from ncurses 6.2 + + fix a few memory leaks in fselect.c, mixedgauge.c when resizing. + + fix inconsistency in dlg_string_to_argv() which made the checklist9 + example not work. + + add empty-string check in dlg_print_listitem() to avoid indexing past + the end of the array of character-offsets. + + improve handling of KEY_RESIZE by repainting the backtitle after + clearing the screen (integrated patch by Rainer Weikusat, Debian + #954185). + + improve logic for wtimeout() calls which are used to set temporary + non-blocking reads (prompted by patch by Rainer Weikusat, Debian + #954220). + + add "make check" rule. + + updated configure-macros. + +2020/02/28 + + updated configure-macros, to work around ncurses vs xcode's c99 -W + + update config.guess + +2019/12/31 + + updated configure-macros. + + update config.guess + +2019/12/10 + + correct rc-file lookup of "default" color (report by Grady Martin, + cf: 2019/09/24). + + fix several issues in the sample scripts reported by shellcheck. + + fix a few spelling errors reported by codespell (report by Jens + Schleusener). + + correct check for return-value of isblank(), which is not necessarily + 0/1 (report/patch by Paul Cercueil, Peter Korsgaard, cf: 2018/05/31). + +2019/12/09 + + amend change for parsing command-options before calling init_dialog, + to handle --no-shadow, etc., which are initialized in init_dialog + (report by Paul Cercueil, cf: 2018/06/21). + + add dlg_trace_va_msg to manpage, symbol files. + +2019/11/10 + + improve layout of several widgets' data area when maximizing. + + modify dselect/fselect to work with autosizing (Debian #915949). + + add error messages from dlg_exiterr() to trace file. + + improve manual page description of escaping in key-bindings. + + modify inputmenu to recognize the "Cancel" button and keys bound to + that feature while editing a renamed menu item. + + revert one change, in form.c to the --last-key feature (Debian + #942025). + + correct ordering of libraries in configure-script, which appended + in a case where it should have prepended. + + update config.guess, config.sub + +2019/09/26 + + improve dialog-config script's filtering of -L options using the + linker default directories. + + improve dialog-config script, adding a -L option corresponding to + the configure --libdir option if it would be a duplicate (report by + Andrew Kosteltsev). + + build-fix for configure --disable-trace + + updated pt.po from + http://translationproject.org/latest/dialog/ + +2019/09/24 + + allow for underline- and reverse-video flags in the ".rc" file + (integrated patch by Richard Robbins). + +2019/08/08 + + amend change to --last-key feature to eliminate an unnecessary + separator (report by Gabriele Balducci). + +2019/08/06 + + extend --last-key feature to the remaining widgets which have + ok/cancel buttons, and add logic to map keys which happen to be + bound to ok/extra/cancel/help to simulate a button-press on the + corresponding button (report by "sgewrk"). + +2019/08/01 + + further fixes for dialog-config.in (report by Andrew Kosteltsev). + +2019/07/28 + + modify dialog-config.in so that setting prefix or exec-prefix to + a given value with --prefix=VALUE or --exec-prefix=VALUE has the + expected result of changing bindir, etc. + + correct substitution for $LIBS value in dialog-config.in (report by + Andrew Kosteltsev). + +2019/07/24 + + modify dlg_will_resize() and dlg_result_key() functions to reduce + the chance that dialog exits on a SIGWINCH (Debian #930775). + + make test-package for the development headers/library + + add --libs-only-L, etc., to dialog-config script (prompted by + discussion with Andrew Kosteltsev). + + fix a memory leak in gauge widget (Andrew Kosteltsev). + + minor fix for CF_GCC_WARNINGS + + update config.guess, config.sub + +2019/02/11 + + modify to work with ncurses' threaded-library, which does not allow + assignment to LINES/COLS (report by Marcus Roeckrath). + + correct clearing after text in progressbox from 2018/06/21 changes + for resizing (reports by David Boyd, Alan Somers). + + improved configure macros CF_GNU_SOURCE, CF_POSIX_C_SOURCE, + CF_XOPEN_SOURCE + + update config.guess, config.sub + +2018/11/07 + + convert ja.po to UTF-8 for consistency (suggested by Stanislav + Brabec). + + repair mis-encoded hi.po (report/analysis by Stanislav Brabec). + +2018/10/22 + + improved configure macros CF_CC_ENV_FLAGS, CF_LD_RPATH_OPT, + CF_LIBRARY_PATH, CF_SHARED_OPTS, CF_WITH_MAN2HTML, + CF_WITH_VERSIONED_SYMS from ncurses + + add ast.po, from + http://translationproject.org/latest/dialog/ + 2018/06/21 + improve file-offset computation in textbox.c (Werner Fink). + fix an overlooked case with real_auto_size() to maximize when height or width is given as -1. + build-fixes for configure options "--disable-Xdialog2" and "--disable-form" + add traces for each widget to show its parameters. + modify color scheme for mixedgauge to use the dialog window colors, like the captions. + fix a too-small malloc in the mixedgauge widget. + fix a use-after-free in dlg_remove_callback(). + improve handling of SIGWINCH for several widgets (Debian #865840). + menubox, the point of the Debian report was that it would be nice to increase the window size if the terminal size increases. Did that as a special case less problematic than decreasing the terminal size. Added samples/menubox11 to demonstrate by comparison with menubox10 a problem with debconf which puts extra newlines in the caption that interfere with autowrap. + progressbox and derived prgbox, programbox, now handle resizing. + yesno, window was cleared + add dlg_ttysize() to support new options, allowing scripts to obtain some text-formatting details without initializing the terminal. + add options --print-text-only, and --print-text-size for scripts that adjust the widget size according to how the captions are formatted. + improve dialog.pl: + add demo.pl, to demonstrate the functions + quote/escape string parameters passed to dialog. + ensure all "integer" parameters are really integers. + use actual screensize for list captions rather than assuming 24 lines. + when trimming blanks, treat unconverted tabs the same as spaces. + correct parameter to test when trimming blanks from the script, e.g., with "--trim" (report by Jarno Suni). + improve documentation of the various whitespace-filtering options, to show which take precedence (Debian #867536, cf: Debian #102942). + modify msgbox.c, yesno.c to bind SCROLLKEY_BINDINGS before TRAVERSE_BINDINGS so that up/down arrow will by default scroll the message up/down rather than be aliases for tab-traversal (report by Fredrik Kers). + modify dump_one_binding() to show when a binding is overridden. + improve format of trace-file, making comment-syntax consistent, as well as showing argv-splitting as a series of comments. + modify dlg_string_to_argv() to change the quoting behavior to be more consistent with shell behavior (patch by Denilson Sa Maia). + modify dlg_getc() to return ESC when a timeout expires, notifying callers that a quit occurred rather than exiting the application (suggested by Rodrigo Freitas). + modify handle_inputs() to ensure cursor-visibility is restored when there is no input character available (report by Guillaume Vareille). + improve comment in manual page regarding which widgets can use the "--help-button" (prompted by discussion with Csanyi Pal). + add a check for valid object pointer in tailbox's main loop since the getc-callback may have been freed within ui_getc.c (report by "David"). + improved configure macros for ncurses: CF_GNU_SOURCE, CF_SHARED_OPTS, CF_CURSES_LIBS, CF_CURSES_FUNCS, CF_NCURSES_CONFIG + improved configure script checks for groff vs man2html: CF_PROG_GROFF and CF_WITH_MAN2HTML + build-fix from lynx for AM_WITH_NLS configure macro + update config.guess, config.sub 2017/12/09 + update ftp url in test-packages. + modify test-packages to use recommended compiler/linker flags. + improved configure macros AM_WITH_NLS, CF_CC_ENV_FLAGS, CF_CURSES_LIBS, CF_NCURSES_CONFIG, CF_SHARED_OPTS, CF_WITH_LIBTOOL, CF__INTL_BODY. + update config.guess, config.sub 2017/05/09 + improved configure macros CF_ADD_CFLAGS, CF_CC_ENV_FLAGS, and CF_SHARED_OPTS. + updated hu.po and tr.po from http://translationproject.org/latest/dialog/ + update config.guess, config.sub 2017/01/31 + use DLG_TRACE macro consistently to make "--disable-trace" configure option work. + modify buildlist widget to support option "--reorder" for to allow user to reorder the data based on the sequence of selections (discussion with Paraic O'Ceallaigh). + fill background color on unused parts of buildlist. + fix a minor error in buildlist which let pageup switch columns. + change several calls to dlg_trace_msg to prefix with "#" to make the trace logs more consistent for parsing. + add samples/run_test.sh + further improve performance with very long command-lines by changes to howmany_tags(). + modify dlg_string_to_argv() to convert escaped double-quotes to plain double-quotes when within a double-quoted string. + modify makefile to apply CFLAGS to linking + modify dlg_string_to_argv() to ignore escaped newlines except when quoted, fixing a problem with samples/checklist9. + interpret $DIALOGOPTS before expanding "--file", etc., to allow the environment variable to turn on tracing in that process. + improve performance when processing very long command lines, e.g., using "--file" by changing dialog_opts[] to an array of pointers to the expanded argv[] (discussion with Lars Tauber). + modified autoconf macros + CF_CC_ENV_FLAGS amend the last change to move only the preprocessor, optimization and warning flags to CPPFLAGS and CFLAGS, leaving the residue in CC. That happens to work for gcc's various "model" options, but may require tuning for other compilers + CF_LARGEFILE workaround for clang exit-code vs warnings + CF_MATH_LIB quiet strict gcc warning + CF_WITH_LIBTOOL fix a few places in configure/build scripts where DESTDIR and rpath were combined + CF_XOPEN_SOURCE add "uclinux" to list of Linux's + update config.guess, config.sub 2016/11/20 + added fur.po (Friulian) from http://translationproject.org/latest/dialog/ 2016/08/28 + improve parsing and trace for "bindkey", to convert space to/from "\s", as well as handle octal escapes for single byte characters. + change explicit checks for space character used for select or toggle to make this rebindable to "TOGGLE" (prompted by discussion with Paul van Tilburg). + add default bindings for cursor left/right to formbox. The cursor left/right cases were replaced with rebindable symbols in 2005/12/07 without providing these keys as default values (report/patch by Miroslav Lichvar). + modified autoconf macros + CF_PROG_LINT add cpplint to programs to use; drop ad hoc tdlint and alint. + CF_CC_ENV_FLAGS don't limit the check to -I, -U and -D options, since the added options can include various compiler options before and after preprocessor options. + CF_GNU_SOURCE recent glibc (Debian 2.23-4 for example) has misordered ifdef/checks for new symbol _DEFAULT_SOURCE, producing warning messages when only _GNU_SOURCE is defined. Add a followup check to define _DEFAULT_SOURCE. + CF_XOPEN_SOURCE use _GNU_SOURCE for cygwin headers, tested with cygwin 2.3, 2.5 (patch by Corinna Vinschen). + mention --no-collapse option in manual page description of --tab-correct option. + update config.guess, config.sub 2016/04/24 + fix a special case in drawing shadow on a line-drawing cell where the alternate-character set flag was lost (report by Martin Kravec). + fix a regression from 2015/05/13 changes for escaping; it is necessary to retain backslashes within quotes to make "\Z" escapes work (report by Marcin Krol). + fix test package for RPMs; changes in 2015 omitted symbolic links for the library. + fix typo in help message for "--buildlist" (report by Rihards Olups). + modified autoconf macros + CF_PROG_AR, CF_AR_FLAGS added to improve check for archive tool. + CF_LD_RPATH_OPT, change FreeBSD to use -Wl,-rpath rather than -rpath option. According to FreeBSD #178732, either works since FreeBSD 4.x; however scons does not accept anything except the -Wl,-rpath form. + CF_WITH_NCURSES_ETC, change from ncurses to check for pthreads dependency. 2016/02/09 + modify editbox widget to add a trailing newline if the text has none to ensure the last line is not ignored (report by Florent Rougon). + change mouse initialization to look for button-presses rather than button-clicks, for better response. + modify dump_curses_key() to show mouse-coding in readable form. + correct mapping of mouse-clicks on the day-grid in calendar widget when "--week-start" is used to set the start of the week (report by Stefan Vogtner). > integrated changes from Stefan Vogtner: + use Gregorian algorithm for leap year + use mktime if available; calendar was written just as it became standard. 2016/01/26 - release 1.3 + correct --infobox documentation, which said it shows an OK button. + fix a couple of place in test-scripts which referred to $SIG_TRAP rather than $SIG_QUIT + reorganize dialog.3, to use subsections for generating navigation pane, using man2html + add "--week-start" option for calendar widget (prompted by discussion with Stefan Vogtner). + add a limit-check in editbox.c to ensure that mouse-clicks outside the filled-in text area do not access past the end of the array (report by Stefan Vogtner). + update configure macros from ncurses changes. + update config.guess, config.sub 2015/09/20 + decrease table value for minimum number of arguments for the widgets which use --no-items option (report by Raven Singularity). + update configure macros: + use $SHELL consistently, deprecate non-POSIX shell + PKG_CONFIG may simply be unset - fix + add option to allow changing ABI version, from ncurses6. 2015/05/28 + fixes for two autoconf macros, CF_ADD_INCDIR and CF_NCURSES_CONFIG from work on ncurses. + build-fix for NetBSD curses (patch by Matthias Scheler). 2015/05/13 + add configure option --with-install-prefix, like ncurses. + add --with-screen and related configure options from ncurses-examples to allow building with ncurses6 test-packages. + update configure macros for improved coding style from lynx changes. + updated ro.po from http://translationproject.org/latest/dialog/ + update config.guess, config.sub > patches by Florent Rougon: + fix two bugs in the "--file" option. + When the number of arguments read from the included file is 0, the code used to just skip over '--file' and its argument instead of removing them from the argument list, causing "Error: Unknown option --file" later on. + In the alternative case (at least one argument read from the file), the previous code used to do '--j;' in order to "force rescan" of the inserted arguments. However, control then flowed to outer blocks where a '++j;' counteracted this measure, causing "Error: Unknown option --msgbox" (for instance) later on. + modify escaping in argv.c to be more uniform, whether or not the backslash is found within a parameter. 2015/02/25 + modify gauge widget to keep from erasing a second gauge widget, e.g., via the "--and-widget" option. This is a cosmetic change to match behavior of dialog 1.0 (report by Jason Orendorf). + add configure option "--with-man2html" + add configure options for versioned symbols, from ongoing work on ncurses. + update configure macros, e.g., for shared libraries 2015/01/25 + suppress highlighting of character which denotes an abbreviation or shortcut for the OK/Cancel and other buttons for these widgets, which use abbreviations for the list shown on the screen: buildlist, checklist/radiobox, menubox, treeview (Debian #775295). + add grid up/left and down/right bindings in editbox.c as synonyms for field prev and next, respectively when handling the OK/Cancel buttons (Debian #775294). 2014/09/11 + correct malloc-size for change to prgbox. 2014/09/10 + fixes to make "-c" option work when passing command to shell for the prgbox widget, for example in samples/prgbox2 (report by Korantin Auguste). 2014/09/08 + fix an out-of-bounds array index in buildlist widget (report by Cade Foster). 2014/09/01 + add configure check for groff, needed for html/ps/pdf output. + update configure-script macros: + CF_ACVERSION_CHECK - work around another gratuitous incompatibility introduced in 2.69 + CF_ADD_CFLAGS - workaround for ash-shell, e.g., with Minix + CF_ADD_LIBS - filter out duplicates + CF_CURSES_FUNCS - improve workaround for weak-linkage, seems to fix tests with NetBSD 6.1 + CF_INTEL_COMPILER - clean up the -no-gcc option which was leftover from testing. + CF_LIB_SUFFIX - change suffix for AIX shared libraries to ".so". + CF_MAKEFLAGS - workaround for GNU make 4.0 incompatibility with previous releases. + CF_XOPEN_SOURCE - add cases for Minix, UnixWare and improve the workaround for Solaris. + improve comparison in compare_cache() function, in case difference between pointers does not fit in int's. + updated de.po, es.po, hu.po, lv.po from http://translationproject.org/latest/dialog/ + update config.guess, config.sub 2014/02/19 + cleanup of manpages prompted by Gislason's comments. + several changes to manpages to improve presentation (patches by Bjarni I. Gislason, Debian #739180, Debian #739181) + use "\/" when transitioning from italic to normal font + correct an instance of "e.g,." + use "\e" rather than "\\" to present a literal "\" + improve formatting of table header + remove some excess space-characters + change a reference 0-9 to use "through" as the connector + use "\&" to separate "." from a space to make the space shorter + change a list's TP macro parameters to make the hanging text align better with the adjacent paragraph + add comma in a few places before "and" in a list + separate units from numbers with a nonfillable space + replace "-" with en-dash in a few places + corrected argument indices after "--args" and "--file" to rescan the argument list after removing/substituting those options. + fix loops for "--file" option to handle cases with zero or no tokens at all substituted (Redhat #1066168). + add gd.po from http://translationproject.org/latest/dialog/ 2014/01/12 + improve calculation for amount to scroll in programbox when an "Ok" button might obscure part of the data (report by Florent Rougon). + modify program to permit --separate-output to be used with buildlist and treeview widgets (report by Florent Rougon). + add list-height parameter to manpage description of --buildlist (report by Florent Rougon). + minor fixes to dialog.1 manpage; the reported problem was actually fixed in 20120703 (Debian #726233, patch by Bjarni Ingi Gislason). + add a "Hello World" example to dialog.3 manpage (prompted by discussions with Dustin Oprea, Kevin Ingwersen). + correct comparison in dlg_lookup_key() so that using "bindkey" with a "*" wildcard parameter works as documented (report by Stewart Benedict). + updated configure macros, fixes for clang and mingw. + update config.guess, config.sub 2013/09/28 + fix a regression in gauge widget from 2013/09/28 changes; dlg_reallocate_gauge() failed when no --title option was given (report by Tritonas Insomnia). 2013/09/23 + fix samples/inputbox6-utf8, which had depended unnecessarily on bash. + improve memory caching for wide-character manipulation in gauge widget (report by Devin Teske). + add dlg_reallocate_gauge (discussion with Devin Teske). + updated configure macros to use msys changes from ncurses. + update config.guess, config.sub 2013/09/02 + modify makefile rule to make the ".png" filenames created by groff predictable. + add option --help-tags to allow scripts to get the item's tag field consistently from help- and help-item button results rather than getting the item's text for the latter (discussion with Florent Rougon). + correct manpage discussion of DIALOG_ITEM_HELP versus --item-help, as well as --help-button return status (report by Florent Rougon). + correct limit used for --hline option (report by Devin Teske, cf: 2011/06/30). + do not print empty "[]" if a --hline option was given with an empty value (report by Devin Teske). + miscellaneous configure script fixes/updates. In particular, add option --with-shared which builds shared libraries without a libtool dependency. + add FreeBSD port-files for test-builds. + update lt.po, add fa.po from http://translationproject.org/latest/dialog/ + update config.guess, config.sub 2013/05/23 + modify ifdef in arrows.c to work around packages which use the wide-character ncursesw headers with the ncurses library (report by Aleksey Cheusov). + correct workaround for xterm alternate-screen to work with/without the fix made in ncurses that makes putp() always write to the standard output (Debian #708829). + improve limit-checks for checklist, in case the dialog is resized (report by Ilya A Arkhipov). + add --last-key option (adapted from patch by Jordi Pujol, Debian #697607). 2013/03/15 + update zh_TW.po, add an.po from http://translationproject.org/latest/dialog/ 2012/12/30 - release 1.2 + improve some older changelog entries to help with HTML'izing content. - + various fixes/improvments for scrollbar appearance. + + various fixes/improvements for scrollbar appearance. + add mappings for some equivalent options provided by whiptail; add configure option --disable-whiptail to allow suppressing these. + add configure option --disable-Xdialog2 to allow suppressing the newer features, i.e., for cdialog 1.2 + add --no-items option, for consistency. + add --no-tags option, like Xdialog. + add buildlist, rangebox and treeview dialogs, like Xdialog. + remove obsolete workaround for ncurses 4.2 scrolling in checklist and menubox. + improve dialog_helpfile() by preventing it from showing extra buttons (suggested by xDog Walker). + correct logic in formbox's scroll_next() function (report by xDog Walker). + fix a case with inputbox widget where preset input text is not shown until moving the cursor within the text (report by xDog Walker). + handle SIGCHLD in dialog_prgbox() to eliminate defunct processes (report by xDog Walker). + improve the way "hotkeys" are assigned to widget buttons by checking if a given key has already been used in the row of buttons (Debian #684933). + amend fix for --trace parsing from 2012/07/03, which sometimes skipped a parameter (report by xDog Walker). + drop copismall and install files from samples, which were essentially nonfunctional. + correct secondary border colors in samples/slackware.rc and samples/whiptail.rc + update gl.po, add ia.po from http://translationproject.org/latest/dialog/ + fix various issues reported by coverity scan. + miscellaneous configure script fixes/updates: + require autoconf 2.52+patches + support --datarootdir option + check for clang compiler + check for tinfo library when looking for ncurses + add 3rd parameter to AC_DEFINE for autoheader + remove unused macros from aclocal.m4 + update config.guess, config.sub 2012/07/06 + modify samples/setup-tempfile to work with Tru64's shell. + modify inputmenu sample scripts to make them more portable: + use "id" rather than "$GROUPS", use sed to work with Solaris. + use sed to split-up the rename results to work with HPUX. + fix regression in msgbox (ArchLinux #30574) 2012/07/03 + modify prgbox widget to work with --extra-button, etc. + add case values to several widgets to allow for mouse-clicks with "--extra-button" and "--help-button" additions. + correct timebox widget's exit code for "--extra-button" when handing the "enter" key. + modify msgbox widget to honor "--extra-button". + corrected processing of "--trace" option, which did not update the index into command-line to point past its value. + add a check in dialog program for valid characters used in option, e.g., to generate an error if a script attempts to add option value using "=" rather than with whitespace. + add new command-line option --default-button and library function dlg_default_button() to retrieve the value set by the option to provide a way to set the default button directly rather than by combining --nook, etc. (patch by Zoltan Kelemen). + amend include of unctrl.h to apply only to the case where curses.h is included, to avoid conflict of ncurses' unctrl.h with a system implementation (report by Martin Roedlach) + add limit-check to dlg_toupper() in non-wide curses mode to work when non-character values such as arrow-key codes are passed to it (patch by Zoltan Kelemen). + override timeout value, e.g., as set via --timeout command-line option in pause widget because that interferes with pause's behavior (report by Jan Spitalnik). + modify samples/inputmenu* to allow ":" in renamed text (report by Andreas Stoewing). + modify double-quoting to make it more consistent, i.e., checklist output is quoted only when needed. This fixes the case where single-quotes were used whether or not needed, but also modifies older checklist behavior for double-quoting which always added those (Debian #663664). + correct exit-code used in inputmenu for "rename" button (Debian #673041, forwarded from Ubuntu #333909, patch by Lebedev Vadim). + update el.po and hr.po from http://translationproject.org/latest/dialog/ + use checkbashisms to clean up sample scripts. 2012/02/15 + modify menubox.c to use the same improvement as in checklist.c + improve auto width computation for checklist widget by using dlg_calc_list_width as in the non-auto case (Edho Arief). + eliminate some bashisms in the sample scripts (Pedro Giffuni). + makefile fixes from FreeBSD ports (Li-Wen Hsu): + make --with-package option of configure script work. + get LIBTOOL_VERSION from configure script, needed by ${LIBTOOL_VERSION} in LIBTOOL_CREATE (LIB_CREATE in configure and aclocal.m4) + update cs.po and sr.po from http://translationproject.org/latest/dialog/ + updated configure script macros, improving CF_XOPEN_SOURCE among other fixes. 2011/10/20 + fix --analyze warnings for clang versions 2.8, 2.9. + add configure check for lint program. + add check in dlg_getc() in case its window is freed as a side effect of removing callbacks. + fix logic in freeing subwindows (report by xDog Walker). + fix a regression in logic distinguishing between inputmenu and menu widgets (report by xDog Walker). + minor fixes to library manpage. 2011/10/18 + modify header-sh.in to work around limit on sed script length on HPUX. + add a special case of parameter parsing for "--trace" to the initialization done before calling init_dialog(), to allow users to capture the initial state of the parameter list before any options are processed and removed. This is only done if "--trace" is the first option, otherwise it is handled in the common options as before (report by xDog Walker). + modify samples/testdata-8bit, discarding $1 from the parameter list if it was used, so that the source'ing scripts can consistently use "$@" to insert parameters before the widget, e.g., as an alternative to using $DIALOGOPTS (report by xDog Walker). + modify treatment of function pointers in menubox.c, make dlg_renamed_menutext() and dlg_dummy_menutext() visible to library users (request by xDog Walker). + add dlg_count_real_columns(), use to modify centering for "--hline" text to account for "\Z"s (report by xDog Walker). + improve check in dlg_draw_arrows2() for conflict between the window title and up-arrow marker to take into account that the given window may not be the top-level window of the widget. + change width of page up/down mouse areas in fselect panes to use the full width of the panes rather than only the portion from the left margin to the up/down arrow. + add/use dlg_draw_box2() and dlg_draw_bottom_box2() to use the secondary borders. + modify rc-file read/write to accept/generate color values that refer to previously-processed items in the color table. This reduces the number of distinct colors that must be specified to set up a color scheme. + add color table entries for secondary borders, i.e., the ones that are normally drawn with the dialog's text-colors (Debian #641168). + modify fselect.c to scan the current directory if the input field happens to be empty (Debian #640905). + repeated the discussion of environment variables that can override the exit-status values in the manpage's return-codes section (Debian #642105). + add an example to the manpage showing how to override the form widget's keys used for field/button traversal (Debian #642108). + modify call to dlg_register_window() in formbox.c so that the editing bindings are attached to the form sub-window rather than the top-level dialog window. Also change the name by which the editing bindings are bound for editbox.c, fselect.c and inputbox.c, so that the editing and navigation bindings can be different. + correct logic in dlg_lookup_key() so that it matches the widget name before using a binding from .dialogrc, allowing the inner/outer windows of form and other editing widgets to have different bindings. + modify dlg_register_window() to call dlg_dump_window_keys() after its updates, via the --trace output, to supplement the manpage description of key bindings (Debian #642108). + add DLGK_FORM_PREV and DLGK_FORM_NEXT key-bindings to form.c, to allow binding a single key to traverse both form-fields and buttons (Debian #642108). + modify dlg_parse_rc() to check for error return from dlg_parse_bindkey(). + add function dlg_dump_window_keys(), to help with debugging widgets. + add CR, LF, TAB, FF and ESC to table of curses names to help make key bindings more readable. + update table of dialog key-names so that helpfile and trace are dumped properly. + correct dlg_dump_keys(), which was showing only the first item in the matched binding table. + save/restore window current position in dlg_update_mixedgauge(). + pass return-code from pause_for_ok() from dlg_progressbox() when pauseopt is set, rather than only DLG_OK. + call setlocale() in init_dialog() rather than relying on on-demand use within inputstr.c, since there are paths in textbox widget which do not exercise the latter (report by xDog Walker). + fix some places where checks for "\Z" were done without also checking dialog_vars.colors (report by Moray Henderson). + correct logic for DIALOGOPTS parsing so that the parse happens only once unless memory leak checking is enabled (report by xDog Walker). + remove an incorrect free() call in dlg_free_gauge() (report by xDog Walker). + modify dlg_trace_win() to log wide-characters (report by xDog Walker). + make traces shorter by skipping repeated ERR's, but showing the number skipped (report by xDog Walker). + improve description in manpage to distinguish program box and progress box from tailboxes (adapted from email by xDog Walker). + modify dlg_trace_win() so that it looks for the topmost window in a dialog. Because subwindows share space with the top window, tracing the latter shows the whole widget (report by xDog Walker). + expand tracing so that each window is traced before soliciting input, making the ^T feature to print a window on demand partly redundant (suggested by xDog Walker). + cosmetic change in dialog.h to avoid "*/*" strings from comments next to "*" (report by xDog Walker). + ensure result from dlg_align_columns() has trailing null on each string. Analysis was hindered by libc6's continuance of libc5's early-1990s misfeature of clearing the result from malloc, noting that libc6's documentation incorrectly claims that it does not do this (report by xDog Walker). 2011/07/07 + modify util.c to work better with old versions of ncurses: + suppress use of wchgat() before fix in 20060715 which is needed for simple shadow manipulation used here in 2011/06/30 (report by xDog Walker). + add a null-pointer check in dlg_print_scrolled() + fix a regression in dlg_getc() introduced by changes to intercept F1 for help-popup (report by xDog Walker). 2011/06/30 + correct license statement for prgbox.c (Debian #632198). + correct layout when "--colors" is used, by discounting characters in the escape sequences from the column counts (report by xDog Walker). + modify dlg_checklist() so that only one item in the list can initially be selected (report by xDog Walker). + add/use macro dlg_enter_buttoncode() to improve implementation of "--nook" option (report by xDog Walker). + add option "--no-nl-expand" to suppress the conversion of "\n" strings into newlines (request by xDog Walker). + modify LIB_CREATE symbol in makefile.in to include the library dependencies such as ncurses. This is needed when dynamically loading the library (report/analysis by xDog Walker). + modify dlg_exit_label() to suppress the Cancel button, for consistency. + modify dlg_exit_label() to honor the --nook option, except when there is no other button, e.g., the help-button. + modify dlg_exit_buttoncode() so that it returns the proper code for help-button (report by xDog Walker). + correct loop limit when processing "--column-separator" (report by xDog Walker). + modify handling of "--version" and "--help" to ensure that they are processed, and exit before widgets. Separate "--print-version" from "--version", allowing its output to be interspersed with widget output (report by xDog Walker). + correct a few places where "--version" or "--help" options went always to stdout rather than allowing redirection with the "--stderr" option (report by xDog Walker). + improve repainting after erasing a widget and its shadow. + add "--hline" and "--hfile" options for compatibility with FreeBSD dialog (request by Devin Teske). + add dialog version message when opening a trace file (request by xDog Walker). + show filename of rc-file in traces. + add piped-in data for gauge widget to traces. + add entrypoints to gauge widget, for allocating, updating and freeing the widget (adapted from patch by Stephen Hurd). + fix a reference to freed memory in the gauge widget. + fix --no-mouse option by actually closing the mouse (report by xDog Walker). + add sk.po from http://translationproject.org/latest/dialog/ + limit Solaris xpg4 portability fix for redefinition of ERR to cover the specific value found in , in case an application includes dialog.h after curses.h (FreeBSD #156601, report by Jaakko Heinonen, Stephen Hurd). + updated configure macros: + CF_CURSES_CPPFLAGS, + CF_CURSES_LIBS, make checks for special libraries on hpux10 and sunos4 optional + CF_CURSES_FUNCS, workaround for bug in gcc 4.2.1 (FreeBSD 8.1) which caused part of test program to be omitted, i.e., when it saw two return-statements in a row it omitted the _first_ one. Also add expression to pointer check to help FreeBSD's linker decide it should be validated. Just an assignment was not enough. Also, add check for unctrl.h + CF_CURSES_HEADER, change order for curses.h / ncurses.h pairs to put ncurses.h first, which will tend to provide the same #define's as in CF_NCURSES_HEADER (report by Dennis Preiser). + CF_CURSES_TERM_H, modify to avoid spurious check for if there is no ncurses version. Look for ncurses's term.h anyway, to work around breakage by packagers who separate ncurses' header files. + CF_DISABLE_RPATH_HACK, fix garbled message + CF_LD_RPATH_OPT, add mirbsd + CF_MAKEFLAGS, filter out GNU make's entering/leaving messages. This only appeared when using the macro in a dpkg script, though it should have in other cases. + CF_RPATH_HACK, add a check for libraries not found, e.g., from suppressed functionality of gcc in linking from /usr/local/lib, and add a -L option to help work around this. + CF_XOPEN_SOURCE, workaround for cygwin to get ncurses' configure script to define _XOPEN_SOURCE_EXTENDED (cygwin's features.h doesn't do anything, so it needs a crutch). + update config.guess, config.sub 2011/03/02 + add --prgbox and --programbox (adapted from patch by David Boyd). + add sl.po from http://translationproject.org/latest/dialog/ + fix timeouts from 2011/01/18, which were being interpreted as milliseconds rather than seconds (report by Luis Moreira). 2011/01/18 + fix inconsistency in return-codes for textbox when help-button is used by making dlg_exit_buttoncode() a wrapper for dlg_ok_buttoncode(). + modify pause widget to use dlg_ok_buttoncode(), so help-button works. + correct two infobox sample scripts, which did not pass extra command-line parameters due to quoting problems. + add a limit-check to the timebox widget (patch by Garrett Cooper). + modify --trace option to also trace the command-line parameters. + account for combining characters when wrapping text (Debian #570634). + correct handling of SIGWINCH in gauge widget (Debian #305705). + add gauge_color, to make guage's progress-bar distinct from title_color (request by Dominic Derdau). + update fi.po from http://translationproject.org/latest/dialog/ as well as resync line-numbers in the other po-files. + modify configure script and dialog program to build with NetBSD's wide-character curses functions, including workarounds for its incorrect WACS_xxx definitions. Some of the UTF-8 examples work. + add back-tab for traversal of tailboxbg widgets, for symmetry with tab-traversal. + reduce flicker in tailboxbg by checking if the input file size has changed. + modify internals of callbacks to avoid blocking reads of their associated files by keyboard input. + add command-line option --no-mouse, to suppress use of mouse. + add configure option --enable-header-subdir to allow the header files to be installed into a subdirectory named for the package. + modify dlg_restore_vars() to retain the updated values of input_result and input_length, eliminating the need for a caller to provide their own user buffer (prompted by report by Thiago Bimbatti Felicio). + add a null-pointer check in show_result() for dialog_vars.input_result, and ensure it is set to null after freeing (prompted by report by Thiago Bimbatti Felicio). + change order of -I options in CPPFLAGS (report by Michel Feldheim) + modify pause-widget so that it no longer exits when an unrecognized key is pressed (patch by Creidieki M Crouch). + add --with-package option to configure script to allow renaming of the dialog program and library, to support the package scripts. + add Debian and RPM package scripts for test-builds. + several improvements to configure script: + quote params of ifelse() + change obsolete ${name-value} to standard ${name:-value} + use new macros CF_ADD_LIB/CF_ADD_LIBS to enforce consistency. + AM_GNU_GETTEXT, drop $MKINSTALLDIRS, use "mkdir -p" consistently. + CF_ADD_SUBDIR_PATH, workaround - if $prefix was not mkdir'd yet, no directories were added. + CF_BUNDLED_INTL, add --with-textdomain option, to use with lynx-dev package + CF_FIND_LINKAGE, simplify save/restore of $LIBS + CF_GCC_WARNINGS, fix for Mac OS X (compiler makes conftest.dSYM directory) + CF_HEADER_PATH, don't search for variations of everything in the current include-path + CF_WITH_CURSES_DIR, move the calls to CF_ADD_INCDIR and CF_ADD_LIBDIR for the curses-directory here, from CF_NCURSES_CPPFLAGS and CF_NCURSES_LDFLAGS, so it will work even with the default checking, e.g., no --with-ncurses, etc. + update config.guess, config.sub 2010/04/28 + several improvements to configure script: + modify CF_CURSES_TERM_H to handle cases such as cygwin where packager has installed curses.h and term.h in different directories, e.g., to wedge in a termcap library. + modify CF_XOPEN_SOURCE, adding special case for OpenSolaris + modify CF_MAKE_TAGS to add check for exctags and exetags, prefer to ctags and etags to work around pkgsrc (NetBSD) renaming. + correct CF_FIND_LINKAGE, setting cache variable for library_file in the special case where no directory search is made. + improve CF_GCC_VERSION, suppress stderr for c89 alias of gcc. + improve CF_GCC_WARNINGS, moving -W and -Wall into the list to check, since c89 alias for gcc complains about these options. + modify CF_HEADER_PATH, to not search for variations of everything in the current include-path + use "mkdir -p", remove mkdirs.sh + use CF_CURSES_HEADER to fill in possible subdirectory used for ncurses header filename. + modify CF_XOPEN_CURSES to work around current ncurse header loss of predefinition of _XOPEN_SOURCE_EXTENDED + add "--disable-rpath-hack" option, along with scripting to add rpath option to libraries found in unusual places. + modify pause widget to autosize like gauge, and to omit the area for buttons when none are displayed. + fix an infinite loop in dlg_button_layout() if there are no buttons to display (Debian #579390). + add makefile rules for generating html, etc., documentation from nroff. > patches by Samuel Martin Moro + reset errors in tailbox before reading new character. + modify dlg_draw_scrollbar(), omitting hiding percentages in boxes when no arrows or scrollbar are needed. + correct value of row for scrollbars in formbox. + update es.po from http://translationproject.org/latest/dialog/ 2010/01/19 + split up binding tables in inputbox and similar widgets to avoid conflict between cursor-key use for input-string versus navigation (report by slakmagik). + if strftime() is available, support --time-format option for timebox widget. + if strftime() is available, support --date-format option for calendar widget (request by Walter Harms). + build-fixes for linking to intl library in /usr/local + add --scrollbar option, use in most widgets to show a scrollbar on the right margin of the data. That is cosmetic, does not respond to the mouse. + reuse functions from msgbox to allow prompt for yesno box to be scrolled in a too-small window. + correct mapping of button-codes with --nook option (report by Lebedev Vadim). + cleanup sample scripts using new utility scripts setup-* and report-*, and allow command-line parameters to be added, for ad hoc testing. + correct change to tailbox widget from 2009/02/22 using dlg_button_layout(), which broke that widget. + document some of the portability caveats. + modify gauge widget to service callbacks (prompted by patch and comments by Frank Sorenson). + modify editbox to allow its input buffer to be larger than MAX_LEN unless bounded by the --max-input option, and add limit-checks for the buffer (report by slakmagik). + improve manpage description of --checklist (report by Isaac Good). + several improvements to configure script macros: CF_ADD_CFLAGS CF_CURSES_FUNCS CF_DISABLE_ECHO CF_GCC_ATTRIBUTES CF_MATH_LIB CF_POSIX_C_SOURCE CF_REMOVE_DEFINE CF_WITH_LIBTOOL CF_XOPEN_SOURCE + add is.po, lv.po, sw.po from http://translationproject.org/latest/dialog/ + update de.po, id.po, pl.po, pt_BR.po, vi.po from http://translationproject.org/latest/dialog/ 2009/02/22 + do not display top-arrows for scrolling if they would overwrite the title (report by slakmagik) + consistently use dlg_button_layout() when autosizing widgets (report by slakmagik). + add "-" and "+" bindings to timebox widget. + add "-" and "+" bindings to calendar widget (OpenSolaris #6739031). + review/fix other widgets to ensure that they exit on error, e.g., editbox.c + modify check in dlg_getc() to treat closure of either stdin or stdout as an error, rather than both. This is more stringent than the check added in 2007/07/04. + modify dlg_result_key() to map curses ERR to dialog's error exit (adapted from patch by Domagoj Pensa). + updated several configure script macros: + consistently append, rather then prepend, to $CFLAGS + add cases for AIX 6, mint, and dragonfly to CF_XOPEN_SOURCE + use $PATH_SEPARATOR rather than $PATHSEP + improve CF_FIND_LINKAGE, use in checks for more libraries, e.g., libutf8 and libiconv. + update da.po, ru.po from http://translationproject.org/latest/dialog/ + update config.guess, config.sub 2008/08/19 + amend changes to quoting; by default, the checklist widget quotes its output except when --separate-output is used (Debian #495600). + add eo.po from http://translationproject.org/latest/dialog/ 2008/07/27 + add pointer-check when closing piped input (cf: 2007/03/25) + use here-documents rather than echo, when passing backslashes in strings, to accommodate the Debian shell "dash" (Debian #489563). + recode several ".po" files to UTF-8 for consistency. + change --separator to be an alias for --output-separator, for compatibility with Xdialog. + add --output-separator option to allow scripts to change the output separator from a newline (for --separate-output) or a space. This applies to other widgets such as forms and editboxes which normally use a newline. + add --column-separator option, to tell where column-aligned data for radio/checkboxes or menus should be split into columns (request by Ben Dibbens). + add id.po, ku.po, lt.po, nb.po and update ca.po, fr.po, gl.po, ja.po, th.po from http://translationproject.org/latest/dialog/ + add "--quoted" option, to quote values returned by formbox, etc. + change names of EX/ES macros in dialog.1 to work around name- pollution caused by changes in Debian #470729. 2008/03/16 + modify dlg_mouse_wgetch() to loop only on errors that it detects, rather than on errors forwarded from dlg_getc(), in case those are due to a disconnected terminal (report by Anatoli Sakhnik). + allow "default" color in dialogrc file (request by Dashing). + fix an indexing error in formbox (Debian #469190, report by Dmitry Gomerman, patch by Vladimir Mezentsev). + add bindings for CTL/N, CTL/P to checklist, fselect and menubox widgets (prompted by discussion with John Gatewood Ham). + add be@latin.po, th.po and update zh_TW.po from http://translationproject.org/latest/dialog/ > patches by Peter Astrand: + modify dlg_auto_sizefile() to ensure the computed height and width do not extend beyond the screen size. + use unctrl() to make inputstr.c work with Solaris curses. > patches by Yura Kalinichenko: + extend pause widget to use ok/cancel buttons (the former giving the same result as a timeout), rather than an exit-button. + fix initialization parameter of inputbox for multibyte characters. 2007/10/28 + improve layout of checklist.c, menubox.c, ensuring that the list fits within the available space (report by Gordon Schumacher). + undo removal of redundant chunk from checklist.c in 2007/02/27, since some scripts depend on this (Debian #443077). + update nl.po from http://translationproject.org/latest/dialog/ 2007/09/30 + correct cursor position in editbox after deleting past left margin (report by Joe McDonagh). + add "--no-ok" option (patch by Klaus Knopper). + modify "--file" option to allow it to read from sources other than a regular file (patch by Pieter van Beek). + improved hi.po (Hindi) (from Klaus Knopper). + fix masking of attributes in dlg_draw_shadow() which lost line-drawing bit (report by David Everly). + fix editbox widget to handle zero-length files (report by Joe McDonagh). + update "po" files eu.po ga.po it.po ms.po sv.po vi.po wa.po zh_CN.po from http://translationproject.org/latest/dialog/ 2007/07/04 + revise the resizable shadows so textbox's search dialog has text visible in the shadow again. + improve the prefixing of autoconf-related symbols in the installed header files, taking into account symbols which are not mentioned in dlg_config.h + add a check when ERR returned from wgetch() to ensure that the input/output streams are still valid. If that happens, force ESC to be returned, quitting dialog (report by Reiner Huober). + add extern "C" declarations to dlg_keys.h so the corresponding function declarations are exported to C++ as C symbols. + update config.guess, config.sub 2007/06/04 + fix a memory leak in editbox.c + revise change from 2007/02/27 which moved the logic for trimming option text out of the loop because that moved it before initialization of the "--trim" option. Put it back in the loop, but limit the tokens which are trimmed to cover only those for the current widget. Also ensure that all tokens for a widget are trimmed, rather than only the first, which is usually text (report by Lai Zit Seng). + add _FILE_OFFSET_BITS definition in CF_LARGEFILE configure macro. 2007/05/28 + revise changes needed to make textbox's searchbox handle ncurses resizing events, e.g., by handling the ERR in that code rather than in dlg_getc() (Debian #423732). 2007/05/14 + supply a repaint_text() call in tailbox.c which was bypassed because dlg_getc() now retries on ERR (Debian #423732, cf: 2007/02/27). + modify dlg_getc() to fix regression in 2007/02/27 for use of timeouts, broken by fixes to allow resizing of textbox (patch by Arnaud Fontaine, Debian #418905). + modify dlg_getc() to fix regression in use of TAB for traversal of tailboxbg widgets due to changes for user-definable key bindings (Debian #418917, cf: 2005/12/07). 2007/04/09 + add case in dlg_getc() to handle tab for traversing between widgets as in the samples/tailboxbg1 script. Normally the key binding overrides, except for the special case where multiple widgets are available. + add configure --with-libtool-opts, which passes its value to the library creation and linkage passes, e.g., --with-libtool-opts=-static to force the result to be static libraries (prompted by a related request by Santiago Vila). > several fixes based on Coverity scan: + fix memory leak in timebox, calendar widgets if the widget cannot be created. + fix memory leak in dlg_key.c if a user binding's storage cannot be allocated. + fix improperly delinked entry in dlg_del_window(). 2007/03/25 + improve mkdirs.sh to ignore error from mkdir if the target directory happens to already exist (suggested by Harald van Dijk). + amend documentation for --gauge to reflect longstanding quirk which allows it to read percentage from the first line after an "XXX" (Debian #415596). + fix makefile dependency so "configure && make install-lib" works. + fix resizing of msgbox; the message was not repainted (Debian #415022, patch by Brian Rolfe). + fix typo in makefile LIB_OBJECT symbol from 2007/02/27 changes. + improve CF_MBSTATE_T by including stdio.h, needed on Tru64 to make the test-compile work. + change makefile to install dialog.3 as part of install-lib rather than install-man (report by Thomas Klausner). + use $(INSTALL_SCRIPT) for installing dialog-config (report by Santiago Vila). 2007/02/27 - release 1.1 + mark as "dialog 1.1" + add dialog-config script, which provides applications with compile- and link-information for using the dialog library. + move calls to dlg_trim_string() out of loop in dialog.c, so each string is trimmed once (report by Ivanov Makcim). + modify textbox.c to allow resizing while the search box is presented. This relies on bug-fix in ncurses 5.6 20070224. + use dgettext() rather than gettext() to allow libdialog to use the messages installed for dialog (patch by Vajna Miklos). + modify inputbox to position the cursor initially at the end of any initial-text (request by Klaus Knopper). + add configure --with-valgrind for testing. + add --trace option, for debugging. + add --ascii-lines and --no-lines options to control the way the line-drawing characters are rendered (request by Klaus Knopper). + add --keep-tite option, to override suppression of smcup/rmcup (termcap ti/te) strings which would switch to xterm's alternate screen (Debian #380665). + modify fselect/dselect to use space-character as a completion operator like tab in shells (patch by Yoram Bar Haim). + remove a redundant chunk from checklist.c which reported status a second time if the help-button was pressed but no item-help option was in effect (Andre C Barros). + fix return-status from "dialog --pause" (Debian #409254). + add --mixedform and --mixedgauge dialogs based on patch from Kiran Cherupally. + add some notes on compatibility to the manpage. + add editbox dialog (compatible with Xdialog, Debian #368478). + add dselect dialog (compatible with Xdialog). + remove an incorrect initialization of .text_flen from 2005/12/07 changes, which made all fields in a form editable (Debian #404045). + report error and exit if a filename given for the --file option cannot be opened (report by "Dog Walker"). + make --program-prefix, etc., work in configure script, e.g., to make program install as "cdialog". This does not alter the library name. + add install-bin, install-man (and uninstall) rules to makefile. + updates for configure script macros (originally vile, lynx, xterm): AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, CF_CURSES_CPPFLAGS, CF_CURSES_LIBS, CF_INCLUDE_DIRS, CF_LARGEFILE, CF_MAKEFLAGS, CF_PATH_SYNTAX, CF_SUBDIR_PATH, CF_SUBST, CF_WITH_DBMALLOC, CF_WITH_DMALLOC, CF_WITH_LIBTOOL and CF_XOPEN_SOURCE. + update config.guess, config.sub > adapted fixes from SuSE package (Werner Fink): + add some limit-checks in dlg_draw_shadow(). + make shadows resizable, using new dlg_move_window() in msgbox.c and yesno.c + add dialog_state.input, use this in end_dialog() to decide whether to close pipe inputs and call _exit(), or simply call exit(). + modify dlg_ctl_size() to check if the reason for failure is because shadows were used; retry in that case without shadows. + add signal catcher for SIGSEGV. 2006/02/21 + fix logic in split-out dlg_menu() to separate inputmenu and menu handling (report by Auke Kok). 2006/01/26 + fix fselect.c to compile properly with Intel compiler and largefile option. + improve configure script checks for curses headers to work around breakage in some packages, e.g., cygwin. + amend correction to menubox, fixes normal menus (Debian #349969). 2006/01/19 + completed dialog.3 manpage + modify configure script option --with-gauge to cover all flavors of the gauge (gauge, pause, progressbox). + add progressbox widget, a hybrid of gauge and tailbox (Reznic Valery). + fix a comparison in checklist.c to avoid unneeded arrows when the list happens to fit in the window (patch by Peter Postma). + correct wrapping computation in print_line() from 2005/11/07 changes (report by Barry Kauler). + update sv.po (comments only). http://www.iro.umontreal.ca/translation/maint/dialog/ + correct logic that passes the callback for menubox to do inputmenu operations from 2005/12/7 changes (report by Reznic Valery). 2006/01/01 + add a null-pointer check in dlg_register_buttons(), needed for the tailboxbg (Debian #345524). + fix a few memory leaks reported by valgrind. 2005/12/19 + correct return-values of new functions dlg_default_listitem() and dlg_default_formitem() (Debian #344002). + add Swedish translation (Debian #343303, by Daniel Nylander) + begin function-summaries in dialog.3 + update config.guess, config.sub 2005/12/07 + change license to LGPL. + change naming convention in dlg_colors.h to make it easier to read, and incidentally remove the last chunk of code preventing relicense. + add --passwordform (request by Reznic Valery). + modify pause.c, msgbox.c to work with --help-button. + modify formbox.c, inputbox.c, textbox.c, yesno.c to work with extra button (adapted from Reznic Valery patch). + modify dlg_exit_label(), dlg_yes_labels() and dlg_ok_label() to allow help-button (prompted by Reznic Valery patch). + add zh_CN.po file from http://www.iro.umontreal.ca/translation/maint/dialog/ + provide alternate interfaces for dialog_checklist(), dialog_menu() and dialog_form(): dlg_checklist(), dlg_menu() and dlg_form() (discussion with Michael Gebetsroither). + add/use dlg_result_key() to allow binding function keys to the buttons. + implement user-definable key bindings in the rc-file. + modify inline cases for KEY_xxx values to use binding tables in new module dlg_keys.c + add several DIALOG_STATE items to the rc file: aspect, separate_widget, tab_len and visit_links + add a tab-adjustment to dlg_print_text() to improve solution from 2005/10/30, e.g., in the samples/form* scripts. + fix an off-by-one which made mouse-selection not work for menu items past the first page (GenToo #112024, patch by Harald van Dijk). 2005/11/07 + extend dlg_add_result() to allow caller to pass a null pointer for dialog_vars.input_result (Debian #336986). + correct length used for text portion of radio/checkboxes (report by Valentin Stoykov). + modify msgbox, textbox and center_label() to work properly for LANG=bg_BG.utf8 examples by Valentin Stoykov. + modify use of freopen() to work with opaque FILE type on DragonFly (report by Jeremy C Reed). + modify print_line() to compute columns, use that for the call to dlg_print_line(). Fix a few places where strlen() was used instead of dlg_count_columns() (reports by Valentin Stoykov). 2005/10/30 + reviewed changes since beginning development in 1999, decided that there are no appreciable portions of original code remaining. Marked sources to correspond. + improve cache performance for inputstr.c using tsearch() rather than a linked-list search (Debian #294853). + remove a special case for darwin in CF_XOPEN_SOURCE configure macro. + add ms.po file from http://www.iro.umontreal.ca/translation/maint/dialog/ + remove an assignment that caused the cursor to appear initially on a form field rather than button (Debian #333506). + modify buttons.c to count columns rather than bytes, fixing case where buttons were laid out incorrectly (report by Valentin Stoykov). + change dlg_print_text() to count columns rather than bytes, fixing case where fewer columns were displayed in menu than expected (report by Valentin Stoykov). 2005/10/05 + improve fix for dlg_does_output(), eliminating redundant leading separator. + fill background color for item-help text (report by Peter Postma). + correct interaction between --separate-output and --output-separator broken in 2005/09/11 fix for Debian #326918 (Debian #331440). + update config.guess, config.sub 2005/09/11 + undo doubled adjustment for left/right margins when wrapping text for msgbox, gauge and pause (report by Xyba). + correct position of scrolled text in formbox broken by 2004/12/19 changes (report by Konrad Jelen). + call dlg_does_output() from dlg_add_result(), ensuring that separators are used when combining widgets such as formbox (report by John Suykerbuyk). + fix marker in textbox.c to make it disappear at the top of the file (report by Patrick J. Volkerding). + fix marker shown in arrows.c for checklists, etc., which was "(+)" where it should have been "(-)" (report/patch by Patrick J. Volkerding). + fix --input-fd (changes in glibc since 2003 made dialog hang on exit due to the way dialog updated stdin). + restore default value (a tab) for --separator or --separate-widget lost in 2003/11/26 changes (Debian #326918). + make several widgets handle SIGWINCH (calendar, checklist, formbox, fselect, inputbox, menubox, pause, tailbox, textbox, timebox). Only msgbox and yesno had been done before. Note that some still have fixed geometry requirements, so they cannot be shrunk below a given threshold. Also, these changes do not address traversal, e.g., for tailboxbg. + make gauge widget handle SIGWINCH with ncurses (Debian #305705). + add configure option to control whether largefile support is compiled-in (Debian #298882). + update eu.po (Debian #312622, patch by Piarres Egana). + add/update po files from http://www.iro.umontreal.ca/translation/maint/dialog/ fi.po, rw.po, sr.po, tr.po, zh_TW.po + fixes for configure script: + improve script for determining gcc version + improve checks for Intel compiler and related warning options + improve checks for defining _XOPEN_SOURCE (or alternatives) and _POSIX_C_SOURCE + update config.guess, config.sub 2005/03/06 + add/update po files from http://www.iro.umontreal.ca/translation/maint/dialog/ ga.po, it.po + revert last change for da.po; it was from an older version (report by Morten Brix Pedersen). 2005/02/06 + modify makefile.in so --disable-echo applies to libtool builds. + corrected malloc size used for editable fields in formbox widget to match the function which updates the corresponding buffer. + modify formbox widget's use of flen to allow negative values to be used to limit the length of the displayed field. + improve description in manpage of output from formbox widget (Debian #292418). + modify formbox widget to allow fields with flen==0 to display (Debian #292417). + improved configure macros CF_POSIX_C_SOURCE and CF_XOPEN_SOURCE, to avoid redefinition warnings on cygwin. + fix a typo in inputmenu-stdout found via "sh -n" (report by Steve Grubb). + add/update po files from http://www.iro.umontreal.ca/translation/maint/dialog/ ca.po, da.po, hu.po, nl.po, rm.po, ro.po, vi.po 2005/01/16 + add --args option to help with debugging scripts. + adapted some new po files from Debian package for whiptail: ar.po, bg.po, gl.po, hi.po, hr.po, mg.po, mk.po, ro.po, sq.po and zh_TW.po + update da.po (Morten Brix Pedersen). + add configure check for Intel 8.0 compiler, to set appropriate warning options. + update config.guess, config.sub 2004/12/22 + correct a typo in 2004/12/19 changes which caused width of multibyte characters to be incorrectly computed in some locales. + modify --version and --help options to write consistently to the standard output (report by Santiago Vila). + modify tailboxbg by resetting tty modes at the point where it forks a process to update the screen, rather than waiting until that process exits. This improves user feedback by making it apparent that dialog is no longer processing input after that point (Redhat #142538). + minor updates to some .po files using Babel Fish, comparing with lynx. + update es.po (Santiago Vila). + work around bug in NetBSD 1.6 curses which seems to be confused by reusing color pairs with different video attributes. The problem does not appear in NetBSD 2.0 curses (but its headers do not provide version info, so color-caching is not available for that configuration). + modify pause and gauge widgets to ensure that reverse-video progress bar is visible when the background is reversed, e.g., using the default non-color attributes. + use chtype rather than attr_t, to build with old Solaris curses, used in save/restore operation from 2004/09/20. 2004/12/19 + add pause-widget (patch by Yura Kalinichenko). + modify exit-code returned on selecting the "Help"-button when the --item-help option is given. Previously this returned the same code as "OK", since it combines output for "OK" with the help status. It now returns the help-code, but this can be overridden by setting the environment variable $DIALOG_ITEM_HELP (reports by Erika Pacholleck and Sebastian Muesch). + modify formbox widget so input-length is not limited to field-length (report by David Liebermann). + localize the label on the search box for textbox widget (report by Erika Pacholleck). + correct usage message detail for fselect, which listed an extra parameter (Debian #284008). + add include for in ui_getc.c to build with QNX 4.25 using Watcom 10.6 (patch by Len Meakin). + modify behavior when no locale (or POSIX locale) is set to allow legacy interpretation of Latin-1 character set (Debian #284795). 2004/11/18 + correct computation of column width for menubox/checkbox tags, for multicolumn characters, e.g., the menubox-utf8 example. + correct calls to wbkgdset(), which set the background attribute but not the corresponding character (ncurses uses blank if none is given). + improve configure script check for _XOPEN_SOURCE and _POSIX_C_SOURCE. + improved limit-computation in show_message() to allow for scrolling very long messages. + adjust scrolling logic in msgbox to account for the one-line offset used by the logic which wraps text in a box, thus avoiding leaving an extra blank line (report by Maxim Sobolev). 2004/09/20 + add samples/whiptail.rc + add samples/dialog.py (noting that a later version of this exists as pythondialog, but this is relatively self-contained). Modified the script to accept the $DIALOG environment variable like the other sample scripts, to specify the path of the program to use. + modify the install rule for header-files so the autoconf names in dlg_config.h (and corresponding usage in dialog.h, etc), are altered from "HAVE_xxx" to "DLG_HAVE_xxx", etc. + add a check for getenv("HOME") in rc.c + add a call to end_dialog() in signal_handler for tailboxbg (from patch by Werner Fink). + correct initialization in checklist and radiobox for --default-item, scrolling as needed. + modify --visit-items option so that it puts the cursor initially on the list (in menubox, checklist and radiobox), accepts abbreviations for the buttons when the cursor is on the button-row, and otherwise (when --visit-items is given) abbreviations apply only to the list (report by Erika Pacholleck). + modify a few widgets (inputbox, textbox, yesno) to beep on unexpected input. + modify some msgbox widget to accept abbreviations of its button label, for consistency with other widgets (request by Erika Pacholleck). + corrected logic of dlg_char_to_button(), making it check only the first uppercase letter in each button label rather than all uppercase letters (report by Erika Pacholleck, cf: 2003/09/10). + improved description of --clear and --keep-window options (adapted from Erika Pacholleck). + move discussion of --beep and --beep-signal options to Obsolete Options section of manpage, remove these from the help-message (report by Erika Pacholleck). + bracket extern's in dialog.h with C++ extern "C" declaration, in case the library is used from a C++ application. + modify inputmenu examples to allow ESC to cancel the script. + modify inputmenu widget to cancel edit on a TAB or ESC. + modify inputmenu widget to use the same color scheme for the editable text as the inputbox widget. + modify samples/killall to work around differences in "cut" versions. + use the color-caching from the \Z logic when loading the ".rc" file, thereby reducing the number of color pairs required, and making it less likely that deriving color pairs for drawing arrows on a given background will run out of colors. + save/restore window attributes in dlg_draw_arrows() and similar functions, to allow widgets to draw arrows using the widget's background rather than a common/fixed value (request by Erika Pacholleck). + modify textbox widget so the down-arrow will be hidden when at the end of the file. (Modifying the up-arrow to be hidden is harder - will do this when implementing scrollbars). + correct off-by-one in fselect.c which left down-arrows showing at the bottom of directory- and file-lists (report by Erika Pacholleck). + improve display of percentages by omitting blanks where lines should be shown. + modify logic for \Z escapes to make those that set video attributes not clear the colors (report by Erika Pacholleck). + modify logic for \Z escapes to allow foreground and background colors to be the same, provided that bold attribute is set. Also improved the logic for choosing a background color when the foreground and background are the same (report by Erika Pacholleck). + updated configure script macro CF_XOPEN_SOURCE, ensuring that the _POSIX_C_SOURCE value is defined with a specific value (bug report originally for lynx). + fix configure script so that po/makefile is generated properly when the configure --srcdir --enable-nls options are used. + modify makefile.in to allow build/install from another directory, i.e., using configure --srcdir (patch by Mike Castle). + updated da.po (Debian #262587, Morten Brix Pedersen). + modify some sample scripts to avoid using grave quotes nested within double quotes with multiple file redirection, which does not work with Solaris /bin/sh (report/analysis by Eric Haller). + check for end of string immediately after a \Z escape to avoid displaying the null terminator as a ^@ (report by Erika Pacholleck). > patches by Erika Pacholleck: + modify calendar.c, fselect.c and timebox.c to use color scheme like other lists, using menubox colors rather than dialog colors. + correct charset for po/de.po, translate messages for "Help" and "Rename". + omit parentheses around percentage in textbox.c + correct a few mismatched attributes, e.g., searchbox_attr in textbox.c, percentage in msgbox.c, 2004/07/31 + add test scripts to cover zero-width column case. + remove limit checks from checklist.c and menubox.c (cf: 2004/07/28), since some scripts use zero-width columns (Debian #262411 and report by Kyle Sallee). 2004/07/29 + modify msgbox.c to only reserve space for percentage shown as part of scrollable text for the msgbox widget. This makes infobox look as it did before 2004/06/06 changes (report by Vinesh Christopher) 2004/07/28 + remove redundant calls to wtimeout() from widgets since wtimeout() is properly called from ui_getc() where it is controlled by the --timeout option (bug report by juanjo). + add limit checks in checklist.c and menubox.c for very narrow screens (prompted by Steve Grubb patch). + initialize step in dlg_draw_buttons() in case it is used to draw a vertical list of buttons (prompted by Steve Grubb patch). > fixes by Steve Grubb: + correct logic in checklist.c (cf: 2003/11/26 changes) which turned quoting on unnecessarily for radiobox, breaking some old scripts. + increase size of array in dlg_ok_labels() to avoid overrun if extra and help buttons are used (cf: 2002/06/12 changes). + initialize fkey variable in menubox.c and textbox.c (cf: 2003/07/12). 2004/07/21 - release 1.0 + minor updates for configure script, i.e., CF_XOPEN_SOURCE, CF_NCURSES_LIBS macros. + update config.guess, config.sub + add nl.po (Jacques Weewer). 2004/06/06 + add --visit-items option, which allows the user to tab to the item list in the checklist/radiobox and menubox widgets (request by Ari Moisio). + use wide-character line-drawing for up/down arrows when configured for wide-characters, gives better results with uxterm. + limit the number of times a --file option can be used, to prevent runaway recursion if a --file option is embedded within a file which is included. + improve discussion of wrapping in the manpage (Debian #251937). + modify msgbox to allow it to scroll vertically like textbox (Debian #233276). This only works with ncurses. + implement $DIALOGVARS environment variable to apply common options to dialog_vars when it is reset before processing other common options. + add --single-quoted option to control whether output is double-quoted with '"' or single-quoted with single-quotes. + revert the default quoting behavior of checklists to use double-quotes (report by Mark K Post regarding Slackware scripts). + add eu.po (Basque) (Piarres Beobide Egaa). + add ca.po (Catalan) (Jordi Mallach). 2004/04/21 + add a call to flushinp() to init_dialog(), to discard any typeahead before dialog is invoked (Debian #244746). + correct dlg_match_char() function, which was broken during rewrite to support wide-characters (Debian #244777). + improved ru.po, uses UTF-8 charset (Leonid Kanter, Redhat #119200). + correct position of shadow drawn for dialogs, which appeared to work for most versions of curses (other than NetBSD) but would have been visible for certain color schemes (discussion with Julian Coleman). + correct loop-exit in longest_word() (Tomas Heredia, forwarded by Santiago Vila). + add cy.po (Welsh) (Dafydd Harries). 2004/03/16 + modify quoting of results to use single-quote rather than double quote, and ensure that results containing a quote or backslash character are escaped (report by Florent Rougon) + remove an incorrect comparison from checklist which made cursor stick on the last line, from 2004/03/01 changes. 2004/03/14 + add a dependency to install library if "--with-libtool" is used. + add manpage for the library. + add "--file" + modify formbox.c to support "--help-status" like menubox. + modify checklist.c to add item name to the "HELP" string when "--help-button" is used and no --item-help option is given (Debian #236841, report/patch by Jorg Sommer). + rename colors.h to dlg_colors.h, install that when the library is installed. + add copyright notice to usage ("--help") message. + correct a missing bounds check for mouse-clicks in menubox (prompted by Debian #233044). + updated several configure-script macros: AM_GNU_GETTEXT, AM_WITH_NLS, CF_OUR_MESSAGES, CF_PROG_EXT, CF_WITH_DBMALLOC, CF_WITH_DMALLOC, CF_WITH_LIBTOOL, CF_XOPEN_SOURCE. 2004/03/01 + improve layout of calendar widget to allow for very long button labels (report by Santiago Vila). + correct logic for $DIALOG_TTY, broken in 2003/11/30. The environment variable must evaluate to a nonzero integer (report by Florent Rougon). + document interaction between "--default-no" and "--no-cancel" options in manpage (Debian #223488). + change configure script to use autoconf 2.52+patch, to work around issues with Estonian locale (report by Seemant Kulleen). + add uk.po (Ukrainian) (Debian #232441). + make --default-item apply to checklist widget (Debian #225255). + correct a missing check for --item-help when --help-status was given for checklist (Debian #232921). + correct a missing bounds check for mouse-clicks in checklist (Debian #233044). + update config.guess, config.sub 2003/12/07 + correct infinite loop in yesno widget when "--defaultno" option is combined with "--no-cancel" (Debian #223077). 2003/11/30 + suppress double-quotes added for "--help-status" option if the string does not contain any special characters. 2003/11/26 + add samples/sourcemage.rc, for comparison with slackware.rc + add "--insecure" option (request by Sean Mathews (DrWho@f34r.com)). + make "--defaultno" option apply to widgets which use OK/Cancel buttons as well (Debian #209030). + improve documentation of exit-codes for each widget in the manpage (Debian #217926). + add option "--keep-window" to suppress repainting after completing each widget (request by Ingo van Lil). + add options "--yes-label" and "--no-label" to allow override of the "Yes" and "No" strings (request by Christoph Zwerschke). + add option "--help-status" to allow script to restore a checklist or radiolist after processing an item-help string (Debian #209031). + modify width-calculation for non-formatted text to ensure it is wide enough for the longest word in the text (patch by Andrew Gaul). + modify dlg_index_columns() to count a newline as a single cell rather than 2 for the normal curses case. This fixes an off-by-one for the text-justification, shown in screen 2 of msgbox1 sample script. + fix dlg_char_to_button(); 2003/09/10 changes made it incorrectly ignore case of the labels. + change calendar's use of arrow keys so they are (as before 2002/06/22) interpreted within the day-grid as movement within that grid (request by David Anders). + correct missing initialization of last_getc variable in dlg_getc() (report/analysis by Victor Wodecki). + modify main program to make dialog --no-shadow --print-maxsize work. Normally dialog prints the screen size after subtracting the area reserved for shadows, but some applications may need the actual screen size (Debian #213424). + several related changes (Debian #213425): + separate the examples using "--stdout" and "--output-fd" from the normal usage examples. + add "--input-fd" option, provide a sample of its use. + modify init_dialog() to use initscr() unless a "--stdout" option was used. Some scripts relied on the coincidence that redirecting standard output from dialog would "work". Before this change init_dialog() assumed that redirected standard output was synonymous with "--stdout" option (not the intended behavior). + modify command-line parsing to look for "--stdout" and "--stderr" options first, allowing only one. + add a check for an environment variable $DIALOG_TTY which provides the older behavior, i.e., try to open the terminal directly if stdout is redirected. + interface changes, to make libdialog simpler to use: + rename all of the internal functions to begin with "dlg_", but provide compatibility with older names if the application defines __DIALOG_OLD_NAMES__. + add dialog_version() function, and corresponding DIALOG_VERSION and DIALOG_PATCHDATE definitions to dlg_config.h + eliminate remaining global variables such as screen_initialized in favor of dialog_state and dialog_vars. + move some data such as dialog_vars.output to dialog_state, since they are normally not reset between widgets. + change interfaces of dialog_yesno() and dialog_checklist() to use dialog_state.defaultno and dialog_vars.separate_output, making it simpler and more consistent. + improve configure script and related definitions: + add "--with-libtool" option to provide shared library support by libtool. + rename generated "config.h" to "dlg_config.h", so it can be installed without naming conflict. Added "dlg_config.h" to install-lib rule. + modify configure script and makefile to use EXEEXT and OBJEXT. + add "--enable-widec" option to control whether wide-curses features are compiled-in, rather than check for the existence of those in the curses library. This allows building with HPUX curses, which has abandoned legacy features while not quite supporting X/Open curses. + add configure check for getbegx(), etc., which are not provided on all platforms. + update config.guess, config.sub 2003/10/02 + update hu.po (Arpad Biro). + revert part of the 2003/08/18 change to "--stdout" option. Using stderr for screen output does not work well on several platforms since stdout's settings are affected (report by Kent Robotti). 2003/09/24 + modify tailbox to allow it to display files with arbitrarily long lines. + fix an infinite loop in tailbox, broken when making interface changes to dlg_getc() (report by Ingo van Lil). + amend fix for "--and-widget" to not treat "---" as an option (report by Kent Robotti). + updated es.po (Santiago Vila). 2003/09/10 + correct "RENAMED" result from inputmenu widget, which did not reset the result buffer, and did not account for scroll-offset (Debian #209336). + modify button, menu and checklist logic that matches a character to the beginning of a text field to support wide-characters (completes Debian #195674). + modify configure script to not use "head -1". 2003/08/30 + modify searchbox popup in textbox widget so one can simply press return on an empty input to cancel the popup. + modify error reporting to avoid clearing screen if a problem is found in the ".rc" file. + add color/attribute combinations for form widget (based on patch by Reznic Valery). + combine rc-file colors, attribute- and color-tables to obtain a single table for color values, which requires less work to add new entries. + modify fselect widget to make back-tab work again, since it was broken by the rewrite of dlg_edit_string(). + modify howmany_tags() so it will quit searching when it finds any option, not only "--and-widget" (Debian #206636). + correct call to dlg_print_text() in print_line(), which did not account for hidden characters (report/patch by David Poole). + modify print_button() to display properly if locale defines ok/cancel or yes/no buttons that contain multibyte characters. 2003/08/20 + correct an indexing error when deleting from the end of a line using KEY_DC; it happened to work on Linux because malloc() clears memory like calloc(). + add '\r' to case statement where '\n' is translated to KEY_ENTER to work around defect in NetBSD curses. + modify configure check for getparyx(), etc., which are implemented by NetBSD curses as functions rather than macros. + correct configure check for term.h, which may be if ncursesw development headers are installed, but not ncurses development headers. Or they may not coincide (Debian #206287). 2003/08/18 + modify checklist.c and menubox.c to display tags properly if they contain wide-characters. + better solution for initializing curses when "--stdout" option is used, e.g., use stderr for the output if it is a tty. Also correct the error handling, so dialog exits with an error if it cannot find a way to do output (Debian #205509). + modify sample scripts to use consistent definition of $DIALOG (Debian #205508). + add UTF-8 examples inputbox6-utf8, inputbox6-utf8 (from Tomohiro Kubota, Debian #195674). + modify print_line() to work with wide-characters, e.g., so it handles wrapping for double-width characters. + cache results from multibyte character indices, speeds up cursor movement. + modify form widget to support scrolling and mouse-selection. + add form widget (based on patch by Reznic Valery). + correct mouse-handling for inputmenu widget. + corrections to menu.c: location of clearing operation, and height of rows in code for older ncurses versions (patch by Reznic Valery). + improve logic that compensates for xterm's alternate-screen by cancelling the rmcup/smcup strings after the rmcup has been issued. That ensures that dialog will not clear the screen on exit (report by Javier Kohen). + modify initialization between widgets to retain the values for the --aspect, --separate-widget and --tab-len options. + add --separator as an alias for --separate-widget (compatible with Xdialog). + correct handling of Xdialog's --icon and --wmclass options, whose parameter was not ignored. + correct logic for --separate-widget so its string is written before each output, rather than only for --and-widget option (report by Javier Kohen). + improve limit-check in center_label() for buttons.c (report by Tor Vidar Havstad). + correct layout of --menu widget, which reduced display width due to logic for --inputmenu being applied whether or not that configuration was used (reports by Javier Kohen, Dimitar Zhekov and MAL ). Fixes Debian #201215. + modify gauge widget to support --begin option (Hans-Joachim Baader). + updated pl.po (Jaroslaw Swierczynski). + hide cursor while painting gauge. + add auto-sizing logic to gauge widget (reports by Javier Kohen and Robert Schubert). 2003/07/20 + rewrote inputstr.c, allowing it to enter and display wide-characters. Some nonprinting characters such as control/B can be edited as well. + modify timebox to allow user to type numbers into the fields. + change interfaces of dlg_getc(), mouse_wgetch(), etc., to add parameter that returns whether the result is really a function-key. This is needed to work with wide-character curses. + correct computation of week-number in calendar widget (report by Heiner Lamann). + updated configure script macros: + suppress -Winline with gcc 3.3, since it is broken. + fix caching bug in CF_UTF8_LIB + improved script for CF_BUNDLED_INTL. + update config.guess, config.sub 2003/03/08 + add null-pointer checks to some malloc calls which were overlooked. + correct logic in dlg_add_result(), which did not copy content of non-allocated buffer to the first allocation (report by Daniel Dupont). 2003/03/02 + correct an uninitialized value in dlg_add_result() (Debian #182683). 2003/01/30 + corrected print_line(), which subtracted the margin twice from the right-limit, making a string wrap unnecessarily (Debian #168823). + correct initial limit-check for arrows in checklist.c, which used the wrong variable, showing the bottom arrow when it should not (Debian #168823). + modify driver to always call show_result(), to simplify updates. + fix several memory leaks, important if dialog is run with a large number of widgets (report by albert.veli@telia.com forwarded by Santiago Vila). + check if the screen output is actually to the terminal before trying to suppress xterm's alternate screen mode (see 2000/01/18) (report by David Oliveira). + use dialog_vars.input_result consistently to return the text which is printed after a widget completes. In many cases, dialog now allocates enough space to hold the text, rather than use a fixed buffer. The checklist widget was writing directly to the output to avoid limits of the fixed buffer. + modify dialog.c to also write dialog_vars.input_result if the Help-button was pressed (request by Amon Ott). + add hu.po (Arpad Biro). + update fr.po, pt.po, pt_BR.po to add strings for "Help" button (patch by Frederic L W Meunier). + fix off-by-one error in menu.c, checklist.c (reported by Tomasz Wasiak 2002/09/15 and others: Andrew Gaul 2002/11/12, Tobias C Rittweiler 2002/11/19, Arpad Biro 2003/01/21). + updated configure script, improving checks for ncurses in various locations, updated NLS script to match lynx. Added --with-curses-dir option. > Tobias C Rittweiler: + make ifdef in mousewget.c consistent with usage in dialog.h + use beep() rather than flash() in dlg_edit_string(), for consistency with the other functions. + change order of buttons so extra button falls between Ok/Cancel. + fix so "dialog --print-maxsize" exits from curses. + add --inputmenu option. 2002/08/14 + modify checklist.c and menubox.c to treat the extra button like the "Ok" button by making dialog print the chosen items (request by Tobias C Rittweiler). + add examples checklist6 and menubox6 to illustrate the --colors option. + implement -colors option, which allows one to highlight words in the titles and most text areas with color or video attributes (adapted from patch by Tobias C Rittweiler). + add examples inputbox4, inputbox5 to illustrate how to use the --output-fd option, and how to use dialog without any temporary file at all. + add --output-fd option (Debian #153984). + documented vi-style keys for calendar, textbox widgets in manpage. 2002/06/22 + improve mouse handling, e.g., for up/down scrolling in calendar, checklist, etc. + add --extra-button and --extra-label options (adapted from patch by Tobias C Rittweiler). + correct displayed cursor position in inputbox when returning to the input area after traversing the buttons with tabs, etc. + add left/right arrows for traversal in calendar and timebox dialogs. + implement two new functions dlg_next_ok_buttonindex() and dlg_prev_ok_buttonindex(), using these to hide details about the traversal over buttons in several widgets. + modify checklist.c and menubox.c to verify if both --help-button and --item-help are specified before assuming that selecting the help button should cause the "HELP {item-help}" message to be printed (reported by Marcel Ritter). + modify init_dialog() to work around HP's broken tty driver (report by John Mudd). Specifically, the problem is that when opening /dev/tty directly (to support the --stdout option), the terminal does not change to raw mode. The workaround opens /dev/tty only as needed; the --stdout option does not work on HPUX but otherwise dialog works. + updated el.po (patch by kromJx ). 2002/05/19 - release 0.9b + add --no-collapse option to allow one to retain tabs and repeated blanks in a message box (request by Roberto Simoni). + use DLG_EXIT_ESC constant rather than -1's in several places. This has the effect of changing some exit-with-error cases to denote that the exit was because ESC was pressed (patch by Diego Alvarez, forward by Santiago Vila). + bump package version to 0.9b (with patch-date, as usual). + add --exit-label option (request by Roberto Simoni). + updated de.po to correct translation for "Cancel" (from Michael Piefel, Debian #146402). + use definitions from autoconf macro AC_HEADER_TIME to ensure that time() is properly prototyped. + update pl.po, adding translation for "Help" (patch by Jaroslaw Swierczynski ). + update COPYING file, to reflect address change of FSF (reported by Santiago Vila). + update some configuration script macros: CF_CHECK_CACHE, CF_CURSES_CPPFLAGS, CF_HEADER_PATH and CF_MAKEFLAGS. + correct misuse of "$with_XXX" variables in the configure script, which prevented configuration against curses library as opposed to ncurses. + update config.guess, config.sub 2002/03/09 (a) + modify geometry of samples/fselect scripts to allow them to run in a 24x80 screen (report/patch by Santiago Vila). + correct exit-code for menubox.c when Cancel is pressed. This was unintentionally altered when adding --help-button (reported by Patrick J Volkerding) 2002/03/09 + add --timeout option, which forces the program to exit with an error if no user response is given within the specified number of seconds (request by ). + modify calendar widget to allow day/month/year values to default to the current date (request by ). + modify display of buttons in checklist.c and menubox.c to handle the case where the button label is empty (Debian #134388). + extended logic for ok/cancel/help to make this work with checklist widget. + revert pt_BT.po, apply changes to pt.po (report by Frederic L W Meunier). > several changes from Stanislav Ievlev: + add options --help-button and --help-label to make menubox display a third button which can be used to return an exit code causing the calling script to show extended help information. + use home/end keys in input string-editing, e.g., inputbox. + add option --max-input to limit length of string returned by inputbox and other widgets which allow the user to edit a string. 2001/12/02 + add --ok-label and --cancel-label options (request by Kyle Sallee). + correct usage message for --fselect option (reported by Patrick J Volkerding). + add samples/debian.rc, for comparison with slackware.rc + corrected samples/slackware.rc, which was just the compiled-in default values (patch by Patrick J Volkerding). + modify search rule for rc-file to add a global rc file /etc/dialogrc (patch by Patrick J Volkerding). + updated pt_BR.po with modified entries for fselect.c (Frederic L W Meunier). + add pl.po (Swiergot ). 2001/11/11 + modify command-line parsing to allow a "--" argument to act as an escape, so the next argument is not recognized as an option if it begins with "--". This is apparently one of popt's undocumented features, upon which some Debian scripts depend (Debian #116642). + add da.po (Morten Brix Pedersen ). + add an install-strip rule to makefile, changing the normal install rule to not strip the installed executable (based on discussion with Santiago Vila). + initialize my_output variable if user cannot open /dev/tty, e.g., if su'd to another user (patch by Richard Braakman (), Debian #117177). + add configure option --with-ncursesw, to allow configure/build with wide-character version of ncurses. 2001/10/14 + add option --ignore, to make dialog be ignore options that it does not recognize. + add option --trim, to trim literal newlines and repeated spaces from text that will be displayed. Add samples/msgbox2, which is the same as msgbox1, but using --trim (cf: change for Debian #102942). + minor correction to attributes for buttons.c to use active_attr on the right-side of a button. + add a sample dialog rc-file slackware.rc based on diffs in hdasetup package at http://ftp1.sourceforge.net/pub/mirrors/slackware/slackware/source/a/hdsetup/ (discussion with Frederic L W Meunier). + modify dialog.pl to avoid using a statically-named tempfile, allowing multiple processes to use this script (patch by James Ranson (), Debian #110609). + correct fprintf() call in j_menu() function, i.e., "--menu" option, which did not guard against expanding '%' embedded in the parameters (Stavros Chatzistefanidis ). + add et.po (Ivar Smolin ). + update fr.po (Frederic L W Meunier). + modify to allow scripts to alter the exit codes, mainly to distinguish ESC and ERROR exits. This is done by setting a shell variable such as DIALOG_ESC to a new value (request by Petr Vandrovec (), Debian #99264) 2001/08/27 + use VPATH in makefile to support build with configure --srcdir, if the make program supports that. Note that samples/install/makefile is not generated, due to awkward limitation of autoconf script (reported by Frederic L W Meunier <0@pervalidus.net>). + add po/pt_BR.po (Frederic L W Meunier <0@pervalidus.net>). + correct sense of --enable/--disable shown in configure --help (report by Frederic L W Meunier <0@pervalidus.net>). + correct logic for --clear option, broken in 2000/07/02 (fixes Debian #110254). 2001/08/11 + porting fixes to work on AIX: flush output to work around bug in curses library, use ./killall in scripts to avoid conflict with AIX program by that name. + modify dlg_trim_string() to retain literal newlines if the string does not contain "\\n" strings, and to retain leading blanks on the resulting lines, for compatibility with older scripts (Debian #102942). + add charset specification to cs.po + change dates in CHANGES to consistent format, add el.po for Greek (patch by kromJx ). + eliminate static globals (bss, data) from modules rc, tailbox, textbox using better parameter-passing convention, and const. + cleanup temporary files in a few of the sample scripts. + rewrote tailboxbg using select() rather than fork(), thereby eliminating lock-files. Only one process should be trying to display on the screen at any given time. + add error check to ensure that numeric parameters are really numbers. + correct off-by-one in error messages reporting too-few or too-many tokens for a given option (reported by George Mirchev). + fix typo in manpage, "textboxbg" where "tailboxbg" was meant (reported by George Mirchev ). + use DLG_EXIT_xxx symbols consistently for all exit codes. + updated es.po (patch by Santiago Vila). + updates for some configure script macros from lynx: CF_MAKEFLAGS, CF_NCURSES_VERSION, CF_PROG_EXT. + fixes to compile if is included, e.g., when building with AIX curses (report by Suzi Dowson ). 2001/05/27 + updated dialog.pot + modify fselect.c to work with autosize, i.e., given height and width zero (report by Martin Povolny). + add a null-pointer check in justify_text(), needed by fselect.c + add several more options which dialog can safely ignore, from Xdialog 2.0.2 + refinements for configure macros checking for $CPPFLAGS, from lynx. + update config.guess, config.sub to match autoconf 2.50 > Martin Povolny : + add cs.po + use nl_langinfo() to customize names for day-of-week, and month 2001/05/11 > Vincent Stemen : Fixed dialog.c to not pass menu items through dlg_trim_string(). Stripping extra spaces out of the menu items broke some of my scripts by altering the string that it compared to know which menu item was selected. There should be no need to do justification on the menu items, which are always one line, anyway. 2001/04/29 > Vincent Stemen : + rewrote the text justification code to be able to have preformatted text in the prompts with extra spaces like the older versions of dialog. If there are "\n" strings in the text, then extra spaces are preserved. Lines are always wrapped on word boundaries. + fixed --cr-wrap to break lines on '\n' (newline) characters and not add an extra line at the top and bottom of the text. It now works as the manual says it should. + it is no longer necessary to use "\n\" at the end of lines to escape the '\n' character. "\n" now works. However, the old way, "\n\" still works. + the fixes involved the following changes: - rewrote dlg_trim_string() to recognize preformatted text (know when not to strip extra spaces) and to pay attention to --cr-wrap. - rewrote justify_text() which now calls a new function in util.c, print_line(), to print each line and end it on a word boundary. - modified real_auto_size() to call a new function auto_size_preformated() to calculate the box size for preformatted text. - removed skip_blanks() and skip_text() since they are not used by the new justify_text(). - modified dialog.c to not call dlg_trim_string() on title strings so that titles retain their spaces. + modified the following demo files in the sample directory: - inputbox changed all "\n\" strings to "\n" to demonstrate the extra backslash is no longer needed. - inputbox1 removed all the "\n\" strings from the end of the lines to properly demonstrate --cr-wrap. - msgbox1 this sample was using "--aspect 9 --cr-wrap". Rewrote it to properly demonstrate --aspect. 9 is already dialog's default aspect ratio. It now creates several dialogs in sequence, demonstrating aspect ratios of 9, 12 and 6 and properly demonstrates --cr-wrap. + made the following changes to the manual (dialog.1). - rewrote the description of --aspect to be more understandable. - rewrote the description of --cr-wrap to be more correct and more detailed. It did say, "Otherwise, the text for each dialog will display on a single line.", which is not correct. It wraps the text to fit in the box. > T.Dickey: + use logic from menubox dialog in checklist to handle autosizing when list height is given as zero (fixes problem reported by Eric Veltman ). + modify checklist and menubox dialogs to check for too-wide data, and truncate one or both of the name and text fields to fit (also reported by Eric Veltman). + corrected a few items from Vincent's patch: - use C89-style comments rather than C++ - restore logic in justify_text() which checks for win==0, needed to work with standard curses implementations other than ncurses. The first call on justify_text() passes a null pointer as a flag to indicate that checking should be done, but no screen updates. - avoid modifying the buffer in decode_percent(), otherwise a message containing a space or newline would be truncated at the whitespace. - modify dlg_button_x_step() and dlg_button_layout() slightly to work with altered print_autowrap(), etc. + fixes to build/work with SunOS 4.x 5lib curses 2001/04/15 + fix a memory leak in mouse_region(). + simplify handling of optional parameters with new functions optional_str() and optional_num(). + add calendar and timebox dialogs (compatible with Xdialog). + correct typo in fallback definition for getparyx, and remove void cast for mouse_open and mouse_close which prevented build with Sun's Solaris compiler. + rename --enable-lxdialog configure option to --enable-Xdialog + modify CF_NCURSES_CPPFLAGS macro to match more variations of ncurses header files. + update config.guess, config.sub + modify some configure script macros to avoid problems with buggy autoconf 2.49c which breaks changequote(). 2001/01/15 + small fix to revised real_auto_size() and justify_text() to avoid adding origin to box-width, which broke samples/wheel. + apply 1999/12/25 tempfile change to wheel and copismall samples. + add sample script for tailboxbg. + revised lock-file management to better ensure that locks are actually created by the tailbox subprocess(es). + correct hardcoded signal 15 in tailbox to SIGHUP to match documentation. Signal 15 is usually SIGTERM, which cannot be caught. + correct off-by-one comparison of return-value for arg_rest() which made dialog --gauge test 10 50 dump core because it expected a 4th parameter (fixes Debian #80641). + resync config.sub, config.guess from http://subversions.gnu.org/cgi-bin/cvsweb/config/ (which finally have cases for OS/2 EMX), minor tweaks to related configure script macros. 2000/12/17 + restore treatment of predefined height/width in real_auto_size() which was lost in 2000/12/12 rewrite (report by Raphael Halimi ). + updates for configure script macros AM_PATH_PROG_WITH_TEST, CF_CURSES_LIBS, CF_LIB_PREFIX, CF_PROG_EXT for $PATHSEP and $CFLAGS fixes. 2000/12/13 + correct change for create_lock(), which resulted in an infinite loop (patch by Chris Butler, ). 2000/12/12 + rewrote print_autowrap() and real_auto_size() to share common code justify_text(), which now does text flow even when the string contains newlines (fixes Debian #77199). + improve create_lock() function using open() with O_EXCL rather than fopen() (patch by Matt Kraai (), Debian #78951). + correct description of --fselect in man page (patch by Tomas Pospisek (), Debian #77200). + add --no-cancel as alias for --nocancel for compatibility with Xdialog (report by Luis E Limon ). 2000/10/27 + some lint fixes using lclint (mostly void-casts, but some sign-extension fixes e.g., for ctype.h macros, and loop in dlg_char_to_button()). + modified to build/run on OS/2 EMX with ncurses. + minor changes to po/*.po (trim trailing blanks, provide explicit translation for "OK"), to work with Solaris gettext. + modified to allow this to build with archaic version (1.8.6) of ncurses on FreeBSD 3.1 (does not run). + update config.guess, config.sub from subversions.gnu.org 2000/10/17 + use new function sub_window() to check success/failure of calls to subwin(), printing an error message if it fails (fixes Debian #74903). + use combination of isatty/ttyname to look for workable tty device on systems which have no /dev/tty, e.g., BeOS. 2000/10/08 + change exiterr() to use stdarg.h, make some messages easier to understand. + add dialog_clear() + make samples/install/setup build. + implemented mouse support for buttons, e.g., in yesno dialog using ncurses (the gpm support no longer works, but is useful for reference) + add a configure check for chtype. + updates for configure script macros (CF_BUNDLED_INTL, CF_CURSES_LIBS, CF_GCC_ATTRIBUTES, CF_GCC_WARNINGS, CF_INCLUDE_DIRS), and scripts config.guess, config.sub + cleanup of item-help change, integrate with checklist and radiobox. + add ja.po, from Hirofumi Takeda . > patch by Marco Mariani + add --item-help option, which makes menubox data interpreted as 3 columns rather than 2. The third column is displayed on the last line of the screen as a help/status message for the currently selected item. + add it.po, pt.po + change TAG_KEY_HL to FALSE, making unselected items in checklist easier to read on Linux console. 2000/07/30 + change real_auto_size() to allow it to be used for dialogs that have no prompt, e.g., fselect. Also, rather than requiring both height and width to be given as -1 for maximizing the dialog, allow either alone. + increase minimum height needed for autosized yesno dialog. + add --version as an alias for --print-version. + fix for build on Solaris without NLS (cannot redefine 'gettext()'). + add fselect dialog (compatible with Xdialog). + add --enable-lxdialog configure option. + use new configure macro CF_ARG_MSG_ENABLE to show progress with enable/disable switches. 2000/07/02 + implement --stdout and --stderr options as in Xdialog. + move logic that translates "\\n" into '\n' into main program to simplify logic that formats text. + make ifdef's for rc-file not specific to ncurses. + correct logic making percent parameter of gauge optional. 2000/06/29 + add alternate test-script for gauge, adapted from Xdialog. + modify gauge to make optional a percentage which was read at the beginning of the XXX-delimited message text, since clones of dialog are written to assume this is text. If the line is not a simple integer, dialog will treat it as text. + make the percent parameter of gauge optional, as in Xdialog. + undo one use of CharOf() in guage.c, an error. + fix configure macro AM_WITH_NLS to refrain from attempting to make a symbolic link into/libintl.h if we are not using the bundled intl directory from gettext (reported by Julian Coleman ). + add ru.po, from Michael Sobolev + updates for config.guess, config.sub from tin. + updates for configure script macros: CF_MATH_LIB (improperly nested brackets/parenthesis) and CF_XOPEN_CURSES (make include of <*curses.h> depend on configure tests). 2000/04/25 + repaint screen when a control/L is pressed. + apply CharOf() macro to avoid sign-extension on calls to waddch(), fixes a problem with accented characters (reported by Santiago Vila). + add es.po, from Santiago Vila 2000/04/23 + modified to use gettext (configure option --enable-nls). This uses gettext 0.10.35, which must be previously installed. (It can also use an included intl library, but I consider that to be a waste of disk space). + remove code in checklist/radiobox, menubox that try to use abbreviations for the OK/Cancel buttons since those conflict with the check for abbreviations in list entries, which are more useful. + moved padding of button labels out of string literals, into the logic of dlg_draw_buttons(). + resync/update with configure macros CF_CURSES_LIBS, CF_FIND_LIBRARY, CF_HEADER_PATH, CF_LIBRARY_PATH and CF_NCURSES_LIBS, as well as mkdirs.sh and config.guess. 2000/02/22 + add --default-item option, for menubox to set the default selection (fixes Debian #49796). + add sample scripts for --nocancel and --fb options with inputbox. + modify inputbox* sample scripts to show application errors, if any. + add --nocancel option, and ignore --noitem, --fb, --fullbutton, to make this compatible with whiptail scripts. (whiptail does not handle many dialog scripts however). + modify checklist/radiobox to handle home, end, nextpage, prevpage keys, as well as make the abbreviation search work for the whole list, not only the current page. + treat KEY_LL the same as KEY_END in checklist and textbox. + add logic for KEY_BTAB. + use new function dlg_draw_buttons() to better manage the layout of yes/no/ok/cancel buttons. + another pass of cleanup of dialog.c, makes it use a single table for lookup of option names and help-message. Eliminated numerous adjustments to 'offset' variable. + on initialization, check if standard input is from a terminal. If not, open /dev/tty (fixes Debian #57771) 2000/02/05 + implement inline editing in textbox.c search dialog. + revise inputbox.c, allowing inline editing with arrow-keys. removed redundant logic in that module. + correct a typo that prevented rc-file configuration from building. + correct ifdef's to compile/run if the curses implementation does not support color. 2000/01/23 + improve test-case for gauge. + change gauge.c to show progress in reverse-video, add a check for end-of-file in the loop for reading new messages. + use curses whline() function to simplify print_arrows() logic in checklist.c and menubox.c + use curses beep() function rather than hardcoded strings. + correct several compiler warnings for gcc -pedantic (mismatch of const, signed/unsigned). + modify exiterr() to avoid possible expansion of '%'. + change CF_MATH_LIB configure macro to allow specifying a particular test-function. For dialog, this should be sqrt(). The macro was originally written for ncurses, which needs sin(). However, that is a builtin function on the m68k port (reported by Roman Hodek , this fixes Debian #55553). 2000/01/18 + update manpage (Debian #25648). + modify configure test for math library to avoid using a constant parameter to the test function, lest gcc optimize the call away (fixes Debian #55553). + restructure help-message so actual problem is indicated. The original help-message is shown if no parameters are given, or if the --help option is specified alone. + suppress xterm's alternate screen mode by sending an exit_ca_mode after initscr if the terminal looks like xterm, e.g., has key_mouse defined, and has private-mode escapes in both enter_ca_mode and exit_ca_mode (fixes Debian #55181). + change yellow lettering on white to blue on white, since it offers better contrast (fixes Debian #51196). + use napms() rather than sleep(). + some cleanup/simplification of main program. Indent'd dialog.c and util.c + eliminate several places where repeated options are treated as an error, since they are really executed once anyway. 2000/01/15 + remove pre-autoconf Makefile + remove sleep's from a few of the sample scripts, which left users thinking that dialog was slow to complete an action. + rewrote infobox sample script, using dialog's --sleep option and a loop in the script. + change 'ch' variable in tailbox.c to an integer, because it is compared against EOF (fixes Debian #53157). + corrected mandir variable in makefile.in (reported by Santiago Vila). + small changes to sample scripts, from Debian: rename "guage" script to "gauge", change path to copy of GPL used in textbox. + add uninstall rule to makefile.in, fixed some dependencies so "make install" works without first doing "make all". 1999/12/25 + use more portable scheme for tempfile generation in samples. + add a configure script, prefer to not use the original Makefile because it works only with GNU make. + correct prototype of 'main()', which misused const. + modify guage.c to use fgets() rather than gets(). + merge changes from Debian package maintainer Santiago Vila : 1999/10/07 + add a password dialog box (Debian #45964, patch by Joey Hess). + implement "--defaultno" option to specify if the default for the yes/no box is "No" (Debian #46076, patch by Joey Hess). 1999/03/10 + modify input.c to clear the input field to the right of the given string, to help with screen-refresh 1998/12/08 + check for list_height less than one in checklist.c (Debian #22239). 1998/10/21 + use function wscrl() in preference to scroll() in checklist.c and menubox.c (unclear: in ncurses, scroll() is a macro that uses wscrl()). + remove the "-I/usr/include/ncurses" option from Makefile since Debian does not install ncurses' header files into that directory. 1998/09/12 + simplify menubox.c using new functions print_arrows() and print_items(). add logic to handle KEY_NPAGE and KEY_PPAGE (Debian #26326). + modifications to provide sample scripts (Debian #26211): + change sample scripts to use Debian tempfile utility rather than putting files into /tmp. + change sample scripts to use 'dialog' from user's path rather than in the parent directory as in the build directory. + use the system copy of GPL rather than that in the build directory as an example for the textbox script. 1999/11/27 + fix some gcc warnings about ambiguous use of "else" 1999/05/01 + cleaned up some of the redundant code with new functions: box_x_ordinate box_y_ordinate draw_title draw_bottom_box new_window + modified msgbox.c and yesno.c to work with the KEY_RESIZE sigwinch handling in ncurses 4.2 + corrected spelling of "gauge" The relevant portions of the Debian change log for the original version (dialog-0.9a-12) are abstracted here, omitting details of their packaging: 1998/05/24 + Replaced guage.c by the one in dialog 0.6z, which is known to work. Fixes Debian #18284: unstable dialog. 1997/12/16 + dialog.c: dialog_input_result printed with "%s" format. This was Debian #9913, fixed by Bill Mitchell, but the change was lost. + Pristine source, .depend is not removed in clean target. Instead, it is made zero length (otherwise it would not work *without* fakeroot). + Added '^U' support in input box (Debian #9915, patch by Joey Hess). + Wrote patch to fix core-dumping problem (Debian #13170). Sven Rudolph : -- vile:fk=8bit diff --git a/README b/README index b2c9b8595dbc..1bad4311dd40 100644 --- a/README +++ b/README @@ -1,61 +1,61 @@ -(1999-12-25)------------------------------------------------------------------- This version of dialog, formerly known as cdialog is based on the Debian package for dialog 0.9a (see CHANGES for recent modifications) - T.Dickey -(1996-01-15)------------------------------------------------------------------- I have uploaded cdialog-0.9a.tar.gz to sunsite. It should be moved to pub/Linux/utils/shell, I think. Starting point for cdialog v.0.9a was dialog-0.6c. Many new features like as Resolution-independence, Auto-sizing, Maximizing, more widget on the same screen (multi-widget), etc. were added. New widget are tailbox and tailbox-in-background. Here are the options: Usage: dialog { --and-widget } Common options: [--backtitle ] [--sleep ] [--beep] [--beep-after] [--clear] [--begin ] [--aspect ] [--print-size] [--print-maxsize] [--size-err] [--separate-output] [--cr-wrap] [--tab-len ] [--tab-correct] [--print-version] [--no-kill] [--title ] Global options: [--shadow] [--no-shadow] [--separate-widget "<str>"] At the moment, mouse support with libgpm can't be added because it does't implement the wtimeout() function of ncurses. Wtimeout() is needed to have more widgets (es.tailbox) cooperating on the same screen... I don't know if with newer versions of libgpm it's possible. I have no more time to write docs for this new version...Is there anyone, that looking at the code, can do it??? Ouch! :-) Don't flame me! For the future, if any volunteer want, the way to evolve cdialog is to 1) make a daemon for a better support of multi-tasking or implementing multithreading. 2) add an option that could permit to read commands (--options) from a file, like as in a normal programming language, but maintaining - compatiblity with older version of dialog. + compatibility with older version of dialog. I no longer could maintain cdialog... Executable and library name of cdialog are the same of dialog, for -compatiblity. +compatibility. I think that only one directive should be follow: don't use a resource like stdin, stdout when you'll write new options for cdialog; these resources have to be shared from all widgets on the command line. Guage uses stdin :-/ so that can't be mixed for example with an inputbox, but it was made before of multi-widget. However this is not a big problem! THERE ARE NO *KNOWN* BUGS. If anyone has much time and can find the way to add wtimeout() support to libgpm, also mouse could be supported. Please use ncurses-1.9.4 or newer. | __ | demarco_p@abramo.it:~$ make Linux | more > UserFriendly; | /__) | /~~ _ _ _ _ /~\ _ / . _ | |/ ako | (___ (_) | ) ) (-' (__/ | ) /__ | | ) (_| >< . coordinator. diff --git a/VERSION b/VERSION index 12fccce09544..fc653b601c01 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -15:0:0 1.3 20180621 +15:0:0 1.3 20210117 diff --git a/aclocal.m4 b/aclocal.m4 index c33827fce67b..191ba9c373fe 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6536 +1,7150 @@ dnl macros used for DIALOG configure script -dnl $Id: aclocal.m4,v 1.120 2018/06/21 00:30:26 tom Exp $ +dnl $Id: aclocal.m4,v 1.150 2021/01/11 09:03:36 tom Exp $ dnl --------------------------------------------------------------------------- -dnl Copyright 1999-2017,2018 -- Thomas E. Dickey +dnl Copyright 1999-2020,2021 -- Thomas E. Dickey dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the dnl "Software"), to deal in the Software without restriction, including dnl without limitation the rights to use, copy, modify, merge, publish, dnl distribute, distribute with modifications, sublicense, and/or sell dnl copies of the Software, and to permit persons to whom the Software is dnl furnished to do so, subject to the following conditions: dnl dnl The above copyright notice and this permission notice shall be included dnl in all copies or portions of the Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. dnl dnl Except as contained in this notice, the name(s) of the above copyright dnl holders shall not be used in advertising or otherwise to promote the dnl sale, use or other dealings in this Software without prior written dnl authorization. dnl dnl see -dnl http://invisible-island.net/autoconf/ +dnl https://invisible-island.net/autoconf/ dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- -dnl AM_GNU_GETTEXT version: 14 updated: 2015/04/15 19:08:48 +dnl AM_GNU_GETTEXT version: 15 updated: 2021/01/02 09:31:20 dnl -------------- dnl Usage: Just like AM_WITH_NLS, which see. AC_DEFUN([AM_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([CF_PROG_CC])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) AM_ICONV AM_LANGINFO_CODESET AM_LC_MESSAGES AM_WITH_NLS([$1],[$2],[$3],[$4]) if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no for desiredlang in ${LINGUAS-$ALL_LINGUAS}; 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 + if test "$useit" = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ])dnl dnl --------------------------------------------------------------------------- dnl AM_ICONV version: 12 updated: 2007/07/30 19:12:03 dnl -------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl iconv.m4 dnl ==================== dnl serial AM2 dnl dnl From Bruno Haible. dnl dnl ==================== dnl Modified to use CF_FIND_LINKAGE and CF_ADD_SEARCHPATH, to broaden the dnl range of locations searched. Retain the same cache-variable naming to dnl allow reuse with the other gettext macros -Thomas E Dickey AC_DEFUN([AM_ICONV], [ 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_ARG_WITH([libiconv-prefix], [ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [ CF_ADD_OPTIONAL_PATH($withval, libiconv) ]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ CF_FIND_LINKAGE(CF__ICONV_HEAD, CF__ICONV_BODY, iconv, am_cv_func_iconv=yes, am_cv_func_iconv=["no, consider installing GNU libiconv"])]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) AC_CACHE_CHECK([if the declaration of iconv() needs const.], am_cv_proto_iconv_const,[ AC_TRY_COMPILE(CF__ICONV_HEAD [ extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ],[], am_cv_proto_iconv_const=no, am_cv_proto_iconv_const=yes)]) if test "$am_cv_proto_iconv_const" = yes ; then am_cv_proto_iconv_arg1="const" else am_cv_proto_iconv_arg1="" fi AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi LIBICONV= if test "$cf_cv_find_linkage_iconv" = yes; then CF_ADD_INCDIR($cf_cv_header_path_iconv) if test -n "$cf_cv_library_file_iconv" ; then LIBICONV="-liconv" CF_ADD_LIBDIR($cf_cv_library_path_iconv) fi fi AC_SUBST(LIBICONV) ])dnl dnl --------------------------------------------------------------------------- -dnl AM_LANGINFO_CODESET version: 4 updated: 2015/04/18 08:56:57 +dnl AM_LANGINFO_CODESET version: 6 updated: 2021/01/01 16:53:59 dnl ------------------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl codeset.m4 dnl ==================== dnl serial AM1 dnl dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include <langinfo.h>], - [char* cs = nl_langinfo(CODESET);], + [char* cs = nl_langinfo(CODESET); (void)cs], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) - if test $am_cv_langinfo_codeset = yes; then + 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 ])dnl dnl --------------------------------------------------------------------------- -dnl AM_LC_MESSAGES version: 5 updated: 2015/05/10 19:52:14 +dnl AM_LC_MESSAGES version: 6 updated: 2021/01/02 09:31:20 dnl -------------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl lcmessage.m4 dnl ==================== dnl Check whether LC_MESSAGES is available in <locale.h>. dnl Ulrich Drepper <drepper@cygnus.com>, 1995. dnl dnl This file can be copied and used freely without restrictions. It can dnl be used in projects which are not available under the GNU General Public dnl License or the GNU Library General Public License but which still want dnl to provide support for the GNU gettext 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 dnl serial 2 dnl AC_DEFUN([AM_LC_MESSAGES], -[if test $ac_cv_header_locale_h = yes; then +[if test "$ac_cv_header_locale_h" = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) - if test $am_cv_val_LC_MESSAGES = yes; then + if test "$am_cv_val_LC_MESSAGES" = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your <locale.h> file defines LC_MESSAGES.]) fi fi])dnl dnl --------------------------------------------------------------------------- -dnl AM_PATH_PROG_WITH_TEST version: 9 updated: 2015/04/15 19:08:48 +dnl AM_PATH_PROG_WITH_TEST version: 10 updated: 2021/01/02 09:31:20 dnl ---------------------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl progtest.m4 dnl ==================== dnl Search path for a program which passes the given test. dnl Ulrich Drepper <drepper@cygnus.com>, 1996. dnl dnl This file can be copied and used freely without restrictions. It can dnl be used in projects which are not available under the GNU General Public dnl License or the GNU Library General Public License but which still want dnl to provide support for the GNU gettext 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 dnl serial 2 dnl 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], [# Extract the first word of "$2", so it can be a program name with args. AC_REQUIRE([CF_PATHSEP]) 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. ;; (*) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word$ac_exeext; then + if test -f "$ac_dir/$ac_word$ac_exeext" ; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exeext" break fi fi 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 ])dnl dnl --------------------------------------------------------------------------- -dnl AM_WITH_NLS version: 29 updated: 2018/02/21 21:26:03 +dnl AM_WITH_NLS version: 31 updated: 2021/01/04 17:48:08 dnl ----------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl gettext.m4 dnl ==================== dnl Macro to add for using GNU gettext. dnl Ulrich Drepper <drepper@cygnus.com>, 1995. dnl ==================== dnl Modified to use CF_FIND_LINKAGE and CF_ADD_SEARCHPATH, to broaden the dnl range of locations searched. Retain the same cache-variable naming to dnl allow reuse with the other gettext macros -Thomas E Dickey dnl ==================== dnl dnl This file can be copied and used freely without restrictions. It can dnl be used in projects which are not available under the GNU General Public dnl License or the GNU Library General Public License but which still want dnl to provide support for the GNU gettext 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 dnl serial 10 dnl dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR], [ENABLED]). dnl If TOOLSYMBOL is specified and 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). Otherwise, 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. dnl LIBDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl ENABLED is used to control the default for the related --enable-nls, since dnl not all application developers want this feature by default, e.g., lynx. 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 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_WITH_NLS], [AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS ifelse([$4],,[ AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes)],[ AC_ARG_ENABLE(nls, [ --enable-nls use Native Language Support], USE_NLS=$enableval, USE_NLS=no)]) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no INTLLIBS= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then dnl We need to process the po/ directory. POSUB=po AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) 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 may have dnl to fall back to GNU NLS library. CATOBJEXT=NONE dnl Save these (possibly-set) variables for reference. If the user dnl overrode these to provide full pathnames, then warn if not actually dnl GNU gettext, but do not override their values. Also, if they were dnl overridden, suppress the part of the library test which prevents it dnl from finding anything other than GNU gettext. Doing this also dnl suppresses a bogus search for the intl library. cf_save_msgfmt_path="$MSGFMT" cf_save_xgettext_path="$XGETTEXT" dnl Search for GNU msgfmt in the PATH. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + ["$ac_dir/$ac_word" --statistics /dev/null >/dev/null 2>&1], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) AC_SUBST(MSGFMT) dnl Search for GNU xgettext in the PATH. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + ["$ac_dir/$ac_word" --omit-header /dev/null >/dev/null 2>&1], :) cf_save_OPTS_1="$CPPFLAGS" if test "x$cf_save_msgfmt_path" = "x$MSGFMT" && \ test "x$cf_save_xgettext_path" = "x$XGETTEXT" ; then CF_ADD_CFLAGS(-DIGNORE_MSGFMT_HACK) fi cf_save_LIBS_1="$LIBS" CF_ADD_LIBS($LIBICONV) CF_FIND_LINKAGE(CF__INTL_HEAD, CF__INTL_BODY($2), intl, cf_cv_func_gettext=yes, cf_cv_func_gettext=no) AC_MSG_CHECKING([for libintl.h and gettext()]) AC_MSG_RESULT($cf_cv_func_gettext) LIBS="$cf_save_LIBS_1" CPPFLAGS="$cf_save_OPTS_1" if test "$cf_cv_func_gettext" = yes ; then AC_DEFINE(HAVE_LIBINTL_H,1,[Define to 1 if we have libintl.h]) 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 test "$PACKAGE" != gettext; then AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) CF_ADD_INCDIR($cf_cv_header_path_intl) if test -n "$cf_cv_library_file_intl" ; then dnl If iconv() is in a separate libiconv library, then anyone dnl linking with libintl{.a,.so} also needs to link with dnl libiconv. INTLLIBS="$cf_cv_library_file_intl $LIBICONV" CF_ADD_LIBDIR($cf_cv_library_path_intl,INTLLIBS) fi gt_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) LIBS="$gt_save_LIBS" CATOBJEXT=.gmo fi elif test -z "$MSGFMT" || test -z "$XGETTEXT" ; then AC_MSG_WARN(disabling NLS feature) sed -e /ENABLE_NLS/d confdefs.h >confdefs.tmp mv confdefs.tmp confdefs.h ALL_LINGUAS= CATOBJEXT=.ignored MSGFMT=":" GMSGFMT=":" XGETTEXT=":" POSUB= BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no USE_NLS=no nls_cv_use_gnu_gettext=no fi if test "$CATOBJEXT" = "NONE"; then dnl GNU gettext is not found in the C library. dnl Fall back on GNU gettext library. nls_cv_use_gnu_gettext=maybe fi fi if test "$nls_cv_use_gnu_gettext" != "no"; then CATOBJEXT=.gmo - if test -f $srcdir/intl/libintl.h ; then + if test -f "$srcdir/intl/libintl.h" ; then dnl Mark actions used to generate GNU NLS library. INTLOBJS="\$(GETTOBJS)" BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` elif test "$nls_cv_use_gnu_gettext" = "yes"; then nls_cv_use_gnu_gettext=no AC_MSG_WARN(no NLS library is packaged with this application) fi fi dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then : ; else AC_MSG_WARN([found msgfmt program is not GNU msgfmt]) fi fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then : ; else AC_MSG_WARN([found xgettext program is not GNU xgettext]) fi fi fi if test "$XGETTEXT" != ":"; then AC_OUTPUT_COMMANDS( [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.inn. case "$ac_file" in (*/[Mm]akefile.in) # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir="`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`" ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - ac_base=`basename $ac_file .in` + ac_dots="`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`" + ac_base="`basename $ac_file .in`" # 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 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" sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/$ac_base" || echo "creating $ac_dir/$ac_base" sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/$ac_base.in" > "$ac_dir/$ac_base" fi ;; esac done]) 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; then BUILD_INCLUDED_LIBINTL=yes fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. if test "$nls_cv_use_gnu_gettext" = "yes"; then AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in + case "$ac_prog_version" in ('') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; (1.2[6-9]*|1.[3-9][0-9]*|[2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; (*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi - if test $ac_verc_fail = yes; then + if test "$ac_verc_fail" = yes; then INTLBISON=: fi fi dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.in. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(GMOFILES) AC_SUBST(INTLLIBS) AC_SUBST(INTLOBJS) AC_SUBST(POFILES) AC_SUBST(POSUB) 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 dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49 dnl ------------------ dnl Conditionally generate script according to whether we're using a given autoconf. dnl dnl $1 = version to compare against dnl $2 = code to use if AC_ACVERSION is at least as high as $1. dnl $3 = code to use if AC_ACVERSION is older than $1. define([CF_ACVERSION_CHECK], [ ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl ifdef([m4_version_compare], [m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])], [CF_ACVERSION_COMPARE( AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53 dnl -------------------- dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1, dnl MAJOR2, MINOR2, TERNARY2, dnl PRINTABLE2, not FOUND, FOUND) define([CF_ACVERSION_COMPARE], [ifelse(builtin([eval], [$2 < $5]), 1, [ifelse([$8], , ,[$8])], [ifelse([$9], , ,[$9])])])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_CFLAGS version: 13 updated: 2017/02/25 18:57:40 +dnl CF_ADD_CFLAGS version: 15 updated: 2020/12/31 10:54:15 dnl ------------- dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS -dnl The second parameter if given makes this macro verbose. +dnl $1 = flags to add +dnl $2 = if given makes this macro verbose. dnl dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS, dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily dnl confused by the quotes (which require backslashes to keep them usable). AC_DEFUN([CF_ADD_CFLAGS], [ cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $1 do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) continue elif test "${cf_tst_cflags}" = "\"'" ; then CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags) ;; esac CF_APPEND_TEXT(cf_new_cppflags,$cf_add_cflags) ;; esac ;; (*) CF_APPEND_TEXT(cf_new_cflags,$cf_add_cflags) ;; esac ;; (yes) CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[[^"]]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)]) CF_APPEND_TEXT(CFLAGS,$cf_new_cflags) fi if test -n "$cf_new_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)]) CF_APPEND_TEXT(CPPFLAGS,$cf_new_cppflags) fi if test -n "$cf_new_extra_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)]) CF_APPEND_TEXT(EXTRA_CPPFLAGS,$cf_new_extra_cppflags) fi AC_SUBST(EXTRA_CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_INCDIR version: 15 updated: 2018/06/20 20:23:13 +dnl CF_ADD_INCDIR version: 16 updated: 2020/12/31 20:19:42 dnl ------------- dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's dnl redundant. We don't normally need to add -I/usr/local/include for gcc, dnl but old versions (and some misinstalled ones) need that. To make things dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to dnl the include-path). AC_DEFUN([CF_ADD_INCDIR], [ if test -n "$1" ; then for cf_add_incdir in $1 do - while test $cf_add_incdir != /usr/include + while test "$cf_add_incdir" != /usr/include do - if test -d $cf_add_incdir + if test -d "$cf_add_incdir" then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CF_APPEND_TEXT(CPPFLAGS,-I$cf_add_incdir) AC_TRY_COMPILE([#include <stdio.h>], [printf("Hello")], [], [cf_have_incdir=yes]) CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then CF_VERBOSE(adding $cf_add_incdir to include-path) ifelse([$2],,CPPFLAGS,[$2])="$ifelse([$2],,CPPFLAGS,[$2]) -I$cf_add_incdir" - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIB version: 2 updated: 2010/06/02 05:03:05 dnl ---------- dnl Add a library, used to enforce consistency. dnl dnl $1 = library to add, without the "-l" dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_LIBDIR version: 10 updated: 2015/04/18 08:56:57 +dnl CF_ADD_LIBDIR version: 11 updated: 2020/12/31 20:19:42 dnl ------------- dnl Adds to the library-path dnl dnl Some machines have trouble with multiple -L options. dnl dnl $1 is the (list of) directory(s) to add dnl $2 is the optional name of the variable to update (default LDFLAGS) dnl AC_DEFUN([CF_ADD_LIBDIR], [ if test -n "$1" ; then for cf_add_libdir in $1 do - if test $cf_add_libdir = /usr/lib ; then + if test "$cf_add_libdir" = /usr/lib ; then : - elif test -d $cf_add_libdir + elif test -d "$cf_add_libdir" then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then CF_VERBOSE(adding $cf_add_libdir to library-path) ifelse([$2],,LDFLAGS,[$2])="-L$cf_add_libdir $ifelse([$2],,LDFLAGS,[$2])" fi fi done fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_LIBS version: 2 updated: 2014/07/13 14:33:27 +dnl CF_ADD_LIBS version: 3 updated: 2019/11/02 16:47:33 dnl ----------- dnl Add one or more libraries, used to enforce consistency. Libraries are dnl prepended to an existing list, since their dependencies are assumed to dnl already exist in the list. dnl dnl $1 = libraries to add, with the "-l", etc. dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIBS],[ -cf_add_libs="$1" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in [$]ifelse($2,,LIBS,[$2]) -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="[$]ifelse($2,,LIBS,[$2])" +# reverse order +cf_add_0lib= +for cf_add_1lib in $1; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done ifelse($2,,LIBS,[$2])="$cf_add_libs" ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIB_AFTER version: 3 updated: 2013/07/09 21:27:22 dnl ---------------- dnl Add a given library after another, e.g., following the one it satisfies a dnl dependency for. dnl dnl $1 = the first library dnl $2 = its dependency AC_DEFUN([CF_ADD_LIB_AFTER],[ CF_VERBOSE(...before $LIBS) LIBS=`echo "$LIBS" | sed -e "s/[[ ]][[ ]]*/ /g" -e "s%$1 %$1 $2 %" -e 's% % %g'` CF_VERBOSE(...after $LIBS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_OPTIONAL_PATH version: 3 updated: 2015/05/10 19:52:14 dnl -------------------- dnl Add an optional search-path to the compile/link variables. dnl See CF_WITH_PATH dnl dnl $1 = shell variable containing the result of --with-XXX=[DIR] dnl $2 = module to look for. AC_DEFUN([CF_ADD_OPTIONAL_PATH],[ case "$1" in (no) ;; (yes) ;; (*) CF_ADD_SEARCHPATH([$1], [AC_MSG_ERROR(cannot find $2 under $1)]) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_SEARCHPATH version: 5 updated: 2009/01/11 20:40:21 +dnl CF_ADD_SEARCHPATH version: 6 updated: 2020/12/31 20:19:42 dnl ----------------- dnl Set $CPPFLAGS and $LDFLAGS with the directories given via the parameter. dnl They can be either the common root of include- and lib-directories, or the dnl lib-directory (to allow for things like lib64 directories). dnl See also CF_FIND_LINKAGE. dnl dnl $1 is the list of colon-separated directory names to search. dnl $2 is the action to take if a parameter does not yield a directory. AC_DEFUN([CF_ADD_SEARCHPATH], [ AC_REQUIRE([CF_PATHSEP]) for cf_searchpath in `echo "$1" | tr $PATH_SEPARATOR ' '`; do - if test -d $cf_searchpath/include; then + if test -d "$cf_searchpath/include" ; then CF_ADD_INCDIR($cf_searchpath/include) - elif test -d $cf_searchpath/../include ; then + elif test -d "$cf_searchpath/../include" ; then CF_ADD_INCDIR($cf_searchpath/../include) ifelse([$2],,,[else $2]) fi - if test -d $cf_searchpath/lib; then + if test -d "$cf_searchpath/lib" ; then CF_ADD_LIBDIR($cf_searchpath/lib) - elif test -d $cf_searchpath ; then + elif test -d "$cf_searchpath" ; then CF_ADD_LIBDIR($cf_searchpath) ifelse([$2],,,[else $2]) fi done ]) dnl --------------------------------------------------------------------------- -dnl CF_ADD_SUBDIR_PATH version: 4 updated: 2013/10/08 17:47:05 +dnl CF_ADD_SUBDIR_PATH version: 5 updated: 2020/12/31 20:19:42 dnl ------------------ dnl Append to a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib dnl $4 = the directory under which we will test for subdirectories dnl $5 = a directory that we do not want $4 to match AC_DEFUN([CF_ADD_SUBDIR_PATH], [ test "x$4" != "x$5" && \ test -d "$4" && \ -ifelse([$5],NONE,,[(test -z "$5" || test x$5 = xNONE || test "x$4" != "x$5") &&]) { +ifelse([$5],NONE,,[{ test -z "$5" || test "x$5" = xNONE || test "x$4" != "x$5"; } &&]) { test -n "$verbose" && echo " ... testing for $3-directories under $4" - test -d $4/$3 && $1="[$]$1 $4/$3" - test -d $4/$3/$2 && $1="[$]$1 $4/$3/$2" - test -d $4/$3/$2/$3 && $1="[$]$1 $4/$3/$2/$3" - test -d $4/$2/$3 && $1="[$]$1 $4/$2/$3" - test -d $4/$2/$3/$2 && $1="[$]$1 $4/$2/$3/$2" + test -d "$4/$3" && $1="[$]$1 $4/$3" + test -d "$4/$3/$2" && $1="[$]$1 $4/$3/$2" + test -d "$4/$3/$2/$3" && $1="[$]$1 $4/$3/$2/$3" + test -d "$4/$2/$3" && $1="[$]$1 $4/$2/$3" + test -d "$4/$2/$3/$2" && $1="[$]$1 $4/$2/$3/$2" } ])dnl dnl --------------------------------------------------------------------------- dnl CF_APPEND_TEXT version: 1 updated: 2017/02/25 18:58:55 dnl -------------- dnl use this macro for appending text without introducing an extra blank at dnl the beginning define([CF_APPEND_TEXT], [ test -n "[$]$1" && $1="[$]$1 " $1="[$]{$1}$2" ])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31 dnl -------------- dnl Allow user to disable a normally-on option. AC_DEFUN([CF_ARG_DISABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl dnl --------------------------------------------------------------------------- +dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31 +dnl ------------- +dnl Allow user to enable a normally-off option. +AC_DEFUN([CF_ARG_ENABLE], +[CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl +dnl --------------------------------------------------------------------------- dnl CF_ARG_MSG_ENABLE version: 2 updated: 2000/07/29 19:32:03 dnl ----------------- dnl Verbose form of AC_ARG_ENABLE: dnl dnl Parameters: dnl $1 = message dnl $2 = option name dnl $3 = help-string dnl $4 = action to perform if option is enabled dnl $5 = action if perform if option is disabled dnl $6 = default option value (either 'yes' or 'no') AC_DEFUN([CF_ARG_MSG_ENABLE],[ AC_MSG_CHECKING($1) AC_ARG_ENABLE($2,[$3],,enableval=ifelse($6,,no,$6)) AC_MSG_RESULT($enableval) if test "$enableval" != no ; then ifelse($4,,[ :],$4) else ifelse($5,,[ :],$5) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14 dnl ------------- dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus dnl values. dnl dnl Parameters: dnl $1 = option name dnl $2 = help-string dnl $3 = action to perform if option is not default dnl $4 = action if perform if option is default dnl $5 = default option value (either 'yes' or 'no') AC_DEFUN([CF_ARG_OPTION], [AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes) if test "$enableval" != "$5" ; then ifelse([$3],,[ :]dnl ,[ $3]) ifelse([$4],,,[ else $4]) fi],[enableval=$5 ifelse([$4],,,[ $4 ])dnl ])])dnl dnl --------------------------------------------------------------------------- -dnl CF_AR_FLAGS version: 6 updated: 2015/10/10 15:25:05 +dnl CF_AR_FLAGS version: 9 updated: 2021/01/01 13:31:04 dnl ----------- dnl Check for suitable "ar" (archiver) options for updating an archive. dnl dnl In particular, handle some obsolete cases where the "-" might be omitted, dnl as well as a workaround for breakage of make's archive rules by the GNU dnl binutils "ar" program. AC_DEFUN([CF_AR_FLAGS],[ AC_REQUIRE([CF_PROG_AR]) AC_CACHE_CHECK(for options to update archives, cf_cv_ar_flags,[ - cf_cv_ar_flags=unknown - for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv - do + case "$cf_cv_system_name" in + (*-msvc*) + cf_cv_ar_flags='' + cat >mk_static_lib.sh <<-EOF + #!$SHELL + MSVC_BIN="[$]AR" + out="\[$]1" + shift + exec \[$]MSVC_BIN -out:"\[$]out" \[$]@ + EOF + chmod +x mk_static_lib.sh + AR=`pwd`/mk_static_lib.sh + ;; + (*) + cf_cv_ar_flags=unknown + for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv + do - # check if $ARFLAGS already contains this choice - if test "x$ARFLAGS" != "x" ; then - cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` - if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then - cf_cv_ar_flags= - break + # check if $ARFLAGS already contains this choice + if test "x$ARFLAGS" != "x" ; then + cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` + if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then + cf_cv_ar_flags= + break + fi fi - fi - rm -f conftest.$ac_cv_objext - rm -f conftest.a + rm -f "conftest.$ac_cv_objext" + rm -f conftest.a - cat >conftest.$ac_ext <<EOF + cat >"conftest.$ac_ext" <<EOF #line __oline__ "configure" int testdata[[3]] = { 123, 456, 789 }; EOF - if AC_TRY_EVAL(ac_compile) ; then - echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&AC_FD_CC - $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&AC_FD_CC 1>/dev/null - if test -f conftest.a ; then - cf_cv_ar_flags=$cf_ar_flags + if AC_TRY_EVAL(ac_compile) ; then + echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&AC_FD_CC + $AR $ARFLAGS "$cf_ar_flags" conftest.a "conftest.$ac_cv_objext" 2>&AC_FD_CC 1>/dev/null + if test -f conftest.a ; then + cf_cv_ar_flags="$cf_ar_flags" + break + fi + else + CF_VERBOSE(cannot compile test-program) break fi - else - CF_VERBOSE(cannot compile test-program) - break - fi - done - rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext + done + rm -f conftest.a "conftest.$ac_ext" "conftest.$ac_cv_objext" + ;; + esac ]) if test -n "$ARFLAGS" ; then if test -n "$cf_cv_ar_flags" ; then ARFLAGS="$ARFLAGS $cf_cv_ar_flags" fi else ARFLAGS=$cf_cv_ar_flags fi AC_SUBST(ARFLAGS) ]) dnl --------------------------------------------------------------------------- -dnl CF_BUNDLED_INTL version: 19 updated: 2018/06/20 20:23:13 +dnl CF_BUNDLED_INTL version: 20 updated: 2021/01/02 09:31:20 dnl --------------- dnl Top-level macro for configuring an application with a bundled copy of dnl the intl and po directories for gettext. dnl dnl $1 specifies either Makefile or makefile, defaulting to the former. dnl $2 if nonempty sets the option to --enable-nls rather than to --disable-nls dnl dnl Sets variables which can be used to substitute in makefiles: dnl GT_YES - "#" comment unless building intl library, otherwise empty dnl GT_NO - "#" comment if building intl library, otherwise empty dnl INTLDIR_MAKE - to make ./intl directory dnl MSG_DIR_MAKE - to make ./po directory dnl SUB_MAKEFILE - list of makefiles in ./intl, ./po directories dnl dnl Defines: dnl HAVE_LIBGETTEXT_H if we're using ./intl dnl NLS_TEXTDOMAIN dnl dnl Environment: dnl ALL_LINGUAS if set, lists the root names of the ".po" files. dnl CONFIG_H assumed to be "config.h" dnl PACKAGE must be set, used as default for textdomain dnl VERSION may be set, otherwise extract from "VERSION" file. dnl AC_DEFUN([CF_BUNDLED_INTL],[ cf_makefile=ifelse($1,,Makefile,$1) dnl Set of available languages (based on source distribution). Note that dnl setting $LINGUAS overrides $ALL_LINGUAS. Some environments set $LINGUAS dnl rather than $LC_ALL -test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'` +test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d "$srcdir/po" && cd "$srcdir/po" && echo *.po|sed -e 's/\.po//g' -e 's/*//'` # Allow override of "config.h" definition: : ${CONFIG_H:=config.h} AC_SUBST(CONFIG_H) if test -z "$PACKAGE" ; then AC_MSG_ERROR([[CF_BUNDLED_INTL] used without setting [PACKAGE] variable]) fi if test -z "$VERSION" ; then -if test -f $srcdir/VERSION ; then - VERSION=`sed -e '2,$d' $srcdir/VERSION|cut -f1` +if test -f "$srcdir/VERSION" ; then + VERSION=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1` else VERSION=unknown fi fi AC_SUBST(VERSION) AM_GNU_GETTEXT(,,,[$2]) if test "$USE_NLS" = yes ; then AC_ARG_WITH(textdomain, [ --with-textdomain=PKG NLS text-domain (default is package name)], [NLS_TEXTDOMAIN=$withval], [NLS_TEXTDOMAIN=$PACKAGE]) AC_DEFINE_UNQUOTED(NLS_TEXTDOMAIN,"$NLS_TEXTDOMAIN",[Define to the nls textdomain value]) AC_SUBST(NLS_TEXTDOMAIN) fi INTLDIR_MAKE= MSG_DIR_MAKE= SUB_MAKEFILE= dnl this updates SUB_MAKEFILE and MSG_DIR_MAKE: CF_OUR_MESSAGES($1) if test "$USE_INCLUDED_LIBINTL" = yes ; then if test "$nls_cv_force_use_gnu_gettext" = yes ; then : elif test "$nls_cv_use_gnu_gettext" = yes ; then : else INTLDIR_MAKE="#" fi if test -z "$INTLDIR_MAKE"; then AC_DEFINE(HAVE_LIBGETTEXT_H,1,[Define to 1 if we have libgettext.h]) for cf_makefile in \ $srcdir/intl/Makefile.in \ $srcdir/intl/makefile.in do if test -f "$cf_makefile" ; then SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}" break fi done fi else INTLDIR_MAKE="#" if test "$USE_NLS" = yes ; then AC_CHECK_HEADERS(libintl.h) fi fi if test -z "$INTLDIR_MAKE" ; then CF_APPEND_TEXT(CPPFLAGS,-I../intl) fi dnl FIXME: we use this in lynx (the alternative is a spurious dependency upon dnl GNU make) if test "$BUILD_INCLUDED_LIBINTL" = yes ; then GT_YES="#" GT_NO= else GT_YES= GT_NO="#" fi AC_SUBST(INTLDIR_MAKE) AC_SUBST(MSG_DIR_MAKE) AC_SUBST(GT_YES) AC_SUBST(GT_NO) dnl FIXME: the underlying AM_GNU_GETTEXT macro either needs some fixes or a dnl little documentation. It doesn't define anything so that we can ifdef our dnl own code, except ENABLE_NLS, which is too vague to be of any use. if test "$USE_INCLUDED_LIBINTL" = yes ; then if test "$nls_cv_force_use_gnu_gettext" = yes ; then AC_DEFINE(HAVE_GETTEXT,1,[Define to 1 if we have gettext function]) elif test "$nls_cv_use_gnu_gettext" = yes ; then AC_DEFINE(HAVE_GETTEXT,1,[Define to 1 if we have gettext function]) fi if test -n "$nls_cv_header_intl" ; then AC_DEFINE(HAVE_LIBINTL_H,1,[Define to 1 if we have header-file for libintl]) fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CC_ENV_FLAGS version: 8 updated: 2017/09/23 08:50:24 +dnl CF_CC_ENV_FLAGS version: 10 updated: 2020/12/31 18:40:20 dnl --------------- dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content dnl into CC. This will not help with broken scripts that wrap the compiler dnl with options, but eliminates a more common category of user confusion. dnl dnl In particular, it addresses the problem of being able to run the C dnl preprocessor in a consistent manner. dnl dnl Caveat: this also disallows blanks in the pathname for the compiler, but dnl the nuisance of having inconsistent settings for compiler and preprocessor dnl outweighs that limitation. AC_DEFUN([CF_CC_ENV_FLAGS], [ # This should have been defined by AC_PROG_CC -: ${CC:=cc} +: "${CC:=cc}" + +AC_MSG_CHECKING(\$CFLAGS variable) +case "x$CFLAGS" in +(*-[[IUD]]*) + AC_MSG_RESULT(broken) + AC_MSG_WARN(your environment uses the CFLAGS variable to hold CPPFLAGS options) + cf_flags="$CFLAGS" + CFLAGS= + for cf_arg in $cf_flags + do + CF_ADD_CFLAGS($cf_arg) + done + ;; +(*) + AC_MSG_RESULT(ok) + ;; +esac AC_MSG_CHECKING(\$CC variable) case "$CC" in (*[[\ \ ]]-*) AC_MSG_RESULT(broken) - AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options) + AC_MSG_WARN(your environment uses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[[ ]]* / /g' -e 's/[[ ]]*[[ ]]-[[^ ]].*//'` cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", [substr]([$]0,1+length(prog))); }'` CC="$cf_prog" for cf_arg in $cf_flags do case "x$cf_arg" in (x-[[IUDfgOW]]*) CF_ADD_CFLAGS($cf_arg) ;; (*) CC="$CC $cf_arg" ;; esac done CF_VERBOSE(resulting CC: '$CC') CF_VERBOSE(resulting CFLAGS: '$CFLAGS') CF_VERBOSE(resulting CPPFLAGS: '$CPPFLAGS') ;; (*) AC_MSG_RESULT(ok) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03 +dnl CF_CHECK_CACHE version: 13 updated: 2020/12/31 10:54:15 dnl -------------- dnl Check if we're accidentally using a cache from a different machine. dnl Derive the system name, as a check for reusing the autoconf cache. dnl dnl If we've packaged config.guess and config.sub, run that (since it does a dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM dnl which is useful in cross-compiles. dnl dnl Note: we would use $ac_config_sub, but that is one of the places where dnl autoconf 2.5x broke compatibility with autoconf 2.13 AC_DEFUN([CF_CHECK_CACHE], [ -if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then +if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then ifelse([$1],,[AC_CANONICAL_HOST],[$1]) system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.]) AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"]) test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name) if test ".$system_name" != ".$cf_cv_system_name" ; then AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)) AC_MSG_ERROR("Please remove config.cache and try again.") fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CHECK_CFLAGS version: 3 updated: 2014/07/22 05:32:57 +dnl CF_CHECK_CFLAGS version: 4 updated: 2021/01/02 19:22:58 dnl --------------- dnl Conditionally add to $CFLAGS and $CPPFLAGS values which are derived from dnl a build-configuration such as imake. These have the pitfall that they dnl often contain compiler-specific options which we cannot use, mixed with dnl preprocessor options that we usually can. AC_DEFUN([CF_CHECK_CFLAGS], [ CF_VERBOSE(checking additions to CFLAGS) cf_check_cflags="$CFLAGS" cf_check_cppflags="$CPPFLAGS" CF_ADD_CFLAGS($1,yes) if test "x$cf_check_cflags" != "x$CFLAGS" ; then AC_TRY_LINK([#include <stdio.h>],[printf("Hello world");],, [CF_VERBOSE(test-compile failed. Undoing change to \$CFLAGS) if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then CF_VERBOSE(but keeping change to \$CPPFLAGS) fi - CFLAGS="$cf_check_flags"]) + CFLAGS="$cf_check_cflags"]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09 dnl ------------------------ dnl Show the version of libtool dnl dnl Save the version in a cache variable - this is not entirely a good thing, dnl but the version string from libtool is very ugly, and for bug reports it dnl might be useful to have the original string. AC_DEFUN([CF_CHECK_LIBTOOL_VERSION],[ if test -n "$LIBTOOL" && test "$LIBTOOL" != none then AC_MSG_CHECKING(version of $LIBTOOL) CF_LIBTOOL_VERSION AC_MSG_RESULT($cf_cv_libtool_version) if test -z "$cf_cv_libtool_version" ; then AC_MSG_ERROR(This is not GNU libtool) fi else AC_MSG_ERROR(GNU libtool has not been found) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35 +dnl CF_CLANG_COMPILER version: 8 updated: 2021/01/01 13:31:04 dnl ----------------- dnl Check if the given compiler is really clang. clang's C driver defines dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does dnl not ignore some gcc options. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = CLANG_COMPILER (default) dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_CLANG_COMPILER],[ ifelse([$2],,CLANG_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" - ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments" AC_TRY_COMPILE([],[ #ifdef __clang__ #else make an error #endif ],[ifelse([$2],,CLANG_COMPILER,[$2])=yes -cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2])) fi + +CLANG_VERSION=none + +if test "x$ifelse([$2],,CLANG_COMPILER,[$2])" = "xyes" ; then + case "$CC" in + (c[[1-9]][[0-9]]|*/c[[1-9]][[0-9]]) + AC_MSG_WARN(replacing broken compiler alias $CC) + CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`" + CC=clang + ;; + esac + + AC_MSG_CHECKING(version of $CC) + CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" + test -z "$CLANG_VERSION" && CLANG_VERSION=unknown + AC_MSG_RESULT($CLANG_VERSION) + + for cf_clang_opt in \ + -Qunused-arguments \ + -Wno-error=implicit-function-declaration + do + AC_MSG_CHECKING(if option $cf_clang_opt works) + cf_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cf_clang_opt" + AC_TRY_LINK([ + #include <stdio.h>],[ + printf("hello!\\n");],[ + cf_clang_optok=yes],[ + cf_clang_optok=no]) + AC_MSG_RESULT($cf_clang_optok) + CFLAGS="$cf_save_CFLAGS" + if test "$cf_clang_optok" = yes; then + CF_VERBOSE(adding option $cf_clang_opt) + CF_APPEND_TEXT(CFLAGS,$cf_clang_opt) + fi + done +fi +]) +dnl --------------------------------------------------------------------------- +dnl CF_CONST_X_STRING version: 6 updated: 2021/01/01 13:31:04 +dnl ----------------- +dnl The X11R4-X11R6 Xt specification uses an ambiguous String type for most +dnl character-strings. +dnl +dnl It is ambiguous because the specification accommodated the pre-ANSI +dnl compilers bundled by more than one vendor in lieu of providing a standard C +dnl compiler other than by costly add-ons. Because of this, the specification +dnl did not take into account the use of const for telling the compiler that +dnl string literals would be in readonly memory. +dnl +dnl As a workaround, one could (starting with X11R5) define XTSTRINGDEFINES, to +dnl let the compiler decide how to represent Xt's strings which were #define'd. +dnl That does not solve the problem of using the block of Xt's strings which +dnl are compiled into the library (and is less efficient than one might want). +dnl +dnl Xt specification 7 introduces the _CONST_X_STRING symbol which is used both +dnl when compiling the library and compiling using the library, to tell the +dnl compiler that String is const. +AC_DEFUN([CF_CONST_X_STRING], +[ +AC_REQUIRE([AC_PATH_XTRA]) + +CF_SAVE_XTRA_FLAGS([CF_CONST_X_STRING]) + +AC_TRY_COMPILE( +[ +#include <stdlib.h> +#include <X11/Intrinsic.h> +], +[String foo = malloc(1); (void)foo],[ + +AC_CACHE_CHECK(for X11/Xt const-feature,cf_cv_const_x_string,[ + AC_TRY_COMPILE( + [ +#define _CONST_X_STRING /* X11R7.8 (perhaps) */ +#undef XTSTRINGDEFINES /* X11R5 and later */ +#include <stdlib.h> +#include <X11/Intrinsic.h> + ],[String foo = malloc(1); *foo = 0],[ + cf_cv_const_x_string=no + ],[ + cf_cv_const_x_string=yes + ]) ]) + +CF_RESTORE_XTRA_FLAGS([CF_CONST_X_STRING]) + +case "$cf_cv_const_x_string" in +(no) + CF_APPEND_TEXT(CPPFLAGS,-DXTSTRINGDEFINES) + ;; +(*) + CF_APPEND_TEXT(CPPFLAGS,-D_CONST_X_STRING) + ;; +esac + +]) +])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_CHTYPE version: 8 updated: 2012/10/06 08:57:51 +dnl CF_CURSES_CHTYPE version: 11 updated: 2021/01/02 09:31:20 dnl ---------------- dnl Test if curses defines 'chtype' (usually a 'long' type for SysV curses). AC_DEFUN([CF_CURSES_CHTYPE], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for chtype typedef,cf_cv_chtype_decl,[ AC_TRY_COMPILE([#include <${cf_cv_ncurses_header:-curses.h}>], - [chtype foo], + [chtype foo; (void)foo], [cf_cv_chtype_decl=yes], [cf_cv_chtype_decl=no])]) -if test $cf_cv_chtype_decl = yes ; then +if test "$cf_cv_chtype_decl" = yes ; then AC_DEFINE(HAVE_TYPE_CHTYPE,1,[Define to 1 if chtype is declared]) AC_CACHE_CHECK(if chtype is scalar or struct,cf_cv_chtype_type,[ AC_TRY_COMPILE([#include <${cf_cv_ncurses_header:-curses.h}>], - [chtype foo; long x = foo], + [static chtype foo; long x = foo; (void)x], [cf_cv_chtype_type=scalar], [cf_cv_chtype_type=struct])]) - if test $cf_cv_chtype_type = scalar ; then + if test "$cf_cv_chtype_type" = scalar ; then AC_DEFINE(TYPE_CHTYPE_IS_SCALAR,1,[Define to 1 if chtype is a scaler/integer]) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_CONFIG version: 2 updated: 2006/10/29 11:06:27 dnl ---------------- dnl Tie together the configure-script macros for curses. It may be ncurses, dnl but unless asked, we do not make a special search for ncurses. However, dnl still check for the ncurses version number, for use in other macros. AC_DEFUN([CF_CURSES_CONFIG], [ CF_CURSES_CPPFLAGS CF_NCURSES_VERSION CF_CURSES_LIBS ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_CPPFLAGS version: 13 updated: 2018/06/20 20:23:13 +dnl CF_CURSES_CPPFLAGS version: 14 updated: 2021/01/02 09:31:20 dnl ------------------ dnl Look for the curses headers. AC_DEFUN([CF_CURSES_CPPFLAGS],[ AC_CACHE_CHECK(for extra include directories,cf_cv_curses_incdir,[ cf_cv_curses_incdir=no -case $host_os in +case "$host_os" in (hpux10.*) if test "x$cf_cv_screen" = "xcurses_colr" then test -d /usr/include/curses_colr && \ cf_cv_curses_incdir="-I/usr/include/curses_colr" fi ;; (sunos3*|sunos4*) if test "x$cf_cv_screen" = "xcurses_5lib" then test -d /usr/5lib && \ test -d /usr/5include && \ cf_cv_curses_incdir="-I/usr/5include" fi ;; esac ]) if test "$cf_cv_curses_incdir" != no then CF_APPEND_TEXT(CPPFLAGS,$cf_cv_curses_incdir) fi CF_CURSES_HEADER CF_TERM_HEADER ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_FUNCS version: 19 updated: 2018/01/03 04:47:33 +dnl CF_CURSES_EXIT version: 1 updated: 2020/03/26 19:15:16 +dnl -------------- +dnl Check for ncurses memory-leak/debug feature. Starting with ncurses 6.2, +dnl the curses_exit() function is always present, simplifying linkage changes +dnl when switching to/from a debug-library. +AC_DEFUN([CF_CURSES_EXIT], +[ +CF_CURSES_FUNCS(\ +curses_exit \ +_nc_free_and_exit \ +) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_FUNCS version: 20 updated: 2020/12/31 20:19:42 dnl --------------- dnl Curses-functions are a little complicated, since a lot of them are macros. AC_DEFUN([CF_CURSES_FUNCS], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_REQUIRE([CF_XOPEN_CURSES]) AC_REQUIRE([CF_CURSES_TERM_H]) AC_REQUIRE([CF_CURSES_UNCTRL_H]) for cf_func in $1 do CF_UPPER(cf_tr_func,$cf_func) AC_MSG_CHECKING(for ${cf_func}) CF_MSG_LOG(${cf_func}) AC_CACHE_VAL(cf_cv_func_$cf_func,[ eval cf_result='$ac_cv_func_'$cf_func if test ".$cf_result" != ".no"; then AC_TRY_LINK(CF__CURSES_HEAD, [ #ifndef ${cf_func} long foo = (long)(&${cf_func}); -fprintf(stderr, "testing linkage of $cf_func:%p\n", (void *)foo); +fprintf(stderr, "testing linkage of $cf_func:%p\\n", (void *)foo); if (foo + 1234L > 5678L) ${cf_cv_main_return:-return}(foo != 0); #endif ], [cf_result=yes], [cf_result=no]) fi - eval 'cf_cv_func_'$cf_func'=$cf_result' + eval 'cf_cv_func_'$cf_func'="$cf_result"' ]) # use the computed/retrieved cache-value: eval 'cf_result=$cf_cv_func_'$cf_func AC_MSG_RESULT($cf_result) - if test $cf_result != no; then + if test "$cf_result" != no; then AC_DEFINE_UNQUOTED(HAVE_${cf_tr_func}) fi done ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_HEADER version: 5 updated: 2015/04/23 20:35:30 dnl ---------------- dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common dnl variations of ncurses' installs. dnl dnl $1 = ncurses when looking for ncurses, or is empty AC_DEFUN([CF_CURSES_HEADER],[ AC_CACHE_CHECK(if we have identified curses headers,cf_cv_ncurses_header,[ cf_cv_ncurses_header=none for cf_header in \ ncurses.h ifelse($1,,,[$1/ncurses.h]) \ curses.h ifelse($1,,,[$1/curses.h]) ifelse($1,,[ncurses/ncurses.h ncurses/curses.h]) do AC_TRY_COMPILE([#include <${cf_header}>], [initscr(); tgoto("?", 0,0)], [cf_cv_ncurses_header=$cf_header; break],[]) done ]) if test "$cf_cv_ncurses_header" = none ; then AC_MSG_ERROR(No curses header-files found) fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. AC_CHECK_HEADERS($cf_cv_ncurses_header) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_LIBS version: 42 updated: 2018/06/20 20:23:13 +dnl CF_CURSES_LIBS version: 44 updated: 2021/01/02 09:31:20 dnl -------------- dnl Look for the curses libraries. Older curses implementations may require dnl termcap/termlib to be linked as well. Call CF_CURSES_CPPFLAGS first. AC_DEFUN([CF_CURSES_LIBS],[ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_MSG_CHECKING(if we have identified curses libraries) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); tgoto("?", 0,0)], cf_result=yes, cf_result=no) AC_MSG_RESULT($cf_result) if test "$cf_result" = no ; then -case $host_os in +case "$host_os" in (freebsd*) AC_CHECK_LIB(mytinfo,tgoto,[CF_ADD_LIBS(-lmytinfo)]) ;; (hpux10.*) # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr # next (1998), and xcurses "newer" (2000). There is no header file for # Hcurses; the subdirectory curses_colr has the headers (curses.h and # term.h) for cur_colr if test "x$cf_cv_screen" = "xcurses_colr" then AC_CHECK_LIB(cur_colr,initscr,[ CF_ADD_LIBS(-lcur_colr) ac_cv_func_initscr=yes ],[ AC_CHECK_LIB(Hcurses,initscr,[ # HP's header uses __HP_CURSES, but user claims _HP_CURSES. CF_ADD_LIBS(-lHcurses) CF_APPEND_TEXT(CPPFLAGS,-D__HP_CURSES -D_HP_CURSES) ac_cv_func_initscr=yes ])]) fi ;; (linux*) case `arch 2>/dev/null` in (x86_64) if test -d /lib64 then CF_ADD_LIBDIR(/lib64) else CF_ADD_LIBDIR(/lib) fi ;; (*) CF_ADD_LIBDIR(/lib) ;; esac ;; (sunos3*|sunos4*) if test "x$cf_cv_screen" = "xcurses_5lib" then if test -d /usr/5lib ; then CF_ADD_LIBDIR(/usr/5lib) CF_ADD_LIBS(-lcurses -ltermcap) fi fi ac_cv_func_initscr=yes ;; esac if test ".$ac_cv_func_initscr" != .yes ; then cf_save_LIBS="$LIBS" if test ".${cf_cv_ncurses_version:-no}" != .no then cf_check_list="ncurses curses cursesX" else cf_check_list="cursesX curses ncurses" fi # Check for library containing tgoto. Do this before curses library # because it may be needed to link the test-case for initscr. if test "x$cf_term_lib" = x then AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[ for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown do AC_CHECK_LIB($cf_term_lib,tgoto,[ - : ${cf_nculib_root:=$cf_term_lib} + : "${cf_nculib_root:=$cf_term_lib}" break ]) done ]) fi # Check for library containing initscr test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" if test "x$cf_curs_lib" = x then for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown do LIBS="-l$cf_curs_lib $cf_save_LIBS" if test "$cf_term_lib" = unknown || test "$cf_term_lib" = "$cf_curs_lib" ; then AC_MSG_CHECKING(if we can link with $cf_curs_lib library) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], [cf_result=yes], [cf_result=no]) AC_MSG_RESULT($cf_result) - test $cf_result = yes && break + test "$cf_result" = yes && break elif test "$cf_curs_lib" = "$cf_term_lib" ; then cf_result=no elif test "$cf_term_lib" != predefined ; then AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); tgoto((char *)0, 0, 0);], [cf_result=no], [ LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], [cf_result=yes], [cf_result=error]) ]) AC_MSG_RESULT($cf_result) - test $cf_result != error && break + test "$cf_result" != error && break fi done fi - test $cf_curs_lib = unknown && AC_MSG_ERROR(no curses library found) + test "$cf_curs_lib" = unknown && AC_MSG_ERROR(no curses library found) fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_TERM_H version: 11 updated: 2015/04/15 19:08:48 +dnl CF_CURSES_TERM_H version: 15 updated: 2021/01/02 09:31:20 dnl ---------------- dnl SVr4 curses should have term.h as well (where it puts the definitions of dnl the low-level interface). This may not be true in old/broken implementations, dnl as well as in misconfigured systems (e.g., gcc configured for Solaris 2.4 dnl running with Solaris 2.5.1). AC_DEFUN([CF_CURSES_TERM_H], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for term.h, cf_cv_term_header,[ # If we found <ncurses/curses.h>, look for <ncurses/term.h>, but always look # for <term.h> if we do not find the variant. cf_header_list="term.h ncurses/term.h ncursesw/term.h" -case ${cf_cv_ncurses_header:-curses.h} in +case "${cf_cv_ncurses_header:-curses.h}" in (*/*) - cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h + cf_header_item=`echo "${cf_cv_ncurses_header:-curses.h}" | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}>], - [WINDOW *x], + [WINDOW *x; (void)x], [cf_cv_term_header=$cf_header break], [cf_cv_term_header=no]) done -case $cf_cv_term_header in +case "$cf_cv_term_header" in (no) # If curses is ncurses, some packagers still mess it up by trying to make # us use GNU termcap. This handles the most common case. for cf_header in ncurses/term.h ncursesw/term.h do AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #ifdef NCURSES_VERSION #include <${cf_header}> #else make an error #endif], - [WINDOW *x], + [WINDOW *x; (void)x], [cf_cv_term_header=$cf_header break], [cf_cv_term_header=no]) done ;; esac ]) -case $cf_cv_term_header in +case "$cf_cv_term_header" in (term.h) AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h]) ;; (ncurses/term.h) AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h]) ;; (ncursesw/term.h) AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_UNCTRL_H version: 4 updated: 2015/04/15 19:08:48 +dnl CF_CURSES_UNCTRL_H version: 8 updated: 2021/01/02 09:31:20 dnl ------------------ dnl Any X/Open curses implementation must have unctrl.h, but ncurses packages dnl may put it in a subdirectory (along with ncurses' other headers, of dnl course). Packages which put the headers in inconsistent locations are dnl broken). AC_DEFUN([CF_CURSES_UNCTRL_H], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for unctrl.h, cf_cv_unctrl_header,[ # If we found <ncurses/curses.h>, look for <ncurses/unctrl.h>, but always look # for <unctrl.h> if we do not find the variant. cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h" -case ${cf_cv_ncurses_header:-curses.h} in +case "${cf_cv_ncurses_header:-curses.h}" in (*/*) - cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h + cf_header_item=`echo "${cf_cv_ncurses_header:-curses.h}" | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}>], - [WINDOW *x], + [WINDOW *x; (void)x], [cf_cv_unctrl_header=$cf_header break], [cf_cv_unctrl_header=no]) done ]) -case $cf_cv_unctrl_header in +case "$cf_cv_unctrl_header" in (no) AC_MSG_WARN(unctrl.h header not found) ;; esac -case $cf_cv_unctrl_header in +case "$cf_cv_unctrl_header" in (unctrl.h) AC_DEFINE(HAVE_UNCTRL_H,1,[Define to 1 if we have unctrl.h]) ;; (ncurses/unctrl.h) AC_DEFINE(HAVE_NCURSES_UNCTRL_H,1,[Define to 1 if we have ncurses/unctrl.h]) ;; (ncursesw/unctrl.h) AC_DEFINE(HAVE_NCURSESW_UNCTRL_H,1,[Define to 1 if we have ncursesw/unctrl.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_WACS_MAP version: 6 updated: 2012/10/06 08:57:51 +dnl CF_CURSES_WACS_MAP version: 8 updated: 2021/01/04 19:45:09 dnl ------------------ dnl Check for likely values of wacs_map[]. AC_DEFUN([CF_CURSES_WACS_MAP], [ AC_CACHE_CHECK(for wide alternate character set array, cf_cv_curses_wacs_map,[ cf_cv_curses_wacs_map=unknown for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char do AC_TRY_LINK([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>], - [void *foo = &($name['k'])], + [void *foo = &(${name}['k']); (void)foo], [cf_cv_curses_wacs_map=$name break]) done]) test "$cf_cv_curses_wacs_map" != unknown && AC_DEFINE_UNQUOTED(CURSES_WACS_ARRAY,$cf_cv_curses_wacs_map,[Define to name of (n)curses wide-character array]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_WACS_SYMBOLS version: 2 updated: 2012/10/06 08:57:51 +dnl CF_CURSES_WACS_SYMBOLS version: 4 updated: 2021/01/04 19:45:09 dnl ---------------------- dnl Do a check to see if the WACS_xxx constants are defined compatibly with dnl X/Open Curses. In particular, NetBSD's implementation of the WACS_xxx dnl constants is broken since those constants do not point to cchar_t's. AC_DEFUN([CF_CURSES_WACS_SYMBOLS], [ AC_REQUIRE([CF_CURSES_WACS_MAP]) AC_CACHE_CHECK(for wide alternate character constants, cf_cv_curses_wacs_symbols,[ cf_cv_curses_wacs_symbols=no if test "$cf_cv_curses_wacs_map" != unknown then AC_TRY_LINK([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>], [cchar_t *foo = WACS_PLUS; - $cf_cv_curses_wacs_map['k'] = *WACS_PLUS], + ${cf_cv_curses_wacs_map}['k'] = *WACS_PLUS; (void)foo], [cf_cv_curses_wacs_symbols=yes]) else AC_TRY_LINK([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>], - [cchar_t *foo = WACS_PLUS], + [cchar_t *foo = WACS_PLUS; (void)foo], [cf_cv_curses_wacs_symbols=yes]) fi ]) test "$cf_cv_curses_wacs_symbols" != no && AC_DEFINE(CURSES_WACS_SYMBOLS,1,[Define to 1 if (n)curses supports wide-character WACS_ symbols]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_WGETPARENT version: 3 updated: 2012/10/06 08:57:51 +dnl CF_CURSES_WGETPARENT version: 4 updated: 2020/03/19 20:23:48 dnl -------------------- dnl Check for curses support for directly determining the parent of a given dnl window. Some implementations make this difficult, so we provide for dnl defining an application-specific function that gives this functionality. dnl dnl $1 = name of function to use if the feature is missing AC_DEFUN([CF_CURSES_WGETPARENT],[ CF_CURSES_FUNCS(wgetparent) if test "x$cf_cv_func_wgetparent" != xyes then AC_MSG_CHECKING(if WINDOW has _parent member) AC_TRY_COMPILE([#include <${cf_cv_ncurses_header:-curses.h}>], - [WINDOW *p = stdscr->_parent], + [WINDOW *p = stdscr->_parent; (void)p], [cf_window__parent=yes], [cf_window__parent=no]) AC_MSG_RESULT($cf_window__parent) if test "$cf_window__parent" = yes then AC_DEFINE(HAVE_WINDOW__PARENT,1,[Define to 1 if WINDOW struct has _parent member]) fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_DIRNAME version: 4 updated: 2002/12/21 19:25:52 +dnl CF_DIRNAME version: 5 updated: 2020/12/31 20:19:42 dnl ---------- dnl "dirname" is not portable, so we fake it with a shell script. -AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl +AC_DEFUN([CF_DIRNAME],[$1=`echo "$2" | sed -e 's%/[[^/]]*$%%'`])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57 dnl --------------- dnl You can always use "make -n" to see the actual options, but it's hard to dnl pick out/analyze warning messages when the compile-line is long. dnl dnl Sets: dnl ECHO_LT - symbol to control if libtool is verbose dnl ECHO_LD - symbol to prefix "cc -o" lines dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o) dnl SHOW_CC - symbol to put before explicit "cc -c" lines dnl ECHO_CC - symbol to put before any "cc" line dnl AC_DEFUN([CF_DISABLE_ECHO],[ AC_MSG_CHECKING(if you want to see long compiling messages) CF_ARG_DISABLE(echo, [ --disable-echo do not display "compiling" commands], [ ECHO_LT='--silent' ECHO_LD='@echo linking [$]@;' RULE_CC='@echo compiling [$]<' SHOW_CC='@echo compiling [$]@' ECHO_CC='@' ],[ ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' ]) AC_MSG_RESULT($enableval) AC_SUBST(ECHO_LT) AC_SUBST(ECHO_LD) AC_SUBST(RULE_CC) AC_SUBST(SHOW_CC) AC_SUBST(ECHO_CC) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_LIBTOOL_VERSION version: 3 updated: 2015/04/17 21:13:04 dnl -------------------------- dnl Check if we should use the libtool 1.5 feature "-version-number" instead of dnl the older "-version-info" feature. The newer feature allows us to use dnl version numbering on shared libraries which make them compatible with dnl various systems. AC_DEFUN([CF_DISABLE_LIBTOOL_VERSION], [ AC_MSG_CHECKING(if libtool -version-number should be used) CF_ARG_DISABLE(libtool-version, [ --disable-libtool-version enable to use libtool's incompatible naming scheme], [cf_libtool_version=no], [cf_libtool_version=yes]) AC_MSG_RESULT($cf_libtool_version) if test "$cf_libtool_version" = yes ; then LIBTOOL_VERSION="-version-number" else LIBTOOL_VERSION="-version-info" case "x$VERSION" in (x) AC_MSG_WARN(VERSION was not set) ;; (x*.*.*) ABI_VERSION="$VERSION" CF_VERBOSE(ABI_VERSION: $ABI_VERSION) ;; (x*:*:*) ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'` CF_VERBOSE(ABI_VERSION: $ABI_VERSION) ;; (*) AC_MSG_WARN(unexpected VERSION value: $VERSION) ;; esac fi AC_SUBST(ABI_VERSION) AC_SUBST(LIBTOOL_VERSION) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_DISABLE_RPATH_HACK version: 2 updated: 2011/02/13 13:31:33 +dnl CF_DISABLE_RPATH_HACK version: 3 updated: 2021/01/05 20:14:44 dnl --------------------- dnl The rpath-hack makes it simpler to build programs, particularly with the dnl *BSD ports which may have essential libraries in unusual places. But it dnl can interfere with building an executable for the base system. Use this dnl option in that case. AC_DEFUN([CF_DISABLE_RPATH_HACK], [ AC_MSG_CHECKING(if rpath-hack should be disabled) CF_ARG_DISABLE(rpath-hack, [ --disable-rpath-hack don't add rpath options for additional libraries], - [cf_disable_rpath_hack=yes], - [cf_disable_rpath_hack=no]) + [enable_rpath_hack=no], + [enable_rpath_hack=yes]) +dnl TODO - drop cf_disable_rpath_hack +if test "x$enable_rpath_hack" = xno; then cf_disable_rpath_hack=yes; else cf_disable_rpath_hack=no; fi AC_MSG_RESULT($cf_disable_rpath_hack) -if test "$cf_disable_rpath_hack" = no ; then + +if test "$enable_rpath_hack" = yes ; then CF_RPATH_HACK fi ]) dnl --------------------------------------------------------------------------- dnl CF_ENABLE_RPATH version: 2 updated: 2010/03/27 18:39:42 dnl --------------- dnl Check if the rpath option should be used, setting cache variable dnl cf_cv_enable_rpath if so. AC_DEFUN([CF_ENABLE_RPATH], [ AC_MSG_CHECKING(if rpath option should be used) AC_ARG_ENABLE(rpath, [ --enable-rpath use rpath option when generating shared libraries], [cf_cv_enable_rpath=$enableval], [cf_cv_enable_rpath=no]) AC_MSG_RESULT($cf_cv_enable_rpath) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_FIND_LIBRARY version: 9 updated: 2008/03/23 14:48:54 +dnl CF_ENABLE_WARNINGS version: 9 updated: 2021/01/05 19:40:50 +dnl ------------------ +dnl Configure-option to enable gcc warnings +dnl +dnl $1 = extra options to add, if supported +dnl $2 = option for checking attributes. By default, this is done when +dnl warnings are enabled. For other values: +dnl yes: always do this, e.g., to use in generated library-headers +dnl no: never do this +AC_DEFUN([CF_ENABLE_WARNINGS],[ +if test "$GCC" = yes || test "$GXX" = yes +then +CF_FIX_WARNINGS(CFLAGS) +CF_FIX_WARNINGS(CPPFLAGS) +CF_FIX_WARNINGS(LDFLAGS) +AC_MSG_CHECKING(if you want to turn on gcc warnings) +CF_ARG_ENABLE(warnings, + [ --enable-warnings test: turn on gcc compiler warnings], + [enable_warnings=yes], + [enable_warnings=no]) +AC_MSG_RESULT($enable_warnings) +if test "$enable_warnings" = "yes" +then + ifelse($2,,[CF_GCC_ATTRIBUTES]) + CF_GCC_WARNINGS($1) +fi +ifelse($2,yes,[CF_GCC_ATTRIBUTES]) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_FIND_LIBRARY version: 11 updated: 2021/01/02 09:31:20 dnl --------------- dnl Look for a non-standard library, given parameters for AC_TRY_LINK. We dnl prefer a standard location, and use -L options only if we do not find the dnl library in the standard library location(s). dnl $1 = library name dnl $2 = library class, usually the same as library name dnl $3 = includes dnl $4 = code fragment to compile/link dnl $5 = corresponding function-name dnl $6 = flag, nonnull if failure should not cause an error-exit dnl dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had dnl to use a -L option. AC_DEFUN([CF_FIND_LIBRARY], [ - eval 'cf_cv_have_lib_'$1'=no' + eval 'cf_cv_have_lib_'"$1"'=no' cf_libdir="" AC_CHECK_FUNC($5, - eval 'cf_cv_have_lib_'$1'=yes',[ + eval 'cf_cv_have_lib_'"$1"'=yes',[ cf_save_LIBS="$LIBS" AC_MSG_CHECKING(for $5 in -l$1) LIBS="-l$1 $LIBS" AC_TRY_LINK([$3],[$4], [AC_MSG_RESULT(yes) - eval 'cf_cv_have_lib_'$1'=yes' + eval 'cf_cv_have_lib_'"$1"'=yes' ], [AC_MSG_RESULT(no) CF_LIBRARY_PATH(cf_search,$2) for cf_libdir in $cf_search do AC_MSG_CHECKING(for -l$1 in $cf_libdir) LIBS="-L$cf_libdir -l$1 $cf_save_LIBS" AC_TRY_LINK([$3],[$4], [AC_MSG_RESULT(yes) - eval 'cf_cv_have_lib_'$1'=yes' + eval 'cf_cv_have_lib_'"$1"'=yes' break], [AC_MSG_RESULT(no) LIBS="$cf_save_LIBS"]) done ]) ]) -eval 'cf_found_library=[$]cf_cv_have_lib_'$1 +eval 'cf_found_library="[$]cf_cv_have_lib_'"$1"\" ifelse($6,,[ -if test $cf_found_library = no ; then +if test "$cf_found_library" = no ; then AC_MSG_ERROR(Cannot link $1 library) fi ]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_FIND_LINKAGE version: 21 updated: 2018/06/20 20:23:13 +dnl CF_FIND_LINKAGE version: 22 updated: 2020/12/31 20:19:42 dnl --------------- dnl Find a library (specifically the linkage used in the code fragment), dnl searching for it if it is not already in the library path. dnl See also CF_ADD_SEARCHPATH. dnl dnl Parameters (4-on are optional): dnl $1 = headers for library entrypoint dnl $2 = code fragment for library entrypoint dnl $3 = the library name without the "-l" option or ".so" suffix. dnl $4 = action to perform if successful (default: update CPPFLAGS, etc) dnl $5 = action to perform if not successful dnl $6 = module name, if not the same as the library name dnl $7 = extra libraries dnl dnl Sets these variables: dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found dnl $cf_cv_header_path_$3 - include-directory if needed dnl $cf_cv_library_path_$3 - library-directory if needed dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3 AC_DEFUN([CF_FIND_LINKAGE],[ # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_$3= cf_cv_library_path_$3= CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib ],[ LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib cf_cv_library_file_$3="-l$3" ],[ cf_cv_find_linkage_$3=no LIBS="$cf_save_LIBS" CF_VERBOSE(find linkage for $3 library) CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)]) cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6])) for cf_cv_header_path_$3 in $cf_search do - if test -d $cf_cv_header_path_$3 ; then + if test -d "$cf_cv_header_path_$3" ; then CF_VERBOSE(... testing $cf_cv_header_path_$3) CPPFLAGS="$cf_save_CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,-I$cf_cv_header_path_$3) AC_TRY_COMPILE([$1],[$2],[ CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3) cf_cv_find_linkage_$3=maybe cf_test_CPPFLAGS="$CPPFLAGS" break],[ CPPFLAGS="$cf_save_CPPFLAGS" ]) fi done if test "$cf_cv_find_linkage_$3" = maybe ; then CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" ifelse([$6],,,[ CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in system) cf_cv_find_linkage_$3=yes]) CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" ]) if test "$cf_cv_find_linkage_$3" != yes ; then CF_LIBRARY_PATH(cf_search,$3) for cf_cv_library_path_$3 in $cf_search do - if test -d $cf_cv_library_path_$3 ; then + if test -d "$cf_cv_library_path_$3" ; then CF_VERBOSE(... testing $cf_cv_library_path_$3) CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3) cf_cv_find_linkage_$3=yes cf_cv_library_file_$3="-l$3" break],[ CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" ]) fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_$3=no fi ],$7) ]) LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_$3" = yes ; then ifelse([$4],,[ CF_ADD_INCDIR($cf_cv_header_path_$3) CF_ADD_LIBDIR($cf_cv_library_path_$3) CF_ADD_LIB($3) ],[$4]) else ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5]) fi ])dnl dnl --------------------------------------------------------------------------- +dnl CF_FIX_WARNINGS version: 3 updated: 2020/12/31 18:40:20 +dnl --------------- +dnl Warning flags do not belong in CFLAGS, CPPFLAGS, etc. Any of gcc's +dnl "-Werror" flags can interfere with configure-checks. Those go into +dnl EXTRA_CFLAGS. +dnl +dnl $1 = variable name to repair +define([CF_FIX_WARNINGS],[ +if test "$GCC" = yes || test "$GXX" = yes +then + case [$]$1 in + (*-Werror=*) + CF_VERBOSE(repairing $1: [$]$1) + cf_temp_flags= + for cf_temp_scan in [$]$1 + do + case "x$cf_temp_scan" in + (x-Werror=*) + CF_APPEND_TEXT(EXTRA_CFLAGS,$cf_temp_scan) + ;; + (*) + CF_APPEND_TEXT(cf_temp_flags,$cf_temp_scan) + ;; + esac + done + $1="$cf_temp_flags" + CF_VERBOSE(... fixed [$]$1) + CF_VERBOSE(... extra $EXTRA_CFLAGS) + ;; + esac +fi +AC_SUBST(EXTRA_CFLAGS) +])dnl +dnl --------------------------------------------------------------------------- dnl CF_FORGET_TOOL version: 1 updated: 2013/04/06 18:03:09 dnl -------------- dnl Forget that we saw the given tool. AC_DEFUN([CF_FORGET_TOOL],[ unset ac_cv_prog_ac_ct_$1 unset ac_ct_$1 unset $1 ])dnl dnl --------------------------------------------------------------------------- -dnl CF_FUNC_WAIT version: 3 updated: 2012/10/06 08:57:51 +dnl CF_FUNC_WAIT version: 4 updated: 2021/01/02 09:31:20 dnl ------------ dnl Test for the presence of <sys/wait.h>, 'union wait', arg-type of 'wait()' dnl and/or 'waitpid()'. dnl dnl Note that we cannot simply grep for 'union wait' in the wait.h file, dnl because some Posix systems turn this on only when a BSD variable is dnl defined. dnl dnl I don't use AC_HEADER_SYS_WAIT, because it defines HAVE_SYS_WAIT_H, which dnl would conflict with an attempt to test that header directly. dnl AC_DEFUN([CF_FUNC_WAIT], [ AC_REQUIRE([CF_UNION_WAIT]) -if test $cf_cv_type_unionwait = yes; then +if test "$cf_cv_type_unionwait" = yes; then AC_MSG_CHECKING(if union wait can be used as wait-arg) AC_CACHE_VAL(cf_cv_arg_union_wait,[ AC_TRY_COMPILE($cf_wait_headers, [union wait x; wait(&x)], [cf_cv_arg_union_wait=yes], [cf_cv_arg_union_wait=no]) ]) AC_MSG_RESULT($cf_cv_arg_union_wait) - test $cf_cv_arg_union_wait = yes && AC_DEFINE(WAIT_USES_UNION,1,[Define to 1 if wait() uses a union parameter]) + test "$cf_cv_arg_union_wait" = yes && AC_DEFINE(WAIT_USES_UNION,1,[Define to 1 if wait() uses a union parameter]) AC_MSG_CHECKING(if union wait can be used as waitpid-arg) AC_CACHE_VAL(cf_cv_arg_union_waitpid,[ AC_TRY_COMPILE($cf_wait_headers, [union wait x; waitpid(0, &x, 0)], [cf_cv_arg_union_waitpid=yes], [cf_cv_arg_union_waitpid=no]) ]) AC_MSG_RESULT($cf_cv_arg_union_waitpid) - test $cf_cv_arg_union_waitpid = yes && AC_DEFINE(WAITPID_USES_UNION,1,[Define to 1 if waitpid() uses a union parameter]) + test "$cf_cv_arg_union_waitpid" = yes && AC_DEFINE(WAITPID_USES_UNION,1,[Define to 1 if waitpid() uses a union parameter]) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00 +dnl CF_GCC_ATTRIBUTES version: 23 updated: 2021/01/03 18:30:50 dnl ----------------- dnl Test for availability of useful gcc __attribute__ directives to quiet dnl compiler warnings. Though useful, not all are supported -- and contrary dnl to documentation, unrecognized directives cause older compilers to barf. AC_DEFUN([CF_GCC_ATTRIBUTES], -[ -if test "$GCC" = yes +[AC_REQUIRE([AC_PROG_FGREP])dnl + +if test "$GCC" = yes || test "$GXX" = yes then cat > conftest.i <<EOF #ifndef GCC_PRINTF #define GCC_PRINTF 0 #endif #ifndef GCC_SCANF #define GCC_SCANF 0 #endif #ifndef GCC_NORETURN #define GCC_NORETURN /* nothing */ #endif #ifndef GCC_UNUSED #define GCC_UNUSED /* nothing */ #endif EOF if test "$GCC" = yes then AC_CHECKING([for $CC __attribute__ directives]) -cat > conftest.$ac_ext <<EOF +cat > "conftest.$ac_ext" <<EOF #line __oline__ "${as_me:-configure}" #include "confdefs.h" #include "conftest.h" #include "conftest.i" #if GCC_PRINTF #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) #else #define GCC_PRINTFLIKE(fmt,var) /*nothing*/ #endif #if GCC_SCANF #define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) #else #define GCC_SCANFLIKE(fmt,var) /*nothing*/ #endif extern void wow(char *,...) GCC_SCANFLIKE(1,2); extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; extern void foo(void) GCC_NORETURN; -int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; } +int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { (void)argc; (void)argv; return 0; } EOF cf_printf_attribute=no cf_scanf_attribute=no for cf_attribute in scanf printf unused noreturn do CF_UPPER(cf_ATTRIBUTE,$cf_attribute) cf_directive="__attribute__(($cf_attribute))" echo "checking for $CC $cf_directive" 1>&AC_FD_CC - case $cf_attribute in + case "$cf_attribute" in (printf) cf_printf_attribute=yes cat >conftest.h <<EOF #define GCC_$cf_ATTRIBUTE 1 EOF ;; (scanf) cf_scanf_attribute=yes cat >conftest.h <<EOF #define GCC_$cf_ATTRIBUTE 1 EOF ;; (*) cat >conftest.h <<EOF #define GCC_$cf_ATTRIBUTE $cf_directive EOF ;; esac if AC_TRY_EVAL(ac_compile); then test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute) cat conftest.h >>confdefs.h - case $cf_attribute in + case "$cf_attribute" in (noreturn) AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc]) ;; (printf) cf_value='/* nothing */' if test "$cf_printf_attribute" != no ; then cf_value='__attribute__((format(printf,fmt,var)))' AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc]) ;; (scanf) cf_value='/* nothing */' if test "$cf_scanf_attribute" != no ; then cf_value='__attribute__((format(scanf,fmt,var)))' AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc]) ;; (unused) AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc]) ;; esac fi done else - fgrep define conftest.i >>confdefs.h + ${FGREP-fgrep} define conftest.i >>confdefs.h fi -rm -rf conftest* +rm -rf ./conftest* fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33 +dnl CF_GCC_VERSION version: 8 updated: 2019/09/07 13:38:36 dnl -------------- -dnl Find version of gcc +dnl Find version of gcc, and (because icc/clang pretend to be gcc without being +dnl compatible), attempt to determine if icc/clang is actually used. AC_DEFUN([CF_GCC_VERSION],[ AC_REQUIRE([AC_PROG_CC]) GCC_VERSION=none if test "$GCC" = yes ; then AC_MSG_CHECKING(version of $CC) GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown AC_MSG_RESULT($GCC_VERSION) fi +CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) +CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GCC_WARNINGS version: 33 updated: 2018/06/20 20:23:13 +dnl CF_GCC_WARNINGS version: 41 updated: 2021/01/01 16:53:59 dnl --------------- dnl Check if the compiler supports useful warning options. There's a few that dnl we don't use, simply because they're too noisy: dnl dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x) +dnl -Winline (usually not worthwhile) dnl -Wredundant-decls (system headers make this too noisy) dnl -Wtraditional (combines too many unrelated messages, only a few useful) dnl -Wwrite-strings (too noisy, but should review occasionally). This dnl is enabled for ncurses using "--enable-const". dnl -pedantic dnl dnl Parameter: dnl $1 is an optional list of gcc warning flags that a particular dnl application might want to use, e.g., "no-unused" for dnl -Wno-unused dnl Special: dnl If $with_ext_const is "yes", add a check for -Wwrite-strings dnl AC_DEFUN([CF_GCC_WARNINGS], [ AC_REQUIRE([CF_GCC_VERSION]) -CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) -CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) - -cat > conftest.$ac_ext <<EOF +if test "x$have_x" = xyes; then CF_CONST_X_STRING fi +cat > "conftest.$ac_ext" <<EOF #line __oline__ "${as_me:-configure}" int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; } EOF - if test "$INTEL_COMPILER" = yes then # The "-wdXXX" options suppress warnings: # remark #1419: external declaration in primary source file # remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) # remark #1684: conversion from pointer to same-sized integral type (potential portability problem) # remark #193: zero used for undefined preprocessing identifier # remark #593: variable "curs_sb_left_arrow" was set but never used # remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits # remark #869: parameter "tw" was never referenced # remark #981: operands are evaluated in unspecified order # warning #279: controlling expression is constant AC_CHECKING([for $CC warning options]) cf_save_CFLAGS="$CFLAGS" - EXTRA_CFLAGS="-Wall" + EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall" for cf_opt in \ wd1419 \ wd1683 \ wd1684 \ wd193 \ wd593 \ wd279 \ wd810 \ wd869 \ wd981 do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if AC_TRY_EVAL(ac_compile); then test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt) EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" - -elif test "$GCC" = yes +elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown" then AC_CHECKING([for $CC warning options]) cf_save_CFLAGS="$CFLAGS" - EXTRA_CFLAGS= cf_warn_CONST="" test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= for cf_opt in W Wall \ Wbad-function-cast \ Wcast-align \ Wcast-qual \ Wdeclaration-after-statement \ Wextra \ Winline \ Wmissing-declarations \ Wmissing-prototypes \ Wnested-externs \ Wpointer-arith \ Wshadow \ Wstrict-prototypes \ - Wundef $cf_gcc_warnings $cf_warn_CONST $1 + Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST $1 do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if AC_TRY_EVAL(ac_compile); then test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt) - case $cf_opt in - (Wcast-qual) - CF_APPEND_TEXT(CPPFLAGS,-DXTSTRINGDEFINES) - ;; + case "$cf_opt" in (Winline) - case $GCC_VERSION in + case "$GCC_VERSION" in ([[34]].*) CF_VERBOSE(feature is broken in gcc $GCC_VERSION) continue;; esac ;; (Wpointer-arith) - case $GCC_VERSION in + case "$GCC_VERSION" in ([[12]].*) CF_VERBOSE(feature is broken in gcc $GCC_VERSION) continue;; esac ;; esac EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" fi -rm -rf conftest* +rm -rf ./conftest* AC_SUBST(EXTRA_CFLAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GNU_SOURCE version: 9 updated: 2018/06/20 20:23:13 +dnl CF_GNU_SOURCE version: 10 updated: 2018/12/10 20:09:41 dnl ------------- dnl Check if we must define _GNU_SOURCE to get a reasonable value for dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect dnl (or misfeature) of glibc2, which breaks portability of many applications, dnl since it is interwoven with GNU extensions. dnl dnl Well, yes we could work around it... dnl dnl Parameters: dnl $1 is the nominal value for _XOPEN_SOURCE AC_DEFUN([CF_GNU_SOURCE], [ cf_gnu_xopen_source=ifelse($1,,500,$1) AC_CACHE_CHECK(if this is the GNU C library,cf_cv_gnu_library,[ AC_TRY_COMPILE([#include <sys/types.h>],[ #if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0 return 0; + #elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0 + return 0; #else # error not GNU C library #endif], [cf_cv_gnu_library=yes], [cf_cv_gnu_library=no]) ]) if test x$cf_cv_gnu_library = xyes; then # With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE - # was changed to help a little... + # was changed to help a little. newlib incorporated the change about 4 + # years later. AC_CACHE_CHECK(if _DEFAULT_SOURCE can be used as a basis,cf_cv_gnu_library_219,[ cf_save="$CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE) AC_TRY_COMPILE([#include <sys/types.h>],[ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2) return 0; + #elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3) + return 0; #else # error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old #endif], [cf_cv_gnu_library_219=yes], [cf_cv_gnu_library_219=no]) CPPFLAGS="$cf_save" ]) if test "x$cf_cv_gnu_library_219" = xyes; then cf_save="$CPPFLAGS" AC_CACHE_CHECK(if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE,cf_cv_gnu_dftsrc_219,[ CF_ADD_CFLAGS(-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source) AC_TRY_COMPILE([ #include <limits.h> #include <sys/types.h> ],[ #if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1) return 0; #else # error GNU C library is too old #endif], [cf_cv_gnu_dftsrc_219=yes], [cf_cv_gnu_dftsrc_219=no]) ]) test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save" else cf_cv_gnu_dftsrc_219=maybe fi if test "x$cf_cv_gnu_dftsrc_219" != xyes; then AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[ AC_TRY_COMPILE([#include <sys/types.h>],[ #ifndef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be defined #endif], [cf_cv_gnu_source=no], [cf_save="$CPPFLAGS" CF_ADD_CFLAGS(-D_GNU_SOURCE) AC_TRY_COMPILE([#include <sys/types.h>],[ #ifdef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be undefined #endif], [cf_cv_gnu_source=no], [cf_cv_gnu_source=yes]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_gnu_source" = yes then AC_CACHE_CHECK(if we should also define _DEFAULT_SOURCE,cf_cv_default_source,[ CF_APPEND_TEXT(CPPFLAGS,-D_GNU_SOURCE) AC_TRY_COMPILE([#include <sys/types.h>],[ #ifdef _DEFAULT_SOURCE #error expected _DEFAULT_SOURCE to be undefined #endif], [cf_cv_default_source=no], [cf_cv_default_source=yes]) ]) if test "$cf_cv_default_source" = yes then CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE) fi fi fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_HEADERS_SH version: 1 updated: 2007/07/04 15:37:05 dnl ------------- dnl Setup variables needed to construct headers-sh AC_DEFUN([CF_HEADERS_SH],[ PACKAGE_PREFIX=$1 PACKAGE_CONFIG=$2 AC_SUBST(PACKAGE_PREFIX) AC_SUBST(PACKAGE_CONFIG) EXTRA_OUTPUT="$EXTRA_OUTPUT headers-sh:$srcdir/headers-sh.in" ]) dnl --------------------------------------------------------------------------- -dnl CF_HEADER_PATH version: 13 updated: 2015/04/15 19:08:48 +dnl CF_HEADER_PATH version: 15 updated: 2021/01/01 13:31:04 dnl -------------- dnl Construct a search-list of directories for a nonstandard header-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_HEADER_PATH], [ $1= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do - case $cf_header_path in + case "$cf_header_path" in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` CF_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE) cf_header_path_list="$cf_header_path_list [$]$1" ;; esac done fi # add the variations for the package we are looking for CF_SUBDIR_PATH($1,$2,include) test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { - test -d $includedir && $1="[$]$1 $includedir" - test -d $includedir/$2 && $1="[$]$1 $includedir/$2" + test -d "$includedir" && $1="[$]$1 $includedir" + test -d "$includedir/$2" && $1="[$]$1 $includedir/$2" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { - test -d $oldincludedir && $1="[$]$1 $oldincludedir" - test -d $oldincludedir/$2 && $1="[$]$1 $oldincludedir/$2" + test -d "$oldincludedir" && $1="[$]$1 $oldincludedir" + test -d "$oldincludedir/$2" && $1="[$]$1 $oldincludedir/$2" } $1="[$]$1 $cf_header_path_list" ])dnl dnl --------------------------------------------------------------------------- -dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00 +dnl CF_INTEL_COMPILER version: 8 updated: 2021/01/01 16:53:59 dnl ----------------- dnl Check if the given compiler is really the Intel compiler for Linux. It dnl tries to imitate gcc, but does not return an error when it finds a mismatch dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_INTEL_COMPILER],[ AC_REQUIRE([AC_CANONICAL_HOST]) ifelse([$2],,INTEL_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then - case $host_os in + case "$host_os" in (linux*|gnu*) AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc" AC_TRY_COMPILE([],[ #ifdef __INTEL_COMPILER #else make an error #endif ],[ifelse([$2],,INTEL_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2])) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_LARGEFILE version: 11 updated: 2018/06/20 20:23:13 +dnl CF_LARGEFILE version: 12 updated: 2020/03/19 20:23:48 dnl ------------ dnl Add checks for large file support. AC_DEFUN([CF_LARGEFILE],[ ifdef([AC_FUNC_FSEEKO],[ AC_SYS_LARGEFILE if test "$enable_largefile" != no ; then AC_FUNC_FSEEKO # Normally we would collect these definitions in the config.h, # but (like _XOPEN_SOURCE), some environments rely on having these # defined before any of the system headers are included. Another # case comes up with C++, e.g., on AIX the compiler compiles the # header files by themselves before looking at the body files it is # told to compile. For ncurses, those header files do not include # the config.h if test "$ac_cv_sys_large_files" != no then CF_APPEND_TEXT(CPPFLAGS,-D_LARGE_FILES) fi if test "$ac_cv_sys_largefile_source" != no then CF_APPEND_TEXT(CPPFLAGS,-D_LARGEFILE_SOURCE) fi if test "$ac_cv_sys_file_offset_bits" != no then CF_APPEND_TEXT(CPPFLAGS,-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits) fi AC_CACHE_CHECK(whether to use struct dirent64, cf_cv_struct_dirent64,[ AC_TRY_COMPILE([ #pragma GCC diagnostic error "-Wincompatible-pointer-types" #include <sys/types.h> #include <dirent.h> ],[ /* if transitional largefile support is setup, this is true */ extern struct dirent64 * readdir(DIR *); struct dirent64 *x = readdir((DIR *)0); struct dirent *y = readdir((DIR *)0); int z = x - y; + (void)z; ], [cf_cv_struct_dirent64=yes], [cf_cv_struct_dirent64=no]) ]) test "$cf_cv_struct_dirent64" = yes && AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Define to 1 if we have struct dirent64]) fi ]) ]) dnl --------------------------------------------------------------------------- -dnl CF_LD_RPATH_OPT version: 7 updated: 2016/02/20 18:01:19 +dnl CF_LD_RPATH_OPT version: 9 updated: 2021/01/01 13:31:04 dnl --------------- dnl For the given system and compiler, find the compiler flags to pass to the dnl loader to use the "rpath" feature. AC_DEFUN([CF_LD_RPATH_OPT], [ AC_REQUIRE([CF_CHECK_CACHE]) LD_RPATH_OPT= -AC_MSG_CHECKING(for an rpath option) -case $cf_cv_system_name in -(irix*) - if test "$GCC" = yes; then +if test "x$cf_cv_enable_rpath" != xno +then + AC_MSG_CHECKING(for an rpath option) + case "$cf_cv_system_name" in + (irix*) + if test "$GCC" = yes; then + LD_RPATH_OPT="-Wl,-rpath," + else + LD_RPATH_OPT="-rpath " + fi + ;; + (linux*|gnu*|k*bsd*-gnu|freebsd*) LD_RPATH_OPT="-Wl,-rpath," - else + ;; + (openbsd[[2-9]].*|mirbsd*) + LD_RPATH_OPT="-Wl,-rpath," + ;; + (dragonfly*) + LD_RPATH_OPT="-rpath " + ;; + (netbsd*) + LD_RPATH_OPT="-Wl,-rpath," + ;; + (osf*|mls+*) LD_RPATH_OPT="-rpath " + ;; + (solaris2*) + LD_RPATH_OPT="-R" + ;; + (*) + ;; + esac + AC_MSG_RESULT($LD_RPATH_OPT) + + case "x$LD_RPATH_OPT" in + (x-R*) + AC_MSG_CHECKING(if we need a space after rpath option) + cf_save_LIBS="$LIBS" + CF_ADD_LIBS(${LD_RPATH_OPT}$libdir) + AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) + LIBS="$cf_save_LIBS" + AC_MSG_RESULT($cf_rpath_space) + test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " + ;; + esac +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_LD_SEARCHPATH version: 2 updated: 2019/09/26 20:34:14 +dnl ---------------- +dnl Try to obtain the linker's search-path, for use in scripts. +dnl +dnl Ignore LD_LIBRARY_PATH, etc. +AC_DEFUN([CF_LD_SEARCHPATH],[ +AC_CACHE_CHECK(for linker search path,cf_cv_ld_searchpath,[ + +if test "$cross_compiling" != yes ; then + +# GNU binutils' ld does not involve permissions which may stop ldconfig. +cf_pathlist=`ld --verbose 2>/dev/null | grep SEARCH_DIR | sed -e 's,SEARCH_DIR[[("=]][[("=]]*,,g' -e 's/"[[)]];//gp' | sort -u` + +# The -NX options tell newer versions of Linux ldconfig to not attempt to +# update the cache, which makes it run faster. +test -z "$cf_pathlist" && \ + cf_pathlist=`ldconfig -NX -v 2>/dev/null | sed -e '/^[[ ]]/d' -e 's/:$//' | sort -u` + +test -z "$cf_pathlist" && + cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e '/^[[ ]]/d' -e 's/:$//p' | sort -u` + +# This works with OpenBSD 6.5, which lists only filenames +test -z "$cf_pathlist" && + cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e 's,^Adding \(.*\)/.*[$],\1,p' | sort -u` + +if test -z "$cf_pathlist" +then + # dyld default path with MacOS + if test -f /usr/bin/otool && test "x`uname -s`" = xDarwin + then + # do this to bypass check + cf_cv_ld_searchpath='$HOME/lib' + cf_pathlist="/usr/local/lib /lib /usr/lib" fi - ;; -(linux*|gnu*|k*bsd*-gnu|freebsd*) - LD_RPATH_OPT="-Wl,-rpath," - ;; -(openbsd[[2-9]].*|mirbsd*) - LD_RPATH_OPT="-Wl,-rpath," - ;; -(dragonfly*) - LD_RPATH_OPT="-rpath " - ;; -(netbsd*) - LD_RPATH_OPT="-Wl,-rpath," - ;; -(osf*|mls+*) - LD_RPATH_OPT="-rpath " - ;; -(solaris2*) - LD_RPATH_OPT="-R" - ;; -(*) - ;; -esac -AC_MSG_RESULT($LD_RPATH_OPT) +fi -case "x$LD_RPATH_OPT" in -(x-R*) - AC_MSG_CHECKING(if we need a space after rpath option) - cf_save_LIBS="$LIBS" - CF_ADD_LIBS(${LD_RPATH_OPT}$libdir) - AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) - LIBS="$cf_save_LIBS" - AC_MSG_RESULT($cf_rpath_space) - test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " - ;; -esac +if test -z "$cf_pathlist" +then + # Solaris is hardcoded + if test -d /opt/SUNWspro/lib + then + cf_pathlist="/opt/SUNWspro/lib /usr/ccs/lib /usr/lib" + elif test -d /usr/ccs/lib + then + cf_pathlist="/usr/ccs/lib /usr/lib" + fi +fi + +fi + +# If nothing else, assume it is conventional +test -z "$cf_pathlist" && cf_pathlist="/usr/lib /lib" + +# Finally, check that this is only directories +for cf_path in [$]0 $cf_pathlist +do + if test -d "$cf_path"; then + test -n "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath="${cf_cv_ld_searchpath} " + cf_cv_ld_searchpath="${cf_cv_ld_searchpath}${cf_path}" + fi +done + +# Ensure that it is nonempty +test -z "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath=/usr/lib +]) + +LD_SEARCHPATH=`echo "$cf_cv_ld_searchpath"|sed -e 's/ /|/g'` +AC_SUBST(LD_SEARCHPATH) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_LIBRARY_PATH version: 10 updated: 2015/04/15 19:08:48 +dnl CF_LIBRARY_PATH version: 11 updated: 2021/01/01 13:31:04 dnl --------------- dnl Construct a search-list of directories for a nonstandard library-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_LIBRARY_PATH], [ $1= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do - case $cf_library_path in + case "$cf_library_path" in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE) cf_library_path_list="$cf_library_path_list [$]$1" ;; esac done fi CF_SUBDIR_PATH($1,$2,lib) $1="$cf_library_path_list [$]$1" ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09 dnl ------------------ AC_DEFUN([CF_LIBTOOL_VERSION],[ if test -n "$LIBTOOL" && test "$LIBTOOL" != none then cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([[^)]]*)//g' -e 's/^[[^1-9]]*//' -e 's/[[^0-9.]].*//'` else cf_cv_libtool_version= fi test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version ])dnl dnl --------------------------------------------------------------------------- -dnl CF_LIB_PREFIX version: 12 updated: 2015/10/17 19:03:33 +dnl CF_LIB_PREFIX version: 14 updated: 2021/01/01 13:31:04 dnl ------------- dnl Compute the library-prefix for the given host system dnl $1 = variable to set define([CF_LIB_PREFIX], [ - case $cf_cv_system_name in + case "$cf_cv_system_name" in (OS/2*|os2*) if test "$DFT_LWR_MODEL" = libtool; then LIB_PREFIX='lib' else LIB_PREFIX='' fi ;; + (*-msvc*) + LIB_PREFIX='' + ;; (*) LIB_PREFIX='lib' ;; esac ifelse($1,,,[$1=$LIB_PREFIX]) AC_SUBST(LIB_PREFIX) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_LIB_SUFFIX version: 25 updated: 2015/04/17 21:13:04 +dnl CF_LIB_SUFFIX version: 28 updated: 2021/01/01 16:53:59 dnl ------------- dnl Compute the library file-suffix from the given model name dnl $1 = model name dnl $2 = variable to set (the nominal library suffix) dnl $3 = dependency variable to set (actual filename) dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_SUFFIX], [ case X$1 in (Xlibtool) $2='.la' $3=[$]$2 ;; (Xdebug) - $2='_g.a' + case "$cf_cv_system_name" in + (*-msvc*) + $2='_g.lib' + ;; + (*) + $2='_g.a' + ;; + esac $3=[$]$2 ;; (Xprofile) - $2='_p.a' + case "$cf_cv_system_name" in + (*-msvc*) + $2='_p.lib' + ;; + (*) + $2='_p.a' + ;; + esac $3=[$]$2 ;; (Xshared) - case $cf_cv_system_name in + case "$cf_cv_system_name" in (aix[[5-7]]*) $2='.so' $3=[$]$2 ;; + (*-msvc*) + $2='.dll' + $3='.dll.lib' + ;; (cygwin*|msys*|mingw*) $2='.dll' $3='.dll.a' ;; (darwin*) $2='.dylib' $3=[$]$2 ;; (hpux*) - case $target in + case "$target" in (ia64*) $2='.so' $3=[$]$2 ;; (*) $2='.sl' $3=[$]$2 ;; esac ;; (*) $2='.so' $3=[$]$2 ;; esac ;; (*) - $2='.a' + case "$target" in + (*-msvc*) + $2='.lib' + ;; + (*) + $2='.a' + ;; + esac $3=[$]$2 ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then $2="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$2}" $3="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$3}" fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_MAKEFLAGS version: 18 updated: 2018/02/21 21:26:03 +dnl CF_MAKEFLAGS version: 20 updated: 2021/01/03 19:29:49 dnl ------------ dnl Some 'make' programs support ${MAKEFLAGS}, some ${MFLAGS}, to pass 'make' dnl options to lower-levels. It's very useful for "make -n" -- if we have it. dnl (GNU 'make' does both, something POSIX 'make', which happens to make the dnl ${MAKEFLAGS} variable incompatible because it adds the assignments :-) AC_DEFUN([CF_MAKEFLAGS], -[ +[AC_REQUIRE([AC_PROG_FGREP])dnl + AC_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[ cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp <<CF_EOF SHELL = $SHELL all : @ echo '.$cf_option' CF_EOF - cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | fgrep -v "ing directory" | sed -e 's,[[ ]]*$,,'` + cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | ${FGREP-fgrep} -v "ing directory" | sed -e 's,[[ ]]*$,,'` case "$cf_result" in (.*k|.*kw) - cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` + cf_result="`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`" case "$cf_result" in (.*CC=*) cf_cv_makeflags= ;; (*) cf_cv_makeflags=$cf_option ;; esac break ;; (.-) ;; (*) CF_MSG_LOG(given option \"$cf_option\", no match \"$cf_result\") ;; esac done rm -f cf_makeflags.tmp ]) AC_SUBST(cf_cv_makeflags) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32 dnl ------------ dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have dnl a monocase filesystem. AC_DEFUN([CF_MAKE_TAGS],[ AC_REQUIRE([CF_MIXEDCASE_FILENAMES]) AC_CHECK_PROGS(CTAGS, exctags ctags) AC_CHECK_PROGS(ETAGS, exetags etags) AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no) if test "$cf_cv_mixedcase" = yes ; then AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no) else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi AC_SUBST(CTAGS) AC_SUBST(ETAGS) AC_SUBST(MAKE_UPPER_TAGS) AC_SUBST(MAKE_LOWER_TAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_MATH_LIB version: 9 updated: 2017/01/21 11:06:25 +dnl CF_MATH_LIB version: 10 updated: 2020/12/31 18:40:20 dnl ----------- dnl Checks for libraries. At least one UNIX system, Apple Macintosh dnl Rhapsody 5.5, does not have -lm. We cannot use the simpler dnl AC_CHECK_LIB(m,sin), because that fails for C++. AC_DEFUN([CF_MATH_LIB], [ AC_CACHE_CHECK(if -lm needed for math functions, cf_cv_need_libm,[ AC_TRY_LINK([ #include <stdio.h> #include <stdlib.h> #include <math.h> ], - [double x = rand(); printf("result = %g\n", ]ifelse([$2],,sin(x),$2)[)], + [double x = rand(); printf("result = %g\\n", ]ifelse([$2],,sin(x),$2)[)], [cf_cv_need_libm=no], [cf_cv_need_libm=yes])]) if test "$cf_cv_need_libm" = yes then ifelse($1,,[ CF_ADD_LIB(m) ],[$1=-lm]) fi ]) dnl --------------------------------------------------------------------------- -dnl CF_MBSTATE_T version: 4 updated: 2012/10/06 08:57:51 +dnl CF_MBSTATE_T version: 5 updated: 2020/03/19 20:23:48 dnl ------------ dnl Check if mbstate_t is declared, and if so, which header file. dnl This (including wchar.h) is needed on Tru64 5.0 to declare mbstate_t, dnl as well as include stdio.h to work around a misuse of varargs in wchar.h AC_DEFUN([CF_MBSTATE_T], [ AC_CACHE_CHECK(if we must include wchar.h to declare mbstate_t,cf_cv_mbstate_t,[ AC_TRY_COMPILE([ #include <stdlib.h> #include <stdio.h> #ifdef HAVE_LIBUTF8_H #include <libutf8.h> #endif], - [mbstate_t state], + [mbstate_t state; (void)state], [cf_cv_mbstate_t=no], [AC_TRY_COMPILE([ #include <stdlib.h> #include <stdio.h> #include <wchar.h> #ifdef HAVE_LIBUTF8_H #include <libutf8.h> #endif], - [mbstate_t value], + [mbstate_t value; (void)value], [cf_cv_mbstate_t=yes], [cf_cv_mbstate_t=unknown])])]) if test "$cf_cv_mbstate_t" = yes ; then AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h]) fi if test "$cf_cv_mbstate_t" != unknown ; then AC_DEFINE(HAVE_MBSTATE_T,1,[Define to 1 if mbstate_t is declared]) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00 +dnl CF_MERGE_EXTRA_CFLAGS version: 2 updated: 2021/01/02 09:31:20 +dnl --------------------- +dnl CF_FIX_WARNINGS moves problematic flags into EXTRA_CFLAGS, but some scripts +dnl may depend on being able to override that variable at build-time. Move it +dnl all back. +define([CF_MERGE_EXTRA_CFLAGS],[ +if test "$GCC" = yes || test "$GXX" = yes +then + CF_APPEND_TEXT(CFLAGS,$EXTRA_CFLAGS) + EXTRA_CFLAGS= +fi +]) +dnl --------------------------------------------------------------------------- +dnl CF_MIXEDCASE_FILENAMES version: 9 updated: 2021/01/01 16:53:59 dnl ---------------------- dnl Check if the file-system supports mixed-case filenames. If we're able to dnl create a lowercase name and see it as uppercase, it doesn't support that. AC_DEFUN([CF_MIXEDCASE_FILENAMES], [ AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ if test "$cross_compiling" = yes ; then - case $target_alias in - (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) + case "$target_alias" in + (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi ]) test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32 dnl ---------- dnl Write a debug message to config.log, along with the line number in the dnl configure script. AC_DEFUN([CF_MSG_LOG],[ echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_CC_CHECK version: 4 updated: 2007/07/29 10:39:05 +dnl CF_NCURSES_CC_CHECK version: 5 updated: 2020/12/31 20:19:42 dnl ------------------- dnl Check if we can compile with ncurses' header file dnl $1 is the cache variable to set dnl $2 is the header-file to include dnl $3 is the root name (ncurses or ncursesw) AC_DEFUN([CF_NCURSES_CC_CHECK],[ AC_TRY_COMPILE([ ]ifelse($3,ncursesw,[ #define _XOPEN_SOURCE_EXTENDED #undef HAVE_LIBUTF8_H /* in case we used CF_UTF8_LIB */ #define HAVE_LIBUTF8_H /* to force ncurses' header file to use cchar_t */ ])[ #include <$2>],[ #ifdef NCURSES_VERSION ]ifelse($3,ncursesw,[ #ifndef WACS_BSSB make an error #endif ])[ -printf("%s\n", NCURSES_VERSION); +printf("%s\\n", NCURSES_VERSION); #else #ifdef __NCURSES_H -printf("old\n"); +printf("old\\n"); #else make an error #endif #endif ] ,[$1=$2] ,[$1=no]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_CONFIG version: 21 updated: 2018/06/20 20:23:13 +dnl CF_NCURSES_CONFIG version: 26 updated: 2021/01/03 08:05:37 dnl ----------------- dnl Tie together the configure-script macros for ncurses, preferring these in dnl order: dnl a) ".pc" files for pkg-config, using $NCURSES_CONFIG_PKG dnl b) the "-config" script from ncurses, using $NCURSES_CONFIG dnl c) just plain libraries dnl dnl $1 is the root library name (default: "ncurses") AC_DEFUN([CF_NCURSES_CONFIG],[ AC_REQUIRE([CF_PKG_CONFIG]) cf_ncuconfig_root=ifelse($1,,ncurses,$1) cf_have_ncuconfig=no if test "x${PKG_CONFIG:=none}" != xnone; then AC_MSG_CHECKING(pkg-config for $cf_ncuconfig_root) if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then AC_MSG_RESULT(yes) AC_MSG_CHECKING(if the $cf_ncuconfig_root package files work) cf_have_ncuconfig=unknown + cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" - CF_ADD_CFLAGS(`$PKG_CONFIG --cflags $cf_ncuconfig_root`) - CF_ADD_LIBS(`$PKG_CONFIG --libs $cf_ncuconfig_root`) + cf_pkg_cflags="`$PKG_CONFIG --cflags $cf_ncuconfig_root`" + cf_pkg_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" + + # while -W for passing linker flags is prevalent, it is not "standard". + # At least one wrapper for c89/c99 (in Apple's xcode) has its own + # incompatible _and_ non-standard -W option which gives an error. Work + # around that pitfall. + case "x${CC}@@${cf_pkg_libs}@${cf_pkg_cflags}" in + (x*c[[89]]9@@*-W*) + CF_ADD_CFLAGS($cf_pkg_cflags) + CF_ADD_LIBS($cf_pkg_libs) + + AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], + [initscr(); mousemask(0,0); tigetstr((char *)0);], + [AC_TRY_RUN([#include <${cf_cv_ncurses_header:-curses.h}> + int main(void) + { char *xx = curses_version(); return (xx == 0); }], + [cf_test_ncuconfig=yes], + [cf_test_ncuconfig=no], + [cf_test_ncuconfig=maybe])], + [cf_test_ncuconfig=no]) + + CFLAGS="$cf_save_CFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + + if test "x$cf_test_ncuconfig" != xyes; then + cf_temp=`echo "x$cf_pkg_cflags" | sed -e s/^x// -e 's/-W[[^ ]]*//g'` + cf_pkg_cflags="$cf_temp" + cf_temp=`echo "x$cf_pkg_libs" | sed -e s/^x// -e 's/-W[[^ ]]*//g'` + cf_pkg_libs="$cf_temp" + fi + ;; + esac + + CF_ADD_CFLAGS($cf_pkg_cflags) + CF_ADD_LIBS($cf_pkg_libs) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], - [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], + [initscr(); mousemask(0,0); tigetstr((char *)0);], [AC_TRY_RUN([#include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); }], [cf_have_ncuconfig=yes], [cf_have_ncuconfig=no], [cf_have_ncuconfig=maybe])], [cf_have_ncuconfig=no]) AC_MSG_RESULT($cf_have_ncuconfig) test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) NCURSES_CONFIG_PKG=$cf_ncuconfig_root CF_TERM_HEADER fi else AC_MSG_RESULT(no) NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}" CF_ACVERSION_CHECK(2.52, [AC_CHECK_TOOLS(NCURSES_CONFIG, ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)], [AC_PATH_PROGS(NCURSES_CONFIG, ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)]) if test "$NCURSES_CONFIG" != none ; then CF_ADD_CFLAGS(`$NCURSES_CONFIG --cflags`) CF_ADD_LIBS(`$NCURSES_CONFIG --libs`) # even with config script, some packages use no-override for curses.h CF_CURSES_HEADER(ifelse($1,,ncurses,$1)) dnl like CF_NCURSES_CPPFLAGS AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) dnl like CF_NCURSES_LIBS CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_ncuconfig_root) AC_DEFINE_UNQUOTED($cf_nculib_ROOT) dnl like CF_NCURSES_VERSION - cf_cv_ncurses_version=`$NCURSES_CONFIG --version` + cf_cv_ncurses_version="`$NCURSES_CONFIG --version`" else CF_NCURSES_CPPFLAGS(ifelse($1,,ncurses,$1)) CF_NCURSES_LIBS(ifelse($1,,ncurses,$1)) fi else NCURSES_CONFIG=none fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_CPPFLAGS version: 21 updated: 2012/10/06 08:57:51 +dnl CF_NCURSES_CPPFLAGS version: 22 updated: 2021/01/02 09:31:20 dnl ------------------- dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting dnl the CPPFLAGS variable so we can include its header. dnl dnl The header files may be installed as either curses.h, or ncurses.h (would dnl be obsolete, except that some packagers prefer this name to distinguish it dnl from a "native" curses implementation). If not installed for overwrite, dnl the curses.h file would be in an ncurses subdirectory (e.g., dnl /usr/include/ncurses), but someone may have installed overwriting the dnl vendor's curses. Only very old versions (pre-1.9.2d, the first autoconf'd dnl version) of ncurses don't define either __NCURSES_H or NCURSES_VERSION in dnl the header. dnl dnl If the installer has set $CFLAGS or $CPPFLAGS so that the ncurses header dnl is already in the include-path, don't even bother with this, since we cannot dnl easily determine which file it is. In this case, it has to be <curses.h>. dnl dnl The optional parameter gives the root name of the library, in case it is dnl not installed as the default curses library. That is how the dnl wide-character version of ncurses is installed. AC_DEFUN([CF_NCURSES_CPPFLAGS], [AC_REQUIRE([CF_WITH_CURSES_DIR]) AC_PROVIDE([CF_CURSES_CPPFLAGS])dnl cf_ncuhdr_root=ifelse($1,,ncurses,$1) test -n "$cf_cv_curses_dir" && \ test "$cf_cv_curses_dir" != "no" && { \ CF_ADD_INCDIR($cf_cv_curses_dir/include/$cf_ncuhdr_root) } AC_CACHE_CHECK(for $cf_ncuhdr_root header in include-path, cf_cv_ncurses_h,[ cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" - ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" + { test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw; } && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do CF_NCURSES_CC_CHECK(cf_cv_ncurses_h,$cf_header,$1) test "$cf_cv_ncurses_h" != no && break done ]) CF_NCURSES_HEADER CF_TERM_HEADER # some applications need this, but should check for NCURSES_VERSION AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) CF_NCURSES_VERSION ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_HEADER version: 4 updated: 2015/04/15 19:08:48 +dnl CF_NCURSES_HEADER version: 7 updated: 2021/01/04 19:33:05 dnl ----------------- dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common dnl variations of ncurses' installs. dnl dnl See also CF_CURSES_HEADER, which sets the same cache variable. AC_DEFUN([CF_NCURSES_HEADER],[ if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else AC_CACHE_CHECK(for $cf_ncuhdr_root include-path, cf_cv_ncurses_h2,[ test -n "$verbose" && echo CF_HEADER_PATH(cf_search,$cf_ncuhdr_root) - test -n "$verbose" && echo search path $cf_search + test -n "$verbose" && echo "search path $cf_search" cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do CF_ADD_INCDIR($cf_incdir) for cf_header in \ ncurses.h \ curses.h do CF_NCURSES_CC_CHECK(cf_cv_ncurses_h2,$cf_header,$1) if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header - test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&AC_FD_MSG + test -n "$verbose" && echo $ECHO_N " ... found $ECHO_C" 1>&AC_FD_MSG break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&AC_FD_MSG done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && AC_MSG_ERROR(not found) ]) CF_DIRNAME(cf_1st_incdir,$cf_cv_ncurses_h2) - cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` - if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then - cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header + cf_cv_ncurses_header="`basename "$cf_cv_ncurses_h2"`" + if test "`basename "$cf_1st_incdir"`" = "$cf_ncuhdr_root" ; then + cf_cv_ncurses_header="$cf_ncuhdr_root/$cf_cv_ncurses_header" fi CF_ADD_INCDIR($cf_1st_incdir) fi # Set definitions to allow ifdef'ing for ncurses.h -case $cf_cv_ncurses_header in +case "$cf_cv_ncurses_header" in (*ncurses.h) AC_DEFINE(HAVE_NCURSES_H,1,[Define to 1 if we have ncurses.h]) ;; esac -case $cf_cv_ncurses_header in +case "$cf_cv_ncurses_header" in (ncurses/curses.h|ncurses/ncurses.h) AC_DEFINE(HAVE_NCURSES_NCURSES_H,1,[Define to 1 if we have ncurses/ncurses.h]) ;; (ncursesw/curses.h|ncursesw/ncurses.h) AC_DEFINE(HAVE_NCURSESW_NCURSES_H,1,[Define to 1 if we have ncursesw/ncurses.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_LIBS version: 17 updated: 2015/04/15 19:08:48 +dnl CF_NCURSES_LIBS version: 20 updated: 2021/01/03 08:05:37 dnl --------------- dnl Look for the ncurses library. This is a little complicated on Linux, dnl because it may be linked with the gpm (general purpose mouse) library. dnl Some distributions have gpm linked with (bsd) curses, which makes it dnl unusable with ncurses. However, we don't want to link with gpm unless dnl ncurses has a dependency, since gpm is normally set up as a shared library, dnl and the linker will record a dependency. dnl dnl The optional parameter gives the root name of the library, in case it is dnl not installed as the default curses library. That is how the dnl wide-character version of ncurses is installed. AC_DEFUN([CF_NCURSES_LIBS], [AC_REQUIRE([CF_NCURSES_CPPFLAGS]) cf_nculib_root=ifelse($1,,ncurses,$1) # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" AC_CHECK_LIB(gpm,Gpm_Open, [AC_CHECK_LIB(gpm,initscr, [LIBS="$cf_ncurses_SAVE"], [cf_ncurses_LIBS="-lgpm"])]) -case $host_os in +case "$host_os" in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"]) fi ;; esac CF_ADD_LIBS($cf_ncurses_LIBS) -if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) +if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" then CF_ADD_LIBS(-l$cf_nculib_root) else CF_FIND_LIBRARY($cf_nculib_root,$cf_nculib_root, [#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], initscr) fi if test -n "$cf_ncurses_LIBS" ; then AC_MSG_CHECKING(if we can link $cf_nculib_root without $cf_ncurses_LIBS) cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do - q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` + q=`echo "$LIBS" | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], - [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], + [initscr(); mousemask(0,0); tigetstr((char *)0);], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) LIBS="$cf_ncurses_SAVE"]) fi CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_nculib_root) AC_DEFINE_UNQUOTED($cf_nculib_ROOT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_PTHREADS version: 2 updated: 2016/04/22 05:07:41 dnl ------------------- dnl Use this followup check to ensure that we link with pthreads if ncurses dnl uses it. AC_DEFUN([CF_NCURSES_PTHREADS],[ : ${cf_nculib_root:=ifelse($1,,ncurses,$1)} AC_CHECK_LIB($cf_nculib_root,_nc_init_pthreads, cf_cv_ncurses_pthreads=yes, cf_cv_ncurses_pthreads=no) if test "$cf_cv_ncurses_pthreads" = yes then CF_ADD_LIBS(-lpthread) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_VERSION version: 15 updated: 2017/05/09 19:26:10 +dnl CF_NCURSES_VERSION version: 16 updated: 2020/12/31 20:19:42 dnl ------------------ dnl Check for the version of ncurses, to aid in reporting bugs, etc. dnl Call CF_CURSES_CPPFLAGS first, or CF_NCURSES_CPPFLAGS. We don't use dnl AC_REQUIRE since that does not work with the shell's if/then/else/fi. AC_DEFUN([CF_NCURSES_VERSION], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for ncurses version, cf_cv_ncurses_version,[ cf_cv_ncurses_version=no cf_tempfile=out$$ - rm -f $cf_tempfile + rm -f "$cf_tempfile" AC_TRY_RUN([ #include <${cf_cv_ncurses_header:-curses.h}> #include <stdio.h> int main(void) { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH - fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); + fprintf(fp, "%s.%d\\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else - fprintf(fp, "%s\n", NCURSES_VERSION); + fprintf(fp, "%s\\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H - fprintf(fp, "old\n"); + fprintf(fp, "old\\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); }],[ cf_cv_ncurses_version=`cat $cf_tempfile`],,[ # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. - cat > conftest.$ac_ext <<EOF + cat > "conftest.$ac_ext" <<EOF #include <${cf_cv_ncurses_header:-curses.h}> #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&AC_FD_CC | grep '^Autoconf ' >conftest.out" AC_TRY_EVAL(cf_try) if test -f conftest.out ; then - cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[[^"]]*"%%' -e 's%".*%%'` + cf_out=`sed -e 's%^Autoconf %%' -e 's%^[[^"]]*"%%' -e 's%".*%%' conftest.out` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi ]) - rm -f $cf_tempfile + rm -f "$cf_tempfile" ]) test "$cf_cv_ncurses_version" = no || AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NL_LANGINFO_1STDAY version: 1 updated: 2016/02/08 19:06:25 +dnl CF_NL_LANGINFO_1STDAY version: 3 updated: 2020/03/19 20:23:48 dnl --------------------- dnl glibc locale support has runtime extensions which might be implemented in dnl other systems. AC_DEFUN([CF_NL_LANGINFO_1STDAY],[ AC_CACHE_CHECK(if runtime has nl_langinfo support for first weekday, cf_nl_langinfo_1stday,[ AC_TRY_COMPILE([ #include <langinfo.h> #include <locale.h> ],[ int first_weekday = nl_langinfo (_NL_TIME_FIRST_WEEKDAY)[0]; long week_1stday_l = (long) nl_langinfo (_NL_TIME_WEEK_1STDAY); + (void) first_weekday; + (void) week_1stday_l; ],[cf_nl_langinfo_1stday=yes ],[cf_nl_langinfo_1stday=no ]) ]) -test "x$cf_nl_langinfo_1stday" = xyes && AC_DEFINE(HAVE_NL_LANGINFO_1STDAY) +test "x$cf_nl_langinfo_1stday" = xyes && AC_DEFINE(HAVE_NL_LANGINFO_1STDAY,1,[Define to 1 if runtime has nl_langinfo support for first weekday]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00 +dnl CF_NO_LEAKS_OPTION version: 8 updated: 2021/01/05 20:05:09 dnl ------------------ dnl see CF_WITH_NO_LEAKS AC_DEFUN([CF_NO_LEAKS_OPTION],[ AC_MSG_CHECKING(if you want to use $1 for testing) AC_ARG_WITH($1, [$2], [AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[ $4 ]) - : ${with_cflags:=-g} - : ${with_no_leaks:=yes} + : "${with_cflags:=-g}" + : "${enable_leaks:=no}" with_$1=yes], [with_$1=]) AC_MSG_RESULT(${with_$1:-no}) -case .$with_cflags in +case ".$with_cflags" in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) CF_ADD_CFLAGS([-g]) ;; esac ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_NUMBER_SYNTAX version: 2 updated: 2015/04/17 21:13:04 dnl ---------------- dnl Check if the given variable is a number. If not, report an error. dnl $1 is the variable dnl $2 is the message AC_DEFUN([CF_NUMBER_SYNTAX],[ if test -n "$1" ; then case $1 in ([[0-9]]*) ;; (*) AC_MSG_ERROR($2 is not a number: $1) ;; esac else AC_MSG_ERROR($2 value is empty) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_OUR_MESSAGES version: 7 updated: 2004/09/12 19:45:55 +dnl CF_OUR_MESSAGES version: 8 updated: 2021/01/02 09:31:20 dnl --------------- dnl Check if we use the messages included with this program dnl dnl $1 specifies either Makefile or makefile, defaulting to the former. dnl dnl Sets variables which can be used to substitute in makefiles: dnl MSG_DIR_MAKE - to make ./po directory dnl SUB_MAKEFILE - makefile in ./po directory (see CF_BUNDLED_INTL) dnl AC_DEFUN([CF_OUR_MESSAGES], [ cf_makefile=ifelse($1,,Makefile,$1) use_our_messages=no if test "$USE_NLS" = yes ; then -if test -d $srcdir/po ; then +if test -d "$srcdir/po" ; then AC_MSG_CHECKING(if we should use included message-library) AC_ARG_ENABLE(included-msgs, [ --disable-included-msgs use included messages, for i18n support], [use_our_messages=$enableval], [use_our_messages=yes]) fi AC_MSG_RESULT($use_our_messages) fi MSG_DIR_MAKE="#" if test "$use_our_messages" = yes then SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn" MSG_DIR_MAKE= fi AC_SUBST(MSG_DIR_MAKE) AC_SUBST(SUB_MAKEFILE) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PATHSEP version: 7 updated: 2015/04/12 15:39:00 +dnl CF_PATHSEP version: 8 updated: 2021/01/01 13:31:04 dnl ---------- dnl Provide a value for the $PATH and similar separator (or amend the value dnl as provided in autoconf 2.5x). AC_DEFUN([CF_PATHSEP], [ AC_MSG_CHECKING(for PATH separator) - case $cf_cv_system_name in + case "$cf_cv_system_name" in (os2*) PATH_SEPARATOR=';' ;; (*) ${PATH_SEPARATOR:=':'} ;; esac ifelse([$1],,,[$1=$PATH_SEPARATOR]) AC_SUBST(PATH_SEPARATOR) AC_MSG_RESULT($PATH_SEPARATOR) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57 +dnl CF_PATH_SYNTAX version: 18 updated: 2020/12/31 18:40:20 dnl -------------- dnl Check the argument to see that it looks like a pathname. Rewrite it if it dnl begins with one of the prefix/exec_prefix variables, and then again if the dnl result begins with 'NONE'. This is necessary to work around autoconf's dnl delayed evaluation of those symbols. AC_DEFUN([CF_PATH_SYNTAX],[ if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".[$]$1" in (.\[$]\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX ;; -(.\[$]{*prefix}*|.\[$]{*dir}*) +(.\[$]\{*prefix\}*|.\[$]\{*dir\}*) eval $1="[$]$1" case ".[$]$1" in (.NONE/*) - $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` + $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) - $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` + $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%` ;; (*) ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PDCURSES_X11 version: 14 updated: 2018/06/20 20:23:13 +dnl CF_PDCURSES_X11 version: 15 updated: 2021/01/02 09:31:20 dnl --------------- dnl Configure for PDCurses' X11 library AC_DEFUN([CF_PDCURSES_X11],[ AC_REQUIRE([CF_X_ATHENA]) CF_ACVERSION_CHECK(2.52, [AC_CHECK_TOOLS(XCURSES_CONFIG, xcurses-config, none)], [AC_PATH_PROGS(XCURSES_CONFIG, xcurses-config, none)]) if test "$XCURSES_CONFIG" != none ; then CF_ADD_CFLAGS(`$XCURSES_CONFIG --cflags`) CF_ADD_LIBS(`$XCURSES_CONFIG --libs`) cf_cv_lib_XCurses=yes else LDFLAGS="$LDFLAGS $X_LIBS" CF_CHECK_CFLAGS($X_CFLAGS) AC_CHECK_LIB(X11,XOpenDisplay, [CF_ADD_LIBS(-lX11)],, [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS]) AC_CACHE_CHECK(for XCurses library,cf_cv_lib_XCurses,[ CF_ADD_LIBS(-lXCurses) AC_TRY_LINK([ #include <xcurses.h> char *XCursesProgramName = "test"; ],[XCursesExit();], [cf_cv_lib_XCurses=yes], [cf_cv_lib_XCurses=no]) ]) fi -if test $cf_cv_lib_XCurses = yes ; then +if test "$cf_cv_lib_XCurses" = yes ; then AC_DEFINE(UNIX,1,[Define to 1 if using PDCurses on Unix]) AC_DEFINE(XCURSES,1,[Define to 1 if using PDCurses on Unix]) AC_CHECK_HEADER(xcurses.h, AC_DEFINE(HAVE_XCURSES,1,[Define to 1 if using PDCurses on Unix])) else AC_MSG_ERROR(Cannot link with XCurses) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PKG_CONFIG version: 10 updated: 2015/04/26 18:06:58 +dnl CF_PKG_CONFIG version: 11 updated: 2021/01/01 13:31:04 dnl ------------- dnl Check for the package-config program, unless disabled by command-line. AC_DEFUN([CF_PKG_CONFIG], [ AC_MSG_CHECKING(if you want to use pkg-config) AC_ARG_WITH(pkg-config, [ --with-pkg-config{=path} enable/disable use of pkg-config], [cf_pkg_config=$withval], [cf_pkg_config=yes]) AC_MSG_RESULT($cf_pkg_config) -case $cf_pkg_config in +case "$cf_pkg_config" in (no) PKG_CONFIG=none ;; (yes) CF_ACVERSION_CHECK(2.52, [AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)], [AC_PATH_PROG(PKG_CONFIG, pkg-config, none)]) ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then CF_PATH_SYNTAX(PKG_CONFIG) elif test "x$cf_pkg_config" != xno ; then AC_MSG_WARN(pkg-config is not installed) fi AC_SUBST(PKG_CONFIG) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_POSIX_C_SOURCE version: 10 updated: 2018/06/20 20:23:13 +dnl CF_POSIX_C_SOURCE version: 11 updated: 2018/12/31 20:46:17 dnl ----------------- dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed. dnl dnl POSIX.1-1990 _POSIX_SOURCE dnl POSIX.1-1990 and _POSIX_SOURCE and dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2 dnl Bindings Option dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L dnl X/Open 2000 _POSIX_C_SOURCE=200112L dnl dnl Parameters: dnl $1 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_POSIX_C_SOURCE], -[ +[AC_REQUIRE([CF_POSIX_VISIBLE])dnl + +if test "$cf_cv_posix_visible" = no; then + cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1]) cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE) CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE) AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[ CF_MSG_LOG(if the symbol is already defined go no further) AC_TRY_COMPILE([#include <sys/types.h>],[ #ifndef _POSIX_C_SOURCE make an error #endif], [cf_cv_posix_c_source=no], [cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[[12]]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then AC_TRY_COMPILE([#include <sys/types.h>],[ #ifdef _POSIX_SOURCE make an error #endif],[], cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE") fi CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE) CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,$cf_cv_posix_c_source) CF_MSG_LOG(if the second compile does not leave our definition intact error) AC_TRY_COMPILE([#include <sys/types.h>],[ #ifndef _POSIX_C_SOURCE make an error #endif],, [cf_cv_posix_c_source=no]) CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" ]) ]) if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_ADD_CFLAGS($cf_cv_posix_c_source) fi +fi # cf_cv_posix_visible + +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_POSIX_VISIBLE version: 1 updated: 2018/12/31 20:46:17 +dnl ---------------- +dnl POSIX documents test-macros which an application may set before any system +dnl headers are included to make features available. +dnl +dnl Some BSD platforms (originally FreeBSD, but copied by a few others) +dnl diverged from POSIX in 2002 by setting symbols which make all of the most +dnl recent features visible in the system header files unless the application +dnl overrides the corresponding test-macros. Doing that introduces portability +dnl problems. +dnl +dnl This macro makes a special check for the symbols used for this, to avoid a +dnl conflicting definition. +AC_DEFUN([CF_POSIX_VISIBLE], +[ +AC_CACHE_CHECK(if the POSIX test-macros are already defined,cf_cv_posix_visible,[ +AC_TRY_COMPILE([#include <stdio.h>],[ +#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \ + && defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \ + && defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \ + && defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0) +#error conflicting symbols found +#endif +],[cf_cv_posix_visible=no],[cf_cv_posix_visible=yes]) +]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_AR version: 1 updated: 2009/01/01 20:15:22 dnl ---------- dnl Check for archiver "ar". AC_DEFUN([CF_PROG_AR],[ AC_CHECK_TOOL(AR, ar, ar) ]) dnl --------------------------------------------------------------------------- -dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58 +dnl CF_PROG_CC version: 5 updated: 2019/12/31 08:53:54 dnl ---------- dnl standard check for CC, plus followup sanity checks dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name AC_DEFUN([CF_PROG_CC],[ +CF_ACVERSION_CHECK(2.53, + [AC_MSG_WARN(this will incorrectly handle gnatgcc choice) + AC_REQUIRE([AC_PROG_CC])], + []) ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)]) CF_GCC_VERSION CF_ACVERSION_CHECK(2.52, [AC_PROG_CC_STDC], [CF_ANSI_CC_REQD]) CF_CC_ENV_FLAGS ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PROG_EXT version: 14 updated: 2018/06/20 20:23:13 +dnl CF_PROG_EXT version: 15 updated: 2021/01/02 09:31:20 dnl ----------- dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX. AC_DEFUN([CF_PROG_EXT], [ AC_REQUIRE([CF_CHECK_CACHE]) -case $cf_cv_system_name in +case "$cf_cv_system_name" in (os2*) CFLAGS="$CFLAGS -Zmt" CF_APPEND_TEXT(CPPFLAGS,-D__ST_MT_ERRNO__) CXXFLAGS="$CXXFLAGS -Zmt" # autoconf's macro sets -Zexe and suffix both, which conflict:w LDFLAGS="$LDFLAGS -Zmt -Zcrtdll" ac_cv_exeext=.exe ;; esac AC_EXEEXT AC_OBJEXT PROG_EXT="$EXEEXT" AC_SUBST(PROG_EXT) test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT",[Define to the program extension (normally blank)]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_GROFF version: 3 updated: 2018/01/07 13:16:19 dnl ------------- dnl Check if groff is available, for cases (such as html output) where nroff dnl is not enough. AC_DEFUN([CF_PROG_GROFF],[ AC_PATH_PROG(GROFF_PATH,groff,no) AC_PATH_PROGS(NROFF_PATH,nroff mandoc,no) AC_PATH_PROG(TBL_PATH,tbl,cat) if test "x$GROFF_PATH" = xno then NROFF_NOTE= GROFF_NOTE="#" else NROFF_NOTE="#" GROFF_NOTE= fi AC_SUBST(GROFF_NOTE) AC_SUBST(NROFF_NOTE) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PROG_LINT version: 3 updated: 2016/05/22 15:25:54 +dnl CF_PROG_LINT version: 4 updated: 2019/11/20 18:55:37 dnl ------------ AC_DEFUN([CF_PROG_LINT], [ AC_CHECK_PROGS(LINT, lint cppcheck splint) +case "x$LINT" in +(xcppcheck|x*/cppcheck) + test -z "$LINT_OPTS" && LINT_OPTS="--enable=all" + ;; +esac AC_SUBST(LINT_OPTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LN_S version: 2 updated: 2010/08/14 18:25:37 dnl ------------ dnl Combine checks for "ln -s" and "ln -sf", updating $LN_S to include "-f" dnl option if it is supported. AC_DEFUN([CF_PROG_LN_S],[ AC_PROG_LN_S AC_MSG_CHECKING(if $LN_S -f options work) rm -f conf$$.src conf$$dst echo >conf$$.dst echo first >conf$$.src if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then cf_prog_ln_sf=yes else cf_prog_ln_sf=no fi rm -f conf$$.dst conf$$src AC_MSG_RESULT($cf_prog_ln_sf) test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f" ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50 dnl ---------------- dnl Remove all -U and -D options that refer to the given symbol from a list dnl of C compiler options. This works around the problem that not all dnl compilers process -U and -D options from left-to-right, so a -U option dnl cannot be used to cancel the effect of a preceding -D option. dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = symbol to remove define([CF_REMOVE_DEFINE], [ $1=`echo "$2" | \ sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \ -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'` ])dnl dnl --------------------------------------------------------------------------- -dnl CF_RPATH_HACK version: 11 updated: 2013/09/01 13:02:00 +dnl CF_RESTORE_XTRA_FLAGS version: 1 updated: 2020/01/11 16:47:45 +dnl --------------------- +dnl Restore flags saved in CF_SAVE_XTRA_FLAGS +dnl $1 = name of current macro +define([CF_RESTORE_XTRA_FLAGS], +[ +LIBS="$cf_save_LIBS_$1" +CFLAGS="$cf_save_CFLAGS_$1" +CPPFLAGS="$cf_save_CPPFLAGS_$1" +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_RPATH_HACK version: 13 updated: 2021/01/03 18:30:50 dnl ------------- AC_DEFUN([CF_RPATH_HACK], -[ -AC_REQUIRE([CF_LD_RPATH_OPT]) +[AC_REQUIRE([AC_PROG_FGREP])dnl +AC_REQUIRE([CF_LD_RPATH_OPT])dnl + AC_MSG_CHECKING(for updated LDFLAGS) if test -n "$LD_RPATH_OPT" ; then AC_MSG_RESULT(maybe) AC_CHECK_PROGS(cf_ldd_prog,ldd,no) cf_rpath_list="/usr/lib /lib" if test "$cf_ldd_prog" != no then cf_rpath_oops= AC_TRY_LINK([#include <stdio.h>], [printf("Hello");], - [cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq` - cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`]) + [cf_rpath_oops=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} ' not found' | sed -e 's% =>.*$%%' |sort | uniq` + cf_rpath_list=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`]) # If we passed the link-test, but get a "not found" on a given library, # this could be due to inept reconfiguration of gcc to make it only # partly honor /usr/local/lib (or whatever). Sometimes this behavior # is intentional, e.g., installing gcc in /usr/bin and suppressing the # /usr/local libraries. if test -n "$cf_rpath_oops" then for cf_rpath_src in $cf_rpath_oops do for cf_rpath_dir in \ /usr/local \ /usr/pkg \ /opt/sfw do - if test -f $cf_rpath_dir/lib/$cf_rpath_src + if test -f "$cf_rpath_dir/lib/$cf_rpath_src" then CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src) LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib" break fi done done fi fi CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS) CF_RPATH_HACK_2(LDFLAGS) CF_RPATH_HACK_2(LIBS) CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(EXTRA_LDFLAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_RPATH_HACK_2 version: 7 updated: 2015/04/12 15:39:00 +dnl CF_RPATH_HACK_2 version: 8 updated: 2021/01/01 13:31:04 dnl --------------- dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to dnl EXTRA_LDFLAGS for each -L option found. dnl dnl $cf_rpath_list contains a list of directories to ignore. dnl dnl $1 = variable name to update. The LDFLAGS variable should be the only one, dnl but LIBS often has misplaced -L options. AC_DEFUN([CF_RPATH_HACK_2], [ CF_VERBOSE(...checking $1 [$]$1) cf_rpath_dst= for cf_rpath_src in [$]$1 do - case $cf_rpath_src in + case "$cf_rpath_src" in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp) EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done $1=$cf_rpath_dst CF_VERBOSE(...checked $1 [$]$1) AC_SUBST(EXTRA_LDFLAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_SHARED_OPTS version: 92 updated: 2017/12/30 17:26:05 +dnl CF_SAVE_XTRA_FLAGS version: 1 updated: 2020/01/11 16:46:44 +dnl ------------------ +dnl Use this macro to save CFLAGS/CPPFLAGS/LIBS before checks against X headers +dnl and libraries which do not update those variables. +dnl +dnl $1 = name of current macro +define([CF_SAVE_XTRA_FLAGS], +[ +cf_save_LIBS_$1="$LIBS" +cf_save_CFLAGS_$1="$CFLAGS" +cf_save_CPPFLAGS_$1="$CPPFLAGS" +LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}" +for cf_X_CFLAGS in $X_CFLAGS +do + case "x$cf_X_CFLAGS" in + x-[[IUD]]*) + CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS" + ;; + *) + CFLAGS="$CFLAGS $cf_X_CFLAGS" + ;; + esac +done +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_SHARED_OPTS version: 105 updated: 2021/01/02 17:09:14 dnl -------------- dnl -------------- dnl Attempt to determine the appropriate CC/LD options for creating a shared dnl library. dnl dnl Notes: dnl a) ${LOCAL_LDFLAGS} is used to link executables that will run within dnl the build-tree, i.e., by making use of the libraries that are compiled in dnl $rel_builddir/lib We avoid compiling-in a $rel_builddir/lib path for the dnl shared library since that can lead to unexpected results at runtime. dnl b) ${LOCAL_LDFLAGS2} has the same intention but assumes that the shared dnl libraries are compiled in ../../lib dnl dnl The variable 'cf_cv_do_symlinks' is used to control whether we configure dnl to install symbolic links to the rel/abi versions of shared libraries. dnl dnl The variable 'cf_cv_shlib_version' controls whether we use the rel or abi dnl version when making symbolic links. dnl dnl The variable 'cf_cv_shlib_version_infix' controls whether shared library dnl version numbers are infix (ex: libncurses.<ver>.dylib) or postfix dnl (ex: libncurses.so.<ver>). dnl dnl Some loaders leave 'so_locations' lying around. It's nice to clean up. AC_DEFUN([CF_SHARED_OPTS], [ AC_REQUIRE([CF_LD_RPATH_OPT]) + RM_SHARED_OPTS= LOCAL_LDFLAGS= LOCAL_LDFLAGS2= LD_SHARED_OPTS= INSTALL_LIB="-m 644" : ${rel_builddir:=.} shlibdir=$libdir AC_SUBST(shlibdir) MAKE_DLLS="#" AC_SUBST(MAKE_DLLS) cf_cv_do_symlinks=no cf_ld_rpath_opt= test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" AC_MSG_CHECKING(if release/abi version should be used for shared libs) AC_ARG_WITH(shlib-version, [ --with-shlib-version=X Specify rel or abi version for shared libs], [test -z "$withval" && withval=auto - case $withval in + case "$withval" in (yes) cf_cv_shlib_version=auto ;; (rel|abi|auto) cf_cv_shlib_version=$withval ;; (*) AC_MSG_RESULT($withval) AC_MSG_ERROR([option value must be one of: rel, abi, or auto]) ;; esac ],[cf_cv_shlib_version=auto]) AC_MSG_RESULT($cf_cv_shlib_version) cf_cv_rm_so_locs=no cf_try_cflags= # Some less-capable ports of gcc support only -fpic CC_SHARED_OPTS= cf_try_fPIC=no if test "$GCC" = yes then cf_try_fPIC=yes else - case $cf_cv_system_name in + case "$cf_cv_system_name" in (*linux*) # e.g., PGI compiler cf_try_fPIC=yes ;; esac fi if test "$cf_try_fPIC" = yes then AC_MSG_CHECKING(which $CC option to use) cf_save_CFLAGS="$CFLAGS" for CC_SHARED_OPTS in -fPIC -fpic '' do CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" AC_TRY_COMPILE([#include <stdio.h>],[int x = 1],[break],[]) done AC_MSG_RESULT($CC_SHARED_OPTS) CFLAGS="$cf_save_CFLAGS" fi cf_cv_shlib_version_infix=no - case $cf_cv_system_name in + case "$cf_cv_system_name" in (aix4.[3-9]*|aix[[5-7]]*) if test "$GCC" = yes; then CC_SHARED_OPTS='-Wl,-brtl' MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' else CC_SHARED_OPTS='-brtl' # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' fi ;; (beos*) MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' ;; (cygwin*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=cygdll cf_cv_shlib_version_infix=cygdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/cyg/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* ${LDFLAGS} -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (msys*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=msysdll cf_cv_shlib_version_infix=msysdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/msys-/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* ${LDFLAGS} -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $[@]` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi cf_cv_shlib_version_infix=yes AC_CACHE_CHECK([if ld -search_paths_first works], cf_cv_ldflags_search_paths_first, [ cf_save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], cf_cv_ldflags_search_paths_first=yes, cf_cv_ldflags_search_paths_first=no) LDFLAGS=$cf_save_LDFLAGS]) - if test $cf_cv_ldflags_search_paths_first = yes; then + if test "$cf_cv_ldflags_search_paths_first" = yes; then LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi ;; (hpux[[7-8]]*) # HP-UX 8.07 ld lacks "+b" option used for libdir search-list if test "$GCC" != yes; then CC_SHARED_OPTS='+Z' fi MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $[@]' INSTALL_LIB="-m 555" ;; (hpux*) # (tested with gcc 2.7.2 -- I don't have c89) if test "$GCC" = yes; then LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' else CC_SHARED_OPTS='+Z' LD_SHARED_OPTS='-Wl,+b,${libdir}' fi MK_SHARED_LIB='${LD} ${LDFLAGS} +b ${libdir} -b -o $[@]' # HP-UX shared libraries must be executable, and should be # readonly to exploit a quirk in the memory manager. INSTALL_LIB="-m 555" ;; (interix*) test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}' else cf_shared_soname='`basename $[@]`' fi CC_SHARED_OPTS= MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $[@]' ;; (irix*) if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi # tested with IRIX 5.2 and 'cc'. if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $[@]` -o $[@]' else MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $[@]` -o $[@]' fi cf_cv_rm_so_locs=yes ;; (linux*|gnu*|k*bsd*-gnu) - if test "$DFT_LWR_MODEL" = "shared" ; then + if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; + (mingw*msvc*) + cf_cv_shlib_version=msvcdll + cf_cv_shlib_version_infix=msvcdll + shlibdir=$bindir + MAKE_DLLS= + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-link -dll" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + EXTRA_LDFLAGS="-link -dll $EXTRA_LDFLAGS" + fi + CC_SHARED_OPTS= + MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ ${LD} [$]{CFLAGS}' + RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.lib" + cat >mk_shared_lib.sh <<-CF_EOF + #!$SHELL + SHARED_LIB=\[$]1 + IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.lib/'\` + shift + my_ld=\[$]1 + shift + cat <<-EOF + Linking shared library + ** SHARED LIB \$SHARED_LIB + ** IMPORT_LIB \$IMPORT_LIB +EOF + args=\$(echo \[$]* | sed -E "s#-l(\w*)#\1.dll.lib#g" | sed -E "s#-L(\w*)#-LIBPATH:\1#g") + exec \$my_ld -DLL -IMPLIB:"\${IMPORT_LIB}" -OUT:"\${SHARED_LIB}" ${LDFLAGS} \$args + mv "\${IMPORT_LIB}" "\${IMPORT_LIB}" +CF_EOF + chmod +x mk_shared_lib.sh + cat >mk_prog.sh <<-CF_EOF + #!$SHELL + shift + # Ignore first argument (compiler) and use LD (link.exe) unconditionally + LD="[$]LD" + clopts=() + ldopts=("/subsystem:console") + libs=() + isdll=0 + while test \[$]# -gt 0; do + case "\[$]1" in + -link) + # ignore -link argument + ;; + -M[[TD]] | -M[[TD]]d) + # ignore runtime-library option + ;; + -dll) + isdll=1 + ;; + -W* | -w*) + # ignore warnings + ;; + -D*) + clopts+=("\[$]1") + ;; + -I*) + clopts+=("\[$]1") + ;; + -l*) + libs+=("\`echo \"\[$]1\" | sed \"s/^-l//\"\`") + ;; + -L*) + ldopts+=("\`echo \"\[$]1\" | sed \"s/^-L/-LIBPATH:/\"\`") + ;; + *.obj | *.o) + ldopts+=("\[$]1") + ;; + -Wl,*) + for linkarg in \`echo '\[$]1' | sed -e 's/-Wl,//' -e 's/,/ /'\`; do + ldopts+=("\[$]{linkarg}") + done + ;; + *.lib) + ldopts+=("\[$]1") + ;; + -o) + shift + ldopts+=("-out:\[$]1") + ;; + *) + clopts+=("\[$]1") + ldopts+=("\[$]1") + ;; + esac + shift + done + if [[ "\$isdll" -ne 0 ]]; then + for lib in \[$]{libs[[*]]}; do + ldopts+=("\[$]lib.dll.lib") + done + else + for lib in \[$]{libs[[*]]}; do + ldopts+=("\[$]lib.lib") + done + fi + cat <<-EOF + Creating program + ** ld options: "\[$]{ldopts[[@]]}" +EOF + exec \[$]LD \[$]{ldopts[[@]]} +CF_EOF + chmod +x mk_prog.sh + LINK_PROGS="$SHELL ${rel_builddir}/mk_prog.sh" + LINK_TESTS="$SHELL ${rel_builddir}/mk_prog.sh" + ;; (mingw*) cf_cv_shlib_version=mingw cf_cv_shlib_version_infix=mingw shlibdir=$bindir MAKE_DLLS= if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-Wl,--enable-auto-import" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" fi CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* ${LDFLAGS} -shared -Wl,--enable-auto-import,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (openbsd[[2-9]].*|mirbsd*) - if test "$DFT_LWR_MODEL" = "shared" ; then + if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; + (nskJ*) + CC_SHARED_OPTS= + MK_SHARED_LIB='${LD} -Wshared -Weld=-export_all -o $[@]' + ;; + (nskL*) + CC_SHARED_OPTS= + MK_SHARED_LIB='${LD} -Wshared -Wxld=-export_all -o $[@]' + ;; (nto-qnx*|openbsd*|freebsd[[12]].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (dragonfly*|freebsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (netbsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" if test "$cf_cv_shlib_version" = auto; then if test -f /usr/libexec/ld.elf_so; then cf_cv_shlib_version=abi else cf_cv_shlib_version=rel fi fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]' else - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -Wl,-shared -Wl,-Bshareable -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -o $[@]' fi ;; (osf*|mls+*) # tested with OSF/1 V3.2 and 'cc' # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't # link with shared libs). MK_SHARED_LIB='${LD} ${LDFLAGS} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $[@]`' - case $host_os in + case "$host_os" in (osf4*) MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]' - if test "$DFT_LWR_MODEL" = "shared" ; then + if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi cf_cv_rm_so_locs=yes ;; (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 # tested with osr5.0.5 if test "$GCC" != yes; then CC_SHARED_OPTS='-belf -KPIC' fi MK_SHARED_LIB='${LD} ${LDFLAGS} -dy -G -h `basename $[@] .${REL_VERSION}`.${ABI_VERSION} -o [$]@' if test "$cf_cv_enable_rpath" = yes ; then # only way is to set LD_RUN_PATH but no switch for it RUN_PATH=$libdir fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel LINK_PROGS='LD_RUN_PATH=${libdir}' LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' ;; (sunos4*) # tested with SunOS 4.1.1 and gcc 2.7.0 if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (solaris2*) # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME if test "$GCC" != yes; then cf_save_CFLAGS="$CFLAGS" for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O do CFLAGS="$cf_shared_opts $cf_save_CFLAGS" - AC_TRY_COMPILE([#include <stdio.h>],[printf("Hello\n");],[break]) + AC_TRY_COMPILE([#include <stdio.h>],[printf("Hello\\n");],[break]) done CFLAGS="$cf_save_CFLAGS" CC_SHARED_OPTS=$cf_shared_opts MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $[@]' else MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]' fi ;; (sysv5uw7*|unix_sv*) # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} ${LDFLAGS} -d y -G -o [$]@' ;; (*) CC_SHARED_OPTS='unknown' MK_SHARED_LIB='echo unknown' ;; esac # This works if the last tokens in $MK_SHARED_LIB are the -o target. case "$cf_cv_shlib_version" in (rel|abi) case "$MK_SHARED_LIB" in (*'-o $[@]') test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes ;; (*) AC_MSG_WARN(ignored --with-shlib-version) ;; esac ;; esac if test -n "$cf_try_cflags" then cat > conftest.$ac_ext <<EOF #line __oline__ "${as_me:-configure}" #include <stdio.h> int main(int argc, char *argv[[]]) { - printf("hello\n"); + printf("hello\\n"); return (argv[[argc-1]] == 0) ; } EOF cf_save_CFLAGS="$CFLAGS" for cf_opt in $cf_try_cflags do CFLAGS="$cf_save_CFLAGS -$cf_opt" AC_MSG_CHECKING(if CFLAGS option -$cf_opt works) if AC_TRY_EVAL(ac_compile); then AC_MSG_RESULT(yes) cf_save_CFLAGS="$CFLAGS" else AC_MSG_RESULT(no) fi done CFLAGS="$cf_save_CFLAGS" fi # RPATH_LIST is a colon-separated list of directories test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" - test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" + test "$cf_cv_rm_so_locs" = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" CF_VERBOSE(CC_SHARED_OPTS: $CC_SHARED_OPTS) CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) AC_SUBST(CC_SHARED_OPTS) AC_SUBST(LD_RPATH_OPT) AC_SUBST(LD_SHARED_OPTS) AC_SUBST(MK_SHARED_LIB) AC_SUBST(RM_SHARED_OPTS) AC_SUBST(LINK_PROGS) AC_SUBST(LINK_TESTS) AC_SUBST(EXTRA_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS2) AC_SUBST(INSTALL_LIB) AC_SUBST(RPATH_LIST) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SHARED_SONAME version: 3 updated: 2008/09/08 18:34:43 dnl ---------------- dnl utility macro for CF_SHARED_OPTS, constructs "$cf_cv_shared_soname" for dnl substitution into MK_SHARED_LIB string for the "-soname" (or similar) dnl option. dnl dnl $1 is the default that should be used for "$cf_cv_shlib_version". dnl If missing, use "rel". define([CF_SHARED_SONAME], [ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=ifelse($1,,rel,$1) if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $[@]`' fi ]) dnl --------------------------------------------------------------------------- -dnl CF_SIZECHANGE version: 14 updated: 2018/06/20 20:23:13 +dnl CF_SIZECHANGE version: 17 updated: 2021/01/01 13:31:04 dnl ------------- dnl Check for definitions & structures needed for window size-changing dnl dnl https://stackoverflow.com/questions/18878141/difference-between-structures-ttysize-and-winsize/50769952#50769952 AC_DEFUN([CF_SIZECHANGE], [ AC_REQUIRE([CF_STRUCT_TERMIOS]) AC_CACHE_CHECK(declaration of size-change, cf_cv_sizechange,[ cf_cv_sizechange=unknown cf_save_CPPFLAGS="$CPPFLAGS" for cf_opts in "" "NEED_PTEM_H" do CPPFLAGS="$cf_save_CPPFLAGS" if test -n "$cf_opts" then CF_APPEND_TEXT(CPPFLAGS,-D$cf_opts) fi AC_TRY_COMPILE([#include <sys/types.h> #ifdef HAVE_TERMIOS_H #include <termios.h> #else #ifdef HAVE_TERMIO_H #include <termio.h> #endif #endif #ifdef NEED_PTEM_H /* This is a workaround for SCO: they neglected to define struct winsize in * termios.h -- it's only in termio.h and ptem.h */ #include <sys/stream.h> #include <sys/ptem.h> #endif #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif ],[ #ifdef TIOCGSIZE struct ttysize win; /* SunOS 3.0... */ - int y = win.ts_lines; - int x = win.ts_cols; + int y = win.ts_lines = 2; + int x = win.ts_cols = 1; + (void)y; + (void)x; #else #ifdef TIOCGWINSZ struct winsize win; /* everything else */ - int y = win.ws_row; - int x = win.ws_col; + int y = win.ws_row = 2; + int x = win.ws_col = 1; + (void)y; + (void)x; #else no TIOCGSIZE or TIOCGWINSZ #endif /* TIOCGWINSZ */ #endif /* TIOCGSIZE */ ], [cf_cv_sizechange=yes], [cf_cv_sizechange=no]) CPPFLAGS="$cf_save_CPPFLAGS" if test "$cf_cv_sizechange" = yes ; then echo "size-change succeeded ($cf_opts)" >&AC_FD_CC test -n "$cf_opts" && cf_cv_sizechange="$cf_opts" break fi done ]) if test "$cf_cv_sizechange" != no ; then AC_DEFINE(HAVE_SIZECHANGE,1,[Define to 1 if sizechange declarations are provided]) - case $cf_cv_sizechange in + case "$cf_cv_sizechange" in (NEED*) AC_DEFINE_UNQUOTED($cf_cv_sizechange ) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_STRUCT_TERMIOS version: 9 updated: 2018/06/08 21:57:23 +dnl CF_STRUCT_TERMIOS version: 11 updated: 2020/03/19 20:46:13 dnl ----------------- dnl Some machines require _POSIX_SOURCE to completely define struct termios. AC_DEFUN([CF_STRUCT_TERMIOS],[ AC_REQUIRE([CF_XOPEN_SOURCE]) AC_CHECK_HEADERS( \ termio.h \ termios.h \ unistd.h \ sys/ioctl.h \ sys/termio.h \ ) if test "$ac_cv_header_termios_h" = yes ; then case "$CFLAGS $CPPFLAGS" in (*-D_POSIX_SOURCE*) termios_bad=dunno ;; (*) termios_bad=maybe ;; esac if test "$termios_bad" = maybe ; then AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE) AC_TRY_COMPILE([#include <termios.h>], - [struct termios foo; int x = foo.c_iflag], + [struct termios foo; int x = foo.c_iflag = 1; (void)x], termios_bad=no, [ AC_TRY_COMPILE([ #define _POSIX_SOURCE #include <termios.h>], - [struct termios foo; int x = foo.c_iflag], + [struct termios foo; int x = foo.c_iflag = 2; (void)x], termios_bad=unknown, termios_bad=yes AC_DEFINE(_POSIX_SOURCE,1,[Define to 1 if we must define _POSIX_SOURCE])) ]) AC_MSG_RESULT($termios_bad) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_SUBDIR_PATH version: 7 updated: 2014/12/04 04:33:06 dnl -------------- dnl Construct a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib AC_DEFUN([CF_SUBDIR_PATH], [ $1= CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE) for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ [$]HOME do CF_ADD_SUBDIR_PATH($1,$2,$3,$cf_subdir_prefix,$prefix) done ])dnl dnl --------------------------------------------------------------------------- -dnl CF_TERM_HEADER version: 4 updated: 2015/04/15 19:08:48 +dnl CF_TERM_HEADER version: 6 updated: 2021/01/02 09:31:20 dnl -------------- dnl Look for term.h, which is part of X/Open curses. It defines the interface dnl to terminfo database. Usually it is in the same include-path as curses.h, dnl but some packagers change this, breaking various applications. AC_DEFUN([CF_TERM_HEADER],[ AC_CACHE_CHECK(for terminfo header, cf_cv_term_header,[ -case ${cf_cv_ncurses_header} in +case "${cf_cv_ncurses_header}" in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[[^.]]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do AC_TRY_COMPILE([#include <stdio.h> #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> -],[int x = auto_left_margin],[ +],[int x = auto_left_margin; (void)x],[ cf_cv_term_header="$cf_test"],[ cf_cv_term_header=unknown ]) test "$cf_cv_term_header" != unknown && break done ]) # Set definitions to allow ifdef'ing to accommodate subdirectories -case $cf_cv_term_header in +case "$cf_cv_term_header" in (*term.h) AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h]) ;; esac -case $cf_cv_term_header in +case "$cf_cv_term_header" in (ncurses/term.h) AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h]) ;; (ncursesw/term.h) AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_TRIM_X_LIBS version: 3 updated: 2015/04/12 15:39:00 dnl -------------- dnl Trim extra base X libraries added as a workaround for inconsistent library dnl dependencies returned by "new" pkg-config files. AC_DEFUN([CF_TRIM_X_LIBS],[ for cf_trim_lib in Xmu Xt X11 do case "$LIBS" in (*-l$cf_trim_lib\ *-l$cf_trim_lib*) LIBS=`echo "$LIBS " | sed -e 's/ / /g' -e 's%-l'"$cf_trim_lib"' %%' -e 's/ $//'` CF_VERBOSE(..trimmed $LIBS) ;; esac done ]) dnl --------------------------------------------------------------------------- -dnl CF_TRY_PKG_CONFIG version: 5 updated: 2013/07/06 21:27:06 +dnl CF_TRY_PKG_CONFIG version: 6 updated: 2020/12/31 10:54:15 dnl ----------------- dnl This is a simple wrapper to use for pkg-config, for libraries which may be dnl available in that form. dnl -dnl $1 = package name +dnl $1 = package name, which may be a shell variable dnl $2 = extra logic to use, if any, after updating CFLAGS and LIBS dnl $3 = logic to use if pkg-config does not have the package AC_DEFUN([CF_TRY_PKG_CONFIG],[ AC_REQUIRE([CF_PKG_CONFIG]) -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists $1; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$1"; then CF_VERBOSE(found package $1) - cf_pkgconfig_incs="`$PKG_CONFIG --cflags $1 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs $1 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "$1" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "$1" 2>/dev/null`" CF_VERBOSE(package $1 CFLAGS: $cf_pkgconfig_incs) CF_VERBOSE(package $1 LIBS: $cf_pkgconfig_libs) CF_ADD_CFLAGS($cf_pkgconfig_incs) CF_ADD_LIBS($cf_pkgconfig_libs) ifelse([$2],,:,[$2]) else cf_pkgconfig_incs= cf_pkgconfig_libs= ifelse([$3],,:,[$3]) fi ]) dnl --------------------------------------------------------------------------- dnl CF_TRY_XOPEN_SOURCE version: 2 updated: 2018/06/20 20:23:13 dnl ------------------- dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we dnl can define it successfully. AC_DEFUN([CF_TRY_XOPEN_SOURCE],[ AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[ AC_TRY_COMPILE([ #include <stdlib.h> #include <string.h> #include <sys/types.h> ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_save="$CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE) AC_TRY_COMPILE([ #include <stdlib.h> #include <string.h> #include <sys/types.h> ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_cv_xopen_source=$cf_XOPEN_SOURCE]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_xopen_source" != no ; then CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE) CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE) cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" CF_ADD_CFLAGS($cf_temp_xopen_source) fi ]) dnl --------------------------------------------------------------------------- -dnl CF_UNION_WAIT version: 6 updated: 2012/10/06 08:57:51 +dnl CF_UNION_WAIT version: 8 updated: 2021/01/02 09:31:20 dnl ------------- dnl Check to see if the BSD-style union wait is declared. Some platforms may dnl use this, though it is deprecated in favor of the 'int' type in Posix. dnl Some vendors provide a bogus implementation that declares union wait, but dnl uses the 'int' type instead; we try to spot these by checking for the dnl associated macros. dnl dnl Ahem. Some implementers cast the status value to an int*, as an attempt to dnl use the macros for either union wait or int. So we do a check compile to dnl see if the macros are defined and apply to an int. dnl dnl Sets: $cf_cv_type_unionwait dnl Defines: HAVE_TYPE_UNIONWAIT AC_DEFUN([CF_UNION_WAIT], [ AC_REQUIRE([CF_WAIT_HEADERS]) AC_MSG_CHECKING([for union wait]) AC_CACHE_VAL(cf_cv_type_unionwait,[ AC_TRY_LINK($cf_wait_headers, [int x; int y = WEXITSTATUS(x); int z = WTERMSIG(x); wait(&x); + (void)x; + (void)y; + (void)z; ], [cf_cv_type_unionwait=no echo compiles ok w/o union wait 1>&AC_FD_CC ],[ AC_TRY_LINK($cf_wait_headers, [union wait x; #ifdef WEXITSTATUS int y = WEXITSTATUS(x); #endif #ifdef WTERMSIG int z = WTERMSIG(x); #endif wait(&x); + (void)x; +#ifdef WEXITSTATUS + (void)y; +#endif +#ifdef WTERMSIG + (void)z; +#endif ], [cf_cv_type_unionwait=yes echo compiles ok with union wait and possibly macros too 1>&AC_FD_CC ], [cf_cv_type_unionwait=no])])]) AC_MSG_RESULT($cf_cv_type_unionwait) -test $cf_cv_type_unionwait = yes && AC_DEFINE(HAVE_TYPE_UNIONWAIT,1,[Define to 1 if type unionwait is declared]) +test "$cf_cv_type_unionwait" = yes && AC_DEFINE(HAVE_TYPE_UNIONWAIT,1,[Define to 1 if type unionwait is declared]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59 dnl -------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` ])dnl dnl --------------------------------------------------------------------------- dnl CF_UTF8_LIB version: 8 updated: 2012/10/06 08:57:51 dnl ----------- dnl Check for multibyte support, and if not found, utf8 compatibility library AC_DEFUN([CF_UTF8_LIB], [ AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[ cf_save_LIBS="$LIBS" AC_TRY_LINK([ #include <stdlib.h>],[putwc(0,0);], [cf_cv_utf8_lib=yes], [CF_FIND_LINKAGE([ #include <libutf8.h>],[putwc(0,0);],utf8, [cf_cv_utf8_lib=add-on], [cf_cv_utf8_lib=no]) ])]) # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h]) CF_ADD_INCDIR($cf_cv_header_path_utf8) CF_ADD_LIBDIR($cf_cv_library_path_utf8) CF_ADD_LIBS($cf_cv_library_file_utf8) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12 dnl ---------- dnl Use AC_VERBOSE w/o the warnings AC_DEFUN([CF_VERBOSE], [test -n "$verbose" && echo " $1" 1>&AC_FD_MSG CF_MSG_LOG([$1]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_VERSION_INFO version: 7 updated: 2015/04/17 21:13:04 +dnl CF_VERSION_INFO version: 8 updated: 2021/01/01 13:31:04 dnl --------------- dnl Define several useful symbols derived from the VERSION file. A separate dnl file is preferred to embedding the version numbers in various scripts. dnl (automake is a textbook-example of why the latter is a bad idea, but there dnl are others). dnl dnl The file contents are: dnl libtool-version release-version patch-version dnl or dnl release-version dnl where dnl libtool-version (see ?) consists of 3 integers separated by '.' dnl release-version consists of a major version and minor version dnl separated by '.', optionally followed by a patch-version dnl separated by '-'. The minor version need not be an dnl integer (but it is preferred). dnl patch-version is an integer in the form yyyymmdd, so ifdef's and dnl scripts can easily compare versions. dnl dnl If libtool is used, the first form is required, since CF_WITH_LIBTOOL dnl simply extracts the first field using 'cut -f1'. dnl dnl Optional parameters: dnl $1 = internal name for package dnl $2 = external name for package AC_DEFUN([CF_VERSION_INFO], [ -if test -f $srcdir/VERSION ; then +if test -f "$srcdir/VERSION" ; then AC_MSG_CHECKING(for package version) # if there are not enough fields, cut returns the last one... - cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1` - cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2` - cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3` + cf_field1=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1` + cf_field2=`sed -e '2,$d' "$srcdir/VERSION" |cut -f2` + cf_field3=`sed -e '2,$d' "$srcdir/VERSION" |cut -f3` # this is how CF_BUNDLED_INTL uses $VERSION: VERSION="$cf_field1" VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` test -z "$VERSION_MAJOR" && AC_MSG_ERROR(missing major-version) VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[[^.]]*\.//' -e 's/-.*//'` test -z "$VERSION_MINOR" && AC_MSG_ERROR(missing minor-version) AC_MSG_RESULT(${VERSION_MAJOR}.${VERSION_MINOR}) AC_MSG_CHECKING(for package patch date) VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[[^-]]*-//'` case .$VERSION_PATCH in (.) AC_MSG_ERROR(missing patch-date $VERSION_PATCH) ;; (.[[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]]) ;; (*) AC_MSG_ERROR(illegal patch-date $VERSION_PATCH) ;; esac AC_MSG_RESULT($VERSION_PATCH) else AC_MSG_ERROR(did not find $srcdir/VERSION) fi # show the actual data that we have for versions: CF_VERBOSE(ABI VERSION $VERSION) CF_VERBOSE(VERSION_MAJOR $VERSION_MAJOR) CF_VERBOSE(VERSION_MINOR $VERSION_MINOR) CF_VERBOSE(VERSION_PATCH $VERSION_PATCH) AC_SUBST(VERSION) AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_PATCH) dnl if a package name is given, define its corresponding version info. We dnl need the package name to ensure that the defined symbols are unique. ifelse($1,,,[ cf_PACKAGE=$1 PACKAGE=ifelse($2,,$1,$2) AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE",[Define to the package-name]) AC_SUBST(PACKAGE) CF_UPPER(cf_PACKAGE,$cf_PACKAGE) AC_DEFINE_UNQUOTED(${cf_PACKAGE}_VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}") AC_DEFINE_UNQUOTED(${cf_PACKAGE}_PATCHDATE,${VERSION_PATCH}) ]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WAIT_HEADERS version: 2 updated: 1997/10/21 19:45:33 +dnl CF_WAIT_HEADERS version: 3 updated: 2021/01/02 09:31:20 dnl --------------- dnl Build up an expression $cf_wait_headers with the header files needed to dnl compile against the prototypes for 'wait()', 'waitpid()', etc. Assume it's dnl Posix, which uses <sys/types.h> and <sys/wait.h>, but allow SVr4 variation dnl with <wait.h>. AC_DEFUN([CF_WAIT_HEADERS], [ AC_HAVE_HEADERS(sys/wait.h) cf_wait_headers="#include <sys/types.h> " -if test $ac_cv_header_sys_wait_h = yes; then +if test "$ac_cv_header_sys_wait_h" = yes; then cf_wait_headers="$cf_wait_headers #include <sys/wait.h> " else AC_HAVE_HEADERS(wait.h) AC_HAVE_HEADERS(waitstatus.h) -if test $ac_cv_header_wait_h = yes; then +if test "$ac_cv_header_wait_h" = yes; then cf_wait_headers="$cf_wait_headers #include <wait.h> " fi -if test $ac_cv_header_waitstatus_h = yes; then +if test "$ac_cv_header_waitstatus_h" = yes; then cf_wait_headers="$cf_wait_headers #include <waitstatus.h> " fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WIDEC_CURSES version: 5 updated: 2012/11/08 20:57:52 +dnl CF_WIDEC_CURSES version: 6 updated: 2020/03/19 20:23:48 dnl --------------- dnl Check for curses implementations that can handle wide-characters AC_DEFUN([CF_WIDEC_CURSES], [ AC_CACHE_CHECK(if curses supports wide characters,cf_cv_widec_curses,[ AC_TRY_LINK([ #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}>],[ wchar_t temp[2]; wchar_t wch = 'A'; temp[0] = wch; waddnwstr(stdscr, temp, 1); ], [cf_cv_widec_curses=yes], [cf_cv_widec_curses=no]) ]) if test "$cf_cv_widec_curses" = yes ; then AC_DEFINE(WIDEC_CURSES,1,[Define to 1 if curses supports wide characters]) # This is needed on Tru64 5.0 to declare mbstate_t AC_CACHE_CHECK(if we must include wchar.h to declare mbstate_t,cf_cv_widec_mbstate,[ AC_TRY_COMPILE([ #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}>], -[mbstate_t state], +[mbstate_t state; (void)state], [cf_cv_widec_mbstate=no], [AC_TRY_COMPILE([ #include <stdlib.h> #include <wchar.h> #include <${cf_cv_ncurses_header:-curses.h}>], -[mbstate_t state], +[mbstate_t state; (void)state], [cf_cv_widec_mbstate=yes], [cf_cv_widec_mbstate=unknown])])]) if test "$cf_cv_widec_mbstate" = yes ; then AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h]) fi if test "$cf_cv_widec_mbstate" != unknown ; then AC_DEFINE(HAVE_MBSTATE_T,1,[Define to 1 if we have mbstate_t type]) fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_ABI_VERSION version: 3 updated: 2015/06/06 16:10:11 +dnl CF_WITH_ABI_VERSION version: 4 updated: 2021/01/01 13:31:04 dnl ------------------- dnl Allow library's ABI to be overridden. Generally this happens when a dnl packager has incremented the ABI past that used in the original package, dnl and wishes to keep doing this. dnl dnl $1 is the package name, if any, to derive a corresponding {package}_ABI dnl symbol. AC_DEFUN([CF_WITH_ABI_VERSION],[ test -z "$cf_cv_abi_version" && cf_cv_abi_version=0 AC_ARG_WITH(abi-version, [ --with-abi-version=XXX override derived ABI version],[ if test "x$cf_cv_abi_version" != "x$withval" then AC_MSG_WARN(overriding ABI version $cf_cv_abi_version to $withval) - case $cf_cv_rel_version in + case "$cf_cv_rel_version" in (5.*) cf_cv_rel_version=$withval.0 ;; (6.*) cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release ;; esac fi cf_cv_abi_version=$withval]) CF_NUMBER_SYNTAX($cf_cv_abi_version,ABI version) ifelse($1,,,[ $1_ABI=$cf_cv_abi_version ]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_CURSES_DIR version: 3 updated: 2010/11/20 17:02:38 +dnl CF_WITH_CURSES_DIR version: 4 updated: 2021/01/02 19:22:58 dnl ------------------ dnl Wrapper for AC_ARG_WITH to specify directory under which to look for curses dnl libraries. AC_DEFUN([CF_WITH_CURSES_DIR],[ AC_MSG_CHECKING(for specific curses-directory) AC_ARG_WITH(curses-dir, [ --with-curses-dir=DIR directory in which (n)curses is installed], [cf_cv_curses_dir=$withval], [cf_cv_curses_dir=no]) AC_MSG_RESULT($cf_cv_curses_dir) -if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) +if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" then CF_PATH_SYNTAX(withval) if test -d "$cf_cv_curses_dir" then CF_ADD_INCDIR($cf_cv_curses_dir/include) CF_ADD_LIBDIR($cf_cv_curses_dir/lib) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl ---------------- dnl Configure-option for dbmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DBMALLOC],[ CF_NO_LEAKS_OPTION(dbmalloc, [ --with-dbmalloc test: use Conor Cahill's dbmalloc library], [USE_DBMALLOC]) if test "$with_dbmalloc" = yes ; then AC_CHECK_HEADER(dbmalloc.h, [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl --------------- dnl Configure-option for dmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DMALLOC],[ CF_NO_LEAKS_OPTION(dmalloc, [ --with-dmalloc test: use Gray Watson's dmalloc library], [USE_DMALLOC]) if test "$with_dmalloc" = yes ; then AC_CHECK_HEADER(dmalloc.h, [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_EXPORT_SYMS version: 3 updated: 2014/12/20 19:16:08 dnl ------------------- dnl Use this with libtool to specify the list of symbols that may be exported. dnl The input file contains one symbol per line; comments work with "#". dnl dnl $1 = basename of the ".sym" file (default $PACKAGE) AC_DEFUN([CF_WITH_EXPORT_SYMS], [ AC_MSG_CHECKING(if exported-symbols file should be used) AC_ARG_WITH(export-syms, [ --with-export-syms=XXX limit exported symbols using libtool], [with_export_syms=$withval], [with_export_syms=no]) if test "x$with_export_syms" = xyes then with_export_syms='${top_srcdir}/package/ifelse($1,,${PACKAGE},[$1]).sym' AC_SUBST(PACKAGE) fi AC_MSG_RESULT($with_export_syms) if test "x$with_export_syms" != xno then EXPORT_SYMS="-export-symbols $with_export_syms" AC_SUBST(EXPORT_SYMS) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_INSTALL_PREFIX version: 4 updated: 2010/10/23 15:52:32 dnl ---------------------- dnl Configure-script option to give a default value for the poorly-chosen name dnl $(DESTDIR). AC_DEFUN([CF_WITH_INSTALL_PREFIX], [ AC_MSG_CHECKING(for install-prefix) AC_ARG_WITH(install-prefix, [ --with-install-prefix=XXX sets DESTDIR, useful for packaging], [cf_opt_with_install_prefix=$withval], [cf_opt_with_install_prefix=${DESTDIR:-no}]) AC_MSG_RESULT($cf_opt_with_install_prefix) if test "$cf_opt_with_install_prefix" != no ; then CF_PATH_SYNTAX(cf_opt_with_install_prefix) DESTDIR=$cf_opt_with_install_prefix fi AC_SUBST(DESTDIR) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_LIBTOOL version: 35 updated: 2017/08/12 07:58:51 +dnl CF_WITH_LIBTOOL version: 36 updated: 2021/01/01 13:31:04 dnl --------------- dnl Provide a configure option to incorporate libtool. Define several useful dnl symbols for the makefile rules. dnl dnl The reference to AC_PROG_LIBTOOL does not normally work, since it uses dnl macros from libtool.m4 which is in the aclocal directory of automake. dnl Following is a simple script which turns on the AC_PROG_LIBTOOL macro. dnl But that still does not work properly since the macro is expanded outside dnl the CF_WITH_LIBTOOL macro: dnl dnl #!/bin/sh dnl ACLOCAL=`aclocal --print-ac-dir` dnl if test -z "$ACLOCAL" ; then dnl echo cannot find aclocal directory dnl exit 1 dnl elif test ! -f $ACLOCAL/libtool.m4 ; then dnl echo cannot find libtool.m4 file dnl exit 1 dnl fi dnl dnl LOCAL=aclocal.m4 dnl ORIG=aclocal.m4.orig dnl dnl trap "mv $ORIG $LOCAL" 0 1 2 3 15 dnl rm -f $ORIG dnl mv $LOCAL $ORIG dnl dnl # sed the LIBTOOL= assignment to omit the current directory? dnl sed -e 's/^LIBTOOL=.*/LIBTOOL=${LIBTOOL:-libtool}/' $ACLOCAL/libtool.m4 >>$LOCAL dnl cat $ORIG >>$LOCAL dnl dnl autoconf-257 $* dnl AC_DEFUN([CF_WITH_LIBTOOL], [ AC_REQUIRE([CF_DISABLE_LIBTOOL_VERSION]) ifdef([AC_PROG_LIBTOOL],,[ LIBTOOL= ]) # common library maintenance symbols that are convenient for libtool scripts: LIB_CREATE='${AR} -cr' LIB_OBJECT='${OBJECTS}' LIB_SUFFIX=.a LIB_PREP="$RANLIB" # symbols used to prop libtool up to enable it to determine what it should be # doing: LIB_CLEAN= LIB_COMPILE= LIB_LINK='${CC}' LIB_INSTALL= LIB_UNINSTALL= AC_MSG_CHECKING(if you want to build libraries with libtool) AC_ARG_WITH(libtool, [ --with-libtool generate libraries with libtool], [with_libtool=$withval], [with_libtool=no]) AC_MSG_RESULT($with_libtool) if test "$with_libtool" != "no"; then ifdef([AC_PROG_LIBTOOL],[ # missing_content_AC_PROG_LIBTOOL{{ AC_PROG_LIBTOOL # missing_content_AC_PROG_LIBTOOL}} ],[ if test "$with_libtool" != "yes" ; then CF_PATH_SYNTAX(with_libtool) LIBTOOL=$with_libtool else AC_CHECK_TOOLS(LIBTOOL,[libtool glibtool],none) CF_LIBTOOL_VERSION if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool then CF_FORGET_TOOL(LIBTOOL) AC_CHECK_TOOLS(LIBTOOL,[glibtool],none) CF_LIBTOOL_VERSION fi fi if test -z "$LIBTOOL" ; then AC_MSG_ERROR(Cannot find libtool) fi ])dnl LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' LIB_OBJECT='${OBJECTS:.o=.lo}' LIB_SUFFIX=.la LIB_CLEAN='${LIBTOOL} --mode=clean' LIB_COMPILE='${LIBTOOL} --mode=compile' LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' LIB_INSTALL='${LIBTOOL} --mode=install' LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' LIB_PREP=: CF_CHECK_LIBTOOL_VERSION # special hack to add -no-undefined (which libtool should do for itself) LT_UNDEF= case "$cf_cv_system_name" in (cygwin*|msys*|mingw32*|os2*|uwin*|aix[[4-7]]) LT_UNDEF=-no-undefined ;; esac AC_SUBST([LT_UNDEF]) # special hack to add --tag option for C++ compiler - case $cf_cv_libtool_version in + case "$cf_cv_libtool_version" in (1.[[5-9]]*|[[2-9]].[[0-9.a-z]]*) LIBTOOL_CXX="$LIBTOOL --tag=CXX" LIBTOOL="$LIBTOOL --tag=CC" ;; (*) LIBTOOL_CXX="$LIBTOOL" ;; esac else LIBTOOL="" LIBTOOL_CXX="" fi test -z "$LIBTOOL" && ECHO_LT= AC_SUBST(LIBTOOL) AC_SUBST(LIBTOOL_CXX) AC_SUBST(LIBTOOL_OPTS) AC_SUBST(LIB_CREATE) AC_SUBST(LIB_OBJECT) AC_SUBST(LIB_SUFFIX) AC_SUBST(LIB_PREP) AC_SUBST(LIB_CLEAN) AC_SUBST(LIB_COMPILE) AC_SUBST(LIB_LINK) AC_SUBST(LIB_INSTALL) AC_SUBST(LIB_UNINSTALL) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_LIBTOOL_OPTS version: 4 updated: 2015/04/17 21:13:04 dnl -------------------- dnl Allow user to pass additional libtool options into the library creation dnl and link steps. The main use for this is to do something like dnl ./configure --with-libtool-opts=-static dnl to get the same behavior as automake-flavored dnl ./configure --enable-static AC_DEFUN([CF_WITH_LIBTOOL_OPTS],[ AC_MSG_CHECKING(for additional libtool options) AC_ARG_WITH(libtool-opts, [ --with-libtool-opts=XXX specify additional libtool options], [with_libtool_opts=$withval], [with_libtool_opts=no]) AC_MSG_RESULT($with_libtool_opts) case .$with_libtool_opts in (.yes|.no|.) ;; (*) LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" ;; esac AC_SUBST(LIBTOOL_OPTS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_MAN2HTML version: 7 updated: 2018/01/07 13:16:19 +dnl CF_WITH_MAN2HTML version: 12 updated: 2021/01/03 18:30:50 dnl ---------------- dnl Check for man2html and groff. Prefer man2html over groff, but use groff dnl as a fallback. See dnl dnl http://invisible-island.net/scripts/man2html.html dnl dnl Generate a shell script which hides the differences between the two. dnl dnl We name that "man2html.tmp". dnl dnl The shell script can be removed later, e.g., using "make distclean". AC_DEFUN([CF_WITH_MAN2HTML],[ -AC_REQUIRE([CF_PROG_GROFF]) +AC_REQUIRE([CF_PROG_GROFF])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl case "x${with_man2html}" in (xno) cf_man2html=no ;; (x|xyes) AC_PATH_PROG(cf_man2html,man2html,no) case "x$cf_man2html" in (x/*) AC_MSG_CHECKING(for the modified Earl Hood script) if ( $cf_man2html -help 2>&1 | grep 'Make an index of headers at the end' >/dev/null ) then cf_man2html_ok=yes else cf_man2html=no cf_man2html_ok=no fi AC_MSG_RESULT($cf_man2html_ok) ;; (*) cf_man2html=no ;; esac esac AC_MSG_CHECKING(for program to convert manpage to html) AC_ARG_WITH(man2html, [ --with-man2html=XXX use XXX rather than groff], [cf_man2html=$withval], [cf_man2html=$cf_man2html]) cf_with_groff=no case $cf_man2html in (yes) AC_MSG_RESULT(man2html) AC_PATH_PROG(cf_man2html,man2html,no) ;; (no|groff|*/groff*) cf_with_groff=yes cf_man2html=$GROFF_PATH AC_MSG_RESULT($cf_man2html) ;; (*) AC_MSG_RESULT($cf_man2html) ;; esac MAN2HTML_TEMP="man2html.tmp" cat >$MAN2HTML_TEMP <<CF_EOF #!$SHELL # Temporary script generated by CF_WITH_MAN2HTML # Convert inputs to html, sending result to standard output. # # Parameters: # \${1} = rootname of file to convert # \${2} = suffix of file to convert, e.g., "1" # \${3} = macros to use, e.g., "man" # ROOT=\[$]1 TYPE=\[$]2 MACS=\[$]3 unset LANG unset LC_ALL unset LC_CTYPE unset LANGUAGE GROFF_NO_SGR=stupid export GROFF_NO_SGR CF_EOF +NROFF_OPTS= if test "x$cf_with_groff" = xyes then MAN2HTML_NOTE="$GROFF_NOTE" MAN2HTML_PATH="$GROFF_PATH" cat >>$MAN2HTML_TEMP <<CF_EOF $SHELL -c "$TBL_PATH \${ROOT}.\${TYPE} | $GROFF_PATH -P -o0 -I\${ROOT}_ -Thtml -\${MACS}" CF_EOF else + # disable hyphenation if this is groff + if test "x$GROFF_PATH" != xno + then + AC_MSG_CHECKING(if nroff is really groff) + cf_check_groff="`$NROFF_PATH --version 2>/dev/null | grep groff`" + test -n "$cf_check_groff" && cf_check_groff=yes + test -n "$cf_check_groff" || cf_check_groff=no + AC_MSG_RESULT($cf_check_groff) + test "x$cf_check_groff" = xyes && NROFF_OPTS="-rHY=0" + fi MAN2HTML_NOTE="" CF_PATH_SYNTAX(cf_man2html) MAN2HTML_PATH="$cf_man2html" AC_MSG_CHECKING(for $cf_man2html top/bottom margins) # for this example, expect 3 lines of content, the remainder is head/foot cat >conftest.in <<CF_EOF .TH HEAD1 HEAD2 HEAD3 HEAD4 HEAD5 .SH SECTION MARKER CF_EOF LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C $NROFF_PATH -man conftest.in >conftest.out - cf_man2html_1st=`fgrep -n MARKER conftest.out |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'` - cf_man2html_top=`expr $cf_man2html_1st - 2` - cf_man2html_bot=`wc -l conftest.out |sed -e 's/[[^0-9]]//g'` - cf_man2html_bot=`expr $cf_man2html_bot - 2 - $cf_man2html_top` + cf_man2html_1st="`${FGREP-fgrep} -n MARKER conftest.out |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`" + cf_man2html_top=`expr "$cf_man2html_1st" - 2` + cf_man2html_bot="`wc -l conftest.out |sed -e 's/[[^0-9]]//g'`" + cf_man2html_bot=`expr "$cf_man2html_bot" - 2 - "$cf_man2html_top"` cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot" AC_MSG_RESULT($cf_man2html_top_bot) AC_MSG_CHECKING(for pagesize to use) for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do cat >>conftest.in <<CF_EOF .nf 0 1 2 3 4 5 6 7 8 9 CF_EOF done LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C $NROFF_PATH -man conftest.in >conftest.out - cf_man2html_page=`fgrep -n HEAD1 conftest.out |tail -n 1 |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'` + cf_man2html_page="`${FGREP-fgrep} -n HEAD1 conftest.out |sed -n '$p' |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`" test -z "$cf_man2html_page" && cf_man2html_page=99999 test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999 rm -rf conftest* AC_MSG_RESULT($cf_man2html_page) cat >>$MAN2HTML_TEMP <<CF_EOF : \${MAN2HTML_PATH=$MAN2HTML_PATH} -MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title="\$ROOT\(\$TYPE\)" -compress -pgsize $cf_man2html_page" +MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title=\"\$ROOT(\$TYPE)\" -compress -pgsize $cf_man2html_page" case \${TYPE} in (ms) - $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS + $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH $NROFF_OPTS -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS ;; (*) - $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS + $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH $NROFF_OPTS -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS ;; esac CF_EOF fi chmod 700 $MAN2HTML_TEMP AC_SUBST(MAN2HTML_NOTE) AC_SUBST(MAN2HTML_PATH) AC_SUBST(MAN2HTML_TEMP) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_NCURSES_ETC version: 5 updated: 2016/02/20 19:23:20 dnl ------------------- dnl Use this macro for programs which use any variant of "curses", e.g., dnl "ncurses", and "PDCurses". Programs that can use curses and some unrelated dnl library (such as slang) should use a "--with-screen=XXX" option. dnl dnl This does not use AC_DEFUN, because that would tell autoconf to run each dnl of the macros inside this one - before this macro. define([CF_WITH_NCURSES_ETC],[ CF_WITH_CURSES_DIR cf_cv_screen=curses AC_MSG_CHECKING(for specified curses library type) AC_ARG_WITH(screen, [ --with-screen=XXX use specified curses-libraries], [cf_cv_screen=$withval],[ AC_ARG_WITH(ncursesw, [ --with-ncursesw use wide ncurses-libraries], [cf_cv_screen=ncursesw],[ AC_ARG_WITH(ncurses, [ --with-ncurses use ncurses-libraries], [cf_cv_screen=ncurses],[ AC_ARG_WITH(pdcurses, [ --with-pdcurses compile/link with pdcurses X11 library], [cf_cv_screen=pdcurses],[ AC_ARG_WITH(curses-colr, [ --with-curses-colr compile/link with HPUX 10.x color-curses], [cf_cv_screen=curses_colr],[ AC_ARG_WITH(curses-5lib, [ --with-curses-5lib compile/link with SunOS 5lib curses], [cf_cv_screen=curses_5lib])])])])])]) AC_MSG_RESULT($cf_cv_screen) case $cf_cv_screen in (curses|curses_*) CF_CURSES_CONFIG ;; (ncursesw*) CF_UTF8_LIB CF_NCURSES_CONFIG($cf_cv_screen) ;; (ncurses*) CF_NCURSES_CONFIG($cf_cv_screen) ;; (pdcurses) CF_PDCURSES_X11 ;; (*) AC_MSG_ERROR(unexpected screen-value: $cf_cv_screen) ;; esac CF_NCURSES_PTHREADS($cf_cv_screen) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_NO_LEAKS version: 3 updated: 2015/05/10 19:52:14 +dnl CF_WITH_NO_LEAKS version: 4 updated: 2021/01/05 20:08:11 dnl ---------------- AC_DEFUN([CF_WITH_NO_LEAKS],[ AC_REQUIRE([CF_WITH_DMALLOC]) AC_REQUIRE([CF_WITH_DBMALLOC]) AC_REQUIRE([CF_WITH_PURIFY]) AC_REQUIRE([CF_WITH_VALGRIND]) AC_MSG_CHECKING(if you want to perform memory-leak testing) AC_ARG_WITH(no-leaks, [ --with-no-leaks test: free permanent memory, analyze leaks], [AC_DEFINE(NO_LEAKS,1,[Define to 1 to enable leak-checking]) cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}" case ${cf_doalloc} in (*yes*) ;; (*) AC_DEFINE(DOALLOC,10000,[Define to size of malloc-array]) ;; esac - with_no_leaks=yes], - [with_no_leaks=]) + enable_leaks=no], + [enable_leaks=yes]) +dnl TODO - drop with_no_leaks +if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi AC_MSG_RESULT($with_no_leaks) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PURIFY version: 2 updated: 2006/12/14 18:43:43 dnl -------------- AC_DEFUN([CF_WITH_PURIFY],[ CF_NO_LEAKS_OPTION(purify, [ --with-purify test: use Purify], [USE_PURIFY], [LINK_PREFIX="$LINK_PREFIX purify"]) AC_SUBST(LINK_PREFIX) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_REL_VERSION version: 1 updated: 2003/09/20 18:12:49 dnl ------------------- dnl Allow library's release-version to be overridden. Generally this happens when a dnl packager has incremented the release-version past that used in the original package, dnl and wishes to keep doing this. dnl dnl $1 is the package name, if any, to derive corresponding {package}_MAJOR dnl and {package}_MINOR symbols dnl symbol. AC_DEFUN([CF_WITH_REL_VERSION],[ test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0 AC_ARG_WITH(rel-version, [ --with-rel-version=XXX override derived release version], [AC_MSG_WARN(overriding release version $cf_cv_rel_version to $withval) cf_cv_rel_version=$withval]) ifelse($1,,[ CF_NUMBER_SYNTAX($cf_cv_rel_version,Release version) ],[ $1_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'` $1_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[[^.]]*//' -e 's/^\.//' -e 's/\..*//'` CF_NUMBER_SYNTAX([$]$1_MAJOR,Release major-version) CF_NUMBER_SYNTAX([$]$1_MINOR,Release minor-version) ]) ])dnl dnl --------------------------------------------------------------------------- +dnl CF_WITH_SCREEN_PDCURSES version: 1 updated: 2020/08/28 16:56:27 +dnl ----------------------- +dnl Call this macro before CF_ENABLE_WARNINGS for configure scripts which use +dnl the "--with-screen=pdcurses" selection. Doing that allows the configure +dnl script to search for the X11/Xt header files to declare (or not) the +dnl symbol needed to enable "const" in those header files. If that configure +dnl option is not used, then those checks are unnecessary. +AC_DEFUN([CF_WITH_SCREEN_PDCURSES],[ +AC_PROVIDE([AC_PATH_XTRA]) +AC_PROVIDE([AC_PATH_X]) +if test -n "$with_screen" && test "x$with_screen" = "xpdcurses" +then + AC_PATH_X + AC_PATH_XTRA +fi +])dnl +dnl --------------------------------------------------------------------------- dnl CF_WITH_SHARED_OR_LIBTOOL version: 7 updated: 2014/11/02 16:11:49 dnl ------------------------- dnl Provide shared libraries using either autoconf macros (--with-shared) or dnl using the external libtool script (--with-libtool). dnl dnl $1 = program name (all caps preferred) dnl $1 = release version dnl $2 = ABI version define([CF_WITH_SHARED_OR_LIBTOOL],[ REL_VERSION=$2 ABI_VERSION=$3 cf_cv_rel_version=$REL_VERSION AC_SUBST(ABI_VERSION) AC_SUBST(REL_VERSION) CF_WITH_REL_VERSION($1) CF_WITH_ABI_VERSION LIB_MODEL=static DFT_LWR_MODEL=$LIB_MODEL LIBTOOL_MAKE="#" # use to comment-out makefile lines MAKE_NORMAL= MAKE_STATIC= MAKE_SHARED="#" MAKE_DLLS="#" shlibdir=$libdir AC_SUBST(shlibdir) CF_WITH_LIBTOOL LIB_CREATE="$LIB_CREATE \[$]@" if test "$with_libtool" = "yes" ; then OBJEXT="lo" LIB_MODEL=libtool DFT_LWR_MODEL=$LIB_MODEL LIBTOOL_MAKE= CF_WITH_LIBTOOL_OPTS CF_WITH_EXPORT_SYMS MAKE_NORMAL="#" MAKE_STATIC="#" MAKE_SHARED= else AC_MSG_CHECKING(if you want to build shared libraries) AC_ARG_WITH(shared, [ --with-shared generate shared-libraries], [with_shared=$withval], [with_shared=no]) AC_MSG_RESULT($with_shared) if test "$with_shared" = "yes" ; then LIB_MODEL=shared DFT_LWR_MODEL=$LIB_MODEL CF_SHARED_OPTS CF_WITH_VERSIONED_SYMS LIB_PREP=: LIB_CREATE="[$]MK_SHARED_LIB" CFLAGS="$CFLAGS $CC_SHARED_OPTS" MAKE_NORMAL="#" MAKE_STATIC="#" MAKE_SHARED= fi fi LIB_SUFFIX= CF_LIB_SUFFIX($LIB_MODEL, DFT_LIB_SUFFIX, DFT_DEP_SUFFIX) LIB_SUFFIX=$DFT_LIB_SUFFIX AC_SUBST(DFT_LWR_MODEL) AC_SUBST(DFT_LIB_SUFFIX) AC_SUBST(DFT_DEP_SUFFIX) AC_SUBST(LIB_MODEL) AC_SUBST(LIBTOOL_MAKE) AC_SUBST(MAKE_DLLS) AC_SUBST(MAKE_NORMAL) AC_SUBST(MAKE_SHARED) AC_SUBST(MAKE_STATIC) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21 dnl ---------------- AC_DEFUN([CF_WITH_VALGRIND],[ CF_NO_LEAKS_OPTION(valgrind, [ --with-valgrind test: use valgrind], [USE_VALGRIND]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_VERSIONED_SYMS version: 7 updated: 2015/10/24 20:50:26 +dnl CF_WITH_VERSIONED_SYMS version: 10 updated: 2021/01/04 18:48:01 dnl ---------------------- dnl Use this when building shared library with ELF, to markup symbols with the dnl version identifier from the given input file. Generally that identifier is dnl the same as the SONAME at which the symbol was first introduced. dnl dnl $1 = basename of the ".map" file (default $PACKAGE) AC_DEFUN([CF_WITH_VERSIONED_SYMS], -[ +[AC_REQUIRE([AC_PROG_FGREP])dnl +AC_REQUIRE([AC_PROG_EGREP])dnl + AC_MSG_CHECKING(if versioned-symbols file should be used) AC_ARG_WITH(versioned-syms, [ --with-versioned-syms=X markup versioned symbols using ld], [with_versioned_syms=$withval], [with_versioned_syms=no]) -if test "x$with_versioned_syms" = xyes -then +case "x$with_versioned_syms" in +(xyes) with_versioned_syms='${top_srcdir}/package/ifelse($1,,${PACKAGE},[$1]).map' AC_SUBST(PACKAGE) -fi + ;; +(xno) + ;; +(x/*) + test -f "$with_versioned_syms" || AC_MSG_ERROR(expected a filename: $with_versioned_syms) + ;; +(*) + test -f "$with_versioned_syms" || AC_MSG_ERROR(expected a filename: $with_versioned_syms) + with_versioned_syms=`pwd`/"$with_versioned_syms" + ;; +esac AC_MSG_RESULT($with_versioned_syms) RESULTING_SYMS= VERSIONED_SYMS= WILDCARD_SYMS= if test "x$with_versioned_syms" != xno then RESULTING_SYMS=$with_versioned_syms case "x$MK_SHARED_LIB" in (*-Wl,*) VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}" MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\[$]{VERSIONED_SYMS} -Wl,%"` CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) ;; (*-dy\ *) VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}" MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\[$]{VERSIONED_SYMS} -dy%"` CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) ;; (*) AC_MSG_WARN(this system does not support versioned-symbols) ;; esac # Linux ld can selectively override scope, e.g., of symbols beginning with # "_" by first declaring some as global, and then using a wildcard to # declare the others as local. Some other loaders cannot do this. Check # by constructing a (very) simple shared library and inspecting its # symbols. if test "x$VERSIONED_SYMS" != "x" then AC_MSG_CHECKING(if wildcards can be used to selectively omit symbols) WILDCARD_SYMS=no # make sources rm -f conftest.* cat >conftest.ver <<EOF module_1.0 { global: globalf1; local: localf1; }; module_2.0 { global: globalf2; local: localf2; _*; } module_1.0; submodule_1.0 { global: subglobalf1; _ismissing; local: sublocalf1; }; submodule_2.0 { global: subglobalf2; local: sublocalf2; _*; } submodule_1.0; EOF cat >conftest.$ac_ext <<EOF #line __oline__ "configure" int _ismissing(void) { return 1; } int _localf1(void) { return 1; } int _localf2(void) { return 2; } int globalf1(void) { return 1; } int globalf2(void) { return 2; } int _sublocalf1(void) { return 1; } int _sublocalf2(void) { return 2; } int subglobalf1(void) { return 1; } int subglobalf2(void) { return 2; } EOF cat >conftest.mk <<EOF CC=${CC} CFLAGS=${CFLAGS} CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} LIBS=${LIBS} VERSIONED_SYMS=${VERSIONED_SYMS} RESULTING_SYMS=conftest.ver MK_SHARED_LIB=${MK_SHARED_LIB} conftest.so: conftest.$ac_cv_objext \$(MK_SHARED_LIB) conftest.$ac_cv_objext EOF # compile source, make library if make -f conftest.mk 2>&AC_FD_CC >/dev/null then # test for missing symbol in either Data or Text section - cf_missing=`nm -P conftest.so 2>&AC_FD_CC |fgrep _ismissing | egrep '[[ ]][[DT]][[ ]]'` + cf_missing="`nm -P conftest.so 2>&AC_FD_CC |${FGREP-fgrep} _ismissing | ${EGREP-egrep} '[[ ]][[DT]][[ ]]'`" test -n "$cf_missing" && WILDCARD_SYMS=yes fi AC_MSG_RESULT($WILDCARD_SYMS) rm -f conftest.* fi fi AC_SUBST(RESULTING_SYMS) AC_SUBST(VERSIONED_SYMS) AC_SUBST(WILDCARD_SYMS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_WARNINGS version: 5 updated: 2004/07/23 14:40:34 -dnl ---------------- -dnl Combine the checks for gcc features into a configure-script option -dnl -dnl Parameters: -dnl $1 - see CF_GCC_WARNINGS -AC_DEFUN([CF_WITH_WARNINGS], -[ -if ( test "$GCC" = yes || test "$GXX" = yes ) -then -AC_MSG_CHECKING(if you want to check for gcc warnings) -AC_ARG_WITH(warnings, - [ --with-warnings test: turn on gcc warnings], - [cf_opt_with_warnings=$withval], - [cf_opt_with_warnings=no]) -AC_MSG_RESULT($cf_opt_with_warnings) -if test "$cf_opt_with_warnings" != no ; then - CF_GCC_ATTRIBUTES - CF_GCC_WARNINGS([$1]) -fi -fi -])dnl -dnl --------------------------------------------------------------------------- -dnl CF_XOPEN_CURSES version: 14 updated: 2018/06/20 20:23:13 +dnl CF_XOPEN_CURSES version: 16 updated: 2021/01/02 09:31:20 dnl --------------- dnl Test if we should define X/Open source for curses, needed on Digital Unix dnl 4.x, to see the extended functions, but breaks on IRIX 6.x. dnl dnl The getbegyx() check is needed for HPUX, which omits legacy macros such dnl as getbegy(). The latter is better design, but the former is standard. AC_DEFUN([CF_XOPEN_CURSES], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(definition to turn on extended curses functions,cf_cv_need_xopen_extension,[ cf_cv_need_xopen_extension=unknown AC_TRY_LINK([ #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}>],[ #if defined(NCURSES_VERSION_PATCH) #if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403) make an error #endif #endif #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; - getbegyx(stdscr, y1, x1)], +#ifdef NCURSES_VERSION + (void)check2; +#endif + getbegyx(stdscr, y1, x1); + (void)x; + (void)y1; + (void)x1; + ], [cf_cv_need_xopen_extension=none], [ for cf_try_xopen_extension in _XOPEN_SOURCE_EXTENDED NCURSES_WIDECHAR do AC_TRY_LINK([ #define $cf_try_xopen_extension 1 #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}>],[ #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; - getbegyx(stdscr, y1, x1)], + getbegyx(stdscr, y1, x1); +#ifdef NCURSES_VERSION + (void)check2; +#endif + (void)x; + (void)y1; + (void)x1; + ], [cf_cv_need_xopen_extension=$cf_try_xopen_extension; break]) done ]) ]) -case $cf_cv_need_xopen_extension in +case "$cf_cv_need_xopen_extension" in (*_*) CF_APPEND_TEXT(CPPFLAGS,-D$cf_cv_need_xopen_extension) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_XOPEN_SOURCE version: 53 updated: 2018/06/16 18:58:58 +dnl CF_XOPEN_SOURCE version: 57 updated: 2021/01/01 16:53:59 dnl --------------- dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions, dnl or adapt to the vendor's definitions to get equivalent functionality, dnl without losing the common non-POSIX features. dnl dnl Parameters: dnl $1 is the nominal value for _XOPEN_SOURCE dnl $2 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_XOPEN_SOURCE],[ AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([CF_POSIX_VISIBLE]) + +if test "$cf_cv_posix_visible" = no; then cf_XOPEN_SOURCE=ifelse([$1],,500,[$1]) cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2]) cf_xopen_source= -case $host_os in +case "$host_os" in (aix[[4-7]]*) cf_xopen_source="-D_ALL_SOURCE" ;; (msys) cf_XOPEN_SOURCE=600 ;; (darwin[[0-8]].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; -(freebsd*|dragonfly*) +(freebsd*|dragonfly*|midnightbsd*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[[56]].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin) CF_GNU_SOURCE($cf_XOPEN_SOURCE) ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types cf_XOPEN_SOURCE= CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[[4-9]]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (osf[[45]]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) CF_TRY_XOPEN_SOURCE CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; esac if test -n "$cf_xopen_source" ; then CF_ADD_CFLAGS($cf_xopen_source,true) fi dnl In anything but the default case, we may have system-specific setting dnl which is still not guaranteed to provide all of the entrypoints that dnl _XOPEN_SOURCE would yield. if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then AC_MSG_CHECKING(if _XOPEN_SOURCE really is set) AC_TRY_COMPILE([#include <stdlib.h>],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set=yes], [cf_XOPEN_SOURCE_set=no]) AC_MSG_RESULT($cf_XOPEN_SOURCE_set) - if test $cf_XOPEN_SOURCE_set = yes + if test "$cf_XOPEN_SOURCE_set" = yes then AC_TRY_COMPILE([#include <stdlib.h>],[ #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set_ok=yes], [cf_XOPEN_SOURCE_set_ok=no]) - if test $cf_XOPEN_SOURCE_set_ok = no + if test "$cf_XOPEN_SOURCE_set_ok" = no then AC_MSG_WARN(_XOPEN_SOURCE is lower than requested) fi else CF_TRY_XOPEN_SOURCE fi fi +fi # cf_cv_posix_visible ]) dnl --------------------------------------------------------------------------- -dnl CF_X_ATHENA version: 23 updated: 2015/04/12 15:39:00 +dnl CF_X_ATHENA version: 24 updated: 2020/03/10 18:53:47 dnl ----------- dnl Check for Xaw (Athena) libraries dnl dnl Sets $cf_x_athena according to the flavor of Xaw which is used. AC_DEFUN([CF_X_ATHENA], [ cf_x_athena=${cf_x_athena:-Xaw} AC_MSG_CHECKING(if you want to link with Xaw 3d library) withval= AC_ARG_WITH(Xaw3d, [ --with-Xaw3d link with Xaw 3d library]) if test "$withval" = yes ; then cf_x_athena=Xaw3d AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if you want to link with Xaw 3d xft library) withval= AC_ARG_WITH(Xaw3dxft, [ --with-Xaw3dxft link with Xaw 3d xft library]) if test "$withval" = yes ; then cf_x_athena=Xaw3dxft AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if you want to link with neXT Athena library) withval= AC_ARG_WITH(neXtaw, [ --with-neXtaw link with neXT Athena library]) if test "$withval" = yes ; then cf_x_athena=neXtaw AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if you want to link with Athena-Plus library) withval= AC_ARG_WITH(XawPlus, [ --with-XawPlus link with Athena-Plus library]) if test "$withval" = yes ; then cf_x_athena=XawPlus AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi cf_x_athena_lib="" if test "$PKG_CONFIG" != none ; then cf_athena_list= test "$cf_x_athena" = Xaw && cf_athena_list="xaw8 xaw7 xaw6" for cf_athena_pkg in \ $cf_athena_list \ ${cf_x_athena} \ ${cf_x_athena}-devel \ lib${cf_x_athena} \ lib${cf_x_athena}-devel do CF_TRY_PKG_CONFIG($cf_athena_pkg,[ cf_x_athena_lib="$cf_pkgconfig_libs" CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena) AC_DEFINE_UNQUOTED($cf_x_athena_LIBS) CF_TRIM_X_LIBS AC_CACHE_CHECK(for usable $cf_x_athena/Xmu package,cf_cv_xaw_compat,[ AC_TRY_LINK([ #include <X11/Xmu/CharSet.h> ],[ -int check = XmuCompareISOLatin1("big", "small") +int check = XmuCompareISOLatin1("big", "small"); +(void)check; ],[cf_cv_xaw_compat=yes],[cf_cv_xaw_compat=no])]) if test "$cf_cv_xaw_compat" = no then # workaround for broken ".pc" files... case "$cf_x_athena_lib" in (*-lXmu*) ;; (*) CF_VERBOSE(work around broken package) cf_save_xmu="$LIBS" cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^[ ][ ]*//' -e 's/ .*//'` CF_TRY_PKG_CONFIG(xmu,[ LIBS="$cf_save_xmu" CF_ADD_LIB_AFTER($cf_first_lib,$cf_pkgconfig_libs) ],[ CF_ADD_LIB_AFTER($cf_first_lib,-lXmu) ]) CF_TRIM_X_LIBS ;; esac fi break]) done fi if test -z "$cf_x_athena_lib" ; then CF_X_EXT CF_X_TOOLKIT CF_X_ATHENA_CPPFLAGS($cf_x_athena) CF_X_ATHENA_LIBS($cf_x_athena) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_X_ATHENA_CPPFLAGS version: 6 updated: 2018/06/20 20:23:13 +dnl CF_X_ATHENA_CPPFLAGS version: 9 updated: 2020/12/31 10:54:15 dnl -------------------- dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw. AC_DEFUN([CF_X_ATHENA_CPPFLAGS], [ +AC_REQUIRE([AC_PATH_XTRA]) cf_x_athena_root=ifelse([$1],,Xaw,[$1]) cf_x_athena_inc="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do if test -z "$cf_x_athena_inc" ; then - cf_save="$CPPFLAGS" + CF_SAVE_XTRA_FLAGS([CF_X_ATHENA_CPPFLAGS]) cf_test=X11/$cf_x_athena_root/SimpleMenu.h - if test $cf_path != default ; then - CPPFLAGS="$cf_save" + if test "$cf_path" != default ; then CF_APPEND_TEXT(CPPFLAGS,-I$cf_path/include) AC_MSG_CHECKING(for $cf_test in $cf_path) else AC_MSG_CHECKING(for $cf_test) fi AC_TRY_COMPILE([ #include <X11/Intrinsic.h> #include <$cf_test>],[], [cf_result=yes], [cf_result=no]) AC_MSG_RESULT($cf_result) + CF_RESTORE_XTRA_FLAGS([CF_X_ATHENA_CPPFLAGS]) if test "$cf_result" = yes ; then - cf_x_athena_inc=$cf_path + test "$cf_path" = default && cf_x_athena_inc=default + test "$cf_path" != default && cf_x_athena_inc="$cf_path/include" break - else - CPPFLAGS="$cf_save" fi fi done if test -z "$cf_x_athena_inc" ; then - AC_MSG_WARN( -[Unable to successfully find Athena header files with test program]) + AC_MSG_WARN([Unable to find Athena header files]) elif test "$cf_x_athena_inc" != default ; then CF_APPEND_TEXT(CPPFLAGS,-I$cf_x_athena_inc) fi ]) dnl --------------------------------------------------------------------------- -dnl CF_X_ATHENA_LIBS version: 12 updated: 2011/07/17 19:55:02 +dnl CF_X_ATHENA_LIBS version: 13 updated: 2020/01/11 18:16:10 dnl ---------------- dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw. AC_DEFUN([CF_X_ATHENA_LIBS], [AC_REQUIRE([CF_X_TOOLKIT]) cf_x_athena_root=ifelse([$1],,Xaw,[$1]) cf_x_athena_lib="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do for cf_lib in \ ${cf_x_athena_root} \ ${cf_x_athena_root}7 \ ${cf_x_athena_root}6 do for cf_libs in \ "-l$cf_lib -lXmu" \ "-l$cf_lib -lXpm -lXmu" \ "-l${cf_lib}_s -lXmu_s" do - if test -z "$cf_x_athena_lib" ; then - cf_save="$LIBS" - cf_test=XawSimpleMenuAddGlobalActions - if test $cf_path != default ; then - CF_ADD_LIBS(-L$cf_path/lib $cf_libs) - AC_MSG_CHECKING(for $cf_libs in $cf_path) - else - CF_ADD_LIBS($cf_libs) - AC_MSG_CHECKING(for $cf_test in $cf_libs) - fi - AC_TRY_LINK([ + test -n "$cf_x_athena_lib" && break + + CF_SAVE_XTRA_FLAGS([CF_X_ATHENA_LIBS]) + cf_test=XawSimpleMenuAddGlobalActions + test "$cf_path" != default && cf_libs="-L$cf_path/lib $cf_libs" + CF_ADD_LIBS($cf_libs) + AC_MSG_CHECKING(for $cf_test in $cf_libs) + AC_TRY_LINK([ #include <X11/Intrinsic.h> #include <X11/$cf_x_athena_root/SimpleMenu.h> ],[ $cf_test((XtAppContext) 0)], - [cf_result=yes], - [cf_result=no]) - AC_MSG_RESULT($cf_result) - if test "$cf_result" = yes ; then - cf_x_athena_lib="$cf_libs" - break - fi - LIBS="$cf_save" + [cf_result=yes], + [cf_result=no]) + AC_MSG_RESULT($cf_result) + CF_RESTORE_XTRA_FLAGS([CF_X_ATHENA_LIBS]) + + if test "$cf_result" = yes ; then + cf_x_athena_lib="$cf_libs" + break fi done # cf_libs test -n "$cf_x_athena_lib" && break done # cf_lib done if test -z "$cf_x_athena_lib" ; then AC_MSG_ERROR( [Unable to successfully link Athena library (-l$cf_x_athena_root) with test program]) fi +CF_ADD_LIBS($cf_x_athena_lib) CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena) AC_DEFINE_UNQUOTED($cf_x_athena_LIBS) ]) dnl --------------------------------------------------------------------------- dnl CF_X_EXT version: 3 updated: 2010/06/02 05:03:05 dnl -------- AC_DEFUN([CF_X_EXT],[ CF_TRY_PKG_CONFIG(Xext,,[ AC_CHECK_LIB(Xext,XextCreateExtension, [CF_ADD_LIB(Xext)])]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_X_TOOLKIT version: 23 updated: 2015/04/12 15:39:00 +dnl CF_X_TOOLKIT version: 26 updated: 2021/01/02 09:31:20 dnl ------------ dnl Check for X Toolkit libraries AC_DEFUN([CF_X_TOOLKIT], [ AC_REQUIRE([AC_PATH_XTRA]) AC_REQUIRE([CF_CHECK_CACHE]) -# OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new), and (and +# OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new) (and # in some cases has installed dummy files in the former, other cases replaced # it with a link to the new location). This complicates the configure script. # Check for that pitfall, and recover using pkg-config # # If none of these are set, the configuration is almost certainly broken. if test -z "${X_CFLAGS}${X_PRE_LIBS}${X_LIBS}${X_EXTRA_LIBS}" then CF_TRY_PKG_CONFIG(x11,,[AC_MSG_WARN(unable to find X11 library)]) CF_TRY_PKG_CONFIG(ice,,[AC_MSG_WARN(unable to find ICE library)]) CF_TRY_PKG_CONFIG(sm,,[AC_MSG_WARN(unable to find SM library)]) CF_TRY_PKG_CONFIG(xt,,[AC_MSG_WARN(unable to find Xt library)]) +else + LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS" fi cf_have_X_LIBS=no CF_TRY_PKG_CONFIG(xt,[ case "x$LIBS" in (*-lX11*) ;; (*) # we have an "xt" package, but it may omit Xt's dependency on X11 AC_CACHE_CHECK(for usable X dependency,cf_cv_xt_x11_compat,[ AC_TRY_LINK([ #include <X11/Xlib.h> ],[ int rc1 = XDrawLine((Display*) 0, (Drawable) 0, (GC) 0, 0, 0, 0, 0); int rc2 = XClearWindow((Display*) 0, (Window) 0); int rc3 = XMoveWindow((Display*) 0, (Window) 0, 0, 0); int rc4 = XMoveResizeWindow((Display*)0, (Window)0, 0, 0, 0, 0); ],[cf_cv_xt_x11_compat=yes],[cf_cv_xt_x11_compat=no])]) if test "$cf_cv_xt_x11_compat" = no then CF_VERBOSE(work around broken X11 dependency) # 2010/11/19 - good enough until a working Xt on Xcb is delivered. CF_TRY_PKG_CONFIG(x11,,[CF_ADD_LIB_AFTER(-lXt,-lX11)]) fi ;; esac AC_CACHE_CHECK(for usable X Toolkit package,cf_cv_xt_ice_compat,[ AC_TRY_LINK([ #include <X11/Shell.h> -],[int num = IceConnectionNumber(0) +],[int num = IceConnectionNumber(0); (void) num ],[cf_cv_xt_ice_compat=yes],[cf_cv_xt_ice_compat=no])]) if test "$cf_cv_xt_ice_compat" = no then # workaround for broken ".pc" files used for X Toolkit. case "x$X_PRE_LIBS" in (*-lICE*) case "x$LIBS" in (*-lICE*) ;; (*) CF_VERBOSE(work around broken ICE dependency) CF_TRY_PKG_CONFIG(ice, [CF_TRY_PKG_CONFIG(sm)], [CF_ADD_LIB_AFTER(-lXt,$X_PRE_LIBS)]) ;; esac ;; esac fi cf_have_X_LIBS=yes ],[ LDFLAGS="$X_LIBS $LDFLAGS" CF_CHECK_CFLAGS($X_CFLAGS) AC_CHECK_FUNC(XOpenDisplay,,[ AC_CHECK_LIB(X11,XOpenDisplay, - [CF_ADD_LIB(X11)],, - [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])]) + [CF_ADD_LIB(X11)])]) AC_CHECK_FUNC(XtAppInitialize,,[ AC_CHECK_LIB(Xt, XtAppInitialize, [AC_DEFINE(HAVE_LIBXT,1,[Define to 1 if we can compile with the Xt library]) cf_have_X_LIBS=Xt - LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS"],, - [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])]) + LIBS="-lXt $LIBS"])]) ]) -if test $cf_have_X_LIBS = no ; then +if test "$cf_have_X_LIBS" = no ; then AC_MSG_WARN( [Unable to successfully link X Toolkit library (-lXt) with test program. You will have to check and add the proper libraries by hand to makefile.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF__ADD_SHLIB_RULES version: 6 updated: 2016/04/21 21:07:50 dnl ------------------- dnl Append rules for creating, installing, uninstalling and cleaning library. dnl In particular, this is needed for shared libraries since there are symbolic dnl links which depend on configuration choices. dnl dnl The logic is controlled by these cache variables: dnl $cf_cv_do_symlinks dnl $cf_cv_shlib_version dnl dnl The macro uses variables set by CF__DEFINE_SHLIB_VARS dnl dnl $1 = makefile to append to dnl $2 = model (static, shared, libtool) dnl $3 = objects (dependencies) dnl $4 = additional libraries needed to link the shared library define([CF__ADD_SHLIB_RULES],[ CF__DEFINE_LIB_TARGET case x$2 in (xlibtool|xshared) cf_libdeps="ifelse($4,,,[$4])" ;; (x*) cf_libdeps= ;; esac cat >>$1 <<CF_EOF # generated by CF__ADD_SHLIB_RULES # libmodel: $2 # symlinks: $cf_cv_do_symlinks # shlibver: $cf_cv_shlib_version CF_EOF cat >>$1 <<CF_EOF $cf_libname :: \\ CF_EOF cat >>$1 <<CF_EOF $3 @echo linking \[$]@ \$(LIBTOOL_CREATE) $3 $cf_libdeps CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>$1 <<CF_EOF \$(LN_S) $cf_libname $cf_liblink \$(LN_S) $cf_liblink $cf_libroot CF_EOF fi cat >>$1 <<CF_EOF install \\ install.libs :: \$(DESTDIR)\$(libdir)/$cf_libname \$(DESTDIR)\$(libdir)/$cf_libname :: \\ \$(DESTDIR)\$(libdir) \\ $3 @echo linking \[$]@ \$(LIBTOOL_CREATE) $3 $cf_libdeps CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>$1 <<CF_EOF cd \$(DESTDIR)\$(libdir) && (\$(LN_S) $cf_libname $cf_liblink; \$(LN_S) $cf_liblink $cf_libroot; ) CF_EOF fi if test x$2 = xshared then cat >>$1 <<CF_EOF - \$(SHELL) -c "if test -z "\$(DESTDIR)" ; then /sbin/ldconfig; fi" CF_EOF fi cat >>$1 <<CF_EOF uninstall \\ uninstall.libs :: @echo uninstalling \$(DESTDIR)\$(libdir)/$cf_libname CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>$1 <<CF_EOF -rm -f \$(DESTDIR)\$(libdir)/$cf_libroot -rm -f \$(DESTDIR)\$(libdir)/$cf_liblink CF_EOF fi cat >>$1 <<CF_EOF -rm -f \$(DESTDIR)\$(libdir)/$cf_libname clean \\ clean.libs :: CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>$1 <<CF_EOF -rm -f $cf_libroot -rm -f $cf_liblink CF_EOF fi cat >>$1 <<CF_EOF -rm -f $cf_libname mostlyclean:: -rm -f $3 # end generated by CF__ADD_SHLIB_RULES CF_EOF ])dnl dnl --------------------------------------------------------------------------- dnl CF__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49 dnl --------------- dnl Define a reusable chunk which includes <curses.h> and <term.h> when they dnl are both available. define([CF__CURSES_HEAD],[ #ifdef HAVE_XCURSES #include <xcurses.h> char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include <ncursesw/term.h> #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include <ncurses/term.h> #elif defined(HAVE_TERM_H) #include <term.h> #endif #endif ]) dnl --------------------------------------------------------------------------- dnl CF__DEFINE_LIB_TARGET version: 2 updated: 2015/05/10 19:52:14 dnl --------------------- define([CF__DEFINE_LIB_TARGET],[ cf_libname=\${LIB_BASENAME} cf_liblink=$cf_libname cf_libroot=$cf_libname if test "x$cf_cv_do_symlinks" = xyes then case "x$cf_cv_shlib_version" in (xrel) cf_liblink="\${LIB_ABI_NAME}" cf_libname="\${LIB_REL_NAME}" ;; (xabi) cf_liblink="\${LIB_REL_NAME}" cf_libname="\${LIB_ABI_NAME}" ;; esac fi LIB_TARGET=$cf_libname ])dnl dnl --------------------------------------------------------------------------- dnl CF__DEFINE_SHLIB_VARS version: 4 updated: 2015/09/28 17:49:10 dnl --------------------- dnl Substitute makefile variables useful for CF__ADD_SHLIB_RULES. dnl dnl The substitution requires these variables: dnl LIB_PREFIX - "lib" dnl LIB_ROOTNAME - "foo" dnl LIB_SUFFIX - ".so" dnl REL_VERSION - "5.0" dnl ABI_VERSION - "4.2.4" define([CF__DEFINE_SHLIB_VARS],[ CF__DEFINE_LIB_TARGET SET_SHLIB_VARS="# begin CF__DEFINE_SHLIB_VARS\\ LIB_BASENAME = \${LIB_PREFIX}\${LIB_ROOTNAME}\${LIB_SUFFIX}\\ LIB_REL_NAME = \${LIB_BASENAME}.\${REL_VERSION}\\ LIB_ABI_NAME = \${LIB_BASENAME}.\${ABI_VERSION}\\ LIB_TARGET = $LIB_TARGET\\ RM_SHARED_OPTS = $RM_SHARED_OPTS\\ # end CF__DEFINE_SHLIB_VARS" AC_SUBST(SET_SHLIB_VARS) AC_SUBST(LIB_TARGET) ])dnl dnl --------------------------------------------------------------------------- dnl CF__ICONV_BODY version: 2 updated: 2007/07/26 17:35:47 dnl -------------- dnl Test-code needed for iconv compile-checks define([CF__ICONV_BODY],[ iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);] )dnl dnl --------------------------------------------------------------------------- dnl CF__ICONV_HEAD version: 1 updated: 2007/07/26 15:57:03 dnl -------------- dnl Header-files needed for iconv compile-checks define([CF__ICONV_HEAD],[ #include <stdlib.h> #include <iconv.h>] )dnl dnl --------------------------------------------------------------------------- dnl CF__INIT_SHLIB_RULES version: 2 updated: 2013/07/27 17:38:32 dnl -------------------- dnl The third parameter to AC_OUTPUT, used to pass variables needed for dnl CF__ADD_SHLIB_RULES. define([CF__INIT_SHLIB_RULES],[ ABI_VERSION="$ABI_VERSION" REL_VERSION="$REL_VERSION" LIB_MODEL="$LIB_MODEL" LIB_PREFIX="$LIB_PREFIX" LIB_ROOTNAME="$LIB_ROOTNAME" DFT_DEP_SUFFIX="$DFT_DEP_SUFFIX" RM_SHARED_OPTS="$RM_SHARED_OPTS" cf_cv_do_symlinks="$cf_cv_do_symlinks" cf_cv_shlib_version="$cf_cv_shlib_version" ]) dnl --------------------------------------------------------------------------- dnl CF__INTL_BODY version: 3 updated: 2017/07/10 20:13:33 dnl ------------- dnl Test-code needed for libintl compile-checks dnl $1 = parameter 2 from AM_WITH_NLS define([CF__INTL_BODY],[ bindtextdomain ("", ""); return (int) gettext ("") ifelse([$1], need-ngettext, [ + (int) ngettext ("", "", 0)], []) #ifndef IGNORE_MSGFMT_HACK [ + _nl_msg_cat_cntr] #endif ]) dnl --------------------------------------------------------------------------- dnl CF__INTL_HEAD version: 1 updated: 2007/07/26 17:35:47 dnl ------------- dnl Header-files needed for libintl compile-checks define([CF__INTL_HEAD],[ #include <libintl.h> extern int _nl_msg_cat_cntr; ])dnl dnl --------------------------------------------------------------------------- dnl jm_GLIBC21 version: 4 updated: 2015/05/10 19:52:14 dnl ---------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl glibc21.m4 dnl ==================== dnl serial 2 dnl dnl Test for the GNU C Library, version 2.1 or newer. dnl From Bruno Haible. AC_DEFUN([jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no)]) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ]) diff --git a/argv.c b/argv.c index 46acfa6c7bea..e5dc4c8894bc 100644 --- a/argv.c +++ b/argv.c @@ -1,165 +1,168 @@ /* - * $Id: argv.c,v 1.12 2018/06/12 22:47:23 tom Exp $ + * $Id: argv.c,v 1.13 2020/03/26 02:55:37 tom Exp $ * * argv - Reusable functions for argv-parsing. * - * Copyright 2011-2017,2018 Thomas E. Dickey + * Copyright 2011-2018,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <string.h> /* * Convert a string to an argv[], returning a char** index (which must be * freed by the caller). The string is modified (replacing gaps between * tokens with nulls). */ char ** dlg_string_to_argv(char *blob) { size_t n, k; int pass; size_t length = strlen(blob); char **result = 0; #ifdef HAVE_DLG_TRACE if (dialog_state.trace_output) { DLG_TRACE(("# dlg_string_to_argv:\n")); DLG_TRACE(("# given:\n")); for (n = k = 0; n < length; ++n) { if (blob[n] == '\n') { DLG_TRACE(("#%s\t%.*s\\n\n", k ? "+" : "", (int) (n - k), blob + k)); k = n + 1; } } if (n > k) { DLG_TRACE(("#%s\t%.*s\n", k ? "+" : "", (int) (n - k), blob + k)); } DLG_TRACE(("# result:\n")); } #endif for (pass = 0; pass < 2; ++pass) { bool inparm = FALSE; bool quoted = FALSE; - bool escape = FALSE; char *param = blob; size_t count = 0; for (n = 0; n < length; ++n) { - if (escape) { - ; - } else if (quoted && blob[n] == '"') { + if (quoted && blob[n] == '"') { quoted = FALSE; } else if (blob[n] == '"') { quoted = TRUE; if (!inparm) { - if (pass) + if (pass) { result[count] = param; + } ++count; inparm = TRUE; } } else if (!quoted && isspace(UCH(blob[n]))) { if (inparm) { if (pass) { - *param++ = '\0'; + *param = '\0'; } + ++param; inparm = FALSE; } } else { if (blob[n] == '\\') { - if (n + 1 == length) { + size_t n1 = (n + 1); + bool ignore = FALSE; + if (n1 == length) { break; /* The string is terminated by a backslash */ - } else if ((blob[n + 1] == '\\') || - (blob[n + 1] == '"') || - (!quoted && blob[n + 1] == '\n')) { + } else if ((blob[n1] == '\\') || + (blob[n1] == '"') || + (ignore = (blob[n1] == '\n'))) { /* eat the backslash */ if (pass) { --length; for (k = n; k < length; ++k) blob[k] = blob[k + 1]; blob[length] = '\0'; } else { - escape = TRUE; - continue; + ++param; /* pretend I ate it */ } + if (ignore) + continue; } } if (!inparm) { - if (pass) + if (pass) { result[count] = param; + } ++count; inparm = TRUE; } if (pass) { - *param++ = blob[n]; + *param = blob[n]; } + ++param; } - escape = FALSE; } - if (!pass) { + if (pass) { + *param = '\0'; + } else { if (count) { result = dlg_calloc(char *, count + 1); assert_ptr(result, "string_to_argv"); } else { break; /* no tokens found */ } - } else { - *param = '\0'; } } #ifdef HAVE_DLG_TRACE if (result != 0) { for (n = 0; result[n] != 0; ++n) { DLG_TRACE(("#\targv[%d] = %s\n", (int) n, result[n])); } } #endif return result; } /* * Count the entries in an argv list. */ int dlg_count_argv(char **argv) { int result = 0; if (argv != 0) { while (argv[result] != 0) ++result; } return result; } int dlg_eat_argv(int *argcp, char ***argvp, int start, int count) { int k; *argcp -= count; for (k = start; k <= *argcp; k++) (*argvp)[k] = (*argvp)[k + count]; (*argvp)[*argcp] = 0; return TRUE; } diff --git a/arrows.c b/arrows.c index 28f681a0379b..b8bf6c69e61c 100644 --- a/arrows.c +++ b/arrows.c @@ -1,275 +1,277 @@ /* - * $Id: arrows.c,v 1.52 2018/06/18 22:10:54 tom Exp $ + * $Id: arrows.c,v 1.53 2019/07/24 23:04:14 tom Exp $ * * arrows.c -- draw arrows to indicate end-of-range for lists * - * Copyright 2000-2013,2018 Thomas E. Dickey + * Copyright 2000-2018,2019 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #ifdef USE_WIDE_CURSES #if defined(CURSES_WACS_ARRAY) && !defined(CURSES_WACS_SYMBOLS) /* workaround for NetBSD 5.1 curses */ #undef WACS_DARROW #undef WACS_UARROW #define WACS_DARROW &(CURSES_WACS_ARRAY['.']) #define WACS_UARROW &(CURSES_WACS_ARRAY['-']) #endif #define add_acs(win, code) wadd_wch(win, W ## code) #else #define add_acs(win, code) waddch(win, dlg_boxchar(code)) #endif /* size of decorations */ #define ON_LEFT 4 #define ON_RIGHT 3 #ifdef HAVE_COLOR static chtype merge_colors(chtype foreground, chtype background) { chtype result = foreground; if ((foreground & A_COLOR) != (background & A_COLOR)) { short fg_f, bg_f; short fg_b, bg_b; short fg_pair = (short) PAIR_NUMBER(foreground); short bg_pair = (short) PAIR_NUMBER(background); if (pair_content(fg_pair, &fg_f, &bg_f) != ERR && pair_content(bg_pair, &fg_b, &bg_b) != ERR) { result &= ~A_COLOR; result |= dlg_color_pair(fg_f, bg_b); } } return result; } #else #define merge_colors(f,b) (f) #endif /* * If we have help-line text, e.g., from "--hline", draw it between the other * decorations at the bottom of the dialog window. */ void dlg_draw_helpline(WINDOW *win, bool decorations) { - int cur_x, cur_y; int bottom; if (dialog_vars.help_line != 0 && dialog_vars.help_line[0] != 0 && (bottom = getmaxy(win) - 1) > 0) { chtype attr = A_NORMAL; int cols = dlg_count_columns(dialog_vars.help_line); int other = decorations ? (ON_LEFT + ON_RIGHT) : 0; int avail = (getmaxx(win) - other - 2); int limit = dlg_count_real_columns(dialog_vars.help_line) + 2; if (limit < avail) { + int cur_x, cur_y; + getyx(win, cur_y, cur_x); other = decorations ? ON_LEFT : 0; (void) wmove(win, bottom, other + (avail - limit) / 2); waddch(win, '['); dlg_print_text(win, dialog_vars.help_line, cols, &attr); waddch(win, ']'); wmove(win, cur_y, cur_x); } } } void dlg_draw_arrows2(WINDOW *win, int top_arrow, int bottom_arrow, int x, int top, int bottom, chtype attr, chtype borderattr) { chtype save = dlg_get_attrs(win); int cur_x, cur_y; int limit_x = getmaxx(win); bool draw_top = TRUE; bool is_toplevel = (wgetparent(win) == stdscr); getyx(win, cur_y, cur_x); /* * If we're drawing a centered title, do not overwrite with the arrows. */ if (dialog_vars.title && is_toplevel && (top - getbegy(win)) < MARGIN) { int have = (limit_x - dlg_count_columns(dialog_vars.title)) / 2; int need = x + 5; if (need > have) draw_top = FALSE; } if (draw_top) { (void) wmove(win, top, x); if (top_arrow) { dlg_attrset(win, merge_colors(uarrow_attr, attr)); (void) add_acs(win, ACS_UARROW); (void) waddstr(win, "(-)"); } else { dlg_attrset(win, attr); (void) whline(win, dlg_boxchar(ACS_HLINE), ON_LEFT); } } mouse_mkbutton(top, x - 1, 6, KEY_PPAGE); (void) wmove(win, bottom, x); if (bottom_arrow) { dlg_attrset(win, merge_colors(darrow_attr, borderattr)); (void) add_acs(win, ACS_DARROW); (void) waddstr(win, "(+)"); } else { dlg_attrset(win, borderattr); (void) whline(win, dlg_boxchar(ACS_HLINE), ON_LEFT); } mouse_mkbutton(bottom, x - 1, 6, KEY_NPAGE); (void) wmove(win, cur_y, cur_x); wrefresh(win); dlg_attrset(win, save); } void dlg_draw_scrollbar(WINDOW *win, long first_data, long this_data, long next_data, long total_data, int left, int right, int top, int bottom, chtype attr, chtype borderattr) { - char buffer[80]; - int percent; - int len; int oldy, oldx; chtype save = dlg_get_attrs(win); int top_arrow = (first_data != 0); int bottom_arrow = (next_data < total_data); getyx(win, oldy, oldx); dlg_draw_helpline(win, TRUE); if (bottom_arrow || top_arrow || dialog_state.use_scrollbar) { + char buffer[80]; + int percent; + int len; + percent = (!total_data ? 100 : (int) ((next_data * 100) / total_data)); if (percent < 0) percent = 0; else if (percent > 100) percent = 100; dlg_attrset(win, position_indicator_attr); (void) sprintf(buffer, "%d%%", percent); (void) wmove(win, bottom, right - 7); (void) waddstr(win, buffer); if ((len = dlg_count_columns(buffer)) < 4) { dlg_attrset(win, border_attr); whline(win, dlg_boxchar(ACS_HLINE), 4 - len); } } #define BARSIZE(num) (int) (0.5 + (double) ((all_high * (int) (num)) / (double) total_data)) #define ORDSIZE(num) (int) ((double) ((all_high * (int) (num)) / (double) all_diff)) if (dialog_state.use_scrollbar) { int all_high = (bottom - top - 1); this_data = MAX(0, this_data); if (total_data > 0 && all_high > 0) { int all_diff = (int) (total_data + 1); int bar_diff = (int) (next_data + 1 - this_data); int bar_high; - int bar_y; bar_high = ORDSIZE(bar_diff); if (bar_high <= 0) bar_high = 1; if (bar_high < all_high) { int bar_last = BARSIZE(next_data); + int bar_y; wmove(win, top + 1, right); dlg_attrset(win, save); wvline(win, ACS_VLINE | A_REVERSE, all_high); bar_y = ORDSIZE(this_data); if (bar_y >= bar_last && bar_y > 0) bar_y = bar_last - 1; if (bar_last - bar_y > bar_high && bar_high > 1) ++bar_y; bar_last = MIN(bar_last, all_high); wmove(win, top + 1 + bar_y, right); dlg_attrset(win, position_indicator_attr); dlg_attron(win, A_REVERSE); #if defined(WACS_BLOCK) && defined(NCURSES_VERSION) && defined(USE_WIDE_CURSES) wvline_set(win, WACS_BLOCK, bar_last - bar_y); #else wvline(win, ACS_BLOCK, bar_last - bar_y); #endif } } } dlg_draw_arrows2(win, top_arrow, bottom_arrow, left + ARROWS_COL, top, bottom, attr, borderattr); dlg_attrset(win, save); wmove(win, oldy, oldx); } void dlg_draw_arrows(WINDOW *win, int top_arrow, int bottom_arrow, int x, int top, int bottom) { dlg_draw_helpline(win, TRUE); dlg_draw_arrows2(win, top_arrow, bottom_arrow, x, top, bottom, menubox_border2_attr, menubox_border_attr); } diff --git a/buildlist.c b/buildlist.c index 639056ff25b6..e21700e7c8ae 100644 --- a/buildlist.c +++ b/buildlist.c @@ -1,1265 +1,1268 @@ /* - * $Id: buildlist.c,v 1.83 2018/06/19 22:57:01 tom Exp $ + * $Id: buildlist.c,v 1.94 2020/11/23 00:37:17 tom Exp $ * * buildlist.c -- implements the buildlist dialog * - * Copyright 2012-2017,2018 Thomas E. Dickey + * Copyright 2012-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> /* * Visually like menubox, but two columns. */ #define sLEFT (-2) #define sRIGHT (-1) #define KEY_LEFTCOL '^' #define KEY_RIGHTCOL '$' #define MIN_HIGH (1 + (5 * MARGIN)) typedef struct { WINDOW *win; int box_y; int box_x; int top_index; int cur_index; DIALOG_LISTITEM **ip; /* pointers to items in this list */ } MY_DATA; #if 0 #define TRACE(p) dlg_trace_msg p #else #define TRACE(p) /* nothing */ #endif #define okIndex(all,index) ((index) >= 0 && (index) < (all)->item_no) #define myItem(p,n) ((p)->ip)[n] #define mySide(n) ((n)?"right":"left") typedef struct { DIALOG_LISTITEM *items; /* all items in the widget */ int base_y; /* base for mouse coordinates */ int base_x; int use_height; /* actual size of column box */ int use_width; int item_no; int check_x; int item_x; MY_DATA list[2]; } ALL_DATA; /* * Translate a choice from items[] to a row-number in an unbounded column, * starting at zero. */ static int index2row(ALL_DATA * all, int choice, int selected) { MY_DATA *data = all->list + selected; int result = -1; - int row; if (okIndex(all, choice)) { + int row; + for (row = 0; row < all->item_no; ++row) { TRACE(("!... choice %d: %p vs row %d: %p\n", choice, all->items + choice, row, myItem(data, row))); if (myItem(data, row) == all->items + choice) { result = row; break; } } } TRACE(("! index2row(choice %d, %s) = %d\n", choice, mySide(selected), result)); return result; } /* * Convert a row-number back to an item number, i.e., index into items[]. */ static int row2index(ALL_DATA * all, int row, int selected) { MY_DATA *data = all->list + selected; int result = -1; int n; for (n = 0; n < all->item_no; ++n) { TRACE(("!... row %d: %p vs choice %d: %p\n", row, myItem(data, row), n, all->items + n)); if (myItem(data, row) == all->items + n) { result = n; break; } } TRACE(("! row2index(row %d, %s) = %d\n", row, mySide(selected), result)); return result; } /* * Print list item. The 'selected' parameter is true if 'choice' is the * current item. That one is colored differently from the other items. */ static void print_item(ALL_DATA * all, WINDOW *win, DIALOG_LISTITEM * item, int row, int selected) { chtype save = dlg_get_attrs(win); int i; bool both = (!dialog_vars.no_tags && !dialog_vars.no_items); bool first = TRUE; int climit = (all->item_x - all->check_x - 1); const char *show = (dialog_vars.no_items ? item->name : item->text); /* Clear 'residue' of last item */ dlg_attrset(win, menubox_attr); (void) wmove(win, row, 0); for (i = 0; i < getmaxx(win); i++) (void) waddch(win, ' '); (void) wmove(win, row, all->check_x); dlg_attrset(win, menubox_attr); if (both) { dlg_print_listitem(win, item->name, climit, first, selected); (void) waddch(win, ' '); first = FALSE; } (void) wmove(win, row, all->item_x); climit = (getmaxx(win) - all->item_x + 1); dlg_print_listitem(win, show, climit, first, selected); if (selected) { dlg_item_help(item->help); } dlg_attrset(win, save); } /* * Prints either the left (unselected) or right (selected) list. */ static void print_1_list(ALL_DATA * all, int choice, int selected) { MY_DATA *data = all->list + selected; DIALOG_LISTITEM *target = (okIndex(all, choice) ? all->items + choice : 0); WINDOW *win = data->win; int i, j; int last = 0; int top_row = index2row(all, data->top_index, selected); int max_rows = getmaxy(win); TRACE(("! print_1_list %d %s, top %d\n", choice, mySide(selected), top_row)); for (i = j = 0; j < max_rows; i++) { int ii = i + top_row; if (ii < 0) { continue; } else if (myItem(data, ii)) { print_item(all, win, myItem(data, ii), j, myItem(data, ii) == target); last = ++j; } else { break; } } if (wmove(win, last, 0) != ERR) { while (waddch(win, ' ') != ERR) { ; } } (void) wnoutrefresh(win); } /* * Return the previous item from the list, staying in the same column. If no * further movement is possible, return the same choice as given. */ static int prev_item(ALL_DATA * all, int choice, int selected) { int result = choice; int row = index2row(all, choice, selected); if (row > 0) { row--; result = row2index(all, row, selected); } TRACE(("! prev_item choice %d, %s = %d\n", choice, mySide(selected), result)); return result; } /* * Return true if the given choice is on the first page in the current column. */ static bool stop_prev(ALL_DATA * all, int choice, int selected) { return (prev_item(all, choice, selected) == choice); } static bool check_hotkey(DIALOG_LISTITEM * items, int choice, int selected) { bool result = FALSE; if ((items[choice].state != 0) == selected) { if (dlg_match_char(dlg_last_getc(), (dialog_vars.no_tags ? items[choice].text : items[choice].name))) { result = TRUE; } } return result; } /* * Return the next item from the list, staying in the same column. If no * further movement is possible, return the same choice as given. */ static int next_item(ALL_DATA * all, int choice, int selected) { MY_DATA *data = all->list + selected; int result = choice; int row = index2row(all, choice, selected); TRACE(("! given item %d, testing next-item on row %d\n", choice, row + 1)); if (myItem(data, row + 1)) { result = row2index(all, row + 1, selected); } TRACE(("! next_item(%d, %s) ->%d\n", choice, mySide(selected), result)); return result; } /* * Return the first choice from items[] for the given column. */ static int first_item(ALL_DATA * all, int selected) { MY_DATA *data = all->list + selected; int result = -1; - int n; if (myItem(data, 0) != 0) { + int n; + for (n = 0; n < all->item_no; ++n) { if (myItem(data, 0) == &all->items[n]) { result = n; break; } } } TRACE(("! first_item %s = %d\n", mySide(selected), result)); return result; } /* * Return the last choice from items[] for the given column. */ static int last_item(ALL_DATA * all, int selected) { MY_DATA *data = all->list + selected; int result = -1; int n; for (n = 0; myItem(data, n) != 0; ++n) { result = n; } if (result >= 0) { result = row2index(all, result, selected); } TRACE(("! last_item %s = %d\n", mySide(selected), result)); return result; } static int skip_rows(ALL_DATA * all, int row, int skip, int selected) { MY_DATA *data = all->list + selected; int result = row; - int n; if (skip > 0) { + int n; + for (n = row + 1; (n < all->item_no) && (n <= row + skip); ++n) { if (myItem(data, n) == 0) break; result = n; } } else if (skip < 0) { result -= skip; if (result < 0) result = 0; } TRACE(("! skip_rows row %d, skip %d, %s = %d\n", row, skip, mySide(selected), result)); return result; } /* * Find the closest item in the given column starting with the given choice. */ static int closest_item(ALL_DATA * all, int choice, int selected) { int prev = choice; int next = choice; int result = choice; int n; for (n = choice; n >= 0; --n) { if ((all->items[n].state != 0) == selected) { prev = n; break; } } for (n = choice; n < all->item_no; ++n) { if ((all->items[n].state != 0) == selected) { next = n; break; } } if (prev != choice) { result = prev; if (next != choice) { if ((choice - prev) > (next - choice)) { result = next; } } } else if (next != choice) { result = next; } TRACE(("! XXX closest item choice %d, %s = %d\n", choice, mySide(selected), result)); return result; } static void print_both(ALL_DATA * all, int choice) { int selected; int cur_y, cur_x; WINDOW *dialog = wgetparent(all->list[0].win); TRACE(("! print_both %d\n", choice)); getyx(dialog, cur_y, cur_x); for (selected = 0; selected < 2; ++selected) { MY_DATA *data = all->list + selected; WINDOW *win = data->win; int thumb_top = index2row(all, data->top_index, selected); int thumb_max = index2row(all, -1, selected); int thumb_end = thumb_top + getmaxy(win); print_1_list(all, choice, selected); dlg_mouse_setcode(selected * KEY_MAX); dlg_draw_scrollbar(dialog, (long) (data->top_index), (long) (thumb_top), (long) MIN(thumb_end, thumb_max), (long) thumb_max, data->box_x + all->check_x, data->box_x + getmaxx(win), data->box_y, data->box_y + getmaxy(win) + 1, menubox_border2_attr, menubox_border_attr); } (void) wmove(dialog, cur_y, cur_x); dlg_mouse_setcode(0); } static void set_top_item(ALL_DATA * all, int choice, int selected) { if (choice != all->list[selected].top_index) { DLG_TRACE(("# set top of %s column to %d\n", mySide(selected), choice)); all->list[selected].top_index = choice; } } /* * Adjust the top-index as needed to ensure that it and the given item are * visible. */ static void fix_top_item(ALL_DATA * all, int cur_item, int selected) { int top_item = all->list[selected].top_index; int cur_row = index2row(all, cur_item, selected); int top_row = index2row(all, top_item, selected); if (cur_row < top_row) { top_item = cur_item; } else if ((cur_row - top_row) >= all->use_height) { top_item = row2index(all, cur_row + 1 - all->use_height, selected); } if (cur_row < all->use_height) { top_item = row2index(all, 0, selected); } DLG_TRACE(("# fix_top_item(cur_item %d, %s) ->top_item %d\n", cur_item, mySide(selected), top_item)); set_top_item(all, top_item, selected); } static void append_right_side(ALL_DATA * all, int choice) { MY_DATA *data = &all->list[1]; int j; for (j = 0; j < all->item_no; ++j) { if (myItem(data, j) == 0) { myItem(data, j) = &all->items[choice]; break; } } } static void amend_right_side(ALL_DATA * all, int choice) { MY_DATA *data = &all->list[1]; int j, k; for (j = 0; j < all->item_no; ++j) { if (myItem(data, j) == &all->items[choice]) { for (k = j; k < all->item_no; ++k) { if ((myItem(data, k) = myItem(data, k + 1)) == 0) break; } break; } } } static void fill_one_side(ALL_DATA * all, int selected) { int i, j; MY_DATA *data = all->list + selected; for (i = j = 0; j < all->item_no; ++j) { myItem(data, i) = 0; if ((all->items[j].state != 0) == selected) { myItem(data, i) = all->items + j; TRACE(("! %s item[%d] %p = all[%d] %p\n", mySide(selected), i, myItem(data, i), j, all->items + j)); ++i; } } myItem(data, i) = 0; } static void fill_both_sides(ALL_DATA * all) { int k; for (k = 0; k < 2; ++k) { fill_one_side(all, k); } } /* * This is an alternate interface to 'buildlist' which allows the application * to read the list item states back directly without putting them in the * output buffer. */ int dlg_buildlist(const char *title, const char *cprompt, int height, int width, int list_height, int item_no, DIALOG_LISTITEM * items, const char *states, int order_mode, int *current_item) { #define THIS_FUNC "dlg_buildlist" /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_END ), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+' ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE) ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE+KEY_MAX) ), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ), DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE+KEY_MAX) ), DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFTCOL ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHTCOL ), TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif ALL_DATA all; MY_DATA *data = all.list; int i, j, k, key2, found, x, y, cur_x, cur_y; - int key = 0, fkey; + int key, fkey; bool save_visit = dialog_state.visit_items; int button; int cur_item; - int was_mouse; int name_width, text_width, full_width, list_width; int result = DLG_EXIT_UNKNOWN; int num_states; bool first = TRUE; WINDOW *dialog; char *prompt; const char **buttons = dlg_ok_labels(); const char *widget_name = "buildlist"; dialog_state.plain_buttons = TRUE; /* * Unlike other uses of --visit-items, we have two windows to visit. */ if (dialog_state.visit_cols) dialog_state.visit_cols = 2; memset(&all, 0, sizeof(all)); all.items = items; all.item_no = item_no; for (k = 0; k < 2; ++k) { data[k].ip = dlg_calloc(DIALOG_LISTITEM *, (item_no + 2)); } fill_both_sides(&all); if (dialog_vars.default_item != 0) { cur_item = dlg_default_listitem(items); } else { if ((cur_item = first_item(&all, 0)) < 0) cur_item = first_item(&all, 1); } button = (dialog_state.visit_items ? (items[cur_item].state ? sRIGHT : sLEFT) : dlg_default_button()); dlg_does_output(); #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); all.use_height = list_height; all.use_width = (2 * (dlg_calc_list_width(item_no, items) + 4 + 2 * MARGIN) + 1); all.use_width = MAX(26, all.use_width); if (all.use_height == 0) { /* calculate height without items (4) */ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, all.use_width); dlg_calc_listh(&height, &all.use_height, item_no); } else { dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + all.use_height, all.use_width); } dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); /* we need at least two states */ if (states == 0 || strlen(states) < 2) states = " *"; num_states = (int) strlen(states); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); dlg_register_window(dialog, widget_name, binding); dlg_register_buttons(dialog, widget_name, buttons); dlg_mouse_setbase(all.base_x = x, all.base_y = y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); list_width = (width - 6 * MARGIN - 2) / 2; getyx(dialog, cur_y, cur_x); data[0].box_y = cur_y + 1; data[0].box_x = MARGIN + 1; data[1].box_y = cur_y + 1; data[1].box_x = data[0].box_x + 1 + 2 * MARGIN + list_width; /* * After displaying the prompt, we know how much space we really have. * Limit the list to avoid overwriting the ok-button. */ - if (all.use_height + MIN_HIGH > height - cur_y) - all.use_height = height - MIN_HIGH - cur_y; + all.use_height = height - MIN_HIGH - cur_y; if (all.use_height <= 0) all.use_height = 1; for (k = 0; k < 2; ++k) { /* create new window for the list */ data[k].win = dlg_sub_window(dialog, all.use_height, list_width, y + data[k].box_y + 1, x + data[k].box_x + 1); /* draw a box around the list items */ dlg_draw_box(dialog, data[k].box_y, data[k].box_x, all.use_height + 2 * MARGIN, list_width + 2 * MARGIN, menubox_border_attr, menubox_border2_attr); } text_width = 0; name_width = 0; /* Find length of longest item to center buildlist */ for (i = 0; i < item_no; i++) { text_width = MAX(text_width, dlg_count_columns(items[i].text)); name_width = MAX(name_width, dlg_count_columns(items[i].name)); } /* If the name+text is wider than the list is allowed, then truncate * one or both of them. If the name is no wider than 1/4 of the list, * leave it intact. */ all.use_width = (list_width - 6 * MARGIN); if (dialog_vars.no_tags && !dialog_vars.no_items) { full_width = MIN(all.use_width, text_width); } else if (dialog_vars.no_items) { full_width = MIN(all.use_width, name_width); } else { if (text_width >= 0 && name_width >= 0 && all.use_width > 0 && text_width + name_width > all.use_width) { int need = (int) (0.25 * all.use_width); if (name_width > need) { int want = (int) (all.use_width * ((double) name_width) / (text_width + name_width)); name_width = (want > need) ? want : need; } text_width = all.use_width - name_width; } full_width = text_width + name_width; } all.check_x = (all.use_width - full_width) / 2; all.item_x = ((dialog_vars.no_tags ? 0 : (dialog_vars.no_items ? 0 : (name_width + 2))) + all.check_x); /* ensure we are scrolled to show the current choice */ j = MIN(all.use_height, item_no); for (i = 0; i < 2; ++i) { if ((items[cur_item].state != 0) == i) { int top_item = cur_item - j + 1; if (top_item < 0) top_item = 0; while ((items[top_item].state != 0) != i) ++top_item; set_top_item(&all, top_item, i); } else { set_top_item(&all, 0, i); } } /* register the new window, along with its borders */ for (i = 0; i < 2; ++i) { dlg_mouse_mkbigregion(data[i].box_y + 1, data[i].box_x, all.use_height, list_width + 2, 2 * KEY_MAX + (i * (1 + all.use_height)), 1, 1, 1 /* by lines */ ); } dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); while (result == DLG_EXIT_UNKNOWN) { int which = (items[cur_item].state != 0); MY_DATA *moi = data + which; int at_top = index2row(&all, moi->top_index, which); int at_end = index2row(&all, -1, which); int at_bot = skip_rows(&all, at_top, all.use_height, which); + int was_mouse; DLG_TRACE(("# ** state %d:%d top %d (%d:%d:%d) %s\n", cur_item, item_no - 1, moi->top_index, at_top, at_bot, at_end, mySide(which))); if (first) { print_both(&all, cur_item); dlg_trace_win(dialog); first = FALSE; } if (button < 0) { /* --visit-items */ int cur_row = index2row(&all, cur_item, which); cur_y = (data[which].box_y + cur_row + 1); if (at_top > 0) cur_y -= at_top; cur_x = (data[which].box_x + all.check_x + 1); DLG_TRACE(("# ...visit row %d (%d,%d)\n", cur_row, cur_y, cur_x)); wmove(dialog, cur_y, cur_x); } key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } was_mouse = (fkey && is_DLGK_MOUSE(key)); if (was_mouse) key -= M_EVENT; if (!was_mouse) { ; } else if (key >= 2 * KEY_MAX) { i = (key - 2 * KEY_MAX) % (1 + all.use_height); j = (key - 2 * KEY_MAX) / (1 + all.use_height); k = row2index(&all, i + at_top, j); DLG_TRACE(("# MOUSE column %d, row %d ->item %d\n", j, i, k)); if (k >= 0 && j < 2) { if (j != which) { /* * Mouse click was in the other column. */ moi = data + j; fix_top_item(&all, k, j); } which = j; at_top = index2row(&all, moi->top_index, which); at_bot = skip_rows(&all, at_top, all.use_height, which); cur_item = k; print_both(&all, cur_item); key = DLGK_TOGGLE; /* force the selected item to toggle */ } else { beep(); continue; } fkey = FALSE; } else if (key >= KEY_MIN) { if (key > KEY_MAX) { if (which == 0) { key = KEY_RIGHTCOL; /* switch to right-column */ fkey = FALSE; } else { key -= KEY_MAX; } } else { if (which == 1) { key = KEY_LEFTCOL; /* switch to left-column */ fkey = FALSE; } } key = dlg_lookup_key(dialog, key, &fkey); } /* * A space toggles the item status. Normally we put the cursor on * the next available item in the same column. But if there are no * more items in the column, move the cursor to the other column. */ if (key == DLGK_TOGGLE) { int new_choice; int new_state = items[cur_item].state + 1; if ((new_choice = next_item(&all, cur_item, which)) == cur_item) { new_choice = prev_item(&all, cur_item, which); } DLG_TRACE(("# cur_item %d, new_choice:%d\n", cur_item, new_choice)); /* FIXME - how to test and handle multiple states? */ if (new_state >= num_states) new_state = 0; items[cur_item].state = new_state; if (order_mode) { fill_one_side(&all, 0); if (new_state) { append_right_side(&all, cur_item); } else { amend_right_side(&all, cur_item); } } else { fill_both_sides(&all); } if (cur_item == moi->top_index) { set_top_item(&all, new_choice, which); } if (new_choice >= 0) { fix_top_item(&all, cur_item, !which); cur_item = new_choice; } print_both(&all, cur_item); dlg_trace_win(dialog); continue; /* wait for another key press */ } /* * Check if key pressed matches first character of any item tag in * list. If there is more than one match, we will cycle through * each one as the same key is pressed repeatedly. */ found = FALSE; if (!fkey) { if (button < 0 || !dialog_state.visit_items) { for (j = cur_item + 1; j < item_no; j++) { if (check_hotkey(items, j, which)) { found = TRUE; i = j; break; } } if (!found) { for (j = 0; j <= cur_item; j++) { if (check_hotkey(items, j, which)) { found = TRUE; i = j; break; } } } if (found) dlg_flush_getc(); } else if ((j = dlg_char_to_button(key, buttons)) >= 0) { button = j; ungetch('\n'); continue; } } /* * A single digit (1-9) positions the selection to that line in the * current screen. */ if (!found && (key <= '9') && (key > '0') && (key - '1' < at_bot)) { found = TRUE; i = key - '1'; } if (!found && fkey) { switch (key) { case DLGK_FIELD_PREV: if ((button == sRIGHT) && dialog_state.visit_items) { key = DLGK_GRID_LEFT; button = sLEFT; } else { button = dlg_prev_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); if (button == sRIGHT) { key = DLGK_GRID_RIGHT; } else { continue; } } break; case DLGK_FIELD_NEXT: if ((button == sLEFT) && dialog_state.visit_items) { key = DLGK_GRID_RIGHT; button = sRIGHT; } else { button = dlg_next_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); if (button == sLEFT) { key = DLGK_GRID_LEFT; } else { continue; } } break; } } if (!found && fkey) { i = cur_item; found = TRUE; switch (key) { case DLGK_GRID_LEFT: i = closest_item(&all, cur_item, 0); fix_top_item(&all, i, 0); break; case DLGK_GRID_RIGHT: if (order_mode) { i = last_item(&all, 1); } else { i = closest_item(&all, cur_item, 1); } fix_top_item(&all, i, 1); break; case DLGK_PAGE_PREV: if (cur_item > moi->top_index) { i = moi->top_index; } else if (moi->top_index != 0) { int temp = at_top; if ((temp -= all.use_height) < 0) temp = 0; i = row2index(&all, temp, which); } break; case DLGK_PAGE_NEXT: if ((at_end - at_bot) < all.use_height) { i = next_item(&all, row2index(&all, at_end, which), which); } else { i = next_item(&all, row2index(&all, at_bot, which), which); at_top = at_bot; set_top_item(&all, next_item(&all, row2index(&all, at_top, which), which), which); at_bot = skip_rows(&all, at_top, all.use_height, which); at_bot = MIN(at_bot, at_end); } break; case DLGK_ITEM_FIRST: i = first_item(&all, which); break; case DLGK_ITEM_LAST: i = last_item(&all, which); break; case DLGK_ITEM_PREV: i = prev_item(&all, cur_item, which); if (stop_prev(&all, cur_item, which)) continue; break; case DLGK_ITEM_NEXT: i = next_item(&all, cur_item, which); break; default: found = FALSE; break; } } if (found) { if (i != cur_item) { int now_at = index2row(&all, i, which); int oops = item_no; int old_item; DLG_TRACE(("# <--CHOICE %d\n", i)); DLG_TRACE(("# <--topITM %d\n", moi->top_index)); DLG_TRACE(("# <--now_at %d\n", now_at)); DLG_TRACE(("# <--at_top %d\n", at_top)); DLG_TRACE(("# <--at_bot %d\n", at_bot)); if (now_at >= at_bot) { while (now_at >= at_bot) { if ((at_bot - at_top) >= all.use_height) { set_top_item(&all, next_item(&all, moi->top_index, which), which); } at_top = index2row(&all, moi->top_index, which); at_bot = skip_rows(&all, at_top, all.use_height, which); DLG_TRACE(("# ...at_bot %d (now %d vs %d)\n", at_bot, now_at, at_end)); DLG_TRACE(("# ...topITM %d\n", moi->top_index)); DLG_TRACE(("# ...at_top %d (diff %d)\n", at_top, at_bot - at_top)); if (at_bot >= at_end) { /* * If we bumped into the end, move the top-item * down by one line so that we can display the * last item in the list. */ if ((at_bot - at_top) > all.use_height) { set_top_item(&all, next_item(&all, moi->top_index, which), which); } else if (at_top > 0 && (at_bot - at_top) >= all.use_height) { set_top_item(&all, next_item(&all, moi->top_index, which), which); } break; } if (--oops < 0) { DLG_TRACE(("# OOPS-forward\n")); break; } } } else if (now_at < at_top) { while (now_at < at_top) { old_item = moi->top_index; set_top_item(&all, prev_item(&all, moi->top_index, which), which); at_top = index2row(&all, moi->top_index, which); DLG_TRACE(("# ...at_top %d (now %d)\n", at_top, now_at)); DLG_TRACE(("# ...topITM %d\n", moi->top_index)); if (moi->top_index >= old_item) break; if (at_top <= now_at) break; if (--oops < 0) { DLG_TRACE(("# OOPS-backward\n")); break; } } } DLG_TRACE(("# -->now_at %d\n", now_at)); cur_item = i; print_both(&all, cur_item); } dlg_trace_win(dialog); continue; /* wait for another key press */ } if (fkey) { switch (key) { case DLGK_ENTER: result = dlg_enter_buttoncode(button); break; + case DLGK_LEAVE: + result = dlg_ok_buttoncode(button); + break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; free(prompt); - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); /* repaint */ first = TRUE; goto retry; #endif default: if (was_mouse) { if ((key2 = dlg_ok_buttoncode(key)) >= 0) { result = key2; break; } beep(); } } - } else { + } else if (key > 0) { beep(); } } /* * If told to re-order the list, update it to reflect the current display: * a) The left-side will be at the beginning, without gaps. * b) The right-side will follow, in display-order. */ if (order_mode) { DIALOG_LISTITEM *redo; int row; int choice; int new_item = cur_item; redo = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); assert_ptr(redo, THIS_FUNC); j = 0; for (k = 0; k < 2; ++k) { for (row = 0; row < item_no; ++row) { if (myItem(all.list + k, row) == 0) break; choice = row2index(&all, row, k); if (choice == cur_item) new_item = j; redo[j++] = items[choice]; } } cur_item = new_item; memcpy(items, redo, sizeof(DIALOG_LISTITEM) * (size_t) (item_no + 1)); free(redo); } for (k = 0; k < 2; ++k) { free(data[k].ip); } dialog_state.visit_cols = save_visit; dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); *current_item = cur_item; return result; #undef THIS_FUNC } /* * Display a dialog box with a list of options that can be turned on or off */ int dialog_buildlist(const char *title, const char *cprompt, int height, int width, int list_height, int item_no, char **items, int order_mode) { #define THIS_FUNC "dialog_buildlist" int result; int i, j; DIALOG_LISTITEM *listitems; bool separate_output = dialog_vars.separate_output; bool show_status = FALSE; int current = 0; char *help_result; DLG_TRACE(("# buildlist args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("lheight", list_height); DLG_TRACE2N("llength", item_no); /* FIXME dump the items[][] too */ DLG_TRACE2N("order", order_mode != 0); listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); assert_ptr(listitems, THIS_FUNC); for (i = j = 0; i < item_no; ++i) { listitems[i].name = items[j++]; listitems[i].text = (dialog_vars.no_items ? dlg_strempty() : items[j++]); listitems[i].state = !dlg_strcmp(items[j++], "on"); listitems[i].help = ((dialog_vars.item_help) ? items[j++] : dlg_strempty()); } dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); result = dlg_buildlist(title, cprompt, height, width, list_height, item_no, listitems, NULL, order_mode, ¤t); switch (result) { case DLG_EXIT_OK: /* FALLTHRU */ case DLG_EXIT_EXTRA: show_status = TRUE; break; case DLG_EXIT_HELP: dlg_add_help_listitem(&result, &help_result, &listitems[current]); if ((show_status = dialog_vars.help_status)) { if (separate_output) { dlg_add_string(help_result); - dlg_add_separator(); } else { dlg_add_quoted(help_result); } } else { dlg_add_string(help_result); } break; } if (show_status) { for (i = 0; i < item_no; i++) { if (listitems[i].state) { + if (dlg_need_separator()) + dlg_add_separator(); if (separate_output) { dlg_add_string(listitems[i].name); - dlg_add_separator(); } else { - if (dlg_need_separator()) - dlg_add_separator(); dlg_add_quoted(listitems[i].name); } } } - dlg_add_last_key(-1); + AddLastKey(); } dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); free(listitems); return result; #undef THIS_FUNC } diff --git a/buttons.c b/buttons.c index b22f64158988..1a9c87ee67a5 100644 --- a/buttons.c +++ b/buttons.c @@ -1,800 +1,833 @@ /* - * $Id: buttons.c,v 1.99 2018/06/18 22:11:16 tom Exp $ + * $Id: buttons.c,v 1.106 2021/01/17 17:03:16 tom Exp $ * * buttons.c -- draw buttons, e.g., OK/Cancel * - * Copyright 2000-2017,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> #ifdef NEED_WCHAR_H #include <wchar.h> #endif #define MIN_BUTTON (-dialog_state.visit_cols) #define CHR_BUTTON (!dialog_state.plain_buttons) static void center_label(char *buffer, int longest, const char *label) { int len = dlg_count_columns(label); - int left = 0, right = 0; + int right = 0; *buffer = 0; if (len < longest) { - left = (longest - len) / 2; + int left = (longest - len) / 2; right = (longest - len - left); if (left > 0) sprintf(buffer, "%*s", left, " "); } strcat(buffer, label); if (right > 0) sprintf(buffer + strlen(buffer), "%*s", right, " "); } /* * Parse a multibyte character out of the string, set it past the parsed * character. */ static int string_to_char(const char **stringp) { int result; #ifdef USE_WIDE_CURSES const char *string = *stringp; size_t have = strlen(string); - size_t check; size_t len; wchar_t cmp2[2]; mbstate_t state; memset(&state, 0, sizeof(state)); len = mbrlen(string, have, &state); + if ((int) len > 0 && len <= have) { + size_t check; + memset(&state, 0, sizeof(state)); memset(cmp2, 0, sizeof(cmp2)); check = mbrtowc(cmp2, string, len, &state); if ((int) check <= 0) cmp2[0] = 0; *stringp += len; } else { cmp2[0] = UCH(*string); *stringp += 1; } result = cmp2[0]; #else const char *string = *stringp; result = UCH(*string); *stringp += 1; #endif return result; } static size_t count_labels(const char **labels) { size_t result = 0; if (labels != 0) { while (*labels++ != 0) { ++result; } } return result; } /* * Check if the latest key should be added to the hotkey list. */ static int was_hotkey(int this_key, int *used_keys, size_t next) { int result = FALSE; if (next != 0) { size_t n; for (n = 0; n < next; ++n) { if (used_keys[n] == this_key) { result = TRUE; break; } } } return result; } /* * Determine the hot-keys for a set of button-labels. Normally these are * the first uppercase character in each label. However, if more than one * button has the same first-uppercase, then we will (attempt to) look for * an alternate. * * This allocates data which must be freed by the caller. */ static int * get_hotkeys(const char **labels) { int *result = 0; size_t count = count_labels(labels); - size_t n; if ((result = dlg_calloc(int, count + 1)) != 0) { + size_t n; + for (n = 0; n < count; ++n) { const char *label = labels[n]; const int *indx = dlg_index_wchars(label); int limit = dlg_count_wchars(label); int i; for (i = 0; i < limit; ++i) { int first = indx[i]; int check = UCH(label[first]); #ifdef USE_WIDE_CURSES int last = indx[i + 1]; if ((last - first) != 1) { const char *temp = (label + first); check = string_to_char(&temp); } #endif if (dlg_isupper(check) && !was_hotkey(check, result, n)) { result[n] = check; break; } } } } return result; } typedef enum { sFIND_KEY = 0 ,sHAVE_KEY = 1 ,sHAD_KEY = 2 } HOTKEY; /* * Print a button */ static void print_button(WINDOW *win, char *label, int hotkey, int y, int x, int selected) { int i; HOTKEY state = sFIND_KEY; const int *indx = dlg_index_wchars(label); int limit = dlg_count_wchars(label); chtype key_attr = (selected ? button_key_active_attr : button_key_inactive_attr); chtype label_attr = (selected ? button_label_active_attr : button_label_inactive_attr); (void) wmove(win, y, x); dlg_attrset(win, selected ? button_active_attr : button_inactive_attr); (void) waddstr(win, "<"); dlg_attrset(win, label_attr); for (i = 0; i < limit; ++i) { int check; int first = indx[i]; int last = indx[i + 1]; switch (state) { case sFIND_KEY: check = UCH(label[first]); #ifdef USE_WIDE_CURSES if ((last - first) != 1) { const char *temp = (label + first); check = string_to_char(&temp); } #endif if (check == hotkey) { dlg_attrset(win, key_attr); state = sHAVE_KEY; } break; case sHAVE_KEY: dlg_attrset(win, label_attr); state = sHAD_KEY; break; default: break; } waddnstr(win, label + first, last - first); } dlg_attrset(win, selected ? button_active_attr : button_inactive_attr); (void) waddstr(win, ">"); - (void) wmove(win, y, x + ((int) (strspn) (label, " ")) + 1); + if (!dialog_vars.cursor_off_label) { + (void) wmove(win, y, x + ((int) (strspn) (label, " ")) + 1); + } } /* * Count the buttons in the list. */ int dlg_button_count(const char **labels) { int result = 0; while (*labels++ != 0) ++result; return result; } /* * Compute the size of the button array in columns. Return the total number of * columns in *length, and the longest button's columns in *longest */ void dlg_button_sizes(const char **labels, int vertical, int *longest, int *length) { int n; *length = 0; *longest = 0; for (n = 0; labels[n] != 0; n++) { if (vertical) { *length += 1; *longest = 1; } else { int len = dlg_count_columns(labels[n]); if (len > *longest) *longest = len; *length += len; } } /* * If we can, make all of the buttons the same size. This is only optional * for buttons laid out horizontally. */ if (*longest < 6 - (*longest & 1)) *longest = 6 - (*longest & 1); if (!vertical) *length = *longest * n; } /* * Compute the size of the button array. */ int dlg_button_x_step(const char **labels, int limit, int *gap, int *margin, int *step) { int count = dlg_button_count(labels); int longest; int length; - int unused; - int used; int result; *margin = 0; if (count != 0) { + int unused; + int used; + dlg_button_sizes(labels, FALSE, &longest, &length); used = (length + (count * 2)); unused = limit - used; if ((*gap = unused / (count + 3)) <= 0) { if ((*gap = unused / (count + 1)) <= 0) *gap = 1; *margin = *gap; } else { *margin = *gap * 2; } *step = *gap + (used + count - 1) / count; result = (*gap > 0) && (unused >= 0); } else { result = 0; } return result; } /* * Make sure there is enough space for the buttons */ void dlg_button_layout(const char **labels, int *limit) { - int width = 1; int gap, margin, step; if (labels != 0 && dlg_button_count(labels)) { + int width = 1; + while (!dlg_button_x_step(labels, width, &gap, &margin, &step)) ++width; width += (4 * MARGIN); if (width > COLS) width = COLS; if (width > *limit) *limit = width; } } /* * Print a list of buttons at the given position. */ void dlg_draw_buttons(WINDOW *win, int y, int x, const char **labels, int selected, int vertical, int limit) { chtype save = dlg_get_attrs(win); - int n; int step = 0; int length; int longest; int final_x; int final_y; int gap; int margin; size_t need; - char *buffer; dlg_mouse_setbase(getbegx(win), getbegy(win)); getyx(win, final_y, final_x); dlg_button_sizes(labels, vertical, &longest, &length); if (vertical) { y += 1; step = 1; } else { dlg_button_x_step(labels, limit, &gap, &margin, &step); x += margin; } /* * Allocate a buffer big enough for any label. */ need = (size_t) longest; if (need != 0) { + char *buffer; + int n; int *hotkeys = get_hotkeys(labels); + assert_ptr(hotkeys, "dlg_draw_buttons"); for (n = 0; labels[n] != 0; ++n) { need += strlen(labels[n]) + 1; } buffer = dlg_malloc(char, need); assert_ptr(buffer, "dlg_draw_buttons"); /* * Draw the labels. */ for (n = 0; labels[n] != 0; n++) { center_label(buffer, longest, labels[n]); mouse_mkbutton(y, x, dlg_count_columns(buffer), n); print_button(win, buffer, CHR_BUTTON ? hotkeys[n] : -1, y, x, (selected == n) || (n == 0 && selected < 0)); if (selected == n) getyx(win, final_y, final_x); if (vertical) { if ((y += step) > limit) break; } else { if ((x += step) > limit) break; } } (void) wmove(win, final_y, final_x); wrefresh(win); dlg_attrset(win, save); free(buffer); free(hotkeys); } } /* * Match a given character against the beginning of the string, ignoring case * of the given character. The matching string must begin with an uppercase * character. */ int dlg_match_char(int ch, const char *string) { - if (string != 0) { - int cmp2 = string_to_char(&string); + if (!dialog_vars.no_hot_list) { + if (string != 0) { + int cmp2 = string_to_char(&string); #ifdef USE_WIDE_CURSES - wint_t cmp1 = dlg_toupper(ch); - if (cmp2 != 0 && (wchar_t) cmp1 == (wchar_t) dlg_toupper(cmp2)) { - return TRUE; - } -#else - if (ch > 0 && ch < 256) { - if (dlg_toupper(ch) == dlg_toupper(cmp2)) + wint_t cmp1 = dlg_toupper(ch); + if (cmp2 != 0 && (wchar_t) cmp1 == (wchar_t) dlg_toupper(cmp2)) { return TRUE; - } + } +#else + if (ch > 0 && ch < 256) { + if (dlg_toupper(ch) == dlg_toupper(cmp2)) + return TRUE; + } #endif + } } return FALSE; } /* * Find the first uppercase character in the label, which we may use for an * abbreviation. */ int dlg_button_to_char(const char *label) { int cmp = -1; while (*label != 0) { - cmp = string_to_char(&label); - if (dlg_isupper(cmp)) { + int ch = string_to_char(&label); + if (dlg_isupper(ch)) { + cmp = ch; break; } } return cmp; } /* * Given a list of button labels, and a character which may be the abbreviation * for one, find it, if it exists. An abbreviation will be the first character * which happens to be capitalized in the label. */ int dlg_char_to_button(int ch, const char **labels) { int result = DLG_EXIT_UNKNOWN; if (labels != 0) { int *hotkeys = get_hotkeys(labels); - int j; ch = (int) dlg_toupper(dlg_last_getc()); if (hotkeys != 0) { + int j; + for (j = 0; labels[j] != 0; ++j) { if (ch == hotkeys[j]) { dlg_flush_getc(); result = j; break; } } free(hotkeys); } } return result; } static const char * my_yes_label(void) { return (dialog_vars.yes_label != NULL) ? dialog_vars.yes_label : _("Yes"); } static const char * my_no_label(void) { return (dialog_vars.no_label != NULL) ? dialog_vars.no_label : _("No"); } static const char * my_ok_label(void) { return (dialog_vars.ok_label != NULL) ? dialog_vars.ok_label : _("OK"); } static const char * my_cancel_label(void) { return (dialog_vars.cancel_label != NULL) ? dialog_vars.cancel_label : _("Cancel"); } static const char * my_exit_label(void) { return (dialog_vars.exit_label != NULL) ? dialog_vars.exit_label : _("EXIT"); } static const char * my_extra_label(void) { return (dialog_vars.extra_label != NULL) ? dialog_vars.extra_label : _("Extra"); } static const char * my_help_label(void) { return (dialog_vars.help_label != NULL) ? dialog_vars.help_label : _("Help"); } /* * Return a list of button labels. */ const char ** dlg_exit_label(void) { const char **result; DIALOG_VARS save; if (dialog_vars.extra_button) { dlg_save_vars(&save); dialog_vars.nocancel = TRUE; result = dlg_ok_labels(); dlg_restore_vars(&save); } else { static const char *labels[3]; int n = 0; if (!dialog_vars.nook) labels[n++] = my_exit_label(); if (dialog_vars.help_button) labels[n++] = my_help_label(); if (n == 0) labels[n++] = my_exit_label(); labels[n] = 0; result = labels; } return result; } /* * Map the given button index for dlg_exit_label() into our exit-code. */ int dlg_exit_buttoncode(int button) { int result; DIALOG_VARS save; dlg_save_vars(&save); dialog_vars.nocancel = TRUE; result = dlg_ok_buttoncode(button); dlg_restore_vars(&save); return result; } +static const char ** +finish_ok_label(const char **labels, int n) +{ + if (n == 0) { + labels[n++] = my_ok_label(); + dialog_vars.nook = FALSE; + dlg_trace_msg("# ignore --nook, since at least one button is needed\n"); + } + + labels[n] = NULL; + return labels; +} + +/* + * Return a list of button labels for the OK (no Cancel) group, used in msgbox + * and progressbox. + */ const char ** dlg_ok_label(void) { static const char *labels[4]; int n = 0; - labels[n++] = my_ok_label(); + if (!dialog_vars.nook) + labels[n++] = my_ok_label(); if (dialog_vars.extra_button) labels[n++] = my_extra_label(); if (dialog_vars.help_button) labels[n++] = my_help_label(); - labels[n] = 0; - return labels; + + return finish_ok_label(labels, n); } /* - * Return a list of button labels for the OK/Cancel group. + * Return a list of button labels for the OK/Cancel group, used in most widgets + * that select an option or data. */ const char ** dlg_ok_labels(void) { static const char *labels[5]; int n = 0; if (!dialog_vars.nook) labels[n++] = my_ok_label(); if (dialog_vars.extra_button) labels[n++] = my_extra_label(); if (!dialog_vars.nocancel) labels[n++] = my_cancel_label(); if (dialog_vars.help_button) labels[n++] = my_help_label(); - labels[n] = 0; - return labels; + + return finish_ok_label(labels, n); } /* * Map the given button index for dlg_ok_labels() into our exit-code */ int dlg_ok_buttoncode(int button) { int result = DLG_EXIT_ERROR; int n = !dialog_vars.nook; if (!dialog_vars.nook && (button <= 0)) { result = DLG_EXIT_OK; } else if (dialog_vars.extra_button && (button == n++)) { result = DLG_EXIT_EXTRA; } else if (!dialog_vars.nocancel && (button == n++)) { result = DLG_EXIT_CANCEL; } else if (dialog_vars.help_button && (button == n)) { result = DLG_EXIT_HELP; } - DLG_TRACE(("# dlg_ok_buttoncode(%d) = %d\n", button, result)); + DLG_TRACE(("# dlg_ok_buttoncode(%d) = %d:%s\n", + button, result, dlg_exitcode2s(result))); return result; } /* * Given that we're using dlg_ok_labels() to list buttons, find the next index * in the list of buttons. The 'extra' parameter if negative provides a way to * enumerate extra active areas on the widget. */ int dlg_next_ok_buttonindex(int current, int extra) { int result = current + 1; if (current >= 0 && dlg_ok_buttoncode(result) < 0) result = extra; return result; } /* * Similarly, find the previous button index. */ int dlg_prev_ok_buttonindex(int current, int extra) { int result = current - 1; if (result < extra) { for (result = 0; dlg_ok_buttoncode(result + 1) >= 0; ++result) { ; } } return result; } /* * Find the button-index for the "OK" or "Cancel" button, according to * whether --defaultno is given. If --nocancel was given, we always return * the index for the first button (usually "OK" unless --nook was used). */ int dlg_defaultno_button(void) { int result = 0; if (dialog_vars.defaultno && !dialog_vars.nocancel) { while (dlg_ok_buttoncode(result) != DLG_EXIT_CANCEL) ++result; } DLG_TRACE(("# dlg_defaultno_button() = %d\n", result)); return result; } /* * Find the button-index for a button named with --default-button. If the * option was not specified, or if the selected button does not exist, return * the index of the first button (usually "OK" unless --nook was used). */ int dlg_default_button(void) { - int i, n; int result = 0; if (dialog_vars.default_button >= 0) { + int i, n; + for (i = 0; (n = dlg_ok_buttoncode(i)) >= 0; i++) { if (n == dialog_vars.default_button) { result = i; break; } } } DLG_TRACE(("# dlg_default_button() = %d\n", result)); return result; } /* * Return a list of buttons for Yes/No labels. */ const char ** dlg_yes_labels(void) { const char **result; if (dialog_vars.extra_button) { result = dlg_ok_labels(); } else { static const char *labels[4]; int n = 0; labels[n++] = my_yes_label(); labels[n++] = my_no_label(); if (dialog_vars.help_button) labels[n++] = my_help_label(); labels[n] = 0; result = labels; } return result; } /* * Map the given button index for dlg_yes_labels() into our exit-code. */ int dlg_yes_buttoncode(int button) { int result = DLG_EXIT_ERROR; if (dialog_vars.extra_button) { result = dlg_ok_buttoncode(button); } else if (button == 0) { result = DLG_EXIT_OK; } else if (button == 1) { result = DLG_EXIT_CANCEL; } else if (button == 2 && dialog_vars.help_button) { result = DLG_EXIT_HELP; } return result; } /* * Return the next index in labels[]; */ int dlg_next_button(const char **labels, int button) { if (button < -1) button = -1; if (labels[button + 1] != 0) { ++button; } else { button = MIN_BUTTON; } return button; } /* * Return the previous index in labels[]; */ int dlg_prev_button(const char **labels, int button) { if (button > MIN_BUTTON) { --button; } else { if (button < -1) button = -1; while (labels[button + 1] != 0) ++button; } return button; } diff --git a/calendar.c b/calendar.c index 497533b3dbbd..0caff60072c5 100644 --- a/calendar.c +++ b/calendar.c @@ -1,1017 +1,1016 @@ /* - * $Id: calendar.c,v 1.97 2018/06/19 22:57:01 tom Exp $ + * $Id: calendar.c,v 1.106 2020/11/23 09:03:49 tom Exp $ * * calendar.c -- implements the calendar box * - * Copyright 2001-2017,2018 Thomas E. Dickey + * Copyright 2001-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> #include <time.h> #ifdef HAVE_STDINT_H #include <stdint.h> #else #define intptr_t long #endif #define ONE_DAY (60 * 60 * 24) #define MON_WIDE 4 /* width of a month-name */ #define DAY_HIGH 6 /* maximum lines in day-grid */ #define DAY_WIDE (8 * MON_WIDE) /* width of the day-grid */ #define HDR_HIGH 1 /* height of cells with month/year */ #define BTN_HIGH 1 /* height of button-row excluding margin */ /* two more lines: titles for day-of-week and month/year boxes */ #define MIN_HIGH (DAY_HIGH + 2 + HDR_HIGH + BTN_HIGH + (MAX_DAYS * MARGIN)) #define MIN_WIDE (DAY_WIDE + (4 * MARGIN)) typedef enum { sMONTH = -3 ,sYEAR = -2 ,sDAY = -1 } STATES; struct _box; typedef int (*BOX_DRAW) (struct _box *, struct tm *); typedef struct _box { WINDOW *parent; WINDOW *window; int x; int y; int width; int height; BOX_DRAW box_draw; int week_start; } BOX; #define MAX_DAYS 7 #define MAX_MONTHS 12 static char *cached_days[MAX_DAYS]; static char *cached_months[MAX_MONTHS]; static const char * nameOfDayOfWeek(int n) { static bool shown[MAX_DAYS]; - static const char *posix_days[MAX_DAYS] = - { - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - }; while (n < 0) { n += MAX_DAYS; } n %= MAX_DAYS; #ifdef ENABLE_NLS if (cached_days[n] == 0) { const nl_item items[MAX_DAYS] = { ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7 }; cached_days[n] = dlg_strclone(nl_langinfo(items[n])); memset(shown, 0, sizeof(shown)); } #endif if (cached_days[n] == 0) { - size_t len, limit = MON_WIDE - 1; + static const char *posix_days[MAX_DAYS] = + { + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + }; + size_t limit = MON_WIDE - 1; char *value = dlg_strclone(posix_days[n]); /* * POSIX does not actually say what the length of an abbreviated name * is. Typically it is 2, which will fit into our layout. That also * happens to work with CJK entries as seen in glibc, which are a * double-width cell. For now (2016/01/26), handle too-long names only * for POSIX values. */ - if ((len = strlen(value)) > limit) + if (strlen(value) > limit) value[limit] = '\0'; cached_days[n] = value; } if (!shown[n]) { DLG_TRACE(("# DAY(%d) = '%s'\n", n, cached_days[n])); shown[n] = TRUE; } return cached_days[n]; } static const char * nameOfMonth(int n) { static bool shown[MAX_MONTHS]; - static const char *posix_mons[MAX_MONTHS] = - { - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - }; while (n < 0) { n += MAX_MONTHS; } n %= MAX_MONTHS; #ifdef ENABLE_NLS if (cached_months[n] == 0) { const nl_item items[MAX_MONTHS] = { MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7, MON_8, MON_9, MON_10, MON_11, MON_12 }; cached_months[n] = dlg_strclone(nl_langinfo(items[n])); memset(shown, 0, sizeof(shown)); } #endif if (cached_months[n] == 0) { + static const char *posix_mons[MAX_MONTHS] = + { + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + }; cached_months[n] = dlg_strclone(posix_mons[n]); } if (!shown[n]) { DLG_TRACE(("# MON(%d) = '%s'\n", n, cached_months[n])); shown[n] = TRUE; } return cached_months[n]; } /* * Algorithm for Gregorian calendar. */ static int isleap(int y) { return ((y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))) ? 1 : 0; } static void adjust_year_month(int *year, int *month) { while (*month < 0) { *month += MAX_MONTHS; *year -= 1; } while (*month >= MAX_MONTHS) { *month -= MAX_MONTHS; *year += 1; } } static int days_per_month(int year, int month) { static const int nominal[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int result; adjust_year_month(&year, &month); result = nominal[month]; if (month == 1) result += isleap(year); return result; } static int days_in_month(struct tm *current, int offset /* -1, 0, 1 */ ) { int year = current->tm_year + 1900; int month = current->tm_mon + offset; adjust_year_month(&year, &month); return days_per_month(year, month); } static int days_per_year(int year) { return (isleap(year) ? 366 : 365); } static int days_in_year(struct tm *current, int offset /* -1, 0, 1 */ ) { return days_per_year(current->tm_year + 1900 + offset); } /* * Adapted from C FAQ * "17.28: How can I find the day of the week given the date?" * implementation by Tomohiko Sakamoto. * * d = day (0 to whatever) * m = month (1 through 12) * y = year (1752 and later, for Gregorian calendar) */ static int day_of_week(int y, int m, int d) { static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; y -= (m < 3); return (6 + (y + (y / 4) - (y / 100) + (y / 400) + t[m - 1] + d)) % MAX_DAYS; } static int day_in_year(int year, int month, int day) { int result = day; while (--month >= 1) result += days_per_month(year, month); return result; } static int iso_week(int year, int month, int day) { int week = 1; int dow; int new_year_dow; int diy; int new_years_eve_dow; static const int thursday = 3; /* add the number weeks *between* date and newyear */ diy = day_in_year(year, month, day); week += (diy - 1) / MAX_DAYS; /* 0 = Monday */ dow = day_of_week(year, month, day); new_year_dow = day_of_week(year, 1, 1); /* * If New Year falls on Friday, Saturday or Sunday, then New Years's week * is the last week of the preceding year. In that case subtract one week. */ if (new_year_dow > thursday) --week; /* Add one week if there is a Sunday to Monday transition. */ if (dow - new_year_dow < 0) ++week; /* Check if we are in the last week of the preceding year. */ if (week < 1) { week = iso_week(--year, 12, 31); } /* * If we are in the same week as New Year's eve, check if New Year's eve is * in the first week of the next year. */ new_years_eve_dow = (new_year_dow + 364 + isleap(year)) % MAX_DAYS; if (365 + isleap(year) - diy < MAX_DAYS && new_years_eve_dow >= dow && new_years_eve_dow < thursday) { - ++year; week = 1; } return week; } static int * getisoweeks(int year, int month) { static int result[10]; int windx = 0; int day; int dpm = days_per_month(year, month); for (day = 1; day <= dpm; day += MAX_DAYS) result[windx++] = iso_week(year, month, day); /* * Ensure that there is a week number associated with the last day of the * month, e.g., in case the last day of the month falls before Thursday, * so that we have to show the week-number for the beginning of the * following month. */ result[windx] = iso_week(year, month, dpm); return result; } static int day_cell_number(struct tm *current) { int cell; cell = current->tm_mday - ((6 + current->tm_mday - current->tm_wday) % MAX_DAYS); if ((current->tm_mday - 1) % MAX_DAYS != current->tm_wday) cell += 6; else cell--; return cell; } static int next_or_previous(int key, int two_d) { int result = 0; switch (key) { case DLGK_GRID_UP: result = two_d ? -MAX_DAYS : -1; break; case DLGK_GRID_LEFT: result = -1; break; case DLGK_GRID_DOWN: result = two_d ? MAX_DAYS : 1; break; case DLGK_GRID_RIGHT: result = 1; break; default: beep(); break; } return result; } /* * Draw the day-of-month selection box */ static int draw_day(BOX * data, struct tm *current) { int cell_wide = MON_WIDE; - int y, x, this_x = 0; + int y, x, this_x; int save_y = 0, save_x = 0; int day = current->tm_mday; int mday; int week = 0; int windx = 0; int *weeks = 0; int last = days_in_month(current, 0); int prev = days_in_month(current, -1); werase(data->window); dlg_draw_box2(data->parent, data->y - MARGIN, data->x - MARGIN, data->height + (2 * MARGIN), data->width + (2 * MARGIN), menubox_attr, menubox_border_attr, menubox_border2_attr); dlg_attrset(data->window, menubox_attr); /* daynames headline */ for (x = 0; x < MAX_DAYS; x++) { mvwprintw(data->window, 0, (x + 1) * cell_wide, "%*.*s ", cell_wide - 1, cell_wide - 1, nameOfDayOfWeek(x + data->week_start)); } mday = ((6 + current->tm_mday - current->tm_wday + data->week_start) % MAX_DAYS) - MAX_DAYS; if (mday <= -MAX_DAYS) mday += MAX_DAYS; if (dialog_vars.iso_week) { weeks = getisoweeks(current->tm_year + 1900, current->tm_mon + 1); } else { /* mday is now in the range -6 to 0. */ week = (current->tm_yday + 6 + mday - current->tm_mday) / MAX_DAYS; } for (y = 1; mday < last; y++) { dlg_attrset(data->window, menubox_attr); /* weeknumbers headline */ mvwprintw(data->window, y, 0, "%*d ", cell_wide - 1, weeks ? weeks[windx++] : ++week); for (x = 0; x < MAX_DAYS; x++) { this_x = 1 + (x + 1) * cell_wide; ++mday; if (wmove(data->window, y, this_x) == ERR) continue; dlg_attrset(data->window, item_attr); /* not selected days */ if (mday == day) { dlg_attrset(data->window, item_selected_attr); /* selected day */ save_y = y; save_x = this_x; } if (mday > 0) { if (mday <= last) { wprintw(data->window, "%*d", cell_wide - 2, mday); } else if (mday == day) { wprintw(data->window, "%*d", cell_wide - 2, mday - last); } } else if (mday == day) { wprintw(data->window, "%*d", cell_wide - 2, mday + prev); } } wmove(data->window, save_y, save_x); } /* just draw arrows - scrollbar is unsuitable here */ dlg_draw_arrows(data->parent, TRUE, TRUE, data->x + ARROWS_COL, data->y - 1, data->y + data->height); return 0; } /* * Draw the month-of-year selection box */ static int draw_month(BOX * data, struct tm *current) { int month; month = current->tm_mon + 1; dlg_attrset(data->parent, dialog_attr); /* Headline "Month" */ (void) mvwprintw(data->parent, data->y - 2, data->x - 1, _("Month")); dlg_draw_box2(data->parent, data->y - 1, data->x - 1, data->height + 2, data->width + 2, menubox_attr, menubox_border_attr, menubox_border2_attr); dlg_attrset(data->window, item_attr); /* color the month selection */ mvwprintw(data->window, 0, 0, "%s", nameOfMonth(month - 1)); wmove(data->window, 0, 0); return 0; } /* * Draw the year selection box */ static int draw_year(BOX * data, struct tm *current) { int year = current->tm_year + 1900; dlg_attrset(data->parent, dialog_attr); /* Headline "Year" */ (void) mvwprintw(data->parent, data->y - 2, data->x - 1, _("Year")); dlg_draw_box2(data->parent, data->y - 1, data->x - 1, data->height + 2, data->width + 2, menubox_attr, menubox_border_attr, menubox_border2_attr); dlg_attrset(data->window, item_attr); /* color the year selection */ mvwprintw(data->window, 0, 0, "%4d", year); wmove(data->window, 0, 0); return 0; } static int init_object(BOX * data, WINDOW *parent, int x, int y, int width, int height, BOX_DRAW box_draw, int key_offset, int code) { data->parent = parent; data->x = x; data->y = y; data->width = width; data->height = height; data->box_draw = box_draw; data->week_start = key_offset; - data->window = derwin(data->parent, - data->height, data->width, - data->y, data->x); + data->window = dlg_der_window(data->parent, + data->height, data->width, + data->y, data->x); if (data->window == 0) return -1; - (void) keypad(data->window, TRUE); dlg_mouse_setbase(getbegx(parent), getbegy(parent)); if (code == 'D') { dlg_mouse_mkbigregion(y + 1, x + MON_WIDE, height - 1, width - MON_WIDE, KEY_MAX + key_offset, 1, MON_WIDE, 3); } else { dlg_mouse_mkregion(y, x, height, width, code); } return 0; } #if defined(ENABLE_NLS) && defined(HAVE_NL_LANGINFO_1STDAY) #elif defined(HAVE_DLG_GAUGE) static int read_locale_setting(const char *name, int which) { FILE *fp; char command[80]; int result = -1; sprintf(command, "locale %s", name); if ((fp = dlg_popen(command, "r")) != 0) { int count = 0; char buf[80]; while (fgets(buf, (int) sizeof(buf) - 1, fp) != 0) { if (++count > which) { char *next = 0; long check = strtol(buf, &next, 0); if (next != 0 && next != buf && *next == '\n') { result = (int) check; } break; } } pclose(fp); } return result; } #endif static int WeekStart(void) { int result = 0; char *option = dialog_vars.week_start; if (option != 0) { if (option[0]) { char *next = 0; long check = strtol(option, &next, 0); if (next == 0 || next == option || *next != '\0') { if (!strcmp(option, "locale")) { #if defined(ENABLE_NLS) && defined(HAVE_NL_LANGINFO_1STDAY) /* * glibc-specific. */ int first_day = nl_langinfo(_NL_TIME_FIRST_WEEKDAY)[0]; char *basis_ptr = nl_langinfo(_NL_TIME_WEEK_1STDAY); int basis_day = (int) (intptr_t) basis_ptr; #elif defined(HAVE_DLG_GAUGE) /* * probably Linux-specific, but harmless otherwise. When * available, the locale program will return a single * integer on one line. */ int first_day = read_locale_setting("first_weekday", 0); int basis_day = read_locale_setting("week-1stday", 0); #endif #if (defined(ENABLE_NLS) && defined(HAVE_NL_LANGINFO_1STDAY)) || defined(HAVE_DLG_GAUGE) int week_1stday = -1; if (basis_day == 19971130) week_1stday = 0; /* Sun */ else if (basis_day == 19971201) week_1stday = 1; /* Mon */ if (week_1stday >= 0) { result = first_day - week_1stday - 1; } #else result = 0; /* Sun */ #endif } else { int day; size_t eql = strlen(option); for (day = 0; day < MAX_DAYS; ++day) { if (!strncmp(nameOfDayOfWeek(day), option, eql)) { result = day; break; } } } } else if (check < 0) { result = -1; } else { result = (int) (check % MAX_DAYS); } } } return result; } static int CleanupResult(int code, WINDOW *dialog, char *prompt, DIALOG_VARS * save_vars) { int n; if (dialog != 0) dlg_del_window(dialog); dlg_mouse_free_regions(); if (prompt != 0) free(prompt); dlg_restore_vars(save_vars); for (n = 0; n < MAX_DAYS; ++n) { free(cached_days[n]); cached_days[n] = 0; } for (n = 0; n < MAX_MONTHS; ++n) { free(cached_months[n]); cached_months[n] = 0; } return code; } static void trace_date(struct tm *current, struct tm *old) { bool changed = (old == 0 || current->tm_mday != old->tm_mday || current->tm_mon != old->tm_mon || current->tm_year != old->tm_year); if (changed) { DLG_TRACE(("# current %04d/%02d/%02d\n", current->tm_year + 1900, current->tm_mon + 1, current->tm_mday)); } else { DLG_TRACE(("# current (unchanged)\n")); } } #define DrawObject(data) (data)->box_draw(data, ¤t) /* * Display a dialog box for entering a date */ int dialog_calendar(const char *title, const char *subtitle, int height, int width, int day, int month, int year) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, TOGGLEKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), DLG_KEYS_DATA( DLGK_GRID_DOWN, DLGK_MOUSE(KEY_NPAGE) ), DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_NPAGE ), DLG_KEYS_DATA( DLGK_GRID_LEFT, '-' ), DLG_KEYS_DATA( DLGK_GRID_LEFT, 'h' ), DLG_KEYS_DATA( DLGK_GRID_LEFT, CHR_BACKSPACE ), DLG_KEYS_DATA( DLGK_GRID_LEFT, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, '+' ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'l' ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_NEXT ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), DLG_KEYS_DATA( DLGK_GRID_UP, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_GRID_UP, KEY_PREVIOUS ), DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), DLG_KEYS_DATA( DLGK_GRID_UP, DLGK_MOUSE(KEY_PPAGE) ), END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif BOX dy_box, mn_box, yr_box; int fkey; - int key = 0; - int key2; + int key; int step; int button; int result = DLG_EXIT_UNKNOWN; int week_start; WINDOW *dialog; - time_t now_time = time((time_t *) 0); + time_t now_time; struct tm current; int state = dlg_default_button(); const char **buttons = dlg_ok_labels(); char *prompt; int mincols = MIN_WIDE; char buffer[MAX_LEN]; DIALOG_VARS save_vars; DLG_TRACE(("# calendar args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", subtitle); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("day", day); DLG_TRACE2N("month", month); DLG_TRACE2N("year", year); dlg_save_vars(&save_vars); dialog_vars.separate_output = TRUE; dlg_does_output(); /* - * Unless overrridden, the current time/date is our starting point. + * Unless overridden, the current time/date is our starting point. */ now_time = time((time_t *) 0); current = *localtime(&now_time); #if HAVE_MKTIME current.tm_isdst = -1; if (year >= 1900) { current.tm_year = year - 1900; } if (month >= 1) { current.tm_mon = month - 1; } if (day > 0 && day <= days_per_month(current.tm_year + 1900, current.tm_mon + 1)) { current.tm_mday = day; } now_time = mktime(¤t); #else if (day < 0) day = current.tm_mday; if (month < 0) month = current.tm_mon + 1; if (year < 0) year = current.tm_year + 1900; /* compute a struct tm that matches the day/month/year parameters */ if (((year -= 1900) > 0) && (year < 200)) { /* ugly, but I'd like to run this on older machines w/o mktime -TD */ for (;;) { if (year > current.tm_year) { now_time += ONE_DAY * days_in_year(¤t, 0); } else if (year < current.tm_year) { now_time -= ONE_DAY * days_in_year(¤t, -1); } else if (month > current.tm_mon + 1) { now_time += ONE_DAY * days_in_month(¤t, 0); } else if (month < current.tm_mon + 1) { now_time -= ONE_DAY * days_in_month(¤t, -1); } else if (day > current.tm_mday) { now_time += ONE_DAY; } else if (day < current.tm_mday) { now_time -= ONE_DAY; } else { break; } current = *localtime(&now_time); } } #endif dlg_button_layout(buttons, &mincols); #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(subtitle); dlg_auto_size(title, prompt, &height, &width, 0, mincols); height += MIN_HIGH - 1; dlg_print_size(height, width); dlg_ctl_size(height, width); dialog = dlg_new_window(height, width, dlg_box_y_ordinate(height), dlg_box_x_ordinate(width)); dlg_register_window(dialog, "calendar", binding); dlg_register_buttons(dialog, "calendar", buttons); /* mainbox */ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); /* text mainbox */ dlg_print_autowrap(dialog, prompt, height, width); /* compute positions of day, month and year boxes */ memset(&dy_box, 0, sizeof(dy_box)); memset(&mn_box, 0, sizeof(mn_box)); memset(&yr_box, 0, sizeof(yr_box)); if ((week_start = WeekStart()) < 0 || init_object(&dy_box, dialog, (width - DAY_WIDE) / 2, 1 + (height - (DAY_HIGH + BTN_HIGH + (5 * MARGIN))), DAY_WIDE, DAY_HIGH + 1, draw_day, week_start, 'D') < 0 || ((dy_box.week_start = WeekStart()) < 0) || DrawObject(&dy_box) < 0) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } if (init_object(&mn_box, dialog, dy_box.x, dy_box.y - (HDR_HIGH + 2 * MARGIN), (DAY_WIDE / 2) - MARGIN, HDR_HIGH, draw_month, 0, 'M') < 0 || DrawObject(&mn_box) < 0) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } if (init_object(&yr_box, dialog, dy_box.x + mn_box.width + 2, mn_box.y, mn_box.width, mn_box.height, draw_year, 0, 'Y') < 0 || DrawObject(&yr_box) < 0) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } dlg_trace_win(dialog); while (result == DLG_EXIT_UNKNOWN) { + int key2; BOX *obj = (state == sDAY ? &dy_box : (state == sMONTH ? &mn_box : (state == sYEAR ? &yr_box : 0))); button = (state < 0) ? 0 : state; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); if (obj != 0) dlg_set_focus(dialog, obj->window); key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; - + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } #define Mouse2Key(key) (key - M_EVENT) if (fkey && (key >= DLGK_MOUSE(KEY_MIN) && key <= DLGK_MOUSE(KEY_MAX))) { key = dlg_lookup_key(dialog, Mouse2Key(key), &fkey); } if ((key2 = dlg_char_to_button(key, buttons)) >= 0) { result = key2; } else if (fkey) { /* handle function-keys */ switch (key) { case DLGK_MOUSE('D'): state = sDAY; break; case DLGK_MOUSE('M'): state = sMONTH; break; case DLGK_MOUSE('Y'): state = sYEAR; break; case DLGK_TOGGLE: case DLGK_ENTER: result = dlg_enter_buttoncode(button); break; + case DLGK_LEAVE: + result = dlg_ok_buttoncode(button); + break; case DLGK_FIELD_PREV: state = dlg_prev_ok_buttonindex(state, sMONTH); break; case DLGK_FIELD_NEXT: state = dlg_next_ok_buttonindex(state, sMONTH); break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; free(prompt); - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); /* repaint */ goto retry; #endif default: step = 0; key2 = -1; if (is_DLGK_MOUSE(key)) { if ((key2 = dlg_ok_buttoncode(Mouse2Key(key))) >= 0) { result = key2; break; } else if (key >= DLGK_MOUSE(KEY_MAX)) { state = sDAY; obj = &dy_box; key2 = 1; step = (key - DLGK_MOUSE(KEY_MAX) - day_cell_number(¤t)); DLG_TRACE(("# mouseclick decoded %d\n", step)); } } if (obj != 0) { if (key2 < 0) { step = next_or_previous(key, (obj == &dy_box)); } if (step != 0) { struct tm old = current; /* see comment regarding mktime -TD */ if (obj == &dy_box) { now_time += ONE_DAY * step; } else if (obj == &mn_box) { if (step > 0) now_time += ONE_DAY * days_in_month(¤t, 0); else now_time -= ONE_DAY * days_in_month(¤t, -1); } else if (obj == &yr_box) { if (step > 0) now_time += (ONE_DAY * days_in_year(¤t, 0)); else now_time -= (ONE_DAY * days_in_year(¤t, -1)); } current = *localtime(&now_time); trace_date(¤t, &old); if (obj != &dy_box && (current.tm_mday != old.tm_mday || current.tm_mon != old.tm_mon || current.tm_year != old.tm_year)) DrawObject(&dy_box); if (obj != &mn_box && current.tm_mon != old.tm_mon) DrawObject(&mn_box); if (obj != &yr_box && current.tm_year != old.tm_year) DrawObject(&yr_box); (void) DrawObject(obj); } } else if (state >= 0) { if (next_or_previous(key, FALSE) < 0) state = dlg_prev_ok_buttonindex(state, sMONTH); else if (next_or_previous(key, FALSE) > 0) state = dlg_next_ok_buttonindex(state, sMONTH); } break; } } } #define DefaultFormat(dst, src) \ sprintf(dst, "%02d/%02d/%0d", \ src.tm_mday, src.tm_mon + 1, src.tm_year + 1900) #ifdef HAVE_STRFTIME if (dialog_vars.date_format != 0) { size_t used = strftime(buffer, sizeof(buffer) - 1, dialog_vars.date_format, ¤t); if (used == 0 || *buffer == '\0') DefaultFormat(buffer, current); } else #endif DefaultFormat(buffer, current); dlg_add_result(buffer); - dlg_add_separator(); - dlg_add_last_key(-1); + AddLastKey(); return CleanupResult(result, dialog, prompt, &save_vars); } diff --git a/checklist.c b/checklist.c index 778c4bb7332f..13055b77ab4f 100644 --- a/checklist.c +++ b/checklist.c @@ -1,698 +1,702 @@ /* - * $Id: checklist.c,v 1.160 2018/06/19 22:57:01 tom Exp $ + * $Id: checklist.c,v 1.167 2020/11/23 00:37:47 tom Exp $ * * checklist.c -- implements the checklist box * - * Copyright 2000-2016,2018 Thomas E. Dickey + * Copyright 2000-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors: * Savio Lam (lam836@cs.cuhk.hk) * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two */ #include <dialog.h> #include <dlg_keys.h> #define MIN_HIGH (1 + (5 * MARGIN)) typedef struct { /* the outer-window */ WINDOW *dialog; int box_y; int box_x; int check_x; int item_x; int checkflag; int use_height; int use_width; /* the inner-window */ WINDOW *list; DIALOG_LISTITEM *items; int item_no; const char *states; } ALL_DATA; /* * Print list item. The 'selected' parameter is true if 'choice' is the * current item. That one is colored differently from the other items. */ static void print_item(ALL_DATA * data, WINDOW *win, DIALOG_LISTITEM * item, const char *states, int choice, int selected) { chtype save = dlg_get_attrs(win); int i; bool both = (!dialog_vars.no_tags && !dialog_vars.no_items); bool first = TRUE; int climit = (getmaxx(win) - data->check_x + 1); const char *show = (dialog_vars.no_items ? item->name : item->text); /* Clear 'residue' of last item */ dlg_attrset(win, menubox_attr); (void) wmove(win, choice, 0); for (i = 0; i < data->use_width; i++) (void) waddch(win, ' '); (void) wmove(win, choice, data->check_x); dlg_attrset(win, selected ? check_selected_attr : check_attr); (void) wprintw(win, (data->checkflag == FLAG_CHECK) ? "[%c]" : "(%c)", states[item->state]); dlg_attrset(win, menubox_attr); (void) waddch(win, ' '); if (both) { dlg_print_listitem(win, item->name, climit, first, selected); first = FALSE; } (void) wmove(win, choice, data->item_x); dlg_print_listitem(win, show, climit, first, selected); if (selected) { dlg_item_help(item->help); } dlg_attrset(win, save); } static void print_list(ALL_DATA * data, int choice, int scrollamt, int max_choice) { int i; int cur_y, cur_x; getyx(data->dialog, cur_y, cur_x); for (i = 0; i < max_choice; i++) { print_item(data, data->list, &data->items[i + scrollamt], data->states, i, i == choice); } (void) wnoutrefresh(data->list); dlg_draw_scrollbar(data->dialog, (long) (scrollamt), (long) (scrollamt), (long) (scrollamt + max_choice), (long) (data->item_no), data->box_x + data->check_x, data->box_x + data->use_width, data->box_y, data->box_y + data->use_height + 1, menubox_border2_attr, menubox_border_attr); (void) wmove(data->dialog, cur_y, cur_x); } static bool check_hotkey(DIALOG_LISTITEM * items, int choice) { bool result = FALSE; if (dlg_match_char(dlg_last_getc(), (dialog_vars.no_tags ? items[choice].text : items[choice].name))) { result = TRUE; } return result; } /* * This is an alternate interface to 'checklist' which allows the application * to read the list item states back directly without putting them in the * output buffer. It also provides for more than two states over which the * check/radio box can display. */ int dlg_checklist(const char *title, const char *cprompt, int height, int width, int list_height, int item_no, DIALOG_LISTITEM * items, const char *states, int flag, int *current_item) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_END ), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+' ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE) ), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ), TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif ALL_DATA all; int i, j, key2, found, x, y, cur_x, cur_y; - int key = 0, fkey; + int key, fkey; int button = dialog_state.visit_items ? -1 : dlg_default_button(); int choice = dlg_default_listitem(items); int scrollamt = 0; int max_choice; - int was_mouse; int use_width, list_width, name_width, text_width; int result = DLG_EXIT_UNKNOWN; int num_states; WINDOW *dialog; char *prompt; const char **buttons = dlg_ok_labels(); const char *widget_name; DLG_TRACE(("# %s args:\n", flag ? "checklist" : "radiolist")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("lheight", list_height); DLG_TRACE2N("llength", item_no); /* FIXME dump the items[][] too */ DLG_TRACE2S("states", states); DLG_TRACE2N("flag", flag); DLG_TRACE2N("current", *current_item); dialog_state.plain_buttons = TRUE; memset(&all, 0, sizeof(all)); all.items = items; all.item_no = item_no; dlg_does_output(); /* * If this is a radiobutton list, ensure that no more than one item is * selected initially. Allow none to be selected, since some users may * wish to provide this flavor. */ if (flag == FLAG_RADIO) { bool first = TRUE; for (i = 0; i < item_no; i++) { if (items[i].state) { if (first) { first = FALSE; } else { items[i].state = 0; } } } widget_name = "radiolist"; } else { widget_name = "checklist"; } #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); all.use_height = list_height; use_width = dlg_calc_list_width(item_no, items) + 10; use_width = MAX(26, use_width); if (all.use_height == 0) { /* calculate height without items (4) */ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width); dlg_calc_listh(&height, &all.use_height, item_no); } else { dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + all.use_height, use_width); } dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); /* we need at least two states */ if (states == 0 || strlen(states) < 2) states = " *"; num_states = (int) strlen(states); all.states = states; all.checkflag = flag; x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); all.dialog = dialog; dlg_register_window(dialog, widget_name, binding); dlg_register_buttons(dialog, widget_name, buttons); dlg_mouse_setbase(x, y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); all.use_width = width - 6; getyx(dialog, cur_y, cur_x); all.box_y = cur_y + 1; all.box_x = (width - all.use_width) / 2 - 1; /* * After displaying the prompt, we know how much space we really have. * Limit the list to avoid overwriting the ok-button. */ - if (all.use_height + MIN_HIGH > height - cur_y) - all.use_height = height - MIN_HIGH - cur_y; + all.use_height = height - MIN_HIGH - cur_y; if (all.use_height <= 0) all.use_height = 1; max_choice = MIN(all.use_height, item_no); max_choice = MAX(max_choice, 1); /* create new window for the list */ all.list = dlg_sub_window(dialog, all.use_height, all.use_width, y + all.box_y + 1, x + all.box_x + 1); /* draw a box around the list items */ dlg_draw_box(dialog, all.box_y, all.box_x, all.use_height + 2 * MARGIN, all.use_width + 2 * MARGIN, menubox_border_attr, menubox_border2_attr); text_width = 0; name_width = 0; /* Find length of longest item to center checklist */ for (i = 0; i < item_no; i++) { text_width = MAX(text_width, dlg_count_columns(items[i].text)); name_width = MAX(name_width, dlg_count_columns(items[i].name)); } /* If the name+text is wider than the list is allowed, then truncate * one or both of them. If the name is no wider than 1/4 of the list, * leave it intact. */ use_width = (all.use_width - 6); if (dialog_vars.no_tags) { list_width = MIN(all.use_width, text_width); } else if (dialog_vars.no_items) { list_width = MIN(all.use_width, name_width); } else { if (text_width >= 0 && name_width >= 0 && use_width > 0 && text_width + name_width > use_width) { int need = (int) (0.25 * use_width); if (name_width > need) { int want = (int) (use_width * ((double) name_width) / (text_width + name_width)); name_width = (want > need) ? want : need; } text_width = use_width - name_width; } list_width = (text_width + name_width); } all.check_x = (use_width - list_width) / 2; all.item_x = ((dialog_vars.no_tags ? 0 : (dialog_vars.no_items ? 0 : (2 + name_width))) + all.check_x + 4); /* ensure we are scrolled to show the current choice */ scrollamt = MIN(scrollamt, max_choice + item_no - 1); if (choice >= (max_choice + scrollamt - 1)) { scrollamt = MAX(0, choice - max_choice + 1); choice = max_choice - 1; } print_list(&all, choice, scrollamt, max_choice); /* register the new window, along with its borders */ dlg_mouse_mkbigregion(all.box_y + 1, all.box_x, all.use_height, all.use_width + 2, KEY_MAX, 1, 1, 1 /* by lines */ ); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); dlg_trace_win(dialog); + while (result == DLG_EXIT_UNKNOWN) { + int was_mouse; + if (button < 0) /* --visit-items */ wmove(dialog, all.box_y + choice + 1, all.box_x + all.check_x + 2); key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } was_mouse = (fkey && is_DLGK_MOUSE(key)); if (was_mouse) key -= M_EVENT; if (was_mouse && (key >= KEY_MAX)) { getyx(dialog, cur_y, cur_x); i = (key - KEY_MAX); if (i < max_choice) { choice = (key - KEY_MAX); print_list(&all, choice, scrollamt, max_choice); key = DLGK_TOGGLE; /* force the selected item to toggle */ } else { beep(); continue; } fkey = FALSE; } else if (was_mouse && key >= KEY_MIN) { key = dlg_lookup_key(dialog, key, &fkey); } /* * A space toggles the item status. We handle either a checklist * (any number of items can be selected) or radio list (zero or one * items can be selected). */ if (key == DLGK_TOGGLE) { int current = scrollamt + choice; int next = items[current].state + 1; if (next >= num_states) next = 0; if (flag == FLAG_CHECK) { /* checklist? */ getyx(dialog, cur_y, cur_x); items[current].state = next; print_item(&all, all.list, &items[scrollamt + choice], states, choice, TRUE); (void) wnoutrefresh(all.list); (void) wmove(dialog, cur_y, cur_x); } else { /* radiolist */ for (i = 0; i < item_no; i++) { if (i != current) { items[i].state = 0; } } if (items[current].state) { getyx(dialog, cur_y, cur_x); items[current].state = next ? next : 1; print_item(&all, all.list, &items[current], states, choice, TRUE); (void) wnoutrefresh(all.list); (void) wmove(dialog, cur_y, cur_x); } else { items[current].state = 1; print_list(&all, choice, scrollamt, max_choice); } } continue; /* wait for another key press */ } /* * Check if key pressed matches first character of any item tag in * list. If there is more than one match, we will cycle through * each one as the same key is pressed repeatedly. */ found = FALSE; if (!fkey) { if (button < 0 || !dialog_state.visit_items) { for (j = scrollamt + choice + 1; j < item_no; j++) { if (check_hotkey(items, j)) { found = TRUE; i = j - scrollamt; break; } } if (!found) { for (j = 0; j <= scrollamt + choice; j++) { if (check_hotkey(items, j)) { found = TRUE; i = j - scrollamt; break; } } } if (found) dlg_flush_getc(); } else if ((j = dlg_char_to_button(key, buttons)) >= 0) { button = j; ungetch('\n'); continue; } } /* * A single digit (1-9) positions the selection to that line in the * current screen. */ if (!found && (key <= '9') && (key > '0') && (key - '1' < max_choice)) { found = TRUE; i = key - '1'; } if (!found) { if (fkey) { found = TRUE; switch (key) { case DLGK_ITEM_FIRST: i = -scrollamt; break; case DLGK_ITEM_LAST: i = item_no - 1 - scrollamt; break; case DLGK_PAGE_PREV: if (choice) i = 0; else if (scrollamt != 0) i = -MIN(scrollamt, max_choice); else continue; break; case DLGK_PAGE_NEXT: i = MIN(choice + max_choice, item_no - scrollamt - 1); break; case DLGK_ITEM_PREV: i = choice - 1; if (choice == 0 && scrollamt == 0) continue; break; case DLGK_ITEM_NEXT: i = choice + 1; if (scrollamt + choice >= item_no - 1) continue; break; default: found = FALSE; break; } } } if (found) { if (i != choice) { getyx(dialog, cur_y, cur_x); if (i < 0 || i >= max_choice) { if (i < 0) { scrollamt += i; choice = 0; } else { choice = max_choice - 1; scrollamt += (i - max_choice + 1); } print_list(&all, choice, scrollamt, max_choice); } else { choice = i; print_list(&all, choice, scrollamt, max_choice); } } continue; /* wait for another key press */ } if (fkey) { switch (key) { case DLGK_ENTER: result = dlg_enter_buttoncode(button); break; + case DLGK_LEAVE: + result = dlg_ok_buttoncode(button); + break; case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; free(prompt); - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); /* repaint */ goto retry; #endif default: if (was_mouse) { if ((key2 = dlg_ok_buttoncode(key)) >= 0) { result = key2; break; } beep(); } } - } else { + } else if (key > 0) { beep(); } } dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); *current_item = (scrollamt + choice); return result; } /* * Display a dialog box with a list of options that can be turned on or off * The `flag' parameter is used to select between radiolist and checklist. */ int dialog_checklist(const char *title, const char *cprompt, int height, int width, int list_height, int item_no, char **items, int flag) { int result; int i, j; DIALOG_LISTITEM *listitems; bool separate_output = ((flag == FLAG_CHECK) && (dialog_vars.separate_output)); bool show_status = FALSE; int current = 0; char *help_result; listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); assert_ptr(listitems, "dialog_checklist"); for (i = j = 0; i < item_no; ++i) { listitems[i].name = items[j++]; listitems[i].text = (dialog_vars.no_items ? dlg_strempty() : items[j++]); listitems[i].state = !dlg_strcmp(items[j++], "on"); listitems[i].help = ((dialog_vars.item_help) ? items[j++] : dlg_strempty()); } dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); result = dlg_checklist(title, cprompt, height, width, list_height, item_no, listitems, NULL, flag, ¤t); switch (result) { case DLG_EXIT_OK: /* FALLTHRU */ case DLG_EXIT_EXTRA: show_status = TRUE; break; case DLG_EXIT_HELP: dlg_add_help_listitem(&result, &help_result, &listitems[current]); if ((show_status = dialog_vars.help_status)) { if (separate_output) { dlg_add_string(help_result); dlg_add_separator(); } else { dlg_add_quoted(help_result); } } else { dlg_add_string(help_result); } break; } if (show_status) { for (i = 0; i < item_no; i++) { if (listitems[i].state) { if (separate_output) { dlg_add_string(listitems[i].name); dlg_add_separator(); } else { if (dlg_need_separator()) dlg_add_separator(); if (flag == FLAG_CHECK) dlg_add_quoted(listitems[i].name); else dlg_add_string(listitems[i].name); } } } dlg_add_last_key(separate_output); } dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); free(listitems); return result; } diff --git a/columns.c b/columns.c index d03761f81621..17f17f5f3d52 100644 --- a/columns.c +++ b/columns.c @@ -1,175 +1,174 @@ /* - * $Id: columns.c,v 1.10 2011/10/20 20:53:55 tom Exp $ + * $Id: columns.c,v 1.11 2019/07/25 00:06:38 tom Exp $ * * columns.c -- implements column-alignment * - * Copyright 2008-2010,2011 Thomas E. Dickey + * Copyright 2008-2011,2019 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #define each(row, data) \ row = 0, data = target; \ row < num_rows; \ ++row, data = next_row(data, per_row) static char * column_separator(void) { char *result = 0; if ((result = dialog_vars.column_separator) != 0) { if (*result == '\0') result = 0; } return result; } static char ** next_row(char **target, int per_row) { char *result = (char *) target; result += per_row; return (char **) (void *) result; } static char * next_col(char *source, unsigned offset) { char *mark = column_separator(); char *result = source + offset; if (offset) result += strlen(mark); return strstr(result, mark); } /* * Parse the source string, storing the offsets and widths of each column in * the corresponding arrays. Return the number of columns. */ static unsigned split_row(char *source, unsigned *offsets, unsigned *widths) { int mark = (int) strlen(column_separator()); char *next = 0; unsigned result = 0; unsigned offset = 0; do { if (result) { offset = (unsigned) (mark + next - source); widths[result - 1] = offset - offsets[result - 1] - (unsigned) mark; } offsets[result] = offset; ++result; } while ((next = next_col(source, offset)) != 0); offset = (unsigned) strlen(source); widths[result - 1] = offset - offsets[result - 1]; return result; } /* * The caller passes a pointer to a struct or array containing pointers * to strings that we may want to copy and reformat according to the column * separator. */ void dlg_align_columns(char **target, int per_row, int num_rows) { - int row; - if (column_separator()) { char **value; unsigned numcols = 1; size_t maxcols = 0; unsigned *widths; unsigned *offsets; unsigned *maxwidth; unsigned realwidth; unsigned n; + int row; /* first allocate arrays for workspace */ for (each(row, value)) { size_t len = strlen(*value); if (maxcols < len) maxcols = len; } ++maxcols; widths = dlg_calloc(unsigned, maxcols); offsets = dlg_calloc(unsigned, maxcols); maxwidth = dlg_calloc(unsigned, maxcols); assert_ptr(widths, "dlg_align_columns"); assert_ptr(offsets, "dlg_align_columns"); assert_ptr(maxwidth, "dlg_align_columns"); /* now, determine the number of columns and the column-widths */ for (each(row, value)) { unsigned cols = split_row(*value, offsets, widths); if (numcols < cols) numcols = cols; for (n = 0; n < cols; ++n) { if (maxwidth[n] < widths[n]) maxwidth[n] = widths[n]; } } realwidth = numcols - 1; for (n = 0; n < numcols; ++n) { realwidth += maxwidth[n]; } /* finally, construct reformatted strings */ for (each(row, value)) { unsigned cols = split_row(*value, offsets, widths); unsigned offset = 0; char *text = dlg_malloc(char, realwidth + 1); assert_ptr(text, "dlg_align_columns"); memset(text, ' ', (size_t) realwidth); for (n = 0; n < cols; ++n) { memcpy(text + offset, *value + offsets[n], (size_t) widths[n]); offset += maxwidth[n] + 1; } text[realwidth] = 0; *value = text; } free(widths); free(offsets); free(maxwidth); } } /* * Free temporary storage used while making column-aligned data. */ void dlg_free_columns(char **target, int per_row, int num_rows) { - int row; - char **value; - if (column_separator()) { + int row; + char **value; + for (each(row, value)) { free(*value); } } } diff --git a/config.guess b/config.guess index 883a6713bf03..9aff91cfd038 100755 --- a/config.guess +++ b/config.guess @@ -1,1476 +1,1687 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2018-05-19' +timestamp='2020-08-17' # 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/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. 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-2018 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi -trap 'exit 1' 1 2 15 - # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in - ,,) echo "int x;" > "$dummy.c" ; - for c in cc gcc c89 c99 ; do - if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +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 + { 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) >/dev/null 2>&1 ; then +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/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval "$set_cc_for_build" + set_cc_for_build cat <<-EOF > "$dummy.c" #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl 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". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; 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) - eval "$set_cc_for_build" + 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. echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval "$set_cc_for_build" + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then + 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 echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + 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 [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" + 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 [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then - eval "$set_cc_for_build" + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then + if test -x /usr/sbin/sysversion ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; + 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 + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi + exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + 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 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #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) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL" elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then + if test -d /usr/nec; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval "$set_cc_for_build" - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + 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 "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # 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 + 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 - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. + # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; esac +# 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/gitweb/?p=config.git;a=blob_plain;f=config.guess and https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +EOF + +year=`echo $timestamp | sed 's,-.*,,'` +# shellcheck disable=SC2003 +if test "`expr "\`date +%Y\`" - "$year"`" -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: diff --git a/config.sub b/config.sub index d1f5b5490349..0753e3084581 100755 --- a/config.sub +++ b/config.sub @@ -1,1808 +1,1851 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2018-05-24' +timestamp='2020-08-17' # 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/gitweb/?p=config.git;a=blob_plain;f=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. 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-2018 Free Software Foundation, Inc. +Copyright 1992-2020 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" + 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 -IFS="-" read -r field1 field2 field3 field4 <<EOF +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <<EOF $1 EOF # 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 - os=$field3-$field4 + 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-gnu* | linux-android* | linux-dietlibc \ - | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + 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*) basic_machine=$field1 - os=$maybe_os + basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown - os=linux-android + basic_os=linux-android ;; *) basic_machine=$field1-$field2 - os=$field3 + basic_os=$field3 ;; esac ;; *-*) - # 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 - os=$field2 - ;; - # Manufacturers - dec* | mips* | sequent* | encore* | pc532* | sgi* | sony* \ - | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ - | unicom* | ibm* | next | hp | isi* | apollo | altos* \ - | convergent* | ncr* | news | 32* | 3600* | 3100* | hitachi* \ - | c[123]* | convex* | sun | crds | omron* | dg | ultra | tti* \ - | harris | dolphin | highlevel | gould | cbm | ns | masscomp \ - | apple | axis | knuth | cray | microblaze* \ - | sim | cisco | oki | wec | wrs | winbond) - basic_machine=$field1-$field2 - os= - ;; - *) - basic_machine=$field1 - os=$field2 - ;; + # 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 + ;; + # 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 - os=bsd + basic_os=bsd ;; a29khif) basic_machine=a29k-amd - os=udi + basic_os=udi ;; adobe68k) basic_machine=m68010-adobe - os=scout + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= ;; am29k) basic_machine=a29k-none - os=bsd + basic_os=bsd ;; amdahl) basic_machine=580-amdahl - os=sysv + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown - os=amigaos + basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown - os=sysv4 + basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo - os=sysv + basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo - os=bsd + basic_os=bsd ;; aros) basic_machine=i386-pc - os=aros + basic_os=aros ;; aux) basic_machine=m68k-apple - os=aux + basic_os=aux ;; balance) basic_machine=ns32k-sequent - os=dynix + basic_os=dynix ;; blackfin) basic_machine=bfin-unknown - os=linux + basic_os=linux ;; cegcc) basic_machine=arm-unknown - os=cegcc + 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 - os=unicos + basic_os=unicos ;; - craynv) - basic_machine=craynv-cray - os=unicosmp + 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 - os=sysv3 + basic_os=sysv3 ;; dicos) basic_machine=i686-pc - os=dicos + basic_os=dicos ;; djgpp) basic_machine=i586-pc - os=msdosdjgpp + basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd - os=ebmon + basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson - os=ose + basic_os=ose ;; gmicro) basic_machine=tron-gmicro - os=sysv + basic_os=sysv ;; go32) basic_machine=i386-pc - os=go32 + basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi - os=hms + basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi - os=xray + basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi - os=hms + basic_os=hms ;; harris) basic_machine=m88k-harris - os=sysv3 + basic_os=sysv3 ;; - hp300bsd) + hp300 | hp300hpux) basic_machine=m68k-hp - os=bsd + basic_os=hpux ;; - hp300hpux) + hp300bsd) basic_machine=m68k-hp - os=hpux + basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp - os=osf + basic_os=osf ;; hppro) basic_machine=hppa1.1-hp - os=proelf + basic_os=proelf ;; i386mach) basic_machine=i386-mach - os=mach - ;; - vsta) - basic_machine=i386-unknown - os=vsta + basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi - os=sysv + basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown - os=linux + basic_os=linux ;; magnum | m3230) basic_machine=mips-mips - os=sysv + basic_os=sysv ;; merlin) basic_machine=ns32k-utek - os=sysv + basic_os=sysv ;; mingw64) basic_machine=x86_64-pc - os=mingw64 + basic_os=mingw64 ;; mingw32) basic_machine=i686-pc - os=mingw32 + basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown - os=mingw32ce + basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k - os=coff + basic_os=coff ;; morphos) basic_machine=powerpc-unknown - os=morphos + basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown - os=moxiebox + basic_os=moxiebox ;; msdos) basic_machine=i386-pc - os=msdos + basic_os=msdos ;; msys) basic_machine=i686-pc - os=msys + basic_os=msys ;; mvs) basic_machine=i370-ibm - os=mvs + basic_os=mvs ;; nacl) basic_machine=le32-unknown - os=nacl + basic_os=nacl ;; ncr3000) basic_machine=i486-ncr - os=sysv4 + basic_os=sysv4 ;; netbsd386) - basic_machine=i386-unknown - os=netbsd + basic_machine=i386-pc + basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel - os=linux + basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony - os=newsos + basic_os=newsos ;; news1000) basic_machine=m68030-sony - os=newsos + basic_os=newsos ;; necv70) basic_machine=v70-nec - os=sysv + basic_os=sysv ;; nh3000) basic_machine=m68k-harris - os=cxux + basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris - os=cxux + basic_os=cxux ;; nindy960) basic_machine=i960-intel - os=nindy + basic_os=nindy ;; mon960) basic_machine=i960-intel - os=mon960 + basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq - os=nonstopux + basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm - os=os400 + basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson - os=ose + basic_os=ose ;; os68k) basic_machine=m68k-none - os=os68k + basic_os=os68k ;; paragon) basic_machine=i860-intel - os=osf + basic_os=osf ;; parisc) basic_machine=hppa-unknown - os=linux + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp ;; pw32) basic_machine=i586-unknown - os=pw32 + basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc - os=rdos + basic_os=rdos ;; rdos32) basic_machine=i386-pc - os=rdos + basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k - os=coff + basic_os=coff ;; sa29200) basic_machine=a29k-amd - os=udi + basic_os=udi ;; sei) basic_machine=mips-sei - os=seiux + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= ;; sps7) basic_machine=m68k-bull - os=sysv2 + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= ;; stratus) basic_machine=i860-stratus - os=sysv4 + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= ;; sun2os3) basic_machine=m68000-sun - os=sunos3 + basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun - os=sunos4 + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= ;; sun3os3) basic_machine=m68k-sun - os=sunos3 + basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun - os=sunos4 + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= ;; sun4os3) basic_machine=sparc-sun - os=sunos3 + basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun - os=sunos4 + basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun - os=solaris2 + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= ;; sv1) basic_machine=sv1-cray - os=unicos + basic_os=unicos ;; symmetry) basic_machine=i386-sequent - os=dynix + basic_os=dynix ;; t3e) basic_machine=alphaev5-cray - os=unicos + basic_os=unicos ;; t90) basic_machine=t90-cray - os=unicos + basic_os=unicos ;; toad1) basic_machine=pdp10-xkl - os=tops20 + basic_os=tops20 ;; tpf) basic_machine=s390x-ibm - os=tpf + basic_os=tpf ;; udi29k) basic_machine=a29k-amd - os=udi + basic_os=udi ;; ultra3) basic_machine=a29k-nyu - os=sym1 + basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec - os=none + basic_os=none ;; vaxv) basic_machine=vax-dec - os=sysv + basic_os=sysv ;; vms) basic_machine=vax-dec - os=vms + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta ;; vxworks960) basic_machine=i960-wrs - os=vxworks + basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs - os=vxworks + basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs - os=vxworks + basic_os=vxworks ;; xbox) basic_machine=i686-pc - os=mingw32 + basic_os=mingw32 ;; ymp) basic_machine=ymp-cray - os=unicos + basic_os=unicos ;; *) basic_machine=$1 - os= + basic_os= ;; esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv6m | armv[78][arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper | csky \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nfp \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=${os:-none} - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + # 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 ;; - m9s12z | m68hcs12z | hcs12z | s12z) - basic_machine=s12z-unknown - os=${os:-none} + op50n) + cpu=hppa1.1 + vendor=oki ;; - ms1) - basic_machine=mt-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - strongarm | thumb | xscale) - basic_machine=arm-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - xgate) - basic_machine=$basic_machine-unknown - os=${os:-none} + orion105) + cpu=clipper + vendor=highlevel ;; - xscaleeb) - basic_machine=armeb-unknown + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - - xscaleel) - basic_machine=armel-unknown + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nfp-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att - ;; - abacus) - basic_machine=abacus-unknown - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=linux + cpu=we32k + vendor=att ;; bluegene*) - basic_machine=powerpc-ibm - os=cnk - ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=${os:-unicos} - ;; - convex-c1) - basic_machine=c1-convex - os=bsd - ;; - convex-c2) - basic_machine=c2-convex - os=bsd - ;; - convex-c32) - basic_machine=c32-convex - os=bsd - ;; - convex-c34) - basic_machine=c34-convex - os=bsd - ;; - convex-c38) - basic_machine=c38-convex - os=bsd - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=${os:-elf} - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=${os:-elf} - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec + cpu=powerpc + vendor=ibm + basic_os=cnk ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=${os:-bosx} + cpu=m68k + vendor=motorola ;; dpx2*) - basic_machine=m68k-bull - os=sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" + cpu=m68k + vendor=bull + basic_os=sysv3 ;; encore | umax | mmax) - basic_machine=ns32k-encore + cpu=ns32k + vendor=encore ;; elxsi) - basic_machine=elxsi-elxsi - os=${os:-bsd} + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns + cpu=ns32k + vendor=ns ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=hiuxwe2 - ;; - hp300-*) - basic_machine=m68k-hp + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-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 - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm + cpu=hppa1.0 + vendor=hp ;; i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=sysv32 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=sysv4 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=sysv + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=solaris2 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 ;; j90 | j90-cray) - basic_machine=j90-cray - os=${os:-unicos} + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; iris | iris4d) - basic_machine=mips-sgi - case $os in + cpu=mips + vendor=sgi + case $basic_os in irix*) ;; *) - os=irix4 + basic_os=irix4 ;; esac ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=linux - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; miniframe) - basic_machine=m68000-convergent + cpu=m68000 + vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=mint - ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` + cpu=m68k + vendor=atari + basic_os=mint ;; news-3600 | risc-news) - basic_machine=mips-sony - os=newsos + cpu=mips + vendor=sony + basic_os=newsos ;; next | m*-next) - basic_machine=m68k-next - case $os in - nextstep* ) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; ns2*) - os=nextstep2 + basic_os=nextstep2 ;; *) - os=nextstep3 + basic_os=nextstep3 ;; esac ;; np1) - basic_machine=np1-gould + cpu=np1 + vendor=gould ;; - neo-tandem) - basic_machine=neo-tandem + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; - nse-tandem) - basic_machine=nse-tandem + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; - nsr-tandem) - basic_machine=nsr-tandem + pbd) + cpu=sparc + vendor=tti ;; - nsv-tandem) - basic_machine=nsv-tandem + pbb) + cpu=m68k + vendor=tti ;; - nsx-tandem) - basic_machine=nsx-tandem + pc532) + cpu=ns32k + vendor=pc532 ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=proelf + pn) + cpu=pn + vendor=gould ;; - openrisc | openrisc-*) - basic_machine=or32-unknown + power) + cpu=power + vendor=ibm ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=hiuxwe2 + ps2) + cpu=i386 + vendor=ibm ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=linux + rm[46]00) + cpu=mips + vendor=siemens ;; - pbd) - basic_machine=sparc-tti + rtpc | rtpc-*) + cpu=romp + vendor=ibm ;; - pbb) - basic_machine=m68k-tti + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - pc98) - basic_machine=i386-pc + tower | tower-32) + cpu=m68k + vendor=ncr ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc + w65) + cpu=w65 + vendor=wdc ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + none) + cpu=none + vendor=none ;; - pentium4) - basic_machine=i786-pc + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <<EOF +$basic_machine +EOF ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + # 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 ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` + # 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 ;; - pn) - basic_machine=pn-gould + x64 | amd64) + cpu=x86_64 + vendor=pc ;; - power) basic_machine=power-ibm + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown ;; - ppc | ppcbe) basic_machine=powerpc-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} ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + c90-unknown | c90-cray) + vendor=cray + basic_os=${Basic_os:-unicos} ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown + fx80-unknown) + vendor=alliant ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` + romp-unknown) + vendor=ibm ;; - ppc64) basic_machine=powerpc64-unknown + mmix-unknown) + vendor=knuth ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + microblaze-unknown | microblazeel-unknown) + vendor=xilinx ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown + rs6000-unknown) + vendor=ibm ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + vax-unknown) + vendor=dec ;; - ps2) - basic_machine=i386-ibm + pdp11-unknown) + vendor=dec ;; - rm[46]00) - basic_machine=mips-siemens + we32k-unknown) + vendor=att ;; - rtpc | rtpc-*) - basic_machine=romp-ibm + cydra-unknown) + vendor=cydrome ;; - s390 | s390-*) - basic_machine=s390-ibm + i370-ibm*) + vendor=ibm ;; - s390x | s390x-*) - basic_machine=s390x-ibm + orion-unknown) + vendor=highlevel ;; - sb1) - basic_machine=mipsisa64sb1-unknown + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown + + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + basic_os=${basic_os:-bosx} ;; - sde) - basic_machine=mipsisa32-sde - os=${os:-elf} + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 ;; - sequent) - basic_machine=i386-sequent + blackfin-*) + cpu=bfin + basic_os=linux ;; - sh5el) - basic_machine=sh5le-unknown + c54x-*) + cpu=tic54x ;; - simso-wrs) - basic_machine=sparclite-wrs - os=vxworks + c55x-*) + cpu=tic55x ;; - spur) - basic_machine=spur-unknown + c6x-*) + cpu=tic6x ;; - st2000) - basic_machine=m68k-tandem + e500v[12]-*) + cpu=powerpc + basic_os=${basic_os}"spe" ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` + mips3*-*) + cpu=mips64 ;; - sun2) - basic_machine=m68000-sun + ms1-*) + cpu=mt ;; - sun3 | sun3-*) - basic_machine=m68k-sun + m68knommu-*) + cpu=m68k + basic_os=linux ;; - sun4) - basic_machine=sparc-sun + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun + openrisc-*) + cpu=or32 ;; - tile*) - basic_machine=$basic_machine-unknown - os=linux-gnu + parisc-*) + cpu=hppa + basic_os=linux ;; - tx39) - basic_machine=mipstx39-unknown + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 ;; - tx39el) - basic_machine=mipstx39el-unknown + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 ;; - tower | tower-32) - basic_machine=m68k-ncr + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu + pentium4-*) + cpu=i786 ;; - w65*) - basic_machine=w65-wdc - os=none + pc98-*) + cpu=i386 ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=proelf + ppc-* | ppcbe-*) + cpu=powerpc ;; - x64) - basic_machine=x86_64-pc + ppcle-* | powerpclittle-*) + cpu=powerpcle ;; - xps | xps100) - basic_machine=xps100-honeywell + ppc64-*) + cpu=powerpc64 ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` + ppc64le-* | powerpc64little-*) + cpu=powerpc64le ;; - none) - basic_machine=none-none - os=${os:-none} + sb1-*) + cpu=mipsisa64sb1 ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond + sb1el-*) + cpu=mipsisa64sb1el ;; - op50n) - basic_machine=hppa1.1-oki + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` ;; - op60c) - basic_machine=hppa1.1-oki + spur-*) + cpu=spur ;; - romp) - basic_machine=romp-ibm + strongarm-* | thumb-*) + cpu=arm ;; - mmix) - basic_machine=mmix-knuth + tx39-*) + cpu=mipstx39 ;; - rs6000) - basic_machine=rs6000-ibm + tx39el-*) + cpu=mipstx39el ;; - vax) - basic_machine=vax-dec + x64-*) + cpu=x86_64 ;; - pdp11) - basic_machine=pdp11-dec + xscale-* | xscalee[bl]-*) + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; - we32k) - basic_machine=we32k-att + arm64-*) + cpu=aarch64 ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown + + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + basic_os=${basic_os:-elf} ;; - cydra) - basic_machine=cydra-cydrome + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis ;; - orion) - basic_machine=orion-highlevel + cris-* | etrax*-*) + cpu=cris + vendor=axis ;; - orion105) - basic_machine=clipper-highlevel + crx-*) + basic_os=${basic_os:-elf} ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple + neo-tandem) + cpu=neo + vendor=tandem ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple + nse-tandem) + cpu=nse + vendor=tandem ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. + 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} + ;; + *) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 + # 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 \ + | 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 \ + | 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 \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | 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 | riscv64 \ + | 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 \ + | 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 $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x$os != x ] +if test x$basic_os != x then + +# First recognize some ad-hoc caes, 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|'` + ;; + nto-qnx*) + kernel=nto + os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <<EOF +$basic_os +EOF + ;; + # 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|'` + ;; + *) + 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 ;; - gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; # 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/'` ;; - sco3.2v[4-9]* | sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - ;; - scout) + sco*v* | scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; - # Now accept the basic system types. - # The portable systems comes first. - # Each alternative MUST end in a * to match a version number. - # sysv* is not here because it comes later, after sysvr4. - gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ - | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ - | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ - | sym* | kopensolaris* | plan9* \ - | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ - | aos* | aros* | cloudabi* | sortix* \ - | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ - | clix* | riscos* | uniplus* | iris* | rtu* | xenix* \ - | knetbsd* | mirbsd* | netbsd* \ - | bitrig* | openbsd* | solidbsd* | libertybsd* \ - | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ - | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ - | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ - | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ - | chorusrdb* | cegcc* | glidix* \ - | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ - | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ - | linux-newlib* | linux-musl* | linux-uclibc* \ - | 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* | superux* | rtmk* | windiss* \ - | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ - | skyos* | haiku* | rdos* | toppers* | drops* | es* \ - | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ - | midnightbsd*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; qnx*) - case $basic_machine in - x86-* | i*86-*) + case $cpu in + x86 | i*86) ;; *) os=nto-$os ;; esac ;; hiux*) os=hiuxwe2 ;; - nto-qnx*) - ;; - nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - sim | xray | os68k* | v88r* \ - | windows* | osx | abug | netware* | os9* \ - | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) - ;; - linux-dietlibc) - os=linux-dietlibc - ;; - linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; + lynxos*) + # don't get caught up in next wildcard + ;; lynx*) os=lynxos ;; - mac*) + 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 ;; - nsk*) - os=nsk - ;; # Preserve the version number of sinix5. sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; sinix*) os=sysv4 ;; tpf*) os=tpf ;; triton*) os=sysv3 ;; oss*) os=sysv3 ;; svr4*) os=sysv4 ;; svr3) os=sysv3 ;; sysvr4) os=sysv4 ;; - # This must come after sysvr4. - sysv*) - ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; - zvmoe) - os=zvmoe - ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. - case $basic_machine in + case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; - nacl*) - ;; - ios) - ;; - none) - ;; - *-eabi) - ;; *) - echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 - exit 1 + # 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. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) - os=linux + 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-abi", so those need to count as OSes. + musl* | newlib* | uclibc*) + ;; + # Likewise for "kernel-libc" + eabi | eabihf | gnueabi | gnueabihf) + ;; + # 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* | 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* \ + | 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* ) + ;; + # 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) + ;; + *) + 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-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # 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 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + nto-qnx*) + ;; + *-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. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - sunos*) + *-sunos*) vendor=sun ;; - cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - beos*) + *-beos*) vendor=be ;; - hpux*) + *-hpux*) vendor=hp ;; - mpeix*) + *-mpeix*) vendor=hp ;; - hiux*) + *-hiux*) vendor=hitachi ;; - unos*) + *-unos*) vendor=crds ;; - dgux*) + *-dgux*) vendor=dg ;; - luna*) + *-luna*) vendor=omron ;; - genix*) + *-genix*) vendor=ns ;; - clix*) + *-clix*) vendor=intergraph ;; - mvs* | opened*) + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - os400*) + s390-* | s390x-*) vendor=ibm ;; - ptx*) + *-ptx*) vendor=sequent ;; - tpf*) + *-tpf*) vendor=ibm ;; - vxsim* | vxworks* | windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - aux*) + *-aux*) vendor=apple ;; - hms*) + *-hms*) vendor=hitachi ;; - mpw* | macos*) + *-mpw* | *-macos*) vendor=apple ;; - *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo "$basic_machine-$os" +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: diff --git a/configure b/configure index 5b1b53de1533..1e5c94ceb37c 100755 --- a/configure +++ b/configure @@ -1,25724 +1,27284 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by Autoconf 2.52.20170501. +# Generated by Autoconf 2.52.20210105. # +# Copyright 2003-2020,2021 Thomas E. Dickey # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # 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 # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset + as_unset="unset" else - as_unset=false + as_unset="false" fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= -MFLAGS= MAKEFLAGS= +MFLAGS= +MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} +: "${ac_max_here_lines=38}" ac_unique_file="dialog.h" # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif #if HAVE_SYS_STAT_H # include <sys/stat.h> #endif #if STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # if HAVE_STDLIB_H # include <stdlib.h> # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #if HAVE_STRINGS_H # include <strings.h> #endif #if HAVE_INTTYPES_H # include <inttypes.h> #else # if HAVE_STDINT_H # include <stdint.h> # endif #endif #if HAVE_UNISTD_H # include <unistd.h> #endif" # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. 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' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${datarootdir}/info' mandir='${datarootdir}/man' # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case "$ac_option" in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) 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_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` + ac_feature=`echo "$ac_feature" | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in + ac_feature=`echo "$ac_feature" | sed 's/-/_/g'` + case "$ac_option" in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst \ + | --runs | --run | --ru) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* \ + | --runs=* | --run=* | --ru=*) + runstatedir=$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) 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 ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in + ac_package=`echo "$ac_package" | sed 's/-/_/g'` + case "$ac_option" in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` + ac_package=`echo "$ac_package" | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; + export "$ac_envvar" ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + : "${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'` + ac_option=--`echo "$ac_prev" | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do - eval ac_val=$`echo $ac_var` - case $ac_val in + eval ac_val=$`echo "$ac_var"` + case "$ac_val" in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do - eval ac_val=$`echo $ac_var` - case $ac_val in + eval ac_val=$`echo "$ac_var"` + case "$ac_val" in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. build=$build_alias host=$host_alias target=$target_alias # FIXME: should be removed in autoconf 3.0. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_prog=$0 ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then +if test ! -r "$srcdir/$ac_unique_file"; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # 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 <<EOF \`configure' configures this package 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 \`..'] EOF cat <<EOF 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] --datarootdir=DIR read-only architecture-independent data [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --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 extra definition of runtime 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] --infodir=DIR info documentation [DATAROOTDIR/info] --mandir=DIR man documentation [DATAROOTDIR/man] EOF cat <<\EOF 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 X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST build programs to run on HOST [BUILD] EOF fi if test -n "$ac_init_help"; then cat <<\EOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --disable-echo do not display "compiling" commands --disable-largefile omit support for large files --with-install-prefix=XXX sets DESTDIR, useful for packaging - --with-warnings test: turn on gcc warnings + --with-x use the X Window System + --enable-warnings test: turn on gcc compiler warnings --with-pkg-config{=path} enable/disable use of pkg-config --with-package=XXX rename dialog to XXX, library to libXXX.a, etc --enable-header-subdir install dlg_XXX headers to subdirectory --with-man2html=XXX use XXX rather than groff --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib --enable-nls use Native Language Support --with-included-gettext use the GNU gettext library included here --with-textdomain=PKG NLS text-domain (default is package name) --disable-included-msgs use included messages, for i18n support --with-dmalloc test: use Gray Watson's dmalloc library --with-dbmalloc test: use Conor Cahill's dbmalloc library --with-purify test: use Purify --with-valgrind test: use valgrind --with-no-leaks test: free permanent memory, analyze leaks --disable-trace do not support --trace option + --enable-rpath use rpath option when generating shared libraries --with-rel-version=XXX override derived release version --with-abi-version=XXX override derived ABI version --disable-libtool-version enable to use libtool's incompatible naming scheme --with-libtool generate libraries with libtool --with-libtool-opts=XXX specify additional libtool options --with-export-syms=XXX limit exported symbols using libtool --with-shared generate shared-libraries --with-shlib-version=X Specify rel or abi version for shared libs --with-versioned-syms=X markup versioned symbols using ld --with-curses-dir=DIR directory in which (n)curses is installed - --enable-rpath use rpath option when generating shared libraries --with-screen=XXX use specified curses-libraries --with-ncursesw use wide ncurses-libraries --with-ncurses use ncurses-libraries --with-pdcurses compile/link with pdcurses X11 library --with-curses-colr compile/link with HPUX 10.x color-curses --with-curses-5lib compile/link with SunOS 5lib curses --with-Xaw3d link with Xaw 3d library --with-Xaw3dxft link with Xaw 3d xft library --with-neXtaw link with neXT Athena library --with-XawPlus link with Athena-Plus library - --with-x use the X Window System --disable-extras do not include extra dialogs --disable-rc-file do not include config-file support + --disable-rc-file2 do not use extra attributes in config-file --disable-Xdialog do not include Xdialog-style dialogs (1.1) --disable-Xdialog2 do not include extra Xdialog-style dialogs (1.2) --disable-whiptail do not map extra whiptail options --disable-form do not include the form dialog --disable-gauge do not include the gauge dialogs --disable-tailbox do not include the tailbox dialog --disable-mixedform do not include the mixedform dialog --disable-mixedgauge do not include the mixedgauge dialog --enable-widec enable wide-curses features --disable-rpath-hack don't add rpath options for additional libraries 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> CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. EOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue - cd $ac_subdir + cd "$ac_subdir" # A "../" for each directory in /$ac_subdir. - ac_dots=`echo $ac_subdir | + ac_dots=`echo "$ac_subdir" | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` - case $srcdir in + case "$srcdir" in .) # No --srcdir option. We are building in place. - ac_sub_srcdir=$srcdir ;; + ac_sub_srcdir="$srcdir" ;; [\\/]* | ?:[\\/]* ) # Absolute path. - ac_sub_srcdir=$srcdir/$ac_subdir ;; + ac_sub_srcdir="$srcdir/$ac_subdir" ;; *) # Relative path. - ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; + ac_sub_srcdir="$ac_dots$srcdir/$ac_subdir" ;; esac # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_sub_srcdir/configure.gnu; then + if test -f "$ac_sub_srcdir/configure.gnu"; then echo - $SHELL $ac_sub_srcdir/configure.gnu --help=recursive - elif test -f $ac_sub_srcdir/configure; then + $SHELL "$ac_sub_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_sub_srcdir/configure"; then echo - $SHELL $ac_sub_srcdir/configure --help=recursive - elif test -f $ac_sub_srcdir/configure.ac || - test -f $ac_sub_srcdir/configure.in; then + $SHELL "$ac_sub_srcdir/configure" --help=recursive + elif test -f "$ac_sub_srcdir/configure.ac" || + test -f "$ac_sub_srcdir/configure.in"; then echo - $ac_configure --help + "$ac_configure" --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi - cd $ac_popdir + cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 -if $ac_init_version; then +if "$ac_init_version"; then cat <<\EOF +Copyright 2003-2020,2021 Thomas E. Dickey Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. EOF exit 0 fi exec 5>config.log cat >&5 <<EOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.52.20170501. Invocation command line was +generated by GNU Autoconf 2.52.20210105. Invocation command line was $ $0 $@ EOF { 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` hostinfo = `(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` PATH = $PATH _ASUNAME } >&5 cat >&5 <<EOF ## ------------ ## ## Core tests. ## ## ------------ ## EOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell meta-characters. ac_configure_args= ac_sep= for ac_arg do - case $ac_arg in + case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" ac_sep=" " ;; esac # Get rid of the leading space. done # 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. trap 'exit_status=$? # Save into config.log some information that might help in debugging. echo >&5 echo "## ----------------- ##" >&5 echo "## Cache variables. ##" >&5 echo "## ----------------- ##" >&5 echo >&5 # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } >&5 sed "/^$/d" confdefs.h >conftest.log if test -s conftest.log; then echo >&5 echo "## ------------ ##" >&5 echo "## confdefs.h. ##" >&5 echo "## ------------ ##" >&5 echo >&5 cat conftest.log >&5 fi (echo; echo) >&5 test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" >&5 echo "$as_me: exit $exit_status" >&5 rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' "$ac_signal" done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - { echo "$as_me:940: loading site script $ac_site_file" >&5 + { echo "$as_me:955: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then - { echo "$as_me:951: loading cache $cache_file" >&5 + { echo "$as_me:966: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else - { echo "$as_me:959: creating cache $cache_file" >&5 + { echo "$as_me:974: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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 + case "$ac_old_set,$ac_new_set" in set,) - { echo "$as_me:975: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { echo "$as_me:990: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:979: error: \`$ac_var' was not set in the previous run" >&5 + { echo "$as_me:994: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:985: error: \`$ac_var' has changed since the previous run:" >&5 + { echo "$as_me:1000: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:987: former value: $ac_old_val" >&5 + { echo "$as_me:1002: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:989: current value: $ac_new_val" >&5 + { echo "$as_me:1004: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. It doesn't matter if # we pass some twice (in addition to the command line arguments). if test "$ac_new_set" = set; then - case $ac_new_val in + case "$ac_new_val" in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" ;; esac fi done -if $ac_cache_corrupted; then - { echo "$as_me:1008: error: changes in the environment can compromise the build" >&5 +if "$ac_cache_corrupted"; then + { echo "$as_me:1023: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:1010: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 + { { echo "$as_me:1025: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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_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_main_return=return +ac_main_return="return" case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway - ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; + *c*,-n*) ECHO_N= + ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway + ECHO_T=' ' + ;; + *c*,* ) ECHO_N=-n + ECHO_C= + ECHO_T= + ;; + *) ECHO_N= + ECHO_C='\c' + ECHO_T= + ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh -if { (echo "$as_me:1031: PATH=\".;.\"; conftest.sh") >&5 +if { (echo "$as_me:1054: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? - echo "$as_me:1034: \$? = $ac_status" >&5 - (exit $ac_status); }; then + echo "$as_me:1057: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then ac_path_separator=';' else ac_path_separator=: fi PATH_SEPARATOR="$ac_path_separator" rm -f conftest.sh ac_config_headers="$ac_config_headers dlg_config.h:config.hin" 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed DESTDIR= +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:1100: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:1110: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:1114: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:1123: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub "$ac_cv_build_alias"` || + { { echo "$as_me:1127: error: $ac_config_sub $ac_cv_build_alias failed." >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:1132: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +echo "$as_me:1139: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub "$ac_cv_host_alias"` || + { { echo "$as_me:1148: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:1153: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + 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_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_main_return=return +ac_main_return="return" 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 -echo "$as_me:1069: checking for $ac_word" >&5 +echo "$as_me:1169: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}gcc" -echo "$as_me:1084: found $ac_dir/$ac_word" >&5 +echo "$as_me:1184: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1092: result: $CC" >&5 + echo "$as_me:1192: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1095: result: no" >&5 + echo "$as_me:1195: result: no" >&5 echo "${ECHO_T}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 -echo "$as_me:1104: checking for $ac_word" >&5 +echo "$as_me:1204: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="gcc" -echo "$as_me:1119: found $ac_dir/$ac_word" >&5 +echo "$as_me:1219: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1127: result: $ac_ct_CC" >&5 + echo "$as_me:1227: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1130: result: no" >&5 + echo "$as_me:1230: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC 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 -echo "$as_me:1143: checking for $ac_word" >&5 +echo "$as_me:1243: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}cc" -echo "$as_me:1158: found $ac_dir/$ac_word" >&5 +echo "$as_me:1258: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1166: result: $CC" >&5 + echo "$as_me:1266: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1169: result: no" >&5 + echo "$as_me:1269: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:1178: checking for $ac_word" >&5 +echo "$as_me:1278: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="cc" -echo "$as_me:1193: found $ac_dir/$ac_word" >&5 +echo "$as_me:1293: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1201: result: $ac_ct_CC" >&5 + echo "$as_me:1301: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1204: result: no" >&5 + echo "$as_me:1304: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 -echo "$as_me:1217: checking for $ac_word" >&5 +echo "$as_me:1317: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" -echo "$as_me:1237: found $ac_dir/$ac_word" >&5 +echo "$as_me:1337: found $ac_dir/$ac_word" >&5 break done -if test $ac_prog_rejected = yes; then +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 set dummy "$ac_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1259: result: $CC" >&5 + echo "$as_me:1359: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1262: result: no" >&5 + echo "$as_me:1362: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl 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 -echo "$as_me:1273: checking for $ac_word" >&5 +echo "$as_me:1373: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -echo "$as_me:1288: found $ac_dir/$ac_word" >&5 +echo "$as_me:1388: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1296: result: $CC" >&5 + echo "$as_me:1396: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1299: result: no" >&5 + echo "$as_me:1399: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:1312: checking for $ac_word" >&5 +echo "$as_me:1412: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" -echo "$as_me:1327: found $ac_dir/$ac_word" >&5 +echo "$as_me:1427: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1335: result: $ac_ct_CC" >&5 + echo "$as_me:1435: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1338: result: no" >&5 + echo "$as_me:1438: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi -test -z "$CC" && { { echo "$as_me:1350: error: no acceptable cc found in \$PATH" >&5 +test -z "$CC" && { { echo "$as_me:1450: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. -echo "$as_me:1355:" \ +echo "$as_me:1455:" \ "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:1358: \"$ac_compiler --version </dev/null >&5\"") >&5 +ac_compiler=`set X $ac_compile; echo "$2"` +{ (eval echo "$as_me:1458: \"$ac_compiler --version </dev/null >&5\"") >&5 (eval $ac_compiler --version </dev/null >&5) 2>&5 ac_status=$? - echo "$as_me:1361: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:1363: \"$ac_compiler -v </dev/null >&5\"") >&5 + echo "$as_me:1461: \$? = $ac_status" >&5 + (exit "$ac_status"); } +{ (eval echo "$as_me:1463: \"$ac_compiler -v </dev/null >&5\"") >&5 (eval $ac_compiler -v </dev/null >&5) 2>&5 ac_status=$? - echo "$as_me:1366: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:1368: \"$ac_compiler -V </dev/null >&5\"") >&5 + echo "$as_me:1466: \$? = $ac_status" >&5 + (exit "$ac_status"); } +{ (eval echo "$as_me:1468: \"$ac_compiler -V </dev/null >&5\"") >&5 (eval $ac_compiler -V </dev/null >&5) 2>&5 ac_status=$? - echo "$as_me:1371: \$? = $ac_status" >&5 - (exit $ac_status); } + echo "$as_me:1471: \$? = $ac_status" >&5 + (exit "$ac_status"); } -cat >conftest.$ac_ext <<_ACEOF -#line 1375 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 1475 "configure" #include "confdefs.h" int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # 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. -echo "$as_me:1391: checking for C compiler default output" >&5 +echo "$as_me:1491: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:1394: \"$ac_link_default\"") >&5 +ac_link_default=`echo "$ac_link" | sed 's/ -o *"conftest[^"]*"//'` +if { (eval echo "$as_me:1494: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? - echo "$as_me:1397: \$? = $ac_status" >&5 - (exit $ac_status); }; then + echo "$as_me:1497: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. for ac_file in `ls a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -{ { echo "$as_me:1420: error: C compiler cannot create executables" >&5 +cat "conftest.$ac_ext" >&5 +{ { echo "$as_me:1520: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext -echo "$as_me:1426: result: $ac_file" >&5 +echo "$as_me:1526: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -echo "$as_me:1431: checking whether the C compiler works" >&5 +echo "$as_me:1531: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' - { (eval echo "$as_me:1437: \"$ac_try\"") >&5 + { (eval echo "$as_me:1537: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1440: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:1540: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { echo "$as_me:1447: error: cannot run C compiled programs. + { { echo "$as_me:1547: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi -echo "$as_me:1455: result: yes" >&5 +echo "$as_me:1555: result: yes" >&5 echo "${ECHO_T}yes" >&6 -rm -f a.out a.exe conftest$ac_cv_exeext +rm -f a.out a.exe "conftest$ac_cv_exeext" ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -echo "$as_me:1462: checking whether we are cross compiling" >&5 +echo "$as_me:1562: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:1464: result: $cross_compiling" >&5 +echo "$as_me:1564: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 -echo "$as_me:1467: checking for executable suffix" >&5 +echo "$as_me:1567: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 -if { (eval echo "$as_me:1469: \"$ac_link\"") >&5 +if { (eval echo "$as_me:1569: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:1472: \$? = $ac_status" >&5 - (exit $ac_status); }; then + echo "$as_me:1572: \$? = $ac_status" >&5 + (exit "$ac_status"); }; 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 `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else - { { echo "$as_me:1488: error: cannot compute EXEEXT: cannot compile and link" >&5 + { { echo "$as_me:1588: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi -rm -f conftest$ac_cv_exeext -echo "$as_me:1494: result: $ac_cv_exeext" >&5 +rm -f "conftest$ac_cv_exeext" +echo "$as_me:1594: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 -rm -f conftest.$ac_ext +rm -f "conftest.$ac_ext" EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:1500: checking for object suffix" >&5 +echo "$as_me:1600: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 1506 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1606 "configure" #include "confdefs.h" int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:1518: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1618: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1521: \$? = $ac_status" >&5 - (exit $ac_status); }; then + echo "$as_me:1621: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -{ { echo "$as_me:1533: error: cannot compute OBJEXT: cannot compile" >&5 +cat "conftest.$ac_ext" >&5 +{ { echo "$as_me:1633: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f "conftest.$ac_cv_objext" "conftest.$ac_ext" fi -echo "$as_me:1540: result: $ac_cv_objext" >&5 +echo "$as_me:1640: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:1544: checking whether we are using the GNU C compiler" >&5 +echo "$as_me:1644: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 1550 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1650 "configure" #include "confdefs.h" int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1565: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1665: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1568: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1571: \"$ac_try\"") >&5 + echo "$as_me:1668: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1671: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1574: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:1674: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_compiler_gnu=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:1586: result: $ac_cv_c_compiler_gnu" >&5 +echo "$as_me:1686: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" -echo "$as_me:1592: checking whether $CC accepts -g" >&5 +echo "$as_me:1692: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 1598 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1698 "configure" #include "confdefs.h" int main (void) { ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1610: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1710: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1613: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1616: \"$ac_try\"") >&5 + echo "$as_me:1713: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1716: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1619: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:1719: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_prog_cc_g=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:1629: result: $ac_cv_prog_cc_g" >&5 +echo "$as_me:1729: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF +cat >"conftest.$ac_ext" <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1656: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1756: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1659: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1662: \"$ac_try\"") >&5 + echo "$as_me:1759: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1762: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1665: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:1765: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then for ac_declaration in \ ''\ '#include <stdlib.h>' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do - cat >conftest.$ac_ext <<_ACEOF -#line 1677 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1777 "configure" #include "confdefs.h" #include <stdlib.h> $ac_declaration int main (void) { exit (42); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1690: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1790: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1693: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1696: \"$ac_try\"") >&5 + echo "$as_me:1793: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1796: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1699: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:1799: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 continue fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line 1709 "configure" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1809 "configure" #include "confdefs.h" $ac_declaration int main (void) { exit (42); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:1721: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1821: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1724: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1727: \"$ac_try\"") >&5 + echo "$as_me:1824: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1827: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1730: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:1830: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" done rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h + echo "$ac_declaration" >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" 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_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_main_return=return +ac_main_return="return" GCC_VERSION=none if test "$GCC" = yes ; then - echo "$as_me:1760: checking version of $CC" >&5 + echo "$as_me:1860: checking version of $CC" >&5 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown - echo "$as_me:1764: result: $GCC_VERSION" >&5 + echo "$as_me:1864: result: $GCC_VERSION" >&5 echo "${ECHO_T}$GCC_VERSION" >&6 fi -echo "$as_me:1768: checking for $CC option to accept ANSI C" >&5 +INTEL_COMPILER=no + +if test "$GCC" = yes ; then + case "$host_os" in + (linux*|gnu*) + echo "$as_me:1873: checking if this is really Intel C compiler" >&5 +echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 + cf_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -no-gcc" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1878 "configure" +#include "confdefs.h" + +int +main (void) +{ + +#ifdef __INTEL_COMPILER +#else +make an error +#endif + + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1895: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1898: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1901: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1904: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + INTEL_COMPILER=yes +cf_save_CFLAGS="$cf_save_CFLAGS -we147" + +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CFLAGS="$cf_save_CFLAGS" + echo "$as_me:1915: result: $INTEL_COMPILER" >&5 +echo "${ECHO_T}$INTEL_COMPILER" >&6 + ;; + esac +fi + +CLANG_COMPILER=no + +if test "$GCC" = yes ; then + echo "$as_me:1924: checking if this is really Clang C compiler" >&5 +echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6 + cf_save_CFLAGS="$CFLAGS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1928 "configure" +#include "confdefs.h" + +int +main (void) +{ + +#ifdef __clang__ +#else +make an error +#endif + + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:1945: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1948: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:1951: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1954: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + CLANG_COMPILER=yes + +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CFLAGS="$cf_save_CFLAGS" + echo "$as_me:1964: result: $CLANG_COMPILER" >&5 +echo "${ECHO_T}$CLANG_COMPILER" >&6 +fi + +CLANG_VERSION=none + +if test "x$CLANG_COMPILER" = "xyes" ; then + case "$CC" in + (c[1-9][0-9]|*/c[1-9][0-9]) + { echo "$as_me:1973: WARNING: replacing broken compiler alias $CC" >&5 +echo "$as_me: WARNING: replacing broken compiler alias $CC" >&2;} + CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`" + CC=clang + ;; + esac + + echo "$as_me:1980: checking version of $CC" >&5 +echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 + CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" + test -z "$CLANG_VERSION" && CLANG_VERSION=unknown + echo "$as_me:1984: result: $CLANG_VERSION" >&5 +echo "${ECHO_T}$CLANG_VERSION" >&6 + + for cf_clang_opt in \ + -Qunused-arguments \ + -Wno-error=implicit-function-declaration + do + echo "$as_me:1991: checking if option $cf_clang_opt works" >&5 +echo $ECHO_N "checking if option $cf_clang_opt works... $ECHO_C" >&6 + cf_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cf_clang_opt" + cat >"conftest.$ac_ext" <<_ACEOF +#line 1996 "configure" +#include "confdefs.h" + + #include <stdio.h> +int +main (void) +{ + + printf("hello!\\n"); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:2010: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2013: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:2016: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2019: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_clang_optok=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 + + cf_clang_optok=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + echo "$as_me:2030: result: $cf_clang_optok" >&5 +echo "${ECHO_T}$cf_clang_optok" >&6 + CFLAGS="$cf_save_CFLAGS" + if test "$cf_clang_optok" = yes; then + test -n "$verbose" && echo " adding option $cf_clang_opt" 1>&6 + +echo "${as_me:-configure}:2036: testing adding option $cf_clang_opt ..." 1>&5 + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_clang_opt" + + fi + done +fi + +echo "$as_me:2045: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -#line 1776 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 2053 "configure" #include "confdefs.h" #include <stdarg.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main (void) { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:1825: \"$ac_compile\"") >&5 + rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:2102: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1828: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1831: \"$ac_try\"") >&5 + echo "$as_me:2105: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:2108: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1834: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:2111: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext +rm -f "conftest.$ac_objext" done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f "conftest.$ac_ext" "conftest.$ac_objext" CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) - echo "$as_me:1851: result: none needed" >&5 + echo "$as_me:2128: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) - echo "$as_me:1854: result: $ac_cv_prog_cc_stdc" >&5 + echo "$as_me:2131: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # This should have been defined by AC_PROG_CC -: ${CC:=cc} +: "${CC:=cc}" -echo "$as_me:1862: checking \$CC variable" >&5 -echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 -case "$CC" in -(*[\ \ ]-*) - echo "$as_me:1866: result: broken" >&5 +echo "$as_me:2139: checking \$CFLAGS variable" >&5 +echo $ECHO_N "checking \$CFLAGS variable... $ECHO_C" >&6 +case "x$CFLAGS" in +(*-[IUD]*) + echo "$as_me:2143: result: broken" >&5 echo "${ECHO_T}broken" >&6 - { echo "$as_me:1868: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 -echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;} - # humor him... - cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[ ]* / /g' -e 's/[ ]*[ ]-[^ ].*//'` - cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", substr($0,1+length(prog))); }'` - CC="$cf_prog" + { echo "$as_me:2145: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&5 +echo "$as_me: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&2;} + cf_flags="$CFLAGS" + CFLAGS= for cf_arg in $cf_flags do - case "x$cf_arg" in - (x-[IUDfgOW]*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_arg do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi - ;; - (*) - CC="$CC $cf_arg" - ;; - esac done - test -n "$verbose" && echo " resulting CC: '$CC'" 1>&6 - -echo "${as_me:-configure}:1985: testing resulting CC: '$CC' ..." 1>&5 - - test -n "$verbose" && echo " resulting CFLAGS: '$CFLAGS'" 1>&6 - -echo "${as_me:-configure}:1989: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5 - - test -n "$verbose" && echo " resulting CPPFLAGS: '$CPPFLAGS'" 1>&6 - -echo "${as_me:-configure}:1993: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5 - ;; (*) - echo "$as_me:1997: result: ok" >&5 + echo "$as_me:2253: result: ok" >&5 echo "${ECHO_T}ok" >&6 ;; 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 -ac_main_return=return -echo "$as_me:2008: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes +echo "$as_me:2258: checking \$CC variable" >&5 +echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 +case "$CC" in +(*[\ \ ]-*) + echo "$as_me:2262: result: broken" >&5 +echo "${ECHO_T}broken" >&6 + { echo "$as_me:2264: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 +echo "$as_me: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;} + # humor him... + cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[ ]* / /g' -e 's/[ ]*[ ]-[^ ].*//'` + cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", substr($0,1+length(prog))); }'` + CC="$cf_prog" + for cf_arg in $cf_flags + do + case "x$cf_arg" in + (x-[IUDfgOW]*) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $cf_arg 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 >conftest.$ac_ext <<_ACEOF -#line 2029 "configure" -#include "confdefs.h" -#include <assert.h> - Syntax error -_ACEOF -if { (eval echo "$as_me:2034: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:2040: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test "$cf_fix_cppflags" = yes ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + + ;; + esac + ;; + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + + ;; + esac + ;; +(yes) + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + +fi + +if test -n "$cf_new_cppflags" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + +fi + +if test -n "$cf_new_extra_cppflags" ; then + + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + +fi + + ;; + (*) + CC="$CC $cf_arg" + ;; + esac + done + test -n "$verbose" && echo " resulting CC: '$CC'" 1>&6 + +echo "${as_me:-configure}:2381: testing resulting CC: '$CC' ..." 1>&5 + + test -n "$verbose" && echo " resulting CFLAGS: '$CFLAGS'" 1>&6 + +echo "${as_me:-configure}:2385: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5 + + test -n "$verbose" && echo " resulting CPPFLAGS: '$CPPFLAGS'" 1>&6 + +echo "${as_me:-configure}:2389: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5 + + ;; +(*) + echo "$as_me:2393: result: ok" >&5 +echo "${ECHO_T}ok" >&6 + ;; +esac + +for ac_prog in ggrep grep +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:2402: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$GREP"; then + ac_cv_prog_GREP="$GREP" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_GREP="$ac_prog" +echo "$as_me:2417: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +GREP=$ac_cv_prog_GREP +if test -n "$GREP"; then + echo "$as_me:2425: result: $GREP" >&5 +echo "${ECHO_T}$GREP" >&6 +else + echo "$as_me:2428: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$GREP" && break +done +test -n "$GREP" || GREP=": " + +echo "$as_me:2436: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + for ac_prog in gegrep egrep +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:2448: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_EGREP="$ac_dir/$ac_word" + echo "$as_me:2465: found $ac_dir/$ac_word" >&5 + break +fi +done + + ;; +esac +fi +EGREP=$ac_cv_path_EGREP + +if test -n "$EGREP"; then + echo "$as_me:2476: result: $EGREP" >&5 +echo "${ECHO_T}$EGREP" >&6 +else + echo "$as_me:2479: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$EGREP" && break +done +test -n "$EGREP" || EGREP=": " + + test "x$ac_cv_path_EGREP" = "x:" && { { echo "$as_me:2487: error: cannot find workable egrep" >&5 +echo "$as_me: error: cannot find workable egrep" >&2;} + { (exit 1); exit 1; }; } + fi +fi +echo "$as_me:2492: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6 + EGREP="$ac_cv_path_EGREP" + +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_main_return="return" +echo "$as_me:2502: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # 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 >"conftest.$ac_ext" <<_ACEOF +#line 2523 "configure" +#include "confdefs.h" +#include <assert.h> + Syntax error +_ACEOF +if { (eval echo "$as_me:2528: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:2534: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err "conftest.$ac_ext" # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -#line 2063 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 2557 "configure" #include "confdefs.h" #include <ac_nonexistent.h> _ACEOF -if { (eval echo "$as_me:2067: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:2561: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2073: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:2567: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 # Passes both tests. ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f 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 -echo "$as_me:2110: result: $CPP" >&5 +echo "$as_me:2604: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF -#line 2120 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 2614 "configure" #include "confdefs.h" #include <assert.h> Syntax error _ACEOF -if { (eval echo "$as_me:2125: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:2619: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2131: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:2625: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -#line 2154 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 2648 "configure" #include "confdefs.h" #include <ac_nonexistent.h> _ACEOF -if { (eval echo "$as_me:2158: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:2652: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2164: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:2658: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 # Passes both tests. ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" if $ac_preproc_ok; then : else - { { echo "$as_me:2192: error: C preprocessor \"$CPP\" fails sanity check" >&5 + { { echo "$as_me:2686: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } 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_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_main_return=return +ac_main_return="return" -echo "$as_me:2204: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "$as_me:2698: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:2224: result: yes" >&5 + echo "$as_me:2718: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else - echo "$as_me:2228: result: no" >&5 + echo "$as_me:2722: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:2236: checking for $ac_word" >&5 +echo "$as_me:2730: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -echo "$as_me:2251: found $ac_dir/$ac_word" >&5 +echo "$as_me:2745: found $ac_dir/$ac_word" >&5 break done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:2259: result: $RANLIB" >&5 + echo "$as_me:2753: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else - echo "$as_me:2262: result: no" >&5 + echo "$as_me:2756: result: no" >&5 echo "${ECHO_T}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 -echo "$as_me:2271: checking for $ac_word" >&5 +echo "$as_me:2765: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_RANLIB="ranlib" -echo "$as_me:2286: found $ac_dir/$ac_word" >&5 +echo "$as_me:2780: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:2295: result: $ac_ct_RANLIB" >&5 + echo "$as_me:2789: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else - echo "$as_me:2298: result: no" >&5 + echo "$as_me:2792: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:2324: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - # 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" # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:2344: checking for a BSD compatible install" >&5 +echo "$as_me:2813: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /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 if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi -echo "$as_me:2393: result: $INSTALL" >&5 +echo "$as_me:2862: result: $INSTALL" >&5 echo "${ECHO_T}$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' -echo "$as_me:2404: checking whether ln -s works" >&5 +echo "$as_me:2873: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:2408: result: yes" >&5 + echo "$as_me:2877: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:2411: result: no, using $LN_S" >&5 + echo "$as_me:2880: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi -echo "$as_me:2415: checking if $LN_S -f options work" >&5 +echo "$as_me:2884: checking if $LN_S -f options work" >&5 echo $ECHO_N "checking if $LN_S -f options work... $ECHO_C" >&6 rm -f conf$$.src conf$$dst echo >conf$$.dst echo first >conf$$.src if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then cf_prog_ln_sf=yes else cf_prog_ln_sf=no fi rm -f conf$$.dst conf$$src -echo "$as_me:2427: result: $cf_prog_ln_sf" >&5 +echo "$as_me:2896: result: $cf_prog_ln_sf" >&5 echo "${ECHO_T}$cf_prog_ln_sf" >&6 test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f" for ac_prog in lint cppcheck splint do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:2436: checking for $ac_word" >&5 +echo "$as_me:2905: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LINT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LINT"; then ac_cv_prog_LINT="$LINT" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LINT="$ac_prog" -echo "$as_me:2451: found $ac_dir/$ac_word" >&5 +echo "$as_me:2920: found $ac_dir/$ac_word" >&5 break done fi fi LINT=$ac_cv_prog_LINT if test -n "$LINT"; then - echo "$as_me:2459: result: $LINT" >&5 + echo "$as_me:2928: result: $LINT" >&5 echo "${ECHO_T}$LINT" >&6 else - echo "$as_me:2462: result: no" >&5 + echo "$as_me:2931: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LINT" && break done +case "x$LINT" in +(xcppcheck|x*/cppcheck) + test -z "$LINT_OPTS" && LINT_OPTS="--enable=all" + ;; +esac + # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 -echo "$as_me:2471: checking for $ac_word" >&5 +echo "$as_me:2946: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GROFF_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GROFF_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_GROFF_PATH="$GROFF_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_GROFF_PATH="$ac_dir/$ac_word" - echo "$as_me:2488: found $ac_dir/$ac_word" >&5 + echo "$as_me:2963: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_GROFF_PATH" && ac_cv_path_GROFF_PATH="no" ;; esac fi GROFF_PATH=$ac_cv_path_GROFF_PATH if test -n "$GROFF_PATH"; then - echo "$as_me:2500: result: $GROFF_PATH" >&5 + echo "$as_me:2975: result: $GROFF_PATH" >&5 echo "${ECHO_T}$GROFF_PATH" >&6 else - echo "$as_me:2503: result: no" >&5 + echo "$as_me:2978: result: no" >&5 echo "${ECHO_T}no" >&6 fi for ac_prog in nroff mandoc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:2511: checking for $ac_word" >&5 +echo "$as_me:2986: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_NROFF_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $NROFF_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_NROFF_PATH="$NROFF_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_NROFF_PATH="$ac_dir/$ac_word" - echo "$as_me:2528: found $ac_dir/$ac_word" >&5 + echo "$as_me:3003: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi NROFF_PATH=$ac_cv_path_NROFF_PATH if test -n "$NROFF_PATH"; then - echo "$as_me:2539: result: $NROFF_PATH" >&5 + echo "$as_me:3014: result: $NROFF_PATH" >&5 echo "${ECHO_T}$NROFF_PATH" >&6 else - echo "$as_me:2542: result: no" >&5 + echo "$as_me:3017: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NROFF_PATH" && break done test -n "$NROFF_PATH" || NROFF_PATH="no" # Extract the first word of "tbl", so it can be a program name with args. set dummy tbl; ac_word=$2 -echo "$as_me:2552: checking for $ac_word" >&5 +echo "$as_me:3027: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TBL_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TBL_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_TBL_PATH="$TBL_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_TBL_PATH="$ac_dir/$ac_word" - echo "$as_me:2569: found $ac_dir/$ac_word" >&5 + echo "$as_me:3044: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_TBL_PATH" && ac_cv_path_TBL_PATH="cat" ;; esac fi TBL_PATH=$ac_cv_path_TBL_PATH if test -n "$TBL_PATH"; then - echo "$as_me:2581: result: $TBL_PATH" >&5 + echo "$as_me:3056: result: $TBL_PATH" >&5 echo "${ECHO_T}$TBL_PATH" >&6 else - echo "$as_me:2584: result: no" >&5 + echo "$as_me:3059: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$GROFF_PATH" = xno then NROFF_NOTE= GROFF_NOTE="#" else NROFF_NOTE="#" GROFF_NOTE= fi test -z "$GROFF_NOTE" && NROFF_NOTE= 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 -echo "$as_me:2602: checking for $ac_word" >&5 +echo "$as_me:3077: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AR="${ac_tool_prefix}ar" -echo "$as_me:2617: found $ac_dir/$ac_word" >&5 +echo "$as_me:3092: found $ac_dir/$ac_word" >&5 break done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:2625: result: $AR" >&5 + echo "$as_me:3100: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else - echo "$as_me:2628: result: no" >&5 + echo "$as_me:3103: result: no" >&5 echo "${ECHO_T}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 -echo "$as_me:2637: checking for $ac_word" >&5 +echo "$as_me:3112: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_AR="ar" -echo "$as_me:2652: found $ac_dir/$ac_word" >&5 +echo "$as_me:3127: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - echo "$as_me:2661: result: $ac_ct_AR" >&5 + echo "$as_me:3136: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else - echo "$as_me:2664: result: no" >&5 + echo "$as_me:3139: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi -echo "$as_me:2673: checking for options to update archives" >&5 +echo "$as_me:3148: checking for options to update archives" >&5 echo $ECHO_N "checking for options to update archives... $ECHO_C" >&6 if test "${cf_cv_ar_flags+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cf_cv_ar_flags=unknown - for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv - do + case "$cf_cv_system_name" in + (*-msvc*) + cf_cv_ar_flags='' + cat >mk_static_lib.sh <<-EOF + #!$SHELL + MSVC_BIN="$AR" + out="\$1" + shift + exec \$MSVC_BIN -out:"\$out" \$@ + EOF + chmod +x mk_static_lib.sh + AR=`pwd`/mk_static_lib.sh + ;; + (*) + cf_cv_ar_flags=unknown + for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv + do - # check if $ARFLAGS already contains this choice - if test "x$ARFLAGS" != "x" ; then - cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` - if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then - cf_cv_ar_flags= - break + # check if $ARFLAGS already contains this choice + if test "x$ARFLAGS" != "x" ; then + cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` + if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then + cf_cv_ar_flags= + break + fi fi - fi - rm -f conftest.$ac_cv_objext - rm -f conftest.a + rm -f "conftest.$ac_cv_objext" + rm -f conftest.a - cat >conftest.$ac_ext <<EOF -#line 2696 "configure" + cat >"conftest.$ac_ext" <<EOF +#line 3185 "configure" int testdata[3] = { 123, 456, 789 }; EOF - if { (eval echo "$as_me:2699: \"$ac_compile\"") >&5 + if { (eval echo "$as_me:3188: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2702: \$? = $ac_status" >&5 - (exit $ac_status); } ; then - echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5 - $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&5 1>/dev/null - if test -f conftest.a ; then - cf_cv_ar_flags=$cf_ar_flags - break - fi - else - test -n "$verbose" && echo " cannot compile test-program" 1>&6 + echo "$as_me:3191: \$? = $ac_status" >&5 + (exit "$ac_status"); } ; then + echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5 + $AR $ARFLAGS "$cf_ar_flags" conftest.a "conftest.$ac_cv_objext" 2>&5 1>/dev/null + if test -f conftest.a ; then + cf_cv_ar_flags="$cf_ar_flags" + break + fi + else + test -n "$verbose" && echo " cannot compile test-program" 1>&6 -echo "${as_me:-configure}:2713: testing cannot compile test-program ..." 1>&5 +echo "${as_me:-configure}:3202: testing cannot compile test-program ..." 1>&5 - break - fi - done - rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext + break + fi + done + rm -f conftest.a "conftest.$ac_ext" "conftest.$ac_cv_objext" + ;; + esac fi -echo "$as_me:2721: result: $cf_cv_ar_flags" >&5 +echo "$as_me:3212: result: $cf_cv_ar_flags" >&5 echo "${ECHO_T}$cf_cv_ar_flags" >&6 if test -n "$ARFLAGS" ; then if test -n "$cf_cv_ar_flags" ; then ARFLAGS="$ARFLAGS $cf_cv_ar_flags" fi else ARFLAGS=$cf_cv_ar_flags fi -echo "$as_me:2732: checking for makeflags variable" >&5 -echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6 +echo "$as_me:3223: checking for fgrep" >&5 +echo $ECHO_N "checking for fgrep... $ECHO_C" >&6 +if test "${ac_cv_path_FGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + for ac_prog in gfgrep fgrep +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:3235: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_FGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $FGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_FGREP="$FGREP" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_FGREP="$ac_dir/$ac_word" + echo "$as_me:3252: found $ac_dir/$ac_word" >&5 + break +fi +done + + ;; +esac +fi +FGREP=$ac_cv_path_FGREP + +if test -n "$FGREP"; then + echo "$as_me:3263: result: $FGREP" >&5 +echo "${ECHO_T}$FGREP" >&6 +else + echo "$as_me:3266: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$FGREP" && break +done +test -n "$FGREP" || FGREP=": " + + test "x$ac_cv_path_FGREP" = "x:" && { { echo "$as_me:3274: error: cannot find workable fgrep" >&5 +echo "$as_me: error: cannot find workable fgrep" >&2;} + { (exit 1); exit 1; }; } + fi +fi +echo "$as_me:3279: result: $ac_cv_path_FGREP" >&5 +echo "${ECHO_T}$ac_cv_path_FGREP" >&6 + FGREP="$ac_cv_path_FGREP" + +echo "$as_me:3283: checking for makeflags variable" >&5 +echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6 if test "${cf_cv_makeflags+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp <<CF_EOF SHELL = $SHELL all : @ echo '.$cf_option' CF_EOF - cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | fgrep -v "ing directory" | sed -e 's,[ ]*$,,'` + cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | ${FGREP-fgrep} -v "ing directory" | sed -e 's,[ ]*$,,'` case "$cf_result" in (.*k|.*kw) - cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` + cf_result="`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`" case "$cf_result" in (.*CC=*) cf_cv_makeflags= ;; (*) cf_cv_makeflags=$cf_option ;; esac break ;; (.-) ;; (*) -echo "${as_me:-configure}:2762: testing given option \"$cf_option\",no match \"$cf_result\" ..." 1>&5 +echo "${as_me:-configure}:3313: testing given option \"$cf_option\",no match \"$cf_result\" ..." 1>&5 ;; esac done rm -f cf_makeflags.tmp fi -echo "$as_me:2770: result: $cf_cv_makeflags" >&5 +echo "$as_me:3321: result: $cf_cv_makeflags" >&5 echo "${ECHO_T}$cf_cv_makeflags" >&6 -echo "$as_me:2773: checking if filesystem supports mixed-case filenames" >&5 +echo "$as_me:3324: checking if filesystem supports mixed-case filenames" >&5 echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6 if test "${cf_cv_mixedcase+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes ; then - case $target_alias in - (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) + case "$target_alias" in + (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi fi -echo "$as_me:2800: result: $cf_cv_mixedcase" >&5 +echo "$as_me:3351: result: $cf_cv_mixedcase" >&5 echo "${ECHO_T}$cf_cv_mixedcase" >&6 test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF for ac_prog in exctags ctags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:2811: checking for $ac_word" >&5 +echo "$as_me:3362: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CTAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CTAGS"; then ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CTAGS="$ac_prog" -echo "$as_me:2826: found $ac_dir/$ac_word" >&5 +echo "$as_me:3377: found $ac_dir/$ac_word" >&5 break done fi fi CTAGS=$ac_cv_prog_CTAGS if test -n "$CTAGS"; then - echo "$as_me:2834: result: $CTAGS" >&5 + echo "$as_me:3385: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else - echo "$as_me:2837: result: no" >&5 + echo "$as_me:3388: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CTAGS" && break done for ac_prog in exetags etags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:2848: checking for $ac_word" >&5 +echo "$as_me:3399: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ETAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ETAGS"; then ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ETAGS="$ac_prog" -echo "$as_me:2863: found $ac_dir/$ac_word" >&5 +echo "$as_me:3414: found $ac_dir/$ac_word" >&5 break done fi fi ETAGS=$ac_cv_prog_ETAGS if test -n "$ETAGS"; then - echo "$as_me:2871: result: $ETAGS" >&5 + echo "$as_me:3422: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else - echo "$as_me:2874: result: no" >&5 + echo "$as_me:3425: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ETAGS" && break done # Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args. set dummy ${CTAGS:-ctags}; ac_word=$2 -echo "$as_me:2883: checking for $ac_word" >&5 +echo "$as_me:3434: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_LOWER_TAGS"; then ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_LOWER_TAGS="yes" -echo "$as_me:2898: found $ac_dir/$ac_word" >&5 +echo "$as_me:3449: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no" fi fi MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS if test -n "$MAKE_LOWER_TAGS"; then - echo "$as_me:2907: result: $MAKE_LOWER_TAGS" >&5 + echo "$as_me:3458: result: $MAKE_LOWER_TAGS" >&5 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 else - echo "$as_me:2910: result: no" >&5 + echo "$as_me:3461: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$cf_cv_mixedcase" = yes ; then # Extract the first word of "${ETAGS:-etags}", so it can be a program name with args. set dummy ${ETAGS:-etags}; ac_word=$2 -echo "$as_me:2917: checking for $ac_word" >&5 +echo "$as_me:3468: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_UPPER_TAGS"; then ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_UPPER_TAGS="yes" -echo "$as_me:2932: found $ac_dir/$ac_word" >&5 +echo "$as_me:3483: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no" fi fi MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS if test -n "$MAKE_UPPER_TAGS"; then - echo "$as_me:2941: result: $MAKE_UPPER_TAGS" >&5 + echo "$as_me:3492: result: $MAKE_UPPER_TAGS" >&5 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 else - echo "$as_me:2944: result: no" >&5 + echo "$as_me:3495: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi -echo "$as_me:2964: checking if you want to see long compiling messages" >&5 +echo "$as_me:3515: checking if you want to see long compiling messages" >&5 echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6 # Check whether --enable-echo or --disable-echo was given. if test "${enable_echo+set}" = set; then enableval="$enable_echo" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then ECHO_LT='--silent' ECHO_LD='@echo linking $@;' RULE_CC='@echo compiling $<' SHOW_CC='@echo compiling $@' ECHO_CC='@' else ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi else enableval=yes ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi; -echo "$as_me:2998: result: $enableval" >&5 +echo "$as_me:3549: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 -# Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:3003: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } - -echo "$as_me:3007: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:3016: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:3020: error: $ac_config_sub $ac_cv_build_alias failed." >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:3025: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 -build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then - echo "$as_me:3033: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:3042: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:3047: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 -host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && cat >>confdefs.h <<EOF #define SYSTEM_NAME "$system_name" EOF if test "${cf_cv_system_name+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_system_name="$system_name" fi test -z "$system_name" && system_name="$cf_cv_system_name" -test -n "$cf_cv_system_name" && echo "$as_me:3073: result: Configuring for $cf_cv_system_name" >&5 +test -n "$cf_cv_system_name" && echo "$as_me:3573: result: Configuring for $cf_cv_system_name" >&5 echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6 if test ".$system_name" != ".$cf_cv_system_name" ; then - echo "$as_me:3077: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 + echo "$as_me:3577: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6 - { { echo "$as_me:3079: error: \"Please remove config.cache and try again.\"" >&5 + { { echo "$as_me:3579: error: \"Please remove config.cache and try again.\"" >&5 echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;} { (exit 1); exit 1; }; } fi -case $cf_cv_system_name in +case "$cf_cv_system_name" in (os2*) CFLAGS="$CFLAGS -Zmt" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D__ST_MT_ERRNO__" CXXFLAGS="$CXXFLAGS -Zmt" # autoconf's macro sets -Zexe and suffix both, which conflict:w LDFLAGS="$LDFLAGS -Zmt -Zcrtdll" ac_cv_exeext=.exe ;; esac PROG_EXT="$EXEEXT" test -n "$PROG_EXT" && cat >>confdefs.h <<EOF #define PROG_EXT "$PROG_EXT" EOF - echo "$as_me:3105: checking for PATH separator" >&5 + echo "$as_me:3605: checking for PATH separator" >&5 echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6 - case $cf_cv_system_name in + case "$cf_cv_system_name" in (os2*) PATH_SEPARATOR=';' ;; (*) ${PATH_SEPARATOR:=':'} ;; esac - echo "$as_me:3112: result: $PATH_SEPARATOR" >&5 + echo "$as_me:3612: result: $PATH_SEPARATOR" >&5 echo "${ECHO_T}$PATH_SEPARATOR" >&6 - case $cf_cv_system_name in + case "$cf_cv_system_name" in (OS/2*|os2*) if test "$DFT_LWR_MODEL" = libtool; then LIB_PREFIX='lib' else LIB_PREFIX='' fi ;; + (*-msvc*) + LIB_PREFIX='' + ;; (*) LIB_PREFIX='lib' ;; esac +echo "$as_me:3630: checking if the POSIX test-macros are already defined" >&5 +echo $ECHO_N "checking if the POSIX test-macros are already defined... $ECHO_C" >&6 +if test "${cf_cv_posix_visible+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cat >"conftest.$ac_ext" <<_ACEOF +#line 3637 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main (void) +{ + +#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \ + && defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \ + && defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \ + && defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0) +#error conflicting symbols found +#endif + + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:3656: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3659: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:3662: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3665: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_posix_visible=no +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_cv_posix_visible=yes +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + +fi +echo "$as_me:3676: result: $cf_cv_posix_visible" >&5 +echo "${ECHO_T}$cf_cv_posix_visible" >&6 + +if test "$cf_cv_posix_visible" = no; then + cf_XOPEN_SOURCE=500 cf_POSIX_C_SOURCE=199506L cf_xopen_source= -case $host_os in +case "$host_os" in (aix[4-7]*) cf_xopen_source="-D_ALL_SOURCE" ;; (msys) cf_XOPEN_SOURCE=600 ;; (darwin[0-8].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; -(freebsd*|dragonfly*) +(freebsd*|dragonfly*|midnightbsd*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[56].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin) cf_gnu_xopen_source=$cf_XOPEN_SOURCE -echo "$as_me:3167: checking if this is the GNU C library" >&5 +echo "$as_me:3721: checking if this is the GNU C library" >&5 echo $ECHO_N "checking if this is the GNU C library... $ECHO_C" >&6 if test "${cf_cv_gnu_library+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cat >conftest.$ac_ext <<_ACEOF -#line 3174 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 3728 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0 return 0; + #elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0 + return 0; #else # error not GNU C library #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3191: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:3747: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3194: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3197: \"$ac_try\"") >&5 + echo "$as_me:3750: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:3753: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3200: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:3756: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_gnu_library=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_gnu_library=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:3211: result: $cf_cv_gnu_library" >&5 +echo "$as_me:3767: result: $cf_cv_gnu_library" >&5 echo "${ECHO_T}$cf_cv_gnu_library" >&6 if test x$cf_cv_gnu_library = xyes; then # With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE - # was changed to help a little... - echo "$as_me:3218: checking if _DEFAULT_SOURCE can be used as a basis" >&5 + # was changed to help a little. newlib incorporated the change about 4 + # years later. + echo "$as_me:3775: checking if _DEFAULT_SOURCE can be used as a basis" >&5 echo $ECHO_N "checking if _DEFAULT_SOURCE can be used as a basis... $ECHO_C" >&6 if test "${cf_cv_gnu_library_219+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save="$CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -#line 3230 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 3787 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2) return 0; + #elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3) + return 0; #else # error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3247: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:3806: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3250: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3253: \"$ac_try\"") >&5 + echo "$as_me:3809: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:3812: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3256: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:3815: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_gnu_library_219=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_gnu_library_219=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi -echo "$as_me:3268: result: $cf_cv_gnu_library_219" >&5 +echo "$as_me:3827: result: $cf_cv_gnu_library_219" >&5 echo "${ECHO_T}$cf_cv_gnu_library_219" >&6 if test "x$cf_cv_gnu_library_219" = xyes; then cf_save="$CPPFLAGS" - echo "$as_me:3273: checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE" >&5 + echo "$as_me:3832: checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_dftsrc_219+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi - cat >conftest.$ac_ext <<_ACEOF -#line 3378 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 3937 "configure" #include "confdefs.h" #include <limits.h> #include <sys/types.h> int main (void) { #if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1) return 0; #else # error GNU C library is too old #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3398: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:3957: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3401: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3404: \"$ac_try\"") >&5 + echo "$as_me:3960: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:3963: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3407: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:3966: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_gnu_dftsrc_219=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_gnu_dftsrc_219=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:3418: result: $cf_cv_gnu_dftsrc_219" >&5 +echo "$as_me:3977: result: $cf_cv_gnu_dftsrc_219" >&5 echo "${ECHO_T}$cf_cv_gnu_dftsrc_219" >&6 test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save" else cf_cv_gnu_dftsrc_219=maybe fi if test "x$cf_cv_gnu_dftsrc_219" != xyes; then - echo "$as_me:3427: checking if we must define _GNU_SOURCE" >&5 + echo "$as_me:3986: checking if we must define _GNU_SOURCE" >&5 echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 3434 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 3993 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifndef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be defined #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3449: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4008: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3452: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3455: \"$ac_try\"") >&5 + echo "$as_me:4011: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4014: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3458: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4017: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_save="$CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -D_GNU_SOURCE do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi - cat >conftest.$ac_ext <<_ACEOF -#line 3565 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4124 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifdef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be undefined #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3580: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4139: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3583: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3586: \"$ac_try\"") >&5 + echo "$as_me:4142: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4145: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3589: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4148: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_gnu_source=yes fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:3604: result: $cf_cv_gnu_source" >&5 +echo "$as_me:4163: result: $cf_cv_gnu_source" >&5 echo "${ECHO_T}$cf_cv_gnu_source" >&6 if test "$cf_cv_gnu_source" = yes then - echo "$as_me:3609: checking if we should also define _DEFAULT_SOURCE" >&5 + echo "$as_me:4168: checking if we should also define _DEFAULT_SOURCE" >&5 echo $ECHO_N "checking if we should also define _DEFAULT_SOURCE... $ECHO_C" >&6 if test "${cf_cv_default_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_GNU_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -#line 3619 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4178 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifdef _DEFAULT_SOURCE #error expected _DEFAULT_SOURCE to be undefined #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3634: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4193: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3637: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3640: \"$ac_try\"") >&5 + echo "$as_me:4196: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4199: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3643: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4202: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_default_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_default_source=yes fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:3654: result: $cf_cv_default_source" >&5 +echo "$as_me:4213: result: $cf_cv_default_source" >&5 echo "${ECHO_T}$cf_cv_default_source" >&6 if test "$cf_cv_default_source" = yes then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE" fi fi fi fi ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types cf_XOPEN_SOURCE= +if test "$cf_cv_posix_visible" = no; then + cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` -echo "$as_me:3689: checking if we should define _POSIX_C_SOURCE" >&5 +echo "$as_me:4250: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -echo "${as_me:-configure}:3695: testing if the symbol is already defined go no further ..." 1>&5 +echo "${as_me:-configure}:4256: testing if the symbol is already defined go no further ..." 1>&5 - cat >conftest.$ac_ext <<_ACEOF -#line 3698 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4259 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3713: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4274: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3716: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3719: \"$ac_try\"") >&5 + echo "$as_me:4277: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4280: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3722: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4283: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then - cat >conftest.$ac_ext <<_ACEOF -#line 3743 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4304 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3758: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4319: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3761: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3764: \"$ac_try\"") >&5 + echo "$as_me:4322: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4325: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3767: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4328: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "${as_me:-configure}:3778: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 +echo "${as_me:-configure}:4339: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source" -echo "${as_me:-configure}:3786: testing if the second compile does not leave our definition intact error ..." 1>&5 +echo "${as_me:-configure}:4347: testing if the second compile does not leave our definition intact error ..." 1>&5 - cat >conftest.$ac_ext <<_ACEOF -#line 3789 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4350 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3804: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4365: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3807: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3810: \"$ac_try\"") >&5 + echo "$as_me:4368: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4371: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3813: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4374: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:3829: result: $cf_cv_posix_c_source" >&5 +echo "$as_me:4390: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi +fi # cf_cv_posix_visible + ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[4-9]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (osf[45]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) -echo "$as_me:3967: checking if we should define _XOPEN_SOURCE" >&5 +echo "$as_me:4530: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 3974 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4537 "configure" #include "confdefs.h" #include <stdlib.h> #include <string.h> #include <sys/types.h> int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:3993: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4556: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3996: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3999: \"$ac_try\"") >&5 + echo "$as_me:4559: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4562: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4002: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4565: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_save="$CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -#line 4014 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4577 "configure" #include "confdefs.h" #include <stdlib.h> #include <string.h> #include <sys/types.h> int main (void) { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4033: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4596: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4036: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4039: \"$ac_try\"") >&5 + echo "$as_me:4599: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4602: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4042: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4605: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:4057: result: $cf_cv_xopen_source" >&5 +echo "$as_me:4620: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi +if test "$cf_cv_posix_visible" = no; then + cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` -echo "$as_me:4185: checking if we should define _POSIX_C_SOURCE" >&5 +echo "$as_me:4750: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -echo "${as_me:-configure}:4191: testing if the symbol is already defined go no further ..." 1>&5 +echo "${as_me:-configure}:4756: testing if the symbol is already defined go no further ..." 1>&5 - cat >conftest.$ac_ext <<_ACEOF -#line 4194 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4759 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4209: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4774: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4212: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4215: \"$ac_try\"") >&5 + echo "$as_me:4777: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4780: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4218: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4783: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then - cat >conftest.$ac_ext <<_ACEOF -#line 4239 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4804 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4254: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4819: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4257: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4260: \"$ac_try\"") >&5 + echo "$as_me:4822: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4825: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4263: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4828: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "${as_me:-configure}:4274: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 +echo "${as_me:-configure}:4839: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source" -echo "${as_me:-configure}:4282: testing if the second compile does not leave our definition intact error ..." 1>&5 +echo "${as_me:-configure}:4847: testing if the second compile does not leave our definition intact error ..." 1>&5 - cat >conftest.$ac_ext <<_ACEOF -#line 4285 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 4850 "configure" #include "confdefs.h" #include <sys/types.h> int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4300: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:4865: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4303: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4306: \"$ac_try\"") >&5 + echo "$as_me:4868: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:4871: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4309: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:4874: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:4325: result: $cf_cv_posix_c_source" >&5 +echo "$as_me:4890: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi +fi # cf_cv_posix_visible + ;; esac if test -n "$cf_xopen_source" ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_xopen_source do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 -echo "${as_me:-configure}:4517: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 +echo "${as_me:-configure}:5084: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 -echo "${as_me:-configure}:4527: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 +echo "${as_me:-configure}:5094: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 -echo "${as_me:-configure}:4537: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 +echo "${as_me:-configure}:5104: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then - echo "$as_me:4547: checking if _XOPEN_SOURCE really is set" >&5 + echo "$as_me:5114: checking if _XOPEN_SOURCE really is set" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -#line 4550 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5117 "configure" #include "confdefs.h" #include <stdlib.h> int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4565: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5132: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4568: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4571: \"$ac_try\"") >&5 + echo "$as_me:5135: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5138: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4574: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5141: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_XOPEN_SOURCE_set=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_XOPEN_SOURCE_set=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - echo "$as_me:4583: result: $cf_XOPEN_SOURCE_set" >&5 +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + echo "$as_me:5150: result: $cf_XOPEN_SOURCE_set" >&5 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6 - if test $cf_XOPEN_SOURCE_set = yes + if test "$cf_XOPEN_SOURCE_set" = yes then - cat >conftest.$ac_ext <<_ACEOF -#line 4588 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5155 "configure" #include "confdefs.h" #include <stdlib.h> int main (void) { #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4603: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5170: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4606: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4609: \"$ac_try\"") >&5 + echo "$as_me:5173: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5176: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4612: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5179: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_XOPEN_SOURCE_set_ok=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_XOPEN_SOURCE_set_ok=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - if test $cf_XOPEN_SOURCE_set_ok = no +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + if test "$cf_XOPEN_SOURCE_set_ok" = no then - { echo "$as_me:4623: WARNING: _XOPEN_SOURCE is lower than requested" >&5 + { echo "$as_me:5190: WARNING: _XOPEN_SOURCE is lower than requested" >&5 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;} fi else -echo "$as_me:4628: checking if we should define _XOPEN_SOURCE" >&5 +echo "$as_me:5195: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 4635 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5202 "configure" #include "confdefs.h" #include <stdlib.h> #include <string.h> #include <sys/types.h> int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4654: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5221: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4657: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4660: \"$ac_try\"") >&5 + echo "$as_me:5224: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5227: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4663: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5230: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_save="$CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -#line 4675 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5242 "configure" #include "confdefs.h" #include <stdlib.h> #include <string.h> #include <sys/types.h> int main (void) { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4694: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5261: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4697: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4700: \"$ac_try\"") >&5 + echo "$as_me:5264: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5267: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4703: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5270: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:4718: result: $cf_cv_xopen_source" >&5 +echo "$as_me:5285: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi fi fi +fi # cf_cv_posix_visible # Check whether --enable-largefile or --disable-largefile was given. if test "${enable_largefile+set}" = set; then enableval="$enable_largefile" fi; if test "$enable_largefile" != no; then - echo "$as_me:4843: checking for special C compiler options needed for large files" >&5 + echo "$as_me:5411: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. - cat >conftest.$ac_ext <<_ACEOF -#line 4855 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5423 "configure" #include "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 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF - rm -f conftest.$ac_objext -if { (eval echo "$as_me:4875: \"$ac_compile\"") >&5 + rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5443: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4878: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4881: \"$ac_try\"") >&5 + echo "$as_me:5446: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5449: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4884: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5452: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext +rm -f "conftest.$ac_objext" CC="$CC -n32" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:4894: \"$ac_compile\"") >&5 + rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5462: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4897: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4900: \"$ac_try\"") >&5 + echo "$as_me:5465: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5468: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4903: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5471: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext +rm -f "conftest.$ac_objext" break done CC=$ac_save_CC - rm -f conftest.$ac_ext + rm -f "conftest.$ac_ext" fi fi -echo "$as_me:4917: result: $ac_cv_sys_largefile_CC" >&5 +echo "$as_me:5485: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi - echo "$as_me:4923: checking for _FILE_OFFSET_BITS value needed for large files" >&5 + echo "$as_me:5491: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_file_offset_bits=no - cat >conftest.$ac_ext <<_ACEOF -#line 4931 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5499 "configure" #include "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 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4951: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5519: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4954: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4957: \"$ac_try\"") >&5 + echo "$as_me:5522: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5525: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4960: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5528: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line 4969 "configure" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5537 "configure" #include "confdefs.h" #define _FILE_OFFSET_BITS 64 #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 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:4990: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5558: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4993: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4996: \"$ac_try\"") >&5 + echo "$as_me:5561: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5564: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4999: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5567: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" break done fi -echo "$as_me:5010: result: $ac_cv_sys_file_offset_bits" >&5 +echo "$as_me:5578: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 if test "$ac_cv_sys_file_offset_bits" != no; then cat >>confdefs.h <<EOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits EOF fi rm -rf conftest* - echo "$as_me:5020: checking for _LARGE_FILES value needed for large files" >&5 + echo "$as_me:5588: checking for _LARGE_FILES value needed for large files" >&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_large_files=no - cat >conftest.$ac_ext <<_ACEOF -#line 5028 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5596 "configure" #include "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 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5048: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5616: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5051: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5054: \"$ac_try\"") >&5 + echo "$as_me:5619: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5622: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5057: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5625: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line 5066 "configure" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5634 "configure" #include "confdefs.h" #define _LARGE_FILES 1 #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 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5087: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5655: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5090: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5093: \"$ac_try\"") >&5 + echo "$as_me:5658: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5661: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5096: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5664: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" break done fi -echo "$as_me:5107: result: $ac_cv_sys_large_files" >&5 +echo "$as_me:5675: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6 if test "$ac_cv_sys_large_files" != no; then cat >>confdefs.h <<EOF #define _LARGE_FILES $ac_cv_sys_large_files EOF fi rm -rf conftest* fi if test "$enable_largefile" != no ; then - echo "$as_me:5120: checking for _LARGEFILE_SOURCE value needed for large files" >&5 + echo "$as_me:5688: checking for _LARGEFILE_SOURCE value needed for large files" >&5 echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_largefile_source=no - cat >conftest.$ac_ext <<_ACEOF -#line 5128 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5696 "configure" #include "confdefs.h" #include <stdio.h> int main (void) { return !fseeko; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5140: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5708: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5143: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5146: \"$ac_try\"") >&5 + echo "$as_me:5711: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5714: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5149: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5717: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line 5158 "configure" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5726 "configure" #include "confdefs.h" #define _LARGEFILE_SOURCE 1 #include <stdio.h> int main (void) { return !fseeko; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5171: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5739: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5174: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5177: \"$ac_try\"") >&5 + echo "$as_me:5742: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5745: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5180: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5748: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_sys_largefile_source=1; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" break done fi -echo "$as_me:5191: result: $ac_cv_sys_largefile_source" >&5 +echo "$as_me:5759: result: $ac_cv_sys_largefile_source" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6 if test "$ac_cv_sys_largefile_source" != no; then cat >>confdefs.h <<EOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source EOF fi rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. -echo "$as_me:5205: checking for fseeko" >&5 +echo "$as_me:5773: checking for fseeko" >&5 echo $ECHO_N "checking for fseeko... $ECHO_C" >&6 if test "${ac_cv_func_fseeko+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 5211 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5779 "configure" #include "confdefs.h" #include <stdio.h> int main (void) { return fseeko && fseeko (stdin, 0, 0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5223: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:5791: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5226: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5229: \"$ac_try\"") >&5 + echo "$as_me:5794: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:5797: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5232: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5800: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_func_fseeko=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_func_fseeko=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:5242: result: $ac_cv_func_fseeko" >&5 +echo "$as_me:5810: result: $ac_cv_func_fseeko" >&5 echo "${ECHO_T}$ac_cv_func_fseeko" >&6 if test $ac_cv_func_fseeko = yes; then cat >>confdefs.h <<\EOF #define HAVE_FSEEKO 1 EOF fi # Normally we would collect these definitions in the config.h, # but (like _XOPEN_SOURCE), some environments rely on having these # defined before any of the system headers are included. Another # case comes up with C++, e.g., on AIX the compiler compiles the # header files by themselves before looking at the body files it is # told to compile. For ncurses, those header files do not include # the config.h if test "$ac_cv_sys_large_files" != no then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_LARGE_FILES" fi if test "$ac_cv_sys_largefile_source" != no then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_LARGEFILE_SOURCE" fi if test "$ac_cv_sys_file_offset_bits" != no then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" fi - echo "$as_me:5281: checking whether to use struct dirent64" >&5 + echo "$as_me:5849: checking whether to use struct dirent64" >&5 echo $ECHO_N "checking whether to use struct dirent64... $ECHO_C" >&6 if test "${cf_cv_struct_dirent64+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 5288 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 5856 "configure" #include "confdefs.h" #pragma GCC diagnostic error "-Wincompatible-pointer-types" #include <sys/types.h> #include <dirent.h> int main (void) { /* if transitional largefile support is setup, this is true */ extern struct dirent64 * readdir(DIR *); struct dirent64 *x = readdir((DIR *)0); struct dirent *y = readdir((DIR *)0); int z = x - y; + (void)z; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5310: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:5879: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5313: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5316: \"$ac_try\"") >&5 + echo "$as_me:5882: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:5885: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5319: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:5888: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_struct_dirent64=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_struct_dirent64=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:5330: result: $cf_cv_struct_dirent64" >&5 +echo "$as_me:5899: result: $cf_cv_struct_dirent64" >&5 echo "${ECHO_T}$cf_cv_struct_dirent64" >&6 test "$cf_cv_struct_dirent64" = yes && cat >>confdefs.h <<\EOF #define HAVE_STRUCT_DIRENT64 1 EOF fi -echo "$as_me:5339: checking for install-prefix" >&5 +echo "$as_me:5908: checking for install-prefix" >&5 echo $ECHO_N "checking for install-prefix... $ECHO_C" >&6 # Check whether --with-install-prefix or --without-install-prefix was given. if test "${with_install_prefix+set}" = set; then withval="$with_install_prefix" cf_opt_with_install_prefix=$withval else cf_opt_with_install_prefix=${DESTDIR:-no} fi; -echo "$as_me:5349: result: $cf_opt_with_install_prefix" >&5 +echo "$as_me:5918: result: $cf_opt_with_install_prefix" >&5 echo "${ECHO_T}$cf_opt_with_install_prefix" >&6 if test "$cf_opt_with_install_prefix" != no ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$cf_opt_with_install_prefix" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; -(.\${*prefix}*|.\${*dir}*) +(.\$\{*prefix\}*|.\$\{*dir\}*) eval cf_opt_with_install_prefix="$cf_opt_with_install_prefix" case ".$cf_opt_with_install_prefix" in (.NONE/*) - cf_opt_with_install_prefix=`echo $cf_opt_with_install_prefix | sed -e s%NONE%$cf_path_syntax%` + cf_opt_with_install_prefix=`echo "$cf_opt_with_install_prefix" | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) - cf_opt_with_install_prefix=`echo $cf_opt_with_install_prefix | sed -e s%NONE%$cf_path_syntax%` + cf_opt_with_install_prefix=`echo "$cf_opt_with_install_prefix" | sed -e s%NONE%$cf_path_syntax%` ;; (*) - { { echo "$as_me:5378: error: expected a pathname, not \"$cf_opt_with_install_prefix\"" >&5 + { { echo "$as_me:5947: error: expected a pathname, not \"$cf_opt_with_install_prefix\"" >&5 echo "$as_me: error: expected a pathname, not \"$cf_opt_with_install_prefix\"" >&2;} { (exit 1); exit 1; }; } ;; esac DESTDIR=$cf_opt_with_install_prefix fi -if ( test "$GCC" = yes || test "$GXX" = yes ) +if test -n "$with_screen" && test "x$with_screen" = "xpdcurses" then -echo "$as_me:5389: checking if you want to check for gcc warnings" >&5 -echo $ECHO_N "checking if you want to check for gcc warnings... $ECHO_C" >&6 + echo "$as_me:5958: checking for X" >&5 +echo $ECHO_N "checking for X... $ECHO_C" >&6 -# Check whether --with-warnings or --without-warnings was given. -if test "${with_warnings+set}" = set; then - withval="$with_warnings" - cf_opt_with_warnings=$withval -else - cf_opt_with_warnings=no -fi; -echo "$as_me:5399: result: $cf_opt_with_warnings" >&5 -echo "${ECHO_T}$cf_opt_with_warnings" >&6 -if test "$cf_opt_with_warnings" != no ; then +# Check whether --with-x or --without-x was given. +if test "${with_x+set}" = set; then + withval="$with_x" -if test "$GCC" = yes -then -cat > conftest.i <<EOF -#ifndef GCC_PRINTF -#define GCC_PRINTF 0 -#endif -#ifndef GCC_SCANF -#define GCC_SCANF 0 -#endif -#ifndef GCC_NORETURN -#define GCC_NORETURN /* nothing */ -#endif -#ifndef GCC_UNUSED -#define GCC_UNUSED /* nothing */ -#endif -EOF -if test "$GCC" = yes -then - { echo "$as_me:5421: checking for $CC __attribute__ directives..." >&5 -echo "$as_me: checking for $CC __attribute__ directives..." >&6;} -cat > conftest.$ac_ext <<EOF -#line 5424 "${as_me:-configure}" -#include "confdefs.h" -#include "conftest.h" -#include "conftest.i" -#if GCC_PRINTF -#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) -#else -#define GCC_PRINTFLIKE(fmt,var) /*nothing*/ -#endif -#if GCC_SCANF -#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) -#else -#define GCC_SCANFLIKE(fmt,var) /*nothing*/ -#endif -extern void wow(char *,...) GCC_SCANFLIKE(1,2); -extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; -extern void foo(void) GCC_NORETURN; -int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; } +fi; +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then + # Both variables are already set. + have_x=yes + else + if test "${ac_cv_have_x+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -fr conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + # Make sure to not put "make" in the Imakefile rules, since we grep it out. + cat >Imakefile <<'EOF' +acfindx: + @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' EOF - cf_printf_attribute=no - cf_scanf_attribute=no - for cf_attribute in scanf printf unused noreturn - do + if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + eval "`${MAKE-make} acfindx 2>/dev/null | grep -v make`" + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /lib) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -fr conftest.dir +fi -cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include - cf_directive="__attribute__(($cf_attribute))" - echo "checking for $CC $cf_directive" 1>&5 +/opt/local/include +/opt/X11/include - case $cf_attribute in - (printf) - cf_printf_attribute=yes - cat >conftest.h <<EOF -#define GCC_$cf_ATTRIBUTE 1 -EOF - ;; - (scanf) - cf_scanf_attribute=yes - cat >conftest.h <<EOF -#define GCC_$cf_ATTRIBUTE 1 -EOF - ;; - (*) - cat >conftest.h <<EOF -#define GCC_$cf_ATTRIBUTE $cf_directive -EOF - ;; - esac +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 - if { (eval echo "$as_me:5473: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:5476: \$? = $ac_status" >&5 - (exit $ac_status); }; then - test -n "$verbose" && echo "$as_me:5478: result: ... $cf_attribute" >&5 -echo "${ECHO_T}... $cf_attribute" >&6 - cat conftest.h >>confdefs.h - case $cf_attribute in - (noreturn) +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include -cat >>confdefs.h <<EOF -#define GCC_NORETURN $cf_directive -EOF +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 - ;; - (printf) - cf_value='/* nothing */' - if test "$cf_printf_attribute" != no ; then - cf_value='__attribute__((format(printf,fmt,var)))' +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 -cat >>confdefs.h <<\EOF -#define GCC_PRINTF 1 -EOF +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include - fi +/usr/openwin/include +/usr/openwin/share/include' -cat >>confdefs.h <<EOF -#define GCC_PRINTFLIKE(fmt,var) $cf_value -EOF +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Intrinsic.h. + # First, try using that file with no special directory specified. + cat >"conftest.$ac_ext" <<_ACEOF +#line 6062 "configure" +#include "confdefs.h" +#include <X11/Intrinsic.h> +_ACEOF +if { (eval echo "$as_me:6066: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:6072: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # We can compile using X headers with no special include directory. +ac_x_includes= +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Intrinsic.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err "conftest.$ac_ext" +fi # $ac_x_includes = no - ;; - (scanf) - cf_value='/* nothing */' - if test "$cf_scanf_attribute" != no ; then - cf_value='__attribute__((format(scanf,fmt,var)))' +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lXt $LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 6105 "configure" +#include "confdefs.h" +#include <X11/Intrinsic.h> +int +main (void) +{ +XtMalloc (0) + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6117: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6120: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6123: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6126: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +LIBS=$ac_save_LIBS +for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib dll; do + if test -r "$ac_dir/libXt.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi # $ac_x_libraries = no -cat >>confdefs.h <<\EOF -#define GCC_SCANF 1 -EOF +if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then + # Didn't find X anywhere. Cache the known absence of X. + ac_cv_have_x="have_x=no" +else + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" +fi +fi - fi + fi + eval "$ac_cv_have_x" +fi # $with_x != no -cat >>confdefs.h <<EOF -#define GCC_SCANFLIKE(fmt,var) $cf_value -EOF +if test "$have_x" != yes; then + echo "$as_me:6164: result: $have_x" >&5 +echo "${ECHO_T}$have_x" >&6 + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$x_includes ac_x_libraries=$x_libraries" + echo "$as_me:6174: result: libraries $x_libraries, headers $x_includes" >&5 +echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 +fi - ;; - (unused) + if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. -cat >>confdefs.h <<EOF -#define GCC_UNUSED $cf_directive +cat >>confdefs.h <<\EOF +#define X_DISPLAY_MISSING 1 EOF - ;; - esac - fi - done + X_CFLAGS= + X_PRE_LIBS= + X_LIBS= + X_EXTRA_LIBS= else - fgrep define conftest.i >>confdefs.h -fi -rm -rf conftest* -fi - -INTEL_COMPILER=no + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi -if test "$GCC" = yes ; then - case $host_os in - (linux*|gnu*) - echo "$as_me:5542: checking if this is really Intel C compiler" >&5 -echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 - cf_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -no-gcc" - cat >conftest.$ac_ext <<_ACEOF -#line 5547 "configure" + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + case `(uname -sr) 2>/dev/null` in + "SunOS 5"*) + echo "$as_me:6201: checking whether -R must be followed by a space" >&5 +echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + cat >"conftest.$ac_ext" <<_ACEOF +#line 6205 "configure" #include "confdefs.h" int main (void) { -#ifdef __INTEL_COMPILER -#else -make an error -#endif - ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5564: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6217: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5567: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5570: \"$ac_try\"") >&5 + echo "$as_me:6220: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6223: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5573: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - INTEL_COMPILER=yes -cf_save_CFLAGS="$cf_save_CFLAGS -we147" - + echo "$as_me:6226: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CFLAGS="$cf_save_CFLAGS" - echo "$as_me:5584: result: $INTEL_COMPILER" >&5 -echo "${ECHO_T}$INTEL_COMPILER" >&6 - ;; - esac +cat "conftest.$ac_ext" >&5 +ac_R_nospace=no fi - -CLANG_COMPILER=no - -if test "$GCC" = yes ; then - echo "$as_me:5593: checking if this is really Clang C compiler" >&5 -echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6 - cf_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Qunused-arguments" - cat >conftest.$ac_ext <<_ACEOF -#line 5598 "configure" +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + if test $ac_R_nospace = yes; then + echo "$as_me:6236: result: no" >&5 +echo "${ECHO_T}no" >&6 + X_LIBS="$X_LIBS -R$x_libraries" + else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat >"conftest.$ac_ext" <<_ACEOF +#line 6242 "configure" #include "confdefs.h" int main (void) { -#ifdef __clang__ -#else -make an error -#endif - ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:5615: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6254: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5618: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5621: \"$ac_try\"") >&5 + echo "$as_me:6257: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6260: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5624: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - CLANG_COMPILER=yes -cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" - + echo "$as_me:6263: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_R_space=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CFLAGS="$cf_save_CFLAGS" - echo "$as_me:5635: result: $CLANG_COMPILER" >&5 -echo "${ECHO_T}$CLANG_COMPILER" >&6 +cat "conftest.$ac_ext" >&5 +ac_R_space=no fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + if test $ac_R_space = yes; then + echo "$as_me:6273: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + X_LIBS="$X_LIBS -R $x_libraries" + else + echo "$as_me:6277: result: neither works" >&5 +echo "${ECHO_T}neither works" >&6 + fi + fi + LIBS=$ac_xsave_LIBS + esac + fi -cat > conftest.$ac_ext <<EOF -#line 5640 "${as_me:-configure}" -int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; } -EOF - -if test "$INTEL_COMPILER" = yes -then -# The "-wdXXX" options suppress warnings: -# remark #1419: external declaration in primary source file -# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) -# remark #1684: conversion from pointer to same-sized integral type (potential portability problem) -# remark #193: zero used for undefined preprocessing identifier -# remark #593: variable "curs_sb_left_arrow" was set but never used -# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits -# remark #869: parameter "tw" was never referenced -# remark #981: operands are evaluated in unspecified order -# warning #279: controlling expression is constant + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. - { echo "$as_me:5657: checking for $CC warning options..." >&5 -echo "$as_me: checking for $CC warning options..." >&6;} - cf_save_CFLAGS="$CFLAGS" - EXTRA_CFLAGS="-Wall" - for cf_opt in \ - wd1419 \ - wd1683 \ - wd1684 \ - wd193 \ - wd593 \ - wd279 \ - wd810 \ - wd869 \ - wd981 - do - CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" - if { (eval echo "$as_me:5673: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:5676: \$? = $ac_status" >&5 - (exit $ac_status); }; then - test -n "$verbose" && echo "$as_me:5678: result: ... -$cf_opt" >&5 -echo "${ECHO_T}... -$cf_opt" >&6 - EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" - fi - done - CFLAGS="$cf_save_CFLAGS" + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat >"conftest.$ac_ext" <<_ACEOF +#line 6297 "configure" +#include "confdefs.h" -elif test "$GCC" = yes -then - { echo "$as_me:5687: checking for $CC warning options..." >&5 -echo "$as_me: checking for $CC warning options..." >&6;} - cf_save_CFLAGS="$CFLAGS" - EXTRA_CFLAGS= - cf_warn_CONST="" - test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" - cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" - test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= - for cf_opt in W Wall \ - Wbad-function-cast \ - Wcast-align \ - Wcast-qual \ - Wdeclaration-after-statement \ - Wextra \ - Winline \ - Wmissing-declarations \ - Wmissing-prototypes \ - Wnested-externs \ - Wpointer-arith \ - Wshadow \ - Wstrict-prototypes \ - Wundef $cf_gcc_warnings $cf_warn_CONST - do - CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" - if { (eval echo "$as_me:5711: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XOpenDisplay (); +int +main (void) +{ +XOpenDisplay (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6316: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5714: \$? = $ac_status" >&5 - (exit $ac_status); }; then - test -n "$verbose" && echo "$as_me:5716: result: ... -$cf_opt" >&5 -echo "${ECHO_T}... -$cf_opt" >&6 - case $cf_opt in - (Wcast-qual) - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-DXTSTRINGDEFINES" - - ;; - (Winline) - case $GCC_VERSION in - ([34].*) - test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 - -echo "${as_me:-configure}:5730: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 - - continue;; - esac - ;; - (Wpointer-arith) - case $GCC_VERSION in - ([12].*) - test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 - -echo "${as_me:-configure}:5740: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 + echo "$as_me:6319: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6322: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6325: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +echo "$as_me:6331: checking for dnet_ntoa in -ldnet" >&5 +echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6339 "configure" +#include "confdefs.h" - continue;; - esac - ;; - esac - EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" - fi - done - CFLAGS="$cf_save_CFLAGS" +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dnet_ntoa (); +int +main (void) +{ +dnet_ntoa (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6358: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6361: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6364: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6367: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_dnet_dnet_ntoa=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_dnet_dnet_ntoa=no fi -rm -rf conftest* - +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi +echo "$as_me:6378: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 +if test "$ac_cv_lib_dnet_dnet_ntoa" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi -echo "$as_me:5756: checking if you want to use pkg-config" >&5 -echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6 - -# Check whether --with-pkg-config or --without-pkg-config was given. -if test "${with_pkg_config+set}" = set; then - withval="$with_pkg_config" - cf_pkg_config=$withval + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + echo "$as_me:6385: checking for dnet_ntoa in -ldnet_stub" >&5 +echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cf_pkg_config=yes -fi; -echo "$as_me:5766: result: $cf_pkg_config" >&5 -echo "${ECHO_T}$cf_pkg_config" >&6 - -case $cf_pkg_config in -(no) - PKG_CONFIG=none - ;; -(yes) + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6393 "configure" +#include "confdefs.h" -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -echo "$as_me:5778: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dnet_ntoa (); +int +main (void) +{ +dnet_ntoa (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6412: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6415: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6418: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6421: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_dnet_stub_dnet_ntoa=yes else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" - echo "$as_me:5795: found $ac_dir/$ac_word" >&5 - break + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_dnet_stub_dnet_ntoa=no fi -done - - ;; -esac +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG - -if test -n "$PKG_CONFIG"; then - echo "$as_me:5806: result: $PKG_CONFIG" >&5 -echo "${ECHO_T}$PKG_CONFIG" >&6 -else - echo "$as_me:5809: result: no" >&5 -echo "${ECHO_T}no" >&6 +echo "$as_me:6432: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 +if test "$ac_cv_lib_dnet_stub_dnet_ntoa" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi + fi fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -echo "$as_me:5818: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + echo "$as_me:6451: checking for gethostbyname" >&5 +echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 +if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word" - echo "$as_me:5835: found $ac_dir/$ac_word" >&5 - break -fi -done + cat >"conftest.$ac_ext" <<_ACEOF +#line 6457 "configure" +#include "confdefs.h" +#define gethostbyname autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef gethostbyname - test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none" - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +#ifdef __cplusplus +extern "C" +#endif -if test -n "$ac_pt_PKG_CONFIG"; then - echo "$as_me:5847: result: $ac_pt_PKG_CONFIG" >&5 -echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname (void); + +int +main (void) +{ + +/* The GNU C library defines stubs 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_gethostbyname) || defined (__stub___gethostbyname) +#error found stub for gethostbyname +#endif + + return gethostbyname (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6488: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6491: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6494: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6497: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_gethostbyname=yes else - echo "$as_me:5850: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_func_gethostbyname=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi +echo "$as_me:6507: result: $ac_cv_func_gethostbyname" >&5 +echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 - PKG_CONFIG=$ac_pt_PKG_CONFIG + if test $ac_cv_func_gethostbyname = no; then + echo "$as_me:6511: checking for gethostbyname in -lnsl" >&5 +echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6519 "configure" +#include "confdefs.h" - ;; -(*) - PKG_CONFIG=$withval - ;; -esac - -test -z "$PKG_CONFIG" && PKG_CONFIG=none -if test "$PKG_CONFIG" != none ; then - -if test "x$prefix" != xNONE; then - cf_path_syntax="$prefix" +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname (); +int +main (void) +{ +gethostbyname (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6538: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6541: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6544: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6547: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_nsl_gethostbyname=yes else - cf_path_syntax="$ac_default_prefix" + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_nsl_gethostbyname=no fi - -case ".$PKG_CONFIG" in -(.\$\(*\)*|.\'*\'*) - ;; -(..|./*|.\\*) - ;; -(.[a-zA-Z]:[\\/]*) # OS/2 EMX - ;; -(.\${*prefix}*|.\${*dir}*) - eval PKG_CONFIG="$PKG_CONFIG" - case ".$PKG_CONFIG" in - (.NONE/*) - PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` - ;; - esac - ;; -(.no|.NONE/*) - PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` - ;; -(*) - { { echo "$as_me:5893: error: expected a pathname, not \"$PKG_CONFIG\"" >&5 -echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;} - { (exit 1); exit 1; }; } - ;; -esac - -elif test "x$cf_pkg_config" != xno ; then - { echo "$as_me:5900: WARNING: pkg-config is not installed" >&5 -echo "$as_me: WARNING: pkg-config is not installed" >&2;} +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:6558: result: $ac_cv_lib_nsl_gethostbyname" >&5 +echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 +if test "$ac_cv_lib_nsl_gethostbyname" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi -echo "$as_me:5904: checking for this package's name" >&5 -echo $ECHO_N "checking for this package's name... $ECHO_C" >&6 + if test $ac_cv_lib_nsl_gethostbyname = no; then + echo "$as_me:6565: checking for gethostbyname in -lbsd" >&5 +echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6573 "configure" +#include "confdefs.h" -# Check whether --with-package or --without-package was given. -if test "${with_package+set}" = set; then - withval="$with_package" - PACKAGE=$withval +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname (); +int +main (void) +{ +gethostbyname (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6592: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6595: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6598: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6601: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_bsd_gethostbyname=yes else - PACKAGE=dialog -fi; -echo "$as_me:5914: result: $PACKAGE" >&5 -echo "${ECHO_T}$PACKAGE" >&6 + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_bsd_gethostbyname=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:6612: result: $ac_cv_lib_bsd_gethostbyname" >&5 +echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 +if test "$ac_cv_lib_bsd_gethostbyname" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi -if test -f $srcdir/VERSION ; then - echo "$as_me:5918: checking for package version" >&5 -echo $ECHO_N "checking for package version... $ECHO_C" >&6 + fi + fi - # if there are not enough fields, cut returns the last one... - cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1` - cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2` - cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3` + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the nameserver (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + echo "$as_me:6628: checking for connect" >&5 +echo $ECHO_N "checking for connect... $ECHO_C" >&6 +if test "${ac_cv_func_connect+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 6634 "configure" +#include "confdefs.h" +#define connect autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef connect - # this is how CF_BUNDLED_INTL uses $VERSION: - VERSION="$cf_field1" +#ifdef __cplusplus +extern "C" +#endif - VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` - test -z "$VERSION_MAJOR" && { { echo "$as_me:5930: error: missing major-version" >&5 -echo "$as_me: error: missing major-version" >&2;} - { (exit 1); exit 1; }; } +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char connect (void); - VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'` - test -z "$VERSION_MINOR" && { { echo "$as_me:5935: error: missing minor-version" >&5 -echo "$as_me: error: missing minor-version" >&2;} - { (exit 1); exit 1; }; } +int +main (void) +{ - echo "$as_me:5939: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5 -echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6 +/* The GNU C library defines stubs 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_connect) || defined (__stub___connect) +#error found stub for connect +#endif - echo "$as_me:5942: checking for package patch date" >&5 -echo $ECHO_N "checking for package patch date... $ECHO_C" >&6 - VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[^-]*-//'` - case .$VERSION_PATCH in - (.) - { { echo "$as_me:5947: error: missing patch-date $VERSION_PATCH" >&5 -echo "$as_me: error: missing patch-date $VERSION_PATCH" >&2;} - { (exit 1); exit 1; }; } - ;; - (.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) - ;; - (*) - { { echo "$as_me:5954: error: illegal patch-date $VERSION_PATCH" >&5 -echo "$as_me: error: illegal patch-date $VERSION_PATCH" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - echo "$as_me:5959: result: $VERSION_PATCH" >&5 -echo "${ECHO_T}$VERSION_PATCH" >&6 + return connect (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6665: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6668: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6671: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6674: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_connect=yes else - { { echo "$as_me:5962: error: did not find $srcdir/VERSION" >&5 -echo "$as_me: error: did not find $srcdir/VERSION" >&2;} - { (exit 1); exit 1; }; } + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_func_connect=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi +echo "$as_me:6684: result: $ac_cv_func_connect" >&5 +echo "${ECHO_T}$ac_cv_func_connect" >&6 -# show the actual data that we have for versions: -test -n "$verbose" && echo " ABI VERSION $VERSION" 1>&6 + if test $ac_cv_func_connect = no; then + echo "$as_me:6688: checking for connect in -lsocket" >&5 +echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 +if test "${ac_cv_lib_socket_connect+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6696 "configure" +#include "confdefs.h" -echo "${as_me:-configure}:5970: testing ABI VERSION $VERSION ..." 1>&5 +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char connect (); +int +main (void) +{ +connect (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6715: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6718: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6721: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6724: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_socket_connect=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_socket_connect=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:6735: result: $ac_cv_lib_socket_connect" >&5 +echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 +if test "$ac_cv_lib_socket_connect" = yes; then + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi -test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6 + fi -echo "${as_me:-configure}:5974: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5 + # Guillermo Gomez says -lposix is necessary on A/UX. + echo "$as_me:6744: checking for remove" >&5 +echo $ECHO_N "checking for remove... $ECHO_C" >&6 +if test "${ac_cv_func_remove+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 6750 "configure" +#include "confdefs.h" +#define remove autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef remove -test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6 +#ifdef __cplusplus +extern "C" +#endif -echo "${as_me:-configure}:5978: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5 +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char remove (void); -test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6 +int +main (void) +{ -echo "${as_me:-configure}:5982: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5 +/* The GNU C library defines stubs 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_remove) || defined (__stub___remove) +#error found stub for remove +#endif - cf_PACKAGE=dialog - PACKAGE=$PACKAGE + return remove (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6781: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6784: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6787: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6790: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_remove=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_func_remove=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi +echo "$as_me:6800: result: $ac_cv_func_remove" >&5 +echo "${ECHO_T}$ac_cv_func_remove" >&6 -cat >>confdefs.h <<EOF -#define PACKAGE "$PACKAGE" -EOF + if test $ac_cv_func_remove = no; then + echo "$as_me:6804: checking for remove in -lposix" >&5 +echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 +if test "${ac_cv_lib_posix_remove+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6812 "configure" +#include "confdefs.h" -cf_PACKAGE=`echo "$cf_PACKAGE" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char remove (); +int +main (void) +{ +remove (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6831: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6834: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6837: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6840: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_posix_remove=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_posix_remove=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:6851: result: $ac_cv_lib_posix_remove" >&5 +echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 +if test "$ac_cv_lib_posix_remove" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi - cat >>confdefs.h <<EOF -#define ${cf_PACKAGE}_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}" -EOF + fi - cat >>confdefs.h <<EOF -#define ${cf_PACKAGE}_PATCHDATE ${VERSION_PATCH} -EOF + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + echo "$as_me:6860: checking for shmat" >&5 +echo $ECHO_N "checking for shmat... $ECHO_C" >&6 +if test "${ac_cv_func_shmat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 6866 "configure" +#include "confdefs.h" +#define shmat autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef shmat -CFG_ROOTNAME=$PACKAGE -HDR_ROOTNAME=$PACKAGE -LIB_ROOTNAME=$PACKAGE +#ifdef __cplusplus +extern "C" +#endif -echo "$as_me:6005: checking if we should install dlg_XXX headers to subdirectory" >&5 -echo $ECHO_N "checking if we should install dlg_XXX headers to subdirectory... $ECHO_C" >&6 +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shmat (void); -# Check whether --enable-header-subdir or --disable-header-subdir was given. -if test "${enable_header_subdir+set}" = set; then - enableval="$enable_header_subdir" - SUB_INC=$enableval -else - SUB_INC=no -fi; -echo "$as_me:6015: result: $SUB_INC" >&5 -echo "${ECHO_T}$SUB_INC" >&6 +int +main (void) +{ -case "x${with_man2html}" in -(xno) - cf_man2html=no - ;; -(x|xyes) - # Extract the first word of "man2html", so it can be a program name with args. -set dummy man2html; ac_word=$2 -echo "$as_me:6025: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_cf_man2html+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +/* The GNU C library defines stubs 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_shmat) || defined (__stub___shmat) +#error found stub for shmat +#endif + + return shmat (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6897: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6900: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6903: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6906: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_shmat=yes else - case $cf_man2html in - [\\/]* | ?:[\\/]*) - ac_cv_path_cf_man2html="$cf_man2html" # Let the user override the test with a path. - ;; - *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_cf_man2html="$ac_dir/$ac_word" - echo "$as_me:6042: found $ac_dir/$ac_word" >&5 - break + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_func_shmat=no fi -done - - test -z "$ac_cv_path_cf_man2html" && ac_cv_path_cf_man2html="no" - ;; -esac +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -cf_man2html=$ac_cv_path_cf_man2html +echo "$as_me:6916: result: $ac_cv_func_shmat" >&5 +echo "${ECHO_T}$ac_cv_func_shmat" >&6 -if test -n "$cf_man2html"; then - echo "$as_me:6054: result: $cf_man2html" >&5 -echo "${ECHO_T}$cf_man2html" >&6 + if test $ac_cv_func_shmat = no; then + echo "$as_me:6920: checking for shmat in -lipc" >&5 +echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 +if test "${ac_cv_lib_ipc_shmat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me:6057: result: no" >&5 -echo "${ECHO_T}no" >&6 + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6928 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shmat (); +int +main (void) +{ +shmat (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:6947: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6950: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:6953: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6956: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_ipc_shmat=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_ipc_shmat=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:6967: result: $ac_cv_lib_ipc_shmat" >&5 +echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 +if test "$ac_cv_lib_ipc_shmat" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi - case "x$cf_man2html" in - (x/*) - echo "$as_me:6063: checking for the modified Earl Hood script" >&5 -echo $ECHO_N "checking for the modified Earl Hood script... $ECHO_C" >&6 - if ( $cf_man2html -help 2>&1 | grep 'Make an index of headers at the end' >/dev/null ) - then - cf_man2html_ok=yes - else - cf_man2html=no - cf_man2html_ok=no - fi - echo "$as_me:6072: result: $cf_man2html_ok" >&5 -echo "${ECHO_T}$cf_man2html_ok" >&6 - ;; - (*) - cf_man2html=no - ;; - esac -esac + fi + fi -echo "$as_me:6081: checking for program to convert manpage to html" >&5 -echo $ECHO_N "checking for program to convert manpage to html... $ECHO_C" >&6 + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + echo "$as_me:6985: checking for IceConnectionNumber in -lICE" >&5 +echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 6993 "configure" +#include "confdefs.h" -# Check whether --with-man2html or --without-man2html was given. -if test "${with_man2html+set}" = set; then - withval="$with_man2html" - cf_man2html=$withval +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char IceConnectionNumber (); +int +main (void) +{ +IceConnectionNumber (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:7012: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:7015: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:7018: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:7021: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_ICE_IceConnectionNumber=yes else - cf_man2html=$cf_man2html -fi; + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:7032: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 +if test "$ac_cv_lib_ICE_IceConnectionNumber" = yes; then + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi -cf_with_groff=no + LDFLAGS=$ac_save_LDFLAGS -case $cf_man2html in -(yes) - echo "$as_me:6096: result: man2html" >&5 -echo "${ECHO_T}man2html" >&6 - # Extract the first word of "man2html", so it can be a program name with args. -set dummy man2html; ac_word=$2 -echo "$as_me:6100: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_cf_man2html+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $cf_man2html in - [\\/]* | ?:[\\/]*) - ac_cv_path_cf_man2html="$cf_man2html" # Let the user override the test with a path. - ;; - *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_cf_man2html="$ac_dir/$ac_word" - echo "$as_me:6117: found $ac_dir/$ac_word" >&5 - break fi -done - test -z "$ac_cv_path_cf_man2html" && ac_cv_path_cf_man2html="no" - ;; -esac fi -cf_man2html=$ac_cv_path_cf_man2html -if test -n "$cf_man2html"; then - echo "$as_me:6129: result: $cf_man2html" >&5 -echo "${ECHO_T}$cf_man2html" >&6 -else - echo "$as_me:6132: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi +if test "$GCC" = yes || test "$GXX" = yes +then - ;; -(no|groff|*/groff*) - cf_with_groff=yes - cf_man2html=$GROFF_PATH - echo "$as_me:6140: result: $cf_man2html" >&5 -echo "${ECHO_T}$cf_man2html" >&6 - ;; -(*) - echo "$as_me:6144: result: $cf_man2html" >&5 -echo "${ECHO_T}$cf_man2html" >&6 - ;; -esac +if test "$GCC" = yes || test "$GXX" = yes +then + case $CFLAGS in + (*-Werror=*) + test -n "$verbose" && echo " repairing CFLAGS: $CFLAGS" 1>&6 -MAN2HTML_TEMP="man2html.tmp" - cat >$MAN2HTML_TEMP <<CF_EOF -#!$SHELL -# Temporary script generated by CF_WITH_MAN2HTML -# Convert inputs to html, sending result to standard output. -# -# Parameters: -# \${1} = rootname of file to convert -# \${2} = suffix of file to convert, e.g., "1" -# \${3} = macros to use, e.g., "man" -# -ROOT=\$1 -TYPE=\$2 -MACS=\$3 +echo "${as_me:-configure}:7053: testing repairing CFLAGS: $CFLAGS ..." 1>&5 -unset LANG -unset LC_ALL -unset LC_CTYPE -unset LANGUAGE -GROFF_NO_SGR=stupid -export GROFF_NO_SGR + cf_temp_flags= + for cf_temp_scan in $CFLAGS + do + case "x$cf_temp_scan" in + (x-Werror=*) -CF_EOF + test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS " + EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan" -if test "x$cf_with_groff" = xyes -then - MAN2HTML_NOTE="$GROFF_NOTE" - MAN2HTML_PATH="$GROFF_PATH" - cat >>$MAN2HTML_TEMP <<CF_EOF -$SHELL -c "$TBL_PATH \${ROOT}.\${TYPE} | $GROFF_PATH -P -o0 -I\${ROOT}_ -Thtml -\${MACS}" -CF_EOF -else - MAN2HTML_NOTE="" + ;; + (*) -if test "x$prefix" != xNONE; then - cf_path_syntax="$prefix" -else - cf_path_syntax="$ac_default_prefix" -fi + test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " + cf_temp_flags="${cf_temp_flags}$cf_temp_scan" + + ;; + esac + done + CFLAGS="$cf_temp_flags" + test -n "$verbose" && echo " ... fixed $CFLAGS" 1>&6 + +echo "${as_me:-configure}:7076: testing ... fixed $CFLAGS ..." 1>&5 + + test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6 + +echo "${as_me:-configure}:7080: testing ... extra $EXTRA_CFLAGS ..." 1>&5 -case ".$cf_man2html" in -(.\$\(*\)*|.\'*\'*) - ;; -(..|./*|.\\*) - ;; -(.[a-zA-Z]:[\\/]*) # OS/2 EMX - ;; -(.\${*prefix}*|.\${*dir}*) - eval cf_man2html="$cf_man2html" - case ".$cf_man2html" in - (.NONE/*) - cf_man2html=`echo $cf_man2html | sed -e s%NONE%$cf_path_syntax%` ;; esac - ;; -(.no|.NONE/*) - cf_man2html=`echo $cf_man2html | sed -e s%NONE%$cf_path_syntax%` - ;; -(*) - { { echo "$as_me:6208: error: expected a pathname, not \"$cf_man2html\"" >&5 -echo "$as_me: error: expected a pathname, not \"$cf_man2html\"" >&2;} - { (exit 1); exit 1; }; } - ;; -esac +fi - MAN2HTML_PATH="$cf_man2html" - echo "$as_me:6215: checking for $cf_man2html top/bottom margins" >&5 -echo $ECHO_N "checking for $cf_man2html top/bottom margins... $ECHO_C" >&6 +if test "$GCC" = yes || test "$GXX" = yes +then + case $CPPFLAGS in + (*-Werror=*) + test -n "$verbose" && echo " repairing CPPFLAGS: $CPPFLAGS" 1>&6 - # for this example, expect 3 lines of content, the remainder is head/foot - cat >conftest.in <<CF_EOF -.TH HEAD1 HEAD2 HEAD3 HEAD4 HEAD5 -.SH SECTION -MARKER -CF_EOF +echo "${as_me:-configure}:7092: testing repairing CPPFLAGS: $CPPFLAGS ..." 1>&5 - LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C $NROFF_PATH -man conftest.in >conftest.out + cf_temp_flags= + for cf_temp_scan in $CPPFLAGS + do + case "x$cf_temp_scan" in + (x-Werror=*) - cf_man2html_1st=`fgrep -n MARKER conftest.out |sed -e 's/^[^0-9]*://' -e 's/:.*//'` - cf_man2html_top=`expr $cf_man2html_1st - 2` - cf_man2html_bot=`wc -l conftest.out |sed -e 's/[^0-9]//g'` - cf_man2html_bot=`expr $cf_man2html_bot - 2 - $cf_man2html_top` - cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot" + test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS " + EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan" - echo "$as_me:6233: result: $cf_man2html_top_bot" >&5 -echo "${ECHO_T}$cf_man2html_top_bot" >&6 + ;; + (*) - echo "$as_me:6236: checking for pagesize to use" >&5 -echo $ECHO_N "checking for pagesize to use... $ECHO_C" >&6 - for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 - do - cat >>conftest.in <<CF_EOF -.nf -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -CF_EOF - done + test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " + cf_temp_flags="${cf_temp_flags}$cf_temp_scan" - LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C $NROFF_PATH -man conftest.in >conftest.out - cf_man2html_page=`fgrep -n HEAD1 conftest.out |tail -n 1 |sed -e 's/^[^0-9]*://' -e 's/:.*//'` - test -z "$cf_man2html_page" && cf_man2html_page=99999 - test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999 + ;; + esac + done + CPPFLAGS="$cf_temp_flags" + test -n "$verbose" && echo " ... fixed $CPPFLAGS" 1>&6 - rm -rf conftest* - echo "$as_me:6261: result: $cf_man2html_page" >&5 -echo "${ECHO_T}$cf_man2html_page" >&6 +echo "${as_me:-configure}:7115: testing ... fixed $CPPFLAGS ..." 1>&5 - cat >>$MAN2HTML_TEMP <<CF_EOF -: \${MAN2HTML_PATH=$MAN2HTML_PATH} -MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title="\$ROOT\(\$TYPE\)" -compress -pgsize $cf_man2html_page" -case \${TYPE} in -(ms) - $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS - ;; -(*) - $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS - ;; -esac -CF_EOF + test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6 + +echo "${as_me:-configure}:7119: testing ... extra $EXTRA_CFLAGS ..." 1>&5 + + ;; + esac fi -chmod 700 $MAN2HTML_TEMP +if test "$GCC" = yes || test "$GXX" = yes +then + case $LDFLAGS in + (*-Werror=*) + test -n "$verbose" && echo " repairing LDFLAGS: $LDFLAGS" 1>&6 -EXTRAOBJS="" +echo "${as_me:-configure}:7131: testing repairing LDFLAGS: $LDFLAGS ..." 1>&5 -echo "$as_me:6282: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6288 "configure" -#include "confdefs.h" -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> + cf_temp_flags= + for cf_temp_scan in $LDFLAGS + do + case "x$cf_temp_scan" in + (x-Werror=*) -_ACEOF -if { (eval echo "$as_me:6296: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:6302: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_header_stdc=no -fi -rm -f conftest.err conftest.$ac_ext + test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS " + EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan" -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -#line 6324 "configure" -#include "confdefs.h" -#include <string.h> + ;; + (*) -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -rf conftest* + test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " + cf_temp_flags="${cf_temp_flags}$cf_temp_scan" -fi + ;; + esac + done + LDFLAGS="$cf_temp_flags" + test -n "$verbose" && echo " ... fixed $LDFLAGS" 1>&6 -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -#line 6342 "configure" -#include "confdefs.h" -#include <stdlib.h> +echo "${as_me:-configure}:7154: testing ... fixed $LDFLAGS ..." 1>&5 -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -rf conftest* + test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6 +echo "${as_me:-configure}:7158: testing ... extra $EXTRA_CFLAGS ..." 1>&5 + + ;; + esac fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : +echo "$as_me:7164: checking if you want to turn on gcc warnings" >&5 +echo $ECHO_N "checking if you want to turn on gcc warnings... $ECHO_C" >&6 + +# Check whether --enable-warnings or --disable-warnings was given. +if test "${enable_warnings+set}" = set; then + enableval="$enable_warnings" + test "$enableval" != yes && enableval=no + if test "$enableval" != "no" ; then + enable_warnings=yes + else + enable_warnings=no + fi else - cat >conftest.$ac_ext <<_ACEOF -#line 6363 "configure" + enableval=no + enable_warnings=no + +fi; +echo "$as_me:7181: result: $enable_warnings" >&5 +echo "${ECHO_T}$enable_warnings" >&6 +if test "$enable_warnings" = "yes" +then + +if test "x$have_x" = xyes; then + +cf_save_LIBS_CF_CONST_X_STRING="$LIBS" +cf_save_CFLAGS_CF_CONST_X_STRING="$CFLAGS" +cf_save_CPPFLAGS_CF_CONST_X_STRING="$CPPFLAGS" +LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}" +for cf_X_CFLAGS in $X_CFLAGS +do + case "x$cf_X_CFLAGS" in + x-[IUD]*) + CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS" + ;; + *) + CFLAGS="$CFLAGS $cf_X_CFLAGS" + ;; + esac +done + +cat >"conftest.$ac_ext" <<_ACEOF +#line 7205 "configure" #include "confdefs.h" -#include <ctype.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +#include <stdlib.h> +#include <X11/Intrinsic.h> + int main (void) { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - $ac_main_return(2); - $ac_main_return (0); +String foo = malloc(1); (void)foo + ; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:6389: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:7220: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6392: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:6394: \"$ac_try\"") >&5 + echo "$as_me:7223: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:7226: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6397: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:7229: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + +echo "$as_me:7232: checking for X11/Xt const-feature" >&5 +echo $ECHO_N "checking for X11/Xt const-feature... $ECHO_C" >&6 +if test "${cf_cv_const_x_string+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_header_stdc=no -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:6410: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 -if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF + cat >"conftest.$ac_ext" <<_ACEOF +#line 7239 "configure" +#include "confdefs.h" -fi +#define _CONST_X_STRING /* X11R7.8 (perhaps) */ +#undef XTSTRINGDEFINES /* X11R5 and later */ +#include <stdlib.h> +#include <X11/Intrinsic.h> -echo "$as_me:6420: checking for inline" >&5 -echo $ECHO_N "checking for inline... $ECHO_C" >&6 -if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat >conftest.$ac_ext <<_ACEOF -#line 6428 "configure" -#include "confdefs.h" -#ifndef __cplusplus -static $ac_kw int static_foo () {return 0; } -$ac_kw int foo () {return 0; } -#endif - -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:6437: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:6440: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6443: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6446: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_inline=$ac_kw; break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -done - -fi -echo "$as_me:6457: result: $ac_cv_c_inline" >&5 -echo "${ECHO_T}$ac_cv_c_inline" >&6 -case $ac_cv_c_inline in - inline | yes) ;; - no) -cat >>confdefs.h <<\EOF -#define inline -EOF - ;; - *) cat >>confdefs.h <<EOF -#define inline $ac_cv_c_inline -EOF - ;; -esac - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:6478: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6484 "configure" -#include "confdefs.h" -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:6490: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:6493: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6496: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6499: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -eval "$as_ac_Header=no" -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:6509: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -EOF - -fi -done - -echo "$as_me:6519: checking for off_t" >&5 -echo $ECHO_N "checking for off_t... $ECHO_C" >&6 -if test "${ac_cv_type_off_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6525 "configure" -#include "confdefs.h" -$ac_includes_default -int -main (void) -{ -if ((off_t *) 0) - return 0; -if (sizeof (off_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:6540: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:6543: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6546: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6549: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_off_t=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_type_off_t=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:6559: result: $ac_cv_type_off_t" >&5 -echo "${ECHO_T}$ac_cv_type_off_t" >&6 -if test $ac_cv_type_off_t = yes; then - : -else - -cat >>confdefs.h <<EOF -#define off_t long -EOF - -fi - -echo "$as_me:6571: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6 -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6577 "configure" -#include "confdefs.h" -$ac_includes_default int main (void) { -if ((size_t *) 0) - return 0; -if (sizeof (size_t)) - return 0; +String foo = malloc(1); *foo = 0 ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:6592: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:7256: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6595: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6598: \"$ac_try\"") >&5 + echo "$as_me:7259: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:7262: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6601: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_size_t=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_type_size_t=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:6611: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6 -if test $ac_cv_type_size_t = yes; then - : -else + echo "$as_me:7265: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then -cat >>confdefs.h <<EOF -#define size_t unsigned -EOF - -fi + cf_cv_const_x_string=no -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -echo "$as_me:6625: checking for working alloca.h" >&5 -echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 -if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6631 "configure" -#include "confdefs.h" -#include <alloca.h> -int -main (void) -{ -char *p = (char *) alloca (2 * sizeof (int)); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6643: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6646: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6649: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6652: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_working_alloca_h=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_working_alloca_h=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:6662: result: $ac_cv_working_alloca_h" >&5 -echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 -if test $ac_cv_working_alloca_h = yes; then +cat "conftest.$ac_ext" >&5 -cat >>confdefs.h <<\EOF -#define HAVE_ALLOCA_H 1 -EOF + cf_cv_const_x_string=yes fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" -echo "$as_me:6672: checking for alloca" >&5 -echo $ECHO_N "checking for alloca... $ECHO_C" >&6 -if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6678 "configure" -#include "confdefs.h" -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include <malloc.h> -# define alloca _alloca -# else -# if HAVE_ALLOCA_H -# include <alloca.h> -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -int -main (void) -{ -char *p = (char *) alloca (1); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6710: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6713: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6716: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6719: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_alloca_works=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_alloca_works=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:6729: result: $ac_cv_func_alloca_works" >&5 -echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 +echo "$as_me:7280: result: $cf_cv_const_x_string" >&5 +echo "${ECHO_T}$cf_cv_const_x_string" >&6 -if test $ac_cv_func_alloca_works = yes; then +LIBS="$cf_save_LIBS_CF_CONST_X_STRING" +CFLAGS="$cf_save_CFLAGS_CF_CONST_X_STRING" +CPPFLAGS="$cf_save_CPPFLAGS_CF_CONST_X_STRING" -cat >>confdefs.h <<\EOF -#define HAVE_ALLOCA 1 -EOF +case "$cf_cv_const_x_string" in +(no) -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. + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-DXTSTRINGDEFINES" -ALLOCA=alloca.$ac_objext + ;; +(*) -cat >>confdefs.h <<\EOF -#define C_ALLOCA 1 -EOF + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-D_CONST_X_STRING" -echo "$as_me:6750: checking whether \`alloca.c' needs Cray hooks" >&5 -echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 -if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6756 "configure" -#include "confdefs.h" -#if defined(CRAY) && ! defined(CRAY2) -webecray -#else -wenotbecray -#endif + ;; +esac -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "webecray" >/dev/null 2>&1; then - ac_cv_os_cray=yes else - ac_cv_os_cray=no + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 fi -rm -rf conftest* +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + fi +cat > "conftest.$ac_ext" <<EOF +#line 7309 "${as_me:-configure}" +int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; } +EOF +if test "$INTEL_COMPILER" = yes +then +# The "-wdXXX" options suppress warnings: +# remark #1419: external declaration in primary source file +# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) +# remark #1684: conversion from pointer to same-sized integral type (potential portability problem) +# remark #193: zero used for undefined preprocessing identifier +# remark #593: variable "curs_sb_left_arrow" was set but never used +# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits +# remark #869: parameter "tw" was never referenced +# remark #981: operands are evaluated in unspecified order +# warning #279: controlling expression is constant + { echo "$as_me:7325: checking for $CC warning options..." >&5 +echo "$as_me: checking for $CC warning options..." >&6;} + cf_save_CFLAGS="$CFLAGS" + EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall" + for cf_opt in \ + wd1419 \ + wd1683 \ + wd1684 \ + wd193 \ + wd593 \ + wd279 \ + wd810 \ + wd869 \ + wd981 + do + CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" + if { (eval echo "$as_me:7341: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:7344: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then + test -n "$verbose" && echo "$as_me:7346: result: ... -$cf_opt" >&5 +echo "${ECHO_T}... -$cf_opt" >&6 + EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" + fi + done + CFLAGS="$cf_save_CFLAGS" +elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown" +then + { echo "$as_me:7354: checking for $CC warning options..." >&5 +echo "$as_me: checking for $CC warning options..." >&6;} + cf_save_CFLAGS="$CFLAGS" + cf_warn_CONST="" + test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" + cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" + test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= + for cf_opt in W Wall \ + Wbad-function-cast \ + Wcast-align \ + Wcast-qual \ + Wdeclaration-after-statement \ + Wextra \ + Winline \ + Wmissing-declarations \ + Wmissing-prototypes \ + Wnested-externs \ + Wpointer-arith \ + Wshadow \ + Wstrict-prototypes \ + Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST + do + CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" + if { (eval echo "$as_me:7377: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:7380: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then + test -n "$verbose" && echo "$as_me:7382: result: ... -$cf_opt" >&5 +echo "${ECHO_T}... -$cf_opt" >&6 + case "$cf_opt" in + (Winline) + case "$GCC_VERSION" in + ([34].*) + test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 + +echo "${as_me:-configure}:7390: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 + + continue;; + esac + ;; + (Wpointer-arith) + case "$GCC_VERSION" in + ([12].*) + test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 + +echo "${as_me:-configure}:7400: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 + + continue;; + esac + ;; + esac + EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" + fi + done + CFLAGS="$cf_save_CFLAGS" fi -echo "$as_me:6774: result: $ac_cv_os_cray" >&5 -echo "${ECHO_T}$ac_cv_os_cray" >&6 -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:6779: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6785 "configure" +rm -rf ./conftest* + +fi + +if test "$GCC" = yes || test "$GXX" = yes +then +cat > conftest.i <<EOF +#ifndef GCC_PRINTF +#define GCC_PRINTF 0 +#endif +#ifndef GCC_SCANF +#define GCC_SCANF 0 +#endif +#ifndef GCC_NORETURN +#define GCC_NORETURN /* nothing */ +#endif +#ifndef GCC_UNUSED +#define GCC_UNUSED /* nothing */ +#endif +EOF +if test "$GCC" = yes +then + { echo "$as_me:7433: checking for $CC __attribute__ directives..." >&5 +echo "$as_me: checking for $CC __attribute__ directives..." >&6;} +cat > "conftest.$ac_ext" <<EOF +#line 7436 "${as_me:-configure}" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" +#include "conftest.h" +#include "conftest.i" +#if GCC_PRINTF +#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +#else +#define GCC_PRINTFLIKE(fmt,var) /*nothing*/ #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -char (*f) (); - -int -main (void) -{ -/* 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_$ac_func) || defined (__stub___$ac_func) -choke me +#if GCC_SCANF +#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) #else -f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +#define GCC_SCANFLIKE(fmt,var) /*nothing*/ #endif +extern void wow(char *,...) GCC_SCANFLIKE(1,2); +extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; +extern void foo(void) GCC_NORETURN; +int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { (void)argc; (void)argv; return 0; } +EOF + cf_printf_attribute=no + cf_scanf_attribute=no + for cf_attribute in scanf printf unused noreturn + do - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6816: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6819: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6822: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 +cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + cf_directive="__attribute__(($cf_attribute))" + echo "checking for $CC $cf_directive" 1>&5 + + case "$cf_attribute" in + (printf) + cf_printf_attribute=yes + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE 1 +EOF + ;; + (scanf) + cf_scanf_attribute=yes + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE 1 +EOF + ;; + (*) + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE $cf_directive +EOF + ;; + esac + + if { (eval echo "$as_me:7485: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6825: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -eval "$as_ac_var=no" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:6835: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + echo "$as_me:7488: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then + test -n "$verbose" && echo "$as_me:7490: result: ... $cf_attribute" >&5 +echo "${ECHO_T}... $cf_attribute" >&6 + cat conftest.h >>confdefs.h + case "$cf_attribute" in + (noreturn) cat >>confdefs.h <<EOF -#define CRAY_STACKSEG_END $ac_func +#define GCC_NORETURN $cf_directive EOF - break -fi + ;; + (printf) + cf_value='/* nothing */' + if test "$cf_printf_attribute" != no ; then + cf_value='__attribute__((format(printf,fmt,var)))' - done -fi +cat >>confdefs.h <<\EOF +#define GCC_PRINTF 1 +EOF -echo "$as_me:6849: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 -else - cat >conftest.$ac_ext <<_ACEOF -#line 6858 "configure" -#include "confdefs.h" -int -find_stack_direction (void) -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} + fi -int -main (void) -{ - $ac_main_return (find_stack_direction () < 0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:6881: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:6884: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:6886: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6889: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_c_stack_direction=-1 -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:6901: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 +cat >>confdefs.h <<EOF +#define GCC_PRINTFLIKE(fmt,var) $cf_value +EOF + + ;; + (scanf) + cf_value='/* nothing */' + if test "$cf_scanf_attribute" != no ; then + cf_value='__attribute__((format(scanf,fmt,var)))' + +cat >>confdefs.h <<\EOF +#define GCC_SCANF 1 +EOF + + fi cat >>confdefs.h <<EOF -#define STACK_DIRECTION $ac_cv_c_stack_direction +#define GCC_SCANFLIKE(fmt,var) $cf_value EOF -fi + ;; + (unused) -for ac_header in stdlib.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:6913: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +cat >>confdefs.h <<EOF +#define GCC_UNUSED $cf_directive +EOF + + ;; + esac + fi + done else - cat >conftest.$ac_ext <<_ACEOF -#line 6919 "configure" -#include "confdefs.h" -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:6923: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:6929: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" + ${FGREP-fgrep} define conftest.i >>confdefs.h fi -rm -f conftest.err conftest.$ac_ext +rm -rf ./conftest* fi -echo "$as_me:6948: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -EOF fi -done -for ac_func in getpagesize -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:6961: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo "$as_me:7551: checking if you want to use pkg-config" >&5 +echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6 + +# Check whether --with-pkg-config or --without-pkg-config was given. +if test "${with_pkg_config+set}" = set; then + withval="$with_pkg_config" + cf_pkg_config=$withval else - cat >conftest.$ac_ext <<_ACEOF -#line 6967 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -char (*f) (); + cf_pkg_config=yes +fi; +echo "$as_me:7561: result: $cf_pkg_config" >&5 +echo "${ECHO_T}$cf_pkg_config" >&6 -int -main (void) -{ -/* 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_$ac_func) || defined (__stub___$ac_func) -choke me -#else -f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif +case "$cf_pkg_config" in +(no) + PKG_CONFIG=none + ;; +(yes) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6998: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:7001: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7004: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7007: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +echo "$as_me:7573: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -eval "$as_ac_var=no" + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" + echo "$as_me:7590: found $ac_dir/$ac_word" >&5 + break fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +done + + ;; +esac fi -echo "$as_me:7017: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -EOF +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + echo "$as_me:7601: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:7604: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -done -echo "$as_me:7027: checking for working mmap" >&5 -echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 -if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:7613: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test "$cross_compiling" = yes; then - ac_cv_func_mmap_fixed_mapped=no + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word" + echo "$as_me:7630: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none" + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG + +if test -n "$ac_pt_PKG_CONFIG"; then + echo "$as_me:7642: result: $ac_pt_PKG_CONFIG" >&5 +echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 7036 "configure" -#include "confdefs.h" -$ac_includes_default -/* Thanks to Mike Haertel and Jim Avera for this test. - Here is a matrix of mmap possibilities: - mmap private not fixed - mmap private fixed at somewhere currently unmapped - mmap private fixed at somewhere already mapped - mmap shared not fixed - mmap shared fixed at somewhere currently unmapped - mmap shared fixed at somewhere already mapped - For private mappings, we should verify that changes cannot be read() - back from the file, nor mmap's back from the file at a different - address. (There have been systems where private was not correctly - implemented like the infamous i386 svr4.0, and systems where the - VM page cache was not coherent with the file system buffer cache - like early versions of FreeBSD and possibly contemporary NetBSD.) - For shared mappings, we should conversely verify that changes get - propogated back to all the places they're supposed to be. + echo "$as_me:7645: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ + PKG_CONFIG=$ac_pt_PKG_CONFIG +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi -#include <fcntl.h> -#include <sys/mman.h> + ;; +(*) + PKG_CONFIG=$withval + ;; +esac -#if !STDC_HEADERS && !HAVE_STDLIB_H -char *malloc (); -#endif +test -z "$PKG_CONFIG" && PKG_CONFIG=none +if test "$PKG_CONFIG" != none ; then -/* This mess was copied from the GNU getpagesize.h. */ -#if !HAVE_GETPAGESIZE -/* Assume that all systems that can run configure have sys/param.h. */ -# if !HAVE_SYS_PARAM_H -# define HAVE_SYS_PARAM_H 1 -# endif +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" +fi -# ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ -# if HAVE_SYS_PARAM_H -# include <sys/param.h> -# ifdef EXEC_PAGESIZE -# define getpagesize() EXEC_PAGESIZE -# else /* no EXEC_PAGESIZE */ -# ifdef NBPG -# define getpagesize() NBPG * CLSIZE -# ifndef CLSIZE -# define CLSIZE 1 -# endif /* no CLSIZE */ -# else /* no NBPG */ -# ifdef NBPC -# define getpagesize() NBPC -# else /* no NBPC */ -# ifdef PAGESIZE -# define getpagesize() PAGESIZE -# endif /* PAGESIZE */ -# endif /* no NBPC */ -# endif /* no NBPG */ -# endif /* no EXEC_PAGESIZE */ -# else /* no HAVE_SYS_PARAM_H */ -# define getpagesize() 8192 /* punt totally */ -# endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ +case ".$PKG_CONFIG" in +(.\$\(*\)*|.\'*\'*) + ;; +(..|./*|.\\*) + ;; +(.[a-zA-Z]:[\\/]*) # OS/2 EMX + ;; +(.\$\{*prefix\}*|.\$\{*dir\}*) + eval PKG_CONFIG="$PKG_CONFIG" + case ".$PKG_CONFIG" in + (.NONE/*) + PKG_CONFIG=`echo "$PKG_CONFIG" | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; +(.no|.NONE/*) + PKG_CONFIG=`echo "$PKG_CONFIG" | sed -e s%NONE%$cf_path_syntax%` + ;; +(*) + { { echo "$as_me:7688: error: expected a pathname, not \"$PKG_CONFIG\"" >&5 +echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac -#endif /* no HAVE_GETPAGESIZE */ +elif test "x$cf_pkg_config" != xno ; then + { echo "$as_me:7695: WARNING: pkg-config is not installed" >&5 +echo "$as_me: WARNING: pkg-config is not installed" >&2;} +fi -int -main (void) -{ - char *data, *data2, *data3; - int i, pagesize; - int fd; +echo "$as_me:7699: checking for this package's name" >&5 +echo $ECHO_N "checking for this package's name... $ECHO_C" >&6 - pagesize = getpagesize (); +# Check whether --with-package or --without-package was given. +if test "${with_package+set}" = set; then + withval="$with_package" + PACKAGE=$withval +else + PACKAGE=dialog +fi; +echo "$as_me:7709: result: $PACKAGE" >&5 +echo "${ECHO_T}$PACKAGE" >&6 - /* First, make a file with some known garbage in it. */ - data = (char *) malloc (pagesize); - if (!data) - $ac_main_return (1); - for (i = 0; i < pagesize; ++i) - *(data + i) = rand (); - umask (0); - fd = creat ("conftest.mmap", 0600); - if (fd < 0) - $ac_main_return (1); - if (write (fd, data, pagesize) != pagesize) - $ac_main_return (1); - close (fd); +if test -f "$srcdir/VERSION" ; then + echo "$as_me:7713: checking for package version" >&5 +echo $ECHO_N "checking for package version... $ECHO_C" >&6 - /* Next, try to mmap the file at a fixed address which already has - something else allocated at it. If we can, also make sure that - we see the same garbage. */ - fd = open ("conftest.mmap", O_RDWR); - if (fd < 0) - $ac_main_return (1); - data2 = (char *) malloc (2 * pagesize); - if (!data2) - $ac_main_return (1); - data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); - if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fd, 0L)) - $ac_main_return (1); - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data2 + i)) - $ac_main_return (1); + # if there are not enough fields, cut returns the last one... + cf_field1=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1` + cf_field2=`sed -e '2,$d' "$srcdir/VERSION" |cut -f2` + cf_field3=`sed -e '2,$d' "$srcdir/VERSION" |cut -f3` - /* Finally, make sure that changes to the mapped area do not - percolate back to the file as seen by read(). (This is a bug on - some variants of i386 svr4.0.) */ - for (i = 0; i < pagesize; ++i) - *(data2 + i) = *(data2 + i) + 1; - data3 = (char *) malloc (pagesize); - if (!data3) - $ac_main_return (1); - if (read (fd, data3, pagesize) != pagesize) - $ac_main_return (1); - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data3 + i)) - $ac_main_return (1); - close (fd); - $ac_main_return (0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:7163: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:7166: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:7168: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7171: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_mmap_fixed_mapped=yes + # this is how CF_BUNDLED_INTL uses $VERSION: + VERSION="$cf_field1" + + VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` + test -z "$VERSION_MAJOR" && { { echo "$as_me:7725: error: missing major-version" >&5 +echo "$as_me: error: missing major-version" >&2;} + { (exit 1); exit 1; }; } + + VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'` + test -z "$VERSION_MINOR" && { { echo "$as_me:7730: error: missing minor-version" >&5 +echo "$as_me: error: missing minor-version" >&2;} + { (exit 1); exit 1; }; } + + echo "$as_me:7734: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5 +echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6 + + echo "$as_me:7737: checking for package patch date" >&5 +echo $ECHO_N "checking for package patch date... $ECHO_C" >&6 + VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[^-]*-//'` + case .$VERSION_PATCH in + (.) + { { echo "$as_me:7742: error: missing patch-date $VERSION_PATCH" >&5 +echo "$as_me: error: missing patch-date $VERSION_PATCH" >&2;} + { (exit 1); exit 1; }; } + ;; + (.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) + ;; + (*) + { { echo "$as_me:7749: error: illegal patch-date $VERSION_PATCH" >&5 +echo "$as_me: error: illegal patch-date $VERSION_PATCH" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + echo "$as_me:7754: result: $VERSION_PATCH" >&5 +echo "${ECHO_T}$VERSION_PATCH" >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_mmap_fixed_mapped=no -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi + { { echo "$as_me:7757: error: did not find $srcdir/VERSION" >&5 +echo "$as_me: error: did not find $srcdir/VERSION" >&2;} + { (exit 1); exit 1; }; } fi -echo "$as_me:7183: result: $ac_cv_func_mmap_fixed_mapped" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 -if test $ac_cv_func_mmap_fixed_mapped = yes; then -cat >>confdefs.h <<\EOF -#define HAVE_MMAP 1 -EOF +# show the actual data that we have for versions: +test -n "$verbose" && echo " ABI VERSION $VERSION" 1>&6 -fi -rm -f conftest.mmap +echo "${as_me:-configure}:7765: testing ABI VERSION $VERSION ..." 1>&5 -echo "$as_me:7194: checking whether we are using the GNU C Library 2.1 or newer" >&5 -echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6 -if test "${ac_cv_gnu_library_2_1+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 7200 "configure" -#include "confdefs.h" +test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6 -#include <features.h> -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) - Lucky GNU user - #endif -#endif +echo "${as_me:-configure}:7769: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5 -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "Lucky GNU user" >/dev/null 2>&1; then - ac_cv_gnu_library_2_1=yes -else - ac_cv_gnu_library_2_1=no -fi -rm -rf conftest* +test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6 -fi -echo "$as_me:7220: result: $ac_cv_gnu_library_2_1" >&5 -echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6 +echo "${as_me:-configure}:7773: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5 - GLIBC21="$ac_cv_gnu_library_2_1" +test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6 -cf_makefile=makefile +echo "${as_me:-configure}:7777: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5 -test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'` + cf_PACKAGE=dialog + PACKAGE=$PACKAGE -# Allow override of "config.h" definition: -: ${CONFIG_H:=config.h} +cat >>confdefs.h <<EOF +#define PACKAGE "$PACKAGE" +EOF -if test -z "$PACKAGE" ; then - { { echo "$as_me:7233: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&5 -echo "$as_me: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&2;} - { (exit 1); exit 1; }; } -fi +cf_PACKAGE=`echo "$cf_PACKAGE" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` -if test -z "$VERSION" ; then -if test -f $srcdir/VERSION ; then - VERSION=`sed -e '2,$d' $srcdir/VERSION|cut -f1` -else - VERSION=unknown -fi -fi + cat >>confdefs.h <<EOF +#define ${cf_PACKAGE}_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}" +EOF -for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ -stdlib.h string.h unistd.h sys/param.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:7250: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 7256 "configure" -#include "confdefs.h" -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:7260: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:7266: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:7285: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 + cat >>confdefs.h <<EOF +#define ${cf_PACKAGE}_PATCHDATE ${VERSION_PATCH} EOF -fi -done +CFG_ROOTNAME=$PACKAGE +HDR_ROOTNAME=$PACKAGE +LIB_ROOTNAME=$PACKAGE -for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \ -getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ -strdup strtoul tsearch __argz_count __argz_stringify __argz_next -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:7300: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 7306 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -char (*f) (); +echo "$as_me:7800: checking if we should install dlg_XXX headers to subdirectory" >&5 +echo $ECHO_N "checking if we should install dlg_XXX headers to subdirectory... $ECHO_C" >&6 -int -main (void) -{ -/* 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_$ac_func) || defined (__stub___$ac_func) -choke me -#else -f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif +# Check whether --enable-header-subdir or --disable-header-subdir was given. +if test "${enable_header_subdir+set}" = set; then + enableval="$enable_header_subdir" + SUB_INC=$enableval +else + SUB_INC=no +fi; +echo "$as_me:7810: result: $SUB_INC" >&5 +echo "${ECHO_T}$SUB_INC" >&6 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7337: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:7340: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7343: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7346: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" +case "x${with_man2html}" in +(xno) + cf_man2html=no + ;; +(x|xyes) + # Extract the first word of "man2html", so it can be a program name with args. +set dummy man2html; ac_word=$2 +echo "$as_me:7820: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_cf_man2html+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -eval "$as_ac_var=no" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + case $cf_man2html in + [\\/]* | ?:[\\/]*) + ac_cv_path_cf_man2html="$cf_man2html" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_cf_man2html="$ac_dir/$ac_word" + echo "$as_me:7837: found $ac_dir/$ac_word" >&5 + break fi -echo "$as_me:7356: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -EOF +done + test -z "$ac_cv_path_cf_man2html" && ac_cv_path_cf_man2html="no" + ;; +esac fi -done +cf_man2html=$ac_cv_path_cf_man2html -# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. -if test "${with_libiconv_prefix+set}" = set; then - withval="$with_libiconv_prefix" - -case "$withval" in -(no) - ;; -(yes) - ;; -(*) - -for cf_searchpath in `echo "$withval" | tr $PATH_SEPARATOR ' '`; do - if test -d $cf_searchpath/include; then +if test -n "$cf_man2html"; then + echo "$as_me:7849: result: $cf_man2html" >&5 +echo "${ECHO_T}$cf_man2html" >&6 +else + echo "$as_me:7852: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -if test -n "$cf_searchpath/include" ; then - for cf_add_incdir in $cf_searchpath/include - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done + case "x$cf_man2html" in + (x/*) + echo "$as_me:7858: checking for the modified Earl Hood script" >&5 +echo $ECHO_N "checking for the modified Earl Hood script... $ECHO_C" >&6 + if ( $cf_man2html -help 2>&1 | grep 'Make an index of headers at the end' >/dev/null ) + then + cf_man2html_ok=yes + else + cf_man2html=no + cf_man2html_ok=no fi + echo "$as_me:7867: result: $cf_man2html_ok" >&5 +echo "${ECHO_T}$cf_man2html_ok" >&6 + ;; + (*) + cf_man2html=no + ;; + esac +esac - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +echo "$as_me:7876: checking for program to convert manpage to html" >&5 +echo $ECHO_N "checking for program to convert manpage to html... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -#line 7407 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -printf("Hello") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:7419: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:7422: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7425: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7428: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : +# Check whether --with-man2html or --without-man2html was given. +if test "${with_man2html+set}" = set; then + withval="$with_man2html" + cf_man2html=$withval else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi + cf_man2html=$cf_man2html +fi; - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 +cf_with_groff=no -echo "${as_me:-configure}:7445: testing adding $cf_add_incdir to include-path ..." 1>&5 +case $cf_man2html in +(yes) + echo "$as_me:7891: result: man2html" >&5 +echo "${ECHO_T}man2html" >&6 + # Extract the first word of "man2html", so it can be a program name with args. +set dummy man2html; ac_word=$2 +echo "$as_me:7895: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_cf_man2html+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $cf_man2html in + [\\/]* | ?:[\\/]*) + ac_cv_path_cf_man2html="$cf_man2html" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_cf_man2html="$ac_dir/$ac_word" + echo "$as_me:7912: found $ac_dir/$ac_word" >&5 + break +fi +done - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + test -z "$ac_cv_path_cf_man2html" && ac_cv_path_cf_man2html="no" + ;; +esac +fi +cf_man2html=$ac_cv_path_cf_man2html - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done +if test -n "$cf_man2html"; then + echo "$as_me:7924: result: $cf_man2html" >&5 +echo "${ECHO_T}$cf_man2html" >&6 +else + echo "$as_me:7927: result: no" >&5 +echo "${ECHO_T}no" >&6 fi - elif test -d $cf_searchpath/../include ; then + ;; +(no|groff|*/groff*) + cf_with_groff=yes + cf_man2html=$GROFF_PATH + echo "$as_me:7935: result: $cf_man2html" >&5 +echo "${ECHO_T}$cf_man2html" >&6 + ;; +(*) + echo "$as_me:7939: result: $cf_man2html" >&5 +echo "${ECHO_T}$cf_man2html" >&6 + ;; +esac -if test -n "$cf_searchpath/../include" ; then - for cf_add_incdir in $cf_searchpath/../include - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi +MAN2HTML_TEMP="man2html.tmp" + cat >$MAN2HTML_TEMP <<CF_EOF +#!$SHELL +# Temporary script generated by CF_WITH_MAN2HTML +# Convert inputs to html, sending result to standard output. +# +# Parameters: +# \${1} = rootname of file to convert +# \${2} = suffix of file to convert, e.g., "1" +# \${3} = macros to use, e.g., "man" +# +ROOT=\$1 +TYPE=\$2 +MACS=\$3 - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS +unset LANG +unset LC_ALL +unset LC_CTYPE +unset LANGUAGE +GROFF_NO_SGR=stupid +export GROFF_NO_SGR - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +CF_EOF - cat >conftest.$ac_ext <<_ACEOF -#line 7491 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -printf("Hello") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:7503: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:7506: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7509: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:7512: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : +NROFF_OPTS= +if test "x$cf_with_groff" = xyes +then + MAN2HTML_NOTE="$GROFF_NOTE" + MAN2HTML_PATH="$GROFF_PATH" + cat >>$MAN2HTML_TEMP <<CF_EOF +$SHELL -c "$TBL_PATH \${ROOT}.\${TYPE} | $GROFF_PATH -P -o0 -I\${ROOT}_ -Thtml -\${MACS}" +CF_EOF else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - -echo "${as_me:-configure}:7529: testing adding $cf_add_incdir to include-path ..." 1>&5 - - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + # disable hyphenation if this is groff + if test "x$GROFF_PATH" != xno + then + echo "$as_me:7980: checking if nroff is really groff" >&5 +echo $ECHO_N "checking if nroff is really groff... $ECHO_C" >&6 + cf_check_groff="`$NROFF_PATH --version 2>/dev/null | grep groff`" + test -n "$cf_check_groff" && cf_check_groff=yes + test -n "$cf_check_groff" || cf_check_groff=no + echo "$as_me:7985: result: $cf_check_groff" >&5 +echo "${ECHO_T}$cf_check_groff" >&6 + test "x$cf_check_groff" = xyes && NROFF_OPTS="-rHY=0" + fi + MAN2HTML_NOTE="" - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" fi - else -{ { echo "$as_me:7547: error: cannot find libiconv under $withval" >&5 -echo "$as_me: error: cannot find libiconv under $withval" >&2;} +case ".$cf_man2html" in +(.\$\(*\)*|.\'*\'*) + ;; +(..|./*|.\\*) + ;; +(.[a-zA-Z]:[\\/]*) # OS/2 EMX + ;; +(.\$\{*prefix\}*|.\$\{*dir\}*) + eval cf_man2html="$cf_man2html" + case ".$cf_man2html" in + (.NONE/*) + cf_man2html=`echo "$cf_man2html" | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; +(.no|.NONE/*) + cf_man2html=`echo "$cf_man2html" | sed -e s%NONE%$cf_path_syntax%` + ;; +(*) + { { echo "$as_me:8016: error: expected a pathname, not \"$cf_man2html\"" >&5 +echo "$as_me: error: expected a pathname, not \"$cf_man2html\"" >&2;} { (exit 1); exit 1; }; } - fi - if test -d $cf_searchpath/lib; then + ;; +esac -if test -n "$cf_searchpath/lib" ; then - for cf_add_libdir in $cf_searchpath/lib - do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 - -echo "${as_me:-configure}:7572: testing adding $cf_add_libdir to library-path ..." 1>&5 + MAN2HTML_PATH="$cf_man2html" + echo "$as_me:8023: checking for $cf_man2html top/bottom margins" >&5 +echo $ECHO_N "checking for $cf_man2html top/bottom margins... $ECHO_C" >&6 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done -fi + # for this example, expect 3 lines of content, the remainder is head/foot + cat >conftest.in <<CF_EOF +.TH HEAD1 HEAD2 HEAD3 HEAD4 HEAD5 +.SH SECTION +MARKER +CF_EOF - elif test -d $cf_searchpath ; then + LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C $NROFF_PATH -man conftest.in >conftest.out -if test -n "$cf_searchpath" ; then - for cf_add_libdir in $cf_searchpath - do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + cf_man2html_1st="`${FGREP-fgrep} -n MARKER conftest.out |sed -e 's/^[^0-9]*://' -e 's/:.*//'`" + cf_man2html_top=`expr "$cf_man2html_1st" - 2` + cf_man2html_bot="`wc -l conftest.out |sed -e 's/[^0-9]//g'`" + cf_man2html_bot=`expr "$cf_man2html_bot" - 2 - "$cf_man2html_top"` + cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot" -echo "${as_me:-configure}:7601: testing adding $cf_add_libdir to library-path ..." 1>&5 + echo "$as_me:8041: result: $cf_man2html_top_bot" >&5 +echo "${ECHO_T}$cf_man2html_top_bot" >&6 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi + echo "$as_me:8044: checking for pagesize to use" >&5 +echo $ECHO_N "checking for pagesize to use... $ECHO_C" >&6 + for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + do + cat >>conftest.in <<CF_EOF +.nf +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +CF_EOF done -fi - else -{ { echo "$as_me:7610: error: cannot find libiconv under $withval" >&5 -echo "$as_me: error: cannot find libiconv under $withval" >&2;} - { (exit 1); exit 1; }; } - fi -done + LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C $NROFF_PATH -man conftest.in >conftest.out + cf_man2html_page="`${FGREP-fgrep} -n HEAD1 conftest.out |sed -n '$p' |sed -e 's/^[^0-9]*://' -e 's/:.*//'`" + test -z "$cf_man2html_page" && cf_man2html_page=99999 + test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999 + + rm -rf conftest* + echo "$as_me:8069: result: $cf_man2html_page" >&5 +echo "${ECHO_T}$cf_man2html_page" >&6 + cat >>$MAN2HTML_TEMP <<CF_EOF +: \${MAN2HTML_PATH=$MAN2HTML_PATH} +MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title=\"\$ROOT(\$TYPE)\" -compress -pgsize $cf_man2html_page" +case \${TYPE} in +(ms) + $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH $NROFF_OPTS -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS + ;; +(*) + $TBL_PATH \${ROOT}.\${TYPE} | $NROFF_PATH $NROFF_OPTS -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS ;; esac +CF_EOF +fi -fi; +chmod 700 $MAN2HTML_TEMP - echo "$as_me:7621: checking for iconv" >&5 -echo $ECHO_N "checking for iconv... $ECHO_C" >&6 -if test "${am_cv_func_iconv+set}" = set; then +EXTRAOBJS="" +echo "$as_me:8089: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8095 "configure" +#include "confdefs.h" +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> -# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these -# will be set on completion of the AC_TRY_LINK below. -cf_cv_header_path_iconv= -cf_cv_library_path_iconv= +_ACEOF +if { (eval echo "$as_me:8103: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:8109: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + ac_cv_header_stdc=no +fi +rm -f conftest.err "conftest.$ac_ext" -echo "${as_me:-configure}:7632: testing Starting FIND_LINKAGE(iconv,) ..." 1>&5 +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >"conftest.$ac_ext" <<_ACEOF +#line 8131 "configure" +#include "confdefs.h" +#include <string.h> -cf_save_LIBS="$LIBS" +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -rf conftest* -cat >conftest.$ac_ext <<_ACEOF -#line 7637 "configure" -#include "confdefs.h" +fi +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >"conftest.$ac_ext" <<_ACEOF +#line 8149 "configure" +#include "confdefs.h" #include <stdlib.h> -#include <iconv.h> +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -rf conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8170 "configure" +#include "confdefs.h" +#include <ctype.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main (void) { - - iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - - ; - return 0; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + $ac_main_return(2); + $ac_main_return (0); } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7656: \"$ac_link\"") >&5 +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:8196: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7659: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7662: \"$ac_try\"") >&5 + echo "$as_me:8199: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:8201: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7665: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_find_linkage_iconv=yes - cf_cv_header_path_iconv=/usr/include - cf_cv_library_path_iconv=/usr/lib - + echo "$as_me:8204: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - -LIBS="-liconv $cf_save_LIBS" - -cat >conftest.$ac_ext <<_ACEOF -#line 7679 "configure" -#include "confdefs.h" + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_header_stdc=no +fi +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi +fi +fi +echo "$as_me:8217: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then -#include <stdlib.h> -#include <iconv.h> +cat >>confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF -int -main (void) -{ +fi - iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); +echo "$as_me:8227: checking for inline" >&5 +echo $ECHO_N "checking for inline... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >"conftest.$ac_ext" <<_ACEOF +#line 8235 "configure" +#include "confdefs.h" +#ifndef __cplusplus +static $ac_kw int static_foo () {return 0; } +$ac_kw int foo () {return 0; } +#endif - ; - return 0; -} _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7698: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:8244: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7701: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7704: \"$ac_try\"") >&5 + echo "$as_me:8247: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:8250: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7707: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_find_linkage_iconv=yes - cf_cv_header_path_iconv=/usr/include - cf_cv_library_path_iconv=/usr/lib - cf_cv_library_file_iconv="-liconv" - + echo "$as_me:8253: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_c_inline=$ac_kw; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" +done - cf_cv_find_linkage_iconv=no - LIBS="$cf_save_LIBS" +fi +echo "$as_me:8264: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 +case $ac_cv_c_inline in + inline | yes) ;; + no) +cat >>confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >>confdefs.h <<EOF +#define inline $ac_cv_c_inline +EOF + ;; +esac - test -n "$verbose" && echo " find linkage for iconv library" 1>&6 +# On IRIX 5.3, sys/types and inttypes.h are conflicting. -echo "${as_me:-configure}:7724: testing find linkage for iconv library ..." 1>&5 - -echo "${as_me:-configure}:7726: testing Searching for headers in FIND_LINKAGE(iconv,) ..." 1>&5 - - cf_save_CPPFLAGS="$CPPFLAGS" - cf_test_CPPFLAGS="$CPPFLAGS" - -cf_search= - -# collect the current set of include-directories from compiler flags -cf_header_path_list="" -if test -n "${CFLAGS}${CPPFLAGS}" ; then - for cf_header_path in $CPPFLAGS $CFLAGS - do - case $cf_header_path in - (-I*) - cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` - -test "x$cf_header_path" != "xNONE" && \ -test -d "$cf_header_path" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" - test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" - test -d $cf_header_path/include/iconv && cf_search="$cf_search $cf_header_path/include/iconv" - test -d $cf_header_path/include/iconv/include && cf_search="$cf_search $cf_header_path/include/iconv/include" - test -d $cf_header_path/iconv/include && cf_search="$cf_search $cf_header_path/iconv/include" - test -d $cf_header_path/iconv/include/iconv && cf_search="$cf_search $cf_header_path/iconv/include/iconv" -} - - cf_header_path_list="$cf_header_path_list $cf_search" - ;; - esac - done -fi - -# add the variations for the package we are looking for - -cf_search= - -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $prefix" - test -d $prefix/include && cf_search="$cf_search $prefix/include" - test -d $prefix/include/iconv && cf_search="$cf_search $prefix/include/iconv" - test -d $prefix/include/iconv/include && cf_search="$cf_search $prefix/include/iconv/include" - test -d $prefix/iconv/include && cf_search="$cf_search $prefix/iconv/include" - test -d $prefix/iconv/include/iconv && cf_search="$cf_search $prefix/iconv/include/iconv" -} - -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:8285: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8291 "configure" +#include "confdefs.h" +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:8297: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:8300: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:8303: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8306: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +eval "$as_ac_Header=no" +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" +fi +echo "$as_me:8316: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" - test -d $cf_subdir_prefix/include/iconv && cf_search="$cf_search $cf_subdir_prefix/include/iconv" - test -d $cf_subdir_prefix/include/iconv/include && cf_search="$cf_search $cf_subdir_prefix/include/iconv/include" - test -d $cf_subdir_prefix/iconv/include && cf_search="$cf_search $cf_subdir_prefix/iconv/include" - test -d $cf_subdir_prefix/iconv/include/iconv && cf_search="$cf_search $cf_subdir_prefix/iconv/include/iconv" -} - +fi done -test "$includedir" != NONE && \ -test "$includedir" != "/usr/include" && \ -test -d "$includedir" && { - test -d $includedir && cf_search="$cf_search $includedir" - test -d $includedir/iconv && cf_search="$cf_search $includedir/iconv" -} - -test "$oldincludedir" != NONE && \ -test "$oldincludedir" != "/usr/include" && \ -test -d "$oldincludedir" && { - test -d $oldincludedir && cf_search="$cf_search $oldincludedir" - test -d $oldincludedir/iconv && cf_search="$cf_search $oldincludedir/iconv" -} - -cf_search="$cf_search $cf_header_path_list" - - for cf_cv_header_path_iconv in $cf_search - do - if test -d $cf_cv_header_path_iconv ; then - test -n "$verbose" && echo " ... testing $cf_cv_header_path_iconv" 1>&6 - -echo "${as_me:-configure}:7817: testing ... testing $cf_cv_header_path_iconv ..." 1>&5 - - CPPFLAGS="$cf_save_CPPFLAGS" - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_iconv" - - cat >conftest.$ac_ext <<_ACEOF -#line 7825 "configure" +echo "$as_me:8326: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6 +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8332 "configure" #include "confdefs.h" - -#include <stdlib.h> -#include <iconv.h> - +$ac_includes_default int main (void) { - - iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - +if ((off_t *) 0) + return 0; +if (sizeof (off_t)) + return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:7844: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:8347: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7847: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7850: \"$ac_try\"") >&5 + echo "$as_me:8350: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:8353: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7853: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - test -n "$verbose" && echo " ... found iconv headers in $cf_cv_header_path_iconv" 1>&6 - -echo "${as_me:-configure}:7858: testing ... found iconv headers in $cf_cv_header_path_iconv ..." 1>&5 - - cf_cv_find_linkage_iconv=maybe - cf_test_CPPFLAGS="$CPPFLAGS" - break + echo "$as_me:8356: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - CPPFLAGS="$cf_save_CPPFLAGS" - +cat "conftest.$ac_ext" >&5 +ac_cv_type_off_t=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - fi - done - - if test "$cf_cv_find_linkage_iconv" = maybe ; then - -echo "${as_me:-configure}:7876: testing Searching for iconv library in FIND_LINKAGE(iconv,) ..." 1>&5 - - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" - - if test "$cf_cv_find_linkage_iconv" != yes ; then - -cf_search= -cf_library_path_list="" -if test -n "${LDFLAGS}${LIBS}" ; then - for cf_library_path in $LDFLAGS $LIBS - do - case $cf_library_path in - (-L*) - cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` - -test "x$cf_library_path" != "xNONE" && \ -test -d "$cf_library_path" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" - test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" - test -d $cf_library_path/lib/iconv && cf_search="$cf_search $cf_library_path/lib/iconv" - test -d $cf_library_path/lib/iconv/lib && cf_search="$cf_search $cf_library_path/lib/iconv/lib" - test -d $cf_library_path/iconv/lib && cf_search="$cf_search $cf_library_path/iconv/lib" - test -d $cf_library_path/iconv/lib/iconv && cf_search="$cf_search $cf_library_path/iconv/lib/iconv" -} - - cf_library_path_list="$cf_library_path_list $cf_search" - ;; - esac - done +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi +echo "$as_me:8366: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6 +if test "$ac_cv_type_off_t" = yes; then + : +else -cf_search= - -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $prefix" - test -d $prefix/lib && cf_search="$cf_search $prefix/lib" - test -d $prefix/lib/iconv && cf_search="$cf_search $prefix/lib/iconv" - test -d $prefix/lib/iconv/lib && cf_search="$cf_search $prefix/lib/iconv/lib" - test -d $prefix/iconv/lib && cf_search="$cf_search $prefix/iconv/lib" - test -d $prefix/iconv/lib/iconv && cf_search="$cf_search $prefix/iconv/lib/iconv" -} - -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do - -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" - test -d $cf_subdir_prefix/lib/iconv && cf_search="$cf_search $cf_subdir_prefix/lib/iconv" - test -d $cf_subdir_prefix/lib/iconv/lib && cf_search="$cf_search $cf_subdir_prefix/lib/iconv/lib" - test -d $cf_subdir_prefix/iconv/lib && cf_search="$cf_search $cf_subdir_prefix/iconv/lib" - test -d $cf_subdir_prefix/iconv/lib/iconv && cf_search="$cf_search $cf_subdir_prefix/iconv/lib/iconv" -} - -done - -cf_search="$cf_library_path_list $cf_search" - - for cf_cv_library_path_iconv in $cf_search - do - if test -d $cf_cv_library_path_iconv ; then - test -n "$verbose" && echo " ... testing $cf_cv_library_path_iconv" 1>&6 +cat >>confdefs.h <<EOF +#define off_t long +EOF -echo "${as_me:-configure}:7951: testing ... testing $cf_cv_library_path_iconv ..." 1>&5 +fi - CPPFLAGS="$cf_test_CPPFLAGS" - LIBS="-liconv $cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_iconv" - cat >conftest.$ac_ext <<_ACEOF -#line 7957 "configure" +echo "$as_me:8378: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8384 "configure" #include "confdefs.h" - -#include <stdlib.h> -#include <iconv.h> - +$ac_includes_default int main (void) { - - iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7976: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:8399: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7979: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7982: \"$ac_try\"") >&5 + echo "$as_me:8402: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:8405: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7985: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - test -n "$verbose" && echo " ... found iconv library in $cf_cv_library_path_iconv" 1>&6 - -echo "${as_me:-configure}:7990: testing ... found iconv library in $cf_cv_library_path_iconv ..." 1>&5 - - cf_cv_find_linkage_iconv=yes - cf_cv_library_file_iconv="-liconv" - break + echo "$as_me:8408: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS" - -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - fi - done - CPPFLAGS="$cf_save_CPPFLAGS" - LDFLAGS="$cf_save_LDFLAGS" - fi - - else - cf_cv_find_linkage_iconv=no - fi - +cat "conftest.$ac_ext" >&5 +ac_cv_type_size_t=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - -LIBS="$cf_save_LIBS" - -if test "$cf_cv_find_linkage_iconv" = yes ; then -am_cv_func_iconv=yes +echo "$as_me:8418: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test "$ac_cv_type_size_t" = yes; then + : else -am_cv_func_iconv="no, consider installing GNU libiconv" -fi -fi -echo "$as_me:8030: result: $am_cv_func_iconv" >&5 -echo "${ECHO_T}$am_cv_func_iconv" >&6 +cat >>confdefs.h <<EOF +#define size_t unsigned +EOF - if test "$am_cv_func_iconv" = yes; then +fi -cat >>confdefs.h <<\EOF -#define HAVE_ICONV 1 -EOF - - echo "$as_me:8039: checking if the declaration of iconv() needs const." >&5 -echo $ECHO_N "checking if the declaration of iconv() needs const.... $ECHO_C" >&6 -if test "${am_cv_proto_iconv_const+set}" = set; then +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo "$as_me:8432: checking for working alloca.h" >&5 +echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 +if test "${ac_cv_working_alloca_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - - cat >conftest.$ac_ext <<_ACEOF -#line 8046 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 8438 "configure" #include "confdefs.h" - -#include <stdlib.h> -#include <iconv.h> - -extern -#ifdef __cplusplus -"C" -#endif -#if defined(__STDC__) || defined(__cplusplus) -size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif - +#include <alloca.h> int main (void) { - +char *p = (char *) alloca (2 * sizeof (int)); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8071: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:8450: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8074: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8077: \"$ac_try\"") >&5 + echo "$as_me:8453: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:8456: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8080: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - am_cv_proto_iconv_const=no + echo "$as_me:8459: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_working_alloca_h=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -am_cv_proto_iconv_const=yes +cat "conftest.$ac_ext" >&5 +ac_cv_working_alloca_h=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:8090: result: $am_cv_proto_iconv_const" >&5 -echo "${ECHO_T}$am_cv_proto_iconv_const" >&6 - - if test "$am_cv_proto_iconv_const" = yes ; then - am_cv_proto_iconv_arg1="const" - else - am_cv_proto_iconv_arg1="" - fi +echo "$as_me:8469: result: $ac_cv_working_alloca_h" >&5 +echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 +if test $ac_cv_working_alloca_h = yes; then -cat >>confdefs.h <<EOF -#define ICONV_CONST $am_cv_proto_iconv_arg1 +cat >>confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 EOF - fi - - LIBICONV= - if test "$cf_cv_find_linkage_iconv" = yes; then - -if test -n "$cf_cv_header_path_iconv" ; then - for cf_add_incdir in $cf_cv_header_path_iconv - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi - - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +fi - cat >conftest.$ac_ext <<_ACEOF -#line 8135 "configure" +echo "$as_me:8479: checking for alloca" >&5 +echo $ECHO_N "checking for alloca... $ECHO_C" >&6 +if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8485 "configure" #include "confdefs.h" -#include <stdio.h> +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + int main (void) { -printf("Hello") +char *p = (char *) alloca (1); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8147: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:8517: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8150: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8153: \"$ac_try\"") >&5 + echo "$as_me:8520: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:8523: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8156: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:8526: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_alloca_works=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes +cat "conftest.$ac_ext" >&5 +ac_cv_func_alloca_works=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi +echo "$as_me:8536: result: $ac_cv_func_alloca_works" >&5 +echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 -echo "${as_me:-configure}:8173: testing adding $cf_add_incdir to include-path ..." 1>&5 +if test $ac_cv_func_alloca_works = yes; then - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +cat >>confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done -fi +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. - if test -n "$cf_cv_library_file_iconv" ; then - LIBICONV="-liconv" +ALLOCA="alloca.$ac_objext" -if test -n "$cf_cv_library_path_iconv" ; then - for cf_add_libdir in $cf_cv_library_path_iconv - do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 +cat >>confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF -echo "${as_me:-configure}:8212: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "$as_me:8557: checking whether \`alloca.c' needs Cray hooks" >&5 +echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 +if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8563 "configure" +#include "confdefs.h" +#if defined(CRAY) && ! defined(CRAY2) +webecray +#else +wenotbecray +#endif - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then + ac_cv_os_cray=yes +else + ac_cv_os_cray=no fi +rm -rf conftest* - fi - fi - -echo "$as_me:8223: checking for nl_langinfo and CODESET" >&5 -echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 -if test "${am_cv_langinfo_codeset+set}" = set; then +fi +echo "$as_me:8581: result: $ac_cv_os_cray" >&5 +echo "${ECHO_T}$ac_cv_os_cray" >&6 +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:8586: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 8229 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 8592 "configure" #include "confdefs.h" -#include <langinfo.h> +#define $ac_func autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef $ac_func + +#ifdef __cplusplus +extern "C" +#endif + +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (void); + int main (void) { -char* cs = nl_langinfo(CODESET); + +/* The GNU C library defines stubs 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_$ac_func) || defined (__stub___$ac_func) +#error found stub for $ac_func +#endif + + return $ac_func (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8241: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:8623: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8244: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8247: \"$ac_try\"") >&5 + echo "$as_me:8626: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:8629: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8250: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - am_cv_langinfo_codeset=yes + echo "$as_me:8632: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -am_cv_langinfo_codeset=no +cat "conftest.$ac_ext" >&5 +eval "$as_ac_var=no" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:8261: result: $am_cv_langinfo_codeset" >&5 -echo "${ECHO_T}$am_cv_langinfo_codeset" >&6 - if test $am_cv_langinfo_codeset = yes; then +echo "$as_me:8642: result: `eval echo '${'"$as_ac_var"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6 +if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then -cat >>confdefs.h <<\EOF -#define HAVE_LANGINFO_CODESET 1 +cat >>confdefs.h <<EOF +#define CRAY_STACKSEG_END $ac_func EOF - fi + break +fi - if test $ac_cv_header_locale_h = yes; then - echo "$as_me:8272: checking for LC_MESSAGES" >&5 -echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 -if test "${am_cv_val_LC_MESSAGES+set}" = set; then + done +fi + +echo "$as_me:8656: checking stack direction for C alloca" >&5 +echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 +if test "${ac_cv_c_stack_direction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 8278 "configure" + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 8665 "configure" #include "confdefs.h" -#include <locale.h> +int +find_stack_direction (void) +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + int main (void) { -return LC_MESSAGES - ; - return 0; + $ac_main_return (find_stack_direction () < 0); } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8290: \"$ac_link\"") >&5 +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:8688: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8293: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8296: \"$ac_try\"") >&5 + echo "$as_me:8691: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:8693: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8299: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - am_cv_val_LC_MESSAGES=yes + echo "$as_me:8696: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_c_stack_direction=1 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -am_cv_val_LC_MESSAGES=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_c_stack_direction=-1 fi -echo "$as_me:8309: result: $am_cv_val_LC_MESSAGES" >&5 -echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 - if test $am_cv_val_LC_MESSAGES = yes; then +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi +fi +echo "$as_me:8708: result: $ac_cv_c_stack_direction" >&5 +echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 -cat >>confdefs.h <<\EOF -#define HAVE_LC_MESSAGES 1 +cat >>confdefs.h <<EOF +#define STACK_DIRECTION $ac_cv_c_stack_direction EOF - fi fi - echo "$as_me:8319: checking whether NLS is requested" >&5 -echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 -# Check whether --enable-nls or --disable-nls was given. -if test "${enable_nls+set}" = set; then - enableval="$enable_nls" - USE_NLS=$enableval +for ac_header in stdlib.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:8720: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - USE_NLS=no -fi; - echo "$as_me:8329: result: $USE_NLS" >&5 -echo "${ECHO_T}$USE_NLS" >&6 - - BUILD_INCLUDED_LIBINTL=no - USE_INCLUDED_LIBINTL=no - INTLLIBS= - - if test "$USE_NLS" = "yes"; then - POSUB=po - -cat >>confdefs.h <<\EOF -#define ENABLE_NLS 1 + cat >"conftest.$ac_ext" <<_ACEOF +#line 8726 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:8730: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:8736: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:8755: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 EOF - echo "$as_me:8343: checking whether included gettext is requested" >&5 -echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 +fi +done -# Check whether --with-included-gettext or --without-included-gettext was given. -if test "${with_included_gettext+set}" = set; then - withval="$with_included_gettext" - nls_cv_force_use_gnu_gettext=$withval +for ac_func in getpagesize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:8768: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - nls_cv_force_use_gnu_gettext=no -fi; - echo "$as_me:8353: result: $nls_cv_force_use_gnu_gettext" >&5 -echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 + cat >"conftest.$ac_ext" <<_ACEOF +#line 8774 "configure" +#include "confdefs.h" +#define $ac_func autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef $ac_func - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then - CATOBJEXT=NONE +#ifdef __cplusplus +extern "C" +#endif - cf_save_msgfmt_path="$MSGFMT" - cf_save_xgettext_path="$XGETTEXT" +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (void); - # Extract the first word of "msgfmt", so it can be a program name with args. +int +main (void) +{ -set dummy msgfmt; ac_word=$2 -echo "$as_me:8366: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_MSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case "$MSGFMT" in - ([\\/]*|?:[\\/]*) - ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. - ;; - (*) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word$ac_exeext; then - if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then - ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exeext" - break - fi - fi - 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 - echo "$as_me:8393: result: $MSGFMT" >&5 -echo "${ECHO_T}$MSGFMT" >&6 -else - echo "$as_me:8396: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi +/* The GNU C library defines stubs 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_$ac_func) || defined (__stub___$ac_func) +#error found stub for $ac_func +#endif - # Extract the first word of "gmsgfmt", so it can be a program name with args. -set dummy gmsgfmt; ac_word=$2 -echo "$as_me:8402: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_GMSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:8805: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8808: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:8811: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8814: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + eval "$as_ac_var=yes" else - case $GMSGFMT in - [\\/]* | ?:[\\/]*) - ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. - ;; - *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_GMSGFMT="$ac_dir/$ac_word" - echo "$as_me:8419: found $ac_dir/$ac_word" >&5 - break + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +eval "$as_ac_var=no" fi -done - - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; -esac +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -GMSGFMT=$ac_cv_path_GMSGFMT +echo "$as_me:8824: result: `eval echo '${'"$as_ac_var"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6 +if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF -if test -n "$GMSGFMT"; then - echo "$as_me:8431: result: $GMSGFMT" >&5 -echo "${ECHO_T}$GMSGFMT" >&6 -else - echo "$as_me:8434: result: no" >&5 -echo "${ECHO_T}no" >&6 fi +done - # Extract the first word of "xgettext", so it can be a program name with args. - -set dummy xgettext; ac_word=$2 -echo "$as_me:8441: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_XGETTEXT+set}" = set; then +echo "$as_me:8834: checking for working mmap" >&5 +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - case "$XGETTEXT" in - ([\\/]*|?:[\\/]*) - ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. - ;; - (*) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word$ac_exeext; then - if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then - ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exeext" - break - fi - fi - 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 - echo "$as_me:8468: result: $XGETTEXT" >&5 -echo "${ECHO_T}$XGETTEXT" >&6 + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no else - echo "$as_me:8471: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - cf_save_OPTS_1="$CPPFLAGS" - if test "x$cf_save_msgfmt_path" = "x$MSGFMT" && \ - test "x$cf_save_xgettext_path" = "x$XGETTEXT" ; then - -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= - -for cf_add_cflags in -DIGNORE_MSGFMT_HACK -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes + cat >"conftest.$ac_ext" <<_ACEOF +#line 8843 "configure" +#include "confdefs.h" +$ac_includes_default +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propogated back to all the places they're supposed to be. - if test $cf_fix_cppflags = yes ; then + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +#include <fcntl.h> +#include <sys/mman.h> - continue - elif test "${cf_tst_cflags}" = "\"'" ; then +#if !STDC_HEADERS && !HAVE_STDLIB_H +char *malloc (); +#endif - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +/* This mess was copied from the GNU getpagesize.h. */ +#if !HAVE_GETPAGESIZE +/* Assume that all systems that can run configure have sys/param.h. */ +# if !HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif - continue - fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` - -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# if HAVE_SYS_PARAM_H +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ - ;; - esac +#endif /* no HAVE_GETPAGESIZE */ - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" +int +main (void) +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; - ;; - esac - ;; - (*) + pagesize = getpagesize (); - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + $ac_main_return (1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + $ac_main_return (1); + if (write (fd, data, pagesize) != pagesize) + $ac_main_return (1); + close (fd); - ;; - esac - ;; -(yes) + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + $ac_main_return (1); + data2 = (char *) malloc (2 * pagesize); + if (!data2) + $ac_main_return (1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + $ac_main_return (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + $ac_main_return (1); - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + $ac_main_return (1); + if (read (fd, data3, pagesize) != pagesize) + $ac_main_return (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + $ac_main_return (1); + close (fd); + $ac_main_return (0); +} +_ACEOF +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:8970: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8973: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:8975: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8978: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi +fi +echo "$as_me:8990: result: $ac_cv_func_mmap_fixed_mapped" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` +cat >>confdefs.h <<\EOF +#define HAVE_MMAP 1 +EOF - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done +fi +rm -f conftest.mmap -if test -n "$cf_new_cflags" ; then +echo "$as_me:9001: checking whether we are using the GNU C Library 2.1 or newer" >&5 +echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6 +if test "${ac_cv_gnu_library_2_1+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 9007 "configure" +#include "confdefs.h" - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no fi +rm -rf conftest* -if test -n "$cf_new_cppflags" ; then +fi +echo "$as_me:9027: result: $ac_cv_gnu_library_2_1" >&5 +echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6 - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + GLIBC21="$ac_cv_gnu_library_2_1" -fi +cf_makefile=makefile -if test -n "$cf_new_extra_cppflags" ; then +test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d "$srcdir/po" && cd "$srcdir/po" && echo *.po|sed -e 's/\.po//g' -e 's/*//'` - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +# Allow override of "config.h" definition: +: ${CONFIG_H:=config.h} +if test -z "$PACKAGE" ; then + { { echo "$as_me:9040: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&5 +echo "$as_me: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&2;} + { (exit 1); exit 1; }; } fi - fi - - cf_save_LIBS_1="$LIBS" +if test -z "$VERSION" ; then +if test -f "$srcdir/VERSION" ; then + VERSION=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1` +else + VERSION=unknown +fi +fi -cf_add_libs="$LIBICONV" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS +for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" - -# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these -# will be set on completion of the AC_TRY_LINK below. -cf_cv_header_path_intl= -cf_cv_library_path_intl= - -echo "${as_me:-configure}:8602: testing Starting FIND_LINKAGE(intl,) ..." 1>&5 +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:9057: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 9063 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:9067: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:9073: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:9092: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF -cf_save_LIBS="$LIBS" +fi +done -cat >conftest.$ac_ext <<_ACEOF -#line 8607 "configure" +for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:9107: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 9113 "configure" #include "confdefs.h" +#define $ac_func autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef $ac_func -#include <libintl.h> -extern int _nl_msg_cat_cntr; +#ifdef __cplusplus +extern "C" +#endif + +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (void); int main (void) { - bindtextdomain ("", ""); - return (int) gettext ("") - -#ifndef IGNORE_MSGFMT_HACK - + _nl_msg_cat_cntr +/* The GNU C library defines stubs 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_$ac_func) || defined (__stub___$ac_func) +#error found stub for $ac_func #endif + return $ac_func (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8629: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:9144: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8632: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8635: \"$ac_try\"") >&5 + echo "$as_me:9147: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:9150: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8638: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_find_linkage_intl=yes - cf_cv_header_path_intl=/usr/include - cf_cv_library_path_intl=/usr/lib - + echo "$as_me:9153: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 +eval "$as_ac_var=no" +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi +echo "$as_me:9163: result: `eval echo '${'"$as_ac_var"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6 +if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF -LIBS="-lintl $cf_save_LIBS" +fi +done -cat >conftest.$ac_ext <<_ACEOF -#line 8652 "configure" -#include "confdefs.h" +# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval="$with_libiconv_prefix" -#include <libintl.h> -extern int _nl_msg_cat_cntr; +case "$withval" in +(no) + ;; +(yes) + ;; +(*) -int -main (void) -{ +for cf_searchpath in `echo "$withval" | tr $PATH_SEPARATOR ' '`; do + if test -d "$cf_searchpath/include" ; then - bindtextdomain ("", ""); - return (int) gettext ("") +if test -n "$cf_searchpath/include" ; then + for cf_add_incdir in $cf_searchpath/include + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi -#ifndef IGNORE_MSGFMT_HACK - + _nl_msg_cat_cntr -#endif + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >"conftest.$ac_ext" <<_ACEOF +#line 9214 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main (void) +{ +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8674: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:9226: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:8677: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8680: \"$ac_try\"") >&5 + echo "$as_me:9229: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:9232: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8683: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_find_linkage_intl=yes - cf_cv_header_path_intl=/usr/include - cf_cv_library_path_intl=/usr/lib - cf_cv_library_file_intl="-lintl" - + echo "$as_me:9235: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - cf_cv_find_linkage_intl=no - LIBS="$cf_save_LIBS" - - test -n "$verbose" && echo " find linkage for intl library" 1>&6 - -echo "${as_me:-configure}:8700: testing find linkage for intl library ..." 1>&5 - -echo "${as_me:-configure}:8702: testing Searching for headers in FIND_LINKAGE(intl,) ..." 1>&5 - - cf_save_CPPFLAGS="$CPPFLAGS" - cf_test_CPPFLAGS="$CPPFLAGS" +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi -cf_search= + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -# collect the current set of include-directories from compiler flags -cf_header_path_list="" -if test -n "${CFLAGS}${CPPFLAGS}" ; then - for cf_header_path in $CPPFLAGS $CFLAGS - do - case $cf_header_path in - (-I*) - cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` +echo "${as_me:-configure}:9252: testing adding $cf_add_incdir to include-path ..." 1>&5 -test "x$cf_header_path" != "xNONE" && \ -test -d "$cf_header_path" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" - test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" - test -d $cf_header_path/include/intl && cf_search="$cf_search $cf_header_path/include/intl" - test -d $cf_header_path/include/intl/include && cf_search="$cf_search $cf_header_path/include/intl/include" - test -d $cf_header_path/intl/include && cf_search="$cf_search $cf_header_path/intl/include" - test -d $cf_header_path/intl/include/intl && cf_search="$cf_search $cf_header_path/intl/include/intl" -} + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - cf_header_path_list="$cf_header_path_list $cf_search" - ;; - esac + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi done + done fi -# add the variations for the package we are looking for - -cf_search= - -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $prefix" - test -d $prefix/include && cf_search="$cf_search $prefix/include" - test -d $prefix/include/intl && cf_search="$cf_search $prefix/include/intl" - test -d $prefix/include/intl/include && cf_search="$cf_search $prefix/include/intl/include" - test -d $prefix/intl/include && cf_search="$cf_search $prefix/intl/include" - test -d $prefix/intl/include/intl && cf_search="$cf_search $prefix/intl/include/intl" -} - -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do - -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" - test -d $cf_subdir_prefix/include/intl && cf_search="$cf_search $cf_subdir_prefix/include/intl" - test -d $cf_subdir_prefix/include/intl/include && cf_search="$cf_search $cf_subdir_prefix/include/intl/include" - test -d $cf_subdir_prefix/intl/include && cf_search="$cf_search $cf_subdir_prefix/intl/include" - test -d $cf_subdir_prefix/intl/include/intl && cf_search="$cf_search $cf_subdir_prefix/intl/include/intl" -} - -done - -test "$includedir" != NONE && \ -test "$includedir" != "/usr/include" && \ -test -d "$includedir" && { - test -d $includedir && cf_search="$cf_search $includedir" - test -d $includedir/intl && cf_search="$cf_search $includedir/intl" -} - -test "$oldincludedir" != NONE && \ -test "$oldincludedir" != "/usr/include" && \ -test -d "$oldincludedir" && { - test -d $oldincludedir && cf_search="$cf_search $oldincludedir" - test -d $oldincludedir/intl && cf_search="$cf_search $oldincludedir/intl" -} - -cf_search="$cf_search $cf_header_path_list" + elif test -d "$cf_searchpath/../include" ; then - for cf_cv_header_path_intl in $cf_search +if test -n "$cf_searchpath/../include" ; then + for cf_add_incdir in $cf_searchpath/../include + do + while test "$cf_add_incdir" != /usr/include do - if test -d $cf_cv_header_path_intl ; then - test -n "$verbose" && echo " ... testing $cf_cv_header_path_intl" 1>&6 - -echo "${as_me:-configure}:8793: testing ... testing $cf_cv_header_path_intl ..." 1>&5 + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi - CPPFLAGS="$cf_save_CPPFLAGS" + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_intl" + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - cat >conftest.$ac_ext <<_ACEOF -#line 8801 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 9298 "configure" #include "confdefs.h" - -#include <libintl.h> -extern int _nl_msg_cat_cntr; - +#include <stdio.h> int main (void) { - - bindtextdomain ("", ""); - return (int) gettext ("") - -#ifndef IGNORE_MSGFMT_HACK - + _nl_msg_cat_cntr -#endif - +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:8823: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:9310: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:8826: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:8829: \"$ac_try\"") >&5 + echo "$as_me:9313: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:9316: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8832: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - test -n "$verbose" && echo " ... found intl headers in $cf_cv_header_path_intl" 1>&6 - -echo "${as_me:-configure}:8837: testing ... found intl headers in $cf_cv_header_path_intl ..." 1>&5 - - cf_cv_find_linkage_intl=maybe - cf_test_CPPFLAGS="$CPPFLAGS" - break + echo "$as_me:9319: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - CPPFLAGS="$cf_save_CPPFLAGS" - +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi fi - done - - if test "$cf_cv_find_linkage_intl" = maybe ; then - -echo "${as_me:-configure}:8855: testing Searching for intl library in FIND_LINKAGE(intl,) ..." 1>&5 - - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" - if test "$cf_cv_find_linkage_intl" != yes ; then + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -cf_search= -cf_library_path_list="" -if test -n "${LDFLAGS}${LIBS}" ; then - for cf_library_path in $LDFLAGS $LIBS - do - case $cf_library_path in - (-L*) - cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` +echo "${as_me:-configure}:9336: testing adding $cf_add_incdir to include-path ..." 1>&5 -test "x$cf_library_path" != "xNONE" && \ -test -d "$cf_library_path" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" - test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" - test -d $cf_library_path/lib/intl && cf_search="$cf_search $cf_library_path/lib/intl" - test -d $cf_library_path/lib/intl/lib && cf_search="$cf_search $cf_library_path/lib/intl/lib" - test -d $cf_library_path/intl/lib && cf_search="$cf_search $cf_library_path/intl/lib" - test -d $cf_library_path/intl/lib/intl && cf_search="$cf_search $cf_library_path/intl/lib/intl" -} + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - cf_library_path_list="$cf_library_path_list $cf_search" - ;; - esac + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi done + done fi -cf_search= - -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $prefix" - test -d $prefix/lib && cf_search="$cf_search $prefix/lib" - test -d $prefix/lib/intl && cf_search="$cf_search $prefix/lib/intl" - test -d $prefix/lib/intl/lib && cf_search="$cf_search $prefix/lib/intl/lib" - test -d $prefix/intl/lib && cf_search="$cf_search $prefix/intl/lib" - test -d $prefix/intl/lib/intl && cf_search="$cf_search $prefix/intl/lib/intl" -} + else +{ { echo "$as_me:9354: error: cannot find libiconv under $withval" >&5 +echo "$as_me: error: cannot find libiconv under $withval" >&2;} + { (exit 1); exit 1; }; } + fi + if test -d "$cf_searchpath/lib" ; then -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do +if test -n "$cf_searchpath/lib" ; then + for cf_add_libdir in $cf_searchpath/lib + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" - test -d $cf_subdir_prefix/lib/intl && cf_search="$cf_search $cf_subdir_prefix/lib/intl" - test -d $cf_subdir_prefix/lib/intl/lib && cf_search="$cf_search $cf_subdir_prefix/lib/intl/lib" - test -d $cf_subdir_prefix/intl/lib && cf_search="$cf_search $cf_subdir_prefix/intl/lib" - test -d $cf_subdir_prefix/intl/lib/intl && cf_search="$cf_search $cf_subdir_prefix/intl/lib/intl" -} +echo "${as_me:-configure}:9379: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + elif test -d "$cf_searchpath" ; then + +if test -n "$cf_searchpath" ; then + for cf_add_libdir in $cf_searchpath + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 +echo "${as_me:-configure}:9408: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + else +{ { echo "$as_me:9417: error: cannot find libiconv under $withval" >&5 +echo "$as_me: error: cannot find libiconv under $withval" >&2;} + { (exit 1); exit 1; }; } + fi done -cf_search="$cf_library_path_list $cf_search" + ;; +esac - for cf_cv_library_path_intl in $cf_search - do - if test -d $cf_cv_library_path_intl ; then - test -n "$verbose" && echo " ... testing $cf_cv_library_path_intl" 1>&6 +fi; -echo "${as_me:-configure}:8930: testing ... testing $cf_cv_library_path_intl ..." 1>&5 + echo "$as_me:9428: checking for iconv" >&5 +echo $ECHO_N "checking for iconv... $ECHO_C" >&6 +if test "${am_cv_func_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else - CPPFLAGS="$cf_test_CPPFLAGS" - LIBS="-lintl $cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_intl" - cat >conftest.$ac_ext <<_ACEOF -#line 8936 "configure" +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_iconv= +cf_cv_library_path_iconv= + +echo "${as_me:-configure}:9439: testing Starting FIND_LINKAGE(iconv,) ..." 1>&5 + +cf_save_LIBS="$LIBS" + +cat >"conftest.$ac_ext" <<_ACEOF +#line 9444 "configure" #include "confdefs.h" -#include <libintl.h> -extern int _nl_msg_cat_cntr; +#include <stdlib.h> +#include <iconv.h> int main (void) { - bindtextdomain ("", ""); - return (int) gettext ("") - -#ifndef IGNORE_MSGFMT_HACK - + _nl_msg_cat_cntr -#endif + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8958: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:9463: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8961: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8964: \"$ac_try\"") >&5 + echo "$as_me:9466: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:9469: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8967: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - test -n "$verbose" && echo " ... found intl library in $cf_cv_library_path_intl" 1>&6 + echo "$as_me:9472: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then -echo "${as_me:-configure}:8972: testing ... found intl library in $cf_cv_library_path_intl ..." 1>&5 + cf_cv_find_linkage_iconv=yes + cf_cv_header_path_iconv=/usr/include + cf_cv_library_path_iconv=/usr/lib - cf_cv_find_linkage_intl=yes - cf_cv_library_file_intl="-lintl" - break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS" +LIBS="-liconv $cf_save_LIBS" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - fi - done - CPPFLAGS="$cf_save_CPPFLAGS" - LDFLAGS="$cf_save_LDFLAGS" - fi +cat >"conftest.$ac_ext" <<_ACEOF +#line 9486 "configure" +#include "confdefs.h" - else - cf_cv_find_linkage_intl=no - fi +#include <stdlib.h> +#include <iconv.h> -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +int +main (void) +{ -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); -LIBS="$cf_save_LIBS" + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:9505: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:9508: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:9511: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9514: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_find_linkage_iconv=yes + cf_cv_header_path_iconv=/usr/include + cf_cv_library_path_iconv=/usr/lib + cf_cv_library_file_iconv="-liconv" -if test "$cf_cv_find_linkage_intl" = yes ; then -cf_cv_func_gettext=yes else -cf_cv_func_gettext=no + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 + + cf_cv_find_linkage_iconv=no + LIBS="$cf_save_LIBS" + + test -n "$verbose" && echo " find linkage for iconv library" 1>&6 + +echo "${as_me:-configure}:9531: testing find linkage for iconv library ..." 1>&5 + +echo "${as_me:-configure}:9533: testing Searching for headers in FIND_LINKAGE(iconv,) ..." 1>&5 + + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" + +cf_search= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case "$cf_header_path" in + (-I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + +test "x$cf_header_path" != "xNONE" && \ +test -d "$cf_header_path" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" + test -d "$cf_header_path/include" && cf_search="$cf_search $cf_header_path/include" + test -d "$cf_header_path/include/iconv" && cf_search="$cf_search $cf_header_path/include/iconv" + test -d "$cf_header_path/include/iconv/include" && cf_search="$cf_search $cf_header_path/include/iconv/include" + test -d "$cf_header_path/iconv/include" && cf_search="$cf_search $cf_header_path/iconv/include" + test -d "$cf_header_path/iconv/include/iconv" && cf_search="$cf_search $cf_header_path/iconv/include/iconv" +} + + cf_header_path_list="$cf_header_path_list $cf_search" + ;; + esac + done fi - echo "$as_me:9011: checking for libintl.h and gettext()" >&5 -echo $ECHO_N "checking for libintl.h and gettext()... $ECHO_C" >&6 - echo "$as_me:9013: result: $cf_cv_func_gettext" >&5 -echo "${ECHO_T}$cf_cv_func_gettext" >&6 +# add the variations for the package we are looking for - LIBS="$cf_save_LIBS_1" - CPPFLAGS="$cf_save_OPTS_1" +cf_search= - if test "$cf_cv_func_gettext" = yes ; then +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d "$prefix/include" && cf_search="$cf_search $prefix/include" + test -d "$prefix/include/iconv" && cf_search="$cf_search $prefix/include/iconv" + test -d "$prefix/include/iconv/include" && cf_search="$cf_search $prefix/include/iconv/include" + test -d "$prefix/iconv/include" && cf_search="$cf_search $prefix/iconv/include" + test -d "$prefix/iconv/include/iconv" && cf_search="$cf_search $prefix/iconv/include/iconv" +} -cat >>confdefs.h <<\EOF -#define HAVE_LIBINTL_H 1 -EOF +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do - if test "$PACKAGE" != gettext; then +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include" + test -d "$cf_subdir_prefix/include/iconv" && cf_search="$cf_search $cf_subdir_prefix/include/iconv" + test -d "$cf_subdir_prefix/include/iconv/include" && cf_search="$cf_search $cf_subdir_prefix/include/iconv/include" + test -d "$cf_subdir_prefix/iconv/include" && cf_search="$cf_search $cf_subdir_prefix/iconv/include" + test -d "$cf_subdir_prefix/iconv/include/iconv" && cf_search="$cf_search $cf_subdir_prefix/iconv/include/iconv" +} -cat >>confdefs.h <<\EOF -#define HAVE_GETTEXT 1 -EOF +done -if test -n "$cf_cv_header_path_intl" ; then - for cf_add_incdir in $cf_cv_header_path_intl - do - while test $cf_add_incdir != /usr/include +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d "$includedir" && cf_search="$cf_search $includedir" + test -d "$includedir/iconv" && cf_search="$cf_search $includedir/iconv" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d "$oldincludedir" && cf_search="$cf_search $oldincludedir" + test -d "$oldincludedir/iconv" && cf_search="$cf_search $oldincludedir/iconv" +} + +cf_search="$cf_search $cf_header_path_list" + + for cf_cv_header_path_iconv in $cf_search do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi + if test -d "$cf_cv_header_path_iconv" ; then + test -n "$verbose" && echo " ... testing $cf_cv_header_path_iconv" 1>&6 - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS +echo "${as_me:-configure}:9624: testing ... testing $cf_cv_header_path_iconv ..." 1>&5 + + CPPFLAGS="$cf_save_CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_iconv" - cat >conftest.$ac_ext <<_ACEOF -#line 9058 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 9632 "configure" #include "confdefs.h" -#include <stdio.h> + +#include <stdlib.h> +#include <iconv.h> + int main (void) { -printf("Hello") + + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:9070: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:9651: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:9073: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:9076: \"$ac_try\"") >&5 + echo "$as_me:9654: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:9657: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9079: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:9660: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + test -n "$verbose" && echo " ... found iconv headers in $cf_cv_header_path_iconv" 1>&6 + +echo "${as_me:-configure}:9665: testing ... found iconv headers in $cf_cv_header_path_iconv ..." 1>&5 + + cf_cv_find_linkage_iconv=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes +cat "conftest.$ac_ext" >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi + done - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - -echo "${as_me:-configure}:9096: testing adding $cf_add_incdir to include-path ..." 1>&5 + if test "$cf_cv_find_linkage_iconv" = maybe ; then - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +echo "${as_me:-configure}:9683: testing Searching for iconv library in FIND_LINKAGE(iconv,) ..." 1>&5 - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done -fi + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" - if test -n "$cf_cv_library_file_intl" ; then - INTLLIBS="$cf_cv_library_file_intl $LIBICONV" + if test "$cf_cv_find_linkage_iconv" != yes ; then -if test -n "$cf_cv_library_path_intl" ; then - for cf_add_libdir in $cf_cv_library_path_intl +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + case "$cf_library_path" in + (-L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -echo "${as_me:-configure}:9135: testing adding $cf_add_libdir to library-path ..." 1>&5 +test "x$cf_library_path" != "xNONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d "$cf_library_path/lib" && cf_search="$cf_search $cf_library_path/lib" + test -d "$cf_library_path/lib/iconv" && cf_search="$cf_search $cf_library_path/lib/iconv" + test -d "$cf_library_path/lib/iconv/lib" && cf_search="$cf_search $cf_library_path/lib/iconv/lib" + test -d "$cf_library_path/iconv/lib" && cf_search="$cf_search $cf_library_path/iconv/lib" + test -d "$cf_library_path/iconv/lib/iconv" && cf_search="$cf_search $cf_library_path/iconv/lib/iconv" +} - INTLLIBS="-L$cf_add_libdir $INTLLIBS" - fi - fi + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac done fi - fi +cf_search= - gt_save_LIBS="$LIBS" - LIBS="$LIBS $INTLLIBS" +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib" + test -d "$prefix/lib/iconv" && cf_search="$cf_search $prefix/lib/iconv" + test -d "$prefix/lib/iconv/lib" && cf_search="$cf_search $prefix/lib/iconv/lib" + test -d "$prefix/iconv/lib" && cf_search="$cf_search $prefix/iconv/lib" + test -d "$prefix/iconv/lib/iconv" && cf_search="$cf_search $prefix/iconv/lib/iconv" +} -for ac_func in dcgettext +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:9151: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 9157 "configure" + +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib" + test -d "$cf_subdir_prefix/lib/iconv" && cf_search="$cf_search $cf_subdir_prefix/lib/iconv" + test -d "$cf_subdir_prefix/lib/iconv/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/iconv/lib" + test -d "$cf_subdir_prefix/iconv/lib" && cf_search="$cf_search $cf_subdir_prefix/iconv/lib" + test -d "$cf_subdir_prefix/iconv/lib/iconv" && cf_search="$cf_search $cf_subdir_prefix/iconv/lib/iconv" +} + +done + +cf_search="$cf_library_path_list $cf_search" + + for cf_cv_library_path_iconv in $cf_search + do + if test -d "$cf_cv_library_path_iconv" ; then + test -n "$verbose" && echo " ... testing $cf_cv_library_path_iconv" 1>&6 + +echo "${as_me:-configure}:9758: testing ... testing $cf_cv_library_path_iconv ..." 1>&5 + + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-liconv $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_iconv" + cat >"conftest.$ac_ext" <<_ACEOF +#line 9764 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -char (*f) (); + +#include <stdlib.h> +#include <iconv.h> int main (void) { -/* 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_$ac_func) || defined (__stub___$ac_func) -choke me -#else -f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif + + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:9188: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:9783: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:9191: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:9194: \"$ac_try\"") >&5 + echo "$as_me:9786: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:9789: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9197: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" + echo "$as_me:9792: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + test -n "$verbose" && echo " ... found iconv library in $cf_cv_library_path_iconv" 1>&6 + +echo "${as_me:-configure}:9797: testing ... found iconv library in $cf_cv_library_path_iconv ..." 1>&5 + + cf_cv_find_linkage_iconv=yes + cf_cv_library_file_iconv="-liconv" + break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -eval "$as_ac_var=no" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:9207: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -EOF +cat "conftest.$ac_ext" >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" fi -done +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + fi + done + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi - LIBS="$gt_save_LIBS" + else + cf_cv_find_linkage_iconv=no + fi - CATOBJEXT=.gmo - fi - elif test -z "$MSGFMT" || test -z "$XGETTEXT" ; then - { echo "$as_me:9222: WARNING: disabling NLS feature" >&5 -echo "$as_me: WARNING: disabling NLS feature" >&2;} - sed -e /ENABLE_NLS/d confdefs.h >confdefs.tmp - mv confdefs.tmp confdefs.h - ALL_LINGUAS= - CATOBJEXT=.ignored - MSGFMT=":" - GMSGFMT=":" - XGETTEXT=":" - POSUB= - BUILD_INCLUDED_LIBINTL=no - USE_INCLUDED_LIBINTL=no - USE_NLS=no - nls_cv_use_gnu_gettext=no - fi +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" - if test "$CATOBJEXT" = "NONE"; then - nls_cv_use_gnu_gettext=maybe - fi - fi +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" - if test "$nls_cv_use_gnu_gettext" != "no"; then - CATOBJEXT=.gmo - if test -f $srcdir/intl/libintl.h ; then - INTLOBJS="\$(GETTOBJS)" - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes - INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV" - LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` - elif test "$nls_cv_use_gnu_gettext" = "yes"; then - nls_cv_use_gnu_gettext=no - { echo "$as_me:9253: WARNING: no NLS library is packaged with this application" >&5 -echo "$as_me: WARNING: no NLS library is packaged with this application" >&2;} - fi - fi +LIBS="$cf_save_LIBS" - if test "$GMSGFMT" != ":"; then - if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then - : ; - else - { echo "$as_me:9262: WARNING: found msgfmt program is not GNU msgfmt" >&5 -echo "$as_me: WARNING: found msgfmt program is not GNU msgfmt" >&2;} - fi - fi +if test "$cf_cv_find_linkage_iconv" = yes ; then +am_cv_func_iconv=yes +else +am_cv_func_iconv="no, consider installing GNU libiconv" +fi - if test "$XGETTEXT" != ":"; then - if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then - : ; - else - { echo "$as_me:9271: WARNING: found xgettext program is not GNU xgettext" >&5 -echo "$as_me: WARNING: found xgettext program is not GNU xgettext" >&2;} - fi - fi - fi +fi +echo "$as_me:9837: result: $am_cv_func_iconv" >&5 +echo "${ECHO_T}$am_cv_func_iconv" >&6 - if test "$XGETTEXT" != ":"; then - ac_config_commands="$ac_config_commands default-1" + if test "$am_cv_func_iconv" = yes; then - if test "$PACKAGE" = gettext; then - BUILD_INCLUDED_LIBINTL=yes - fi +cat >>confdefs.h <<\EOF +#define HAVE_ICONV 1 +EOF - if test "$nls_cv_use_gnu_gettext" = "yes"; then - for ac_prog in bison -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:9289: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_INTLBISON+set}" = set; then + echo "$as_me:9846: checking if the declaration of iconv() needs const." >&5 +echo $ECHO_N "checking if the declaration of iconv() needs const.... $ECHO_C" >&6 +if test "${am_cv_proto_iconv_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$INTLBISON"; then - ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_INTLBISON="$ac_prog" -echo "$as_me:9304: found $ac_dir/$ac_word" >&5 -break -done -fi -fi -INTLBISON=$ac_cv_prog_INTLBISON -if test -n "$INTLBISON"; then - echo "$as_me:9312: result: $INTLBISON" >&5 -echo "${ECHO_T}$INTLBISON" >&6 -else - echo "$as_me:9315: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi + cat >"conftest.$ac_ext" <<_ACEOF +#line 9853 "configure" +#include "confdefs.h" - test -n "$INTLBISON" && break -done +#include <stdlib.h> +#include <iconv.h> - if test -z "$INTLBISON"; then - ac_verc_fail=yes - else - echo "$as_me:9325: checking version of bison" >&5 -echo $ECHO_N "checking version of bison... $ECHO_C" >&6 - ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - ('') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - (1.2[6-9]*|1.[3-9][0-9]*|[2-9].*) - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - (*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - esac - echo "$as_me:9334: result: $ac_prog_version" >&5 -echo "${ECHO_T}$ac_prog_version" >&6 - fi - if test $ac_verc_fail = yes; then - INTLBISON=: - fi - fi +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif - for lang in $ALL_LINGUAS; do - GMOFILES="$GMOFILES $lang.gmo" - POFILES="$POFILES $lang.po" - done - fi +int +main (void) +{ - nls_cv_header_intl= - nls_cv_header_libgt= + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:9878: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9881: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:9884: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9887: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + am_cv_proto_iconv_const=no +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +am_cv_proto_iconv_const=yes +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" +fi +echo "$as_me:9897: result: $am_cv_proto_iconv_const" >&5 +echo "${ECHO_T}$am_cv_proto_iconv_const" >&6 - DATADIRNAME=share + if test "$am_cv_proto_iconv_const" = yes ; then + am_cv_proto_iconv_arg1="const" + else + am_cv_proto_iconv_arg1="" + fi - INSTOBJEXT=.mo +cat >>confdefs.h <<EOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +EOF - GENCAT=gencat + fi - if test "x$CATOBJEXT" != "x"; then - if test "x$ALL_LINGUAS" = "x"; then - LINGUAS= - else - echo "$as_me:9361: checking for catalogs to be installed" >&5 -echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 - NEW_LINGUAS= - for presentlang in $ALL_LINGUAS; do - useit=no - for desiredlang in ${LINGUAS-$ALL_LINGUAS}; 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 - NEW_LINGUAS="$NEW_LINGUAS $presentlang" - fi - done - LINGUAS=$NEW_LINGUAS - echo "$as_me:9381: result: $LINGUAS" >&5 -echo "${ECHO_T}$LINGUAS" >&6 - fi + LIBICONV= + if test "$cf_cv_find_linkage_iconv" = yes; then - if test -n "$LINGUAS"; then - for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done - fi - fi +if test -n "$cf_cv_header_path_iconv" ; then + for cf_add_incdir in $cf_cv_header_path_iconv + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi - INTL_LIBTOOL_SUFFIX_PREFIX= + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS -if test "$USE_NLS" = yes ; then + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" -# Check whether --with-textdomain or --without-textdomain was given. -if test "${with_textdomain+set}" = set; then - withval="$with_textdomain" - NLS_TEXTDOMAIN=$withval + cat >"conftest.$ac_ext" <<_ACEOF +#line 9942 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main (void) +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:9954: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9957: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:9960: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9963: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else - NLS_TEXTDOMAIN=$PACKAGE -fi; - -cat >>confdefs.h <<EOF -#define NLS_TEXTDOMAIN "$NLS_TEXTDOMAIN" -EOF - + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi -INTLDIR_MAKE= -MSG_DIR_MAKE= -SUB_MAKEFILE= + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -cf_makefile=makefile +echo "${as_me:-configure}:9980: testing adding $cf_add_incdir to include-path ..." 1>&5 -use_our_messages=no -if test "$USE_NLS" = yes ; then -if test -d $srcdir/po ; then -echo "$as_me:9417: checking if we should use included message-library" >&5 -echo $ECHO_N "checking if we should use included message-library... $ECHO_C" >&6 + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" -# Check whether --enable-included-msgs or --disable-included-msgs was given. -if test "${enable_included_msgs+set}" = set; then - enableval="$enable_included_msgs" - use_our_messages=$enableval -else - use_our_messages=yes -fi; -fi -echo "$as_me:9428: result: $use_our_messages" >&5 -echo "${ECHO_T}$use_our_messages" >&6 + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done fi -MSG_DIR_MAKE="#" -if test "$use_our_messages" = yes -then - SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn" - MSG_DIR_MAKE= -fi + if test -n "$cf_cv_library_file_iconv" ; then + LIBICONV="-liconv" -if test "$USE_INCLUDED_LIBINTL" = yes ; then - if test "$nls_cv_force_use_gnu_gettext" = yes ; then - : - elif test "$nls_cv_use_gnu_gettext" = yes ; then - : - else - INTLDIR_MAKE="#" - fi - if test -z "$INTLDIR_MAKE"; then +if test -n "$cf_cv_library_path_iconv" ; then + for cf_add_libdir in $cf_cv_library_path_iconv + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 -cat >>confdefs.h <<\EOF -#define HAVE_LIBGETTEXT_H 1 -EOF +echo "${as_me:-configure}:10019: testing adding $cf_add_libdir to library-path ..." 1>&5 - for cf_makefile in \ - $srcdir/intl/Makefile.in \ - $srcdir/intl/makefile.in - do - if test -f "$cf_makefile" ; then - SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}" - break + LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi - done - fi -else - INTLDIR_MAKE="#" - if test "$USE_NLS" = yes ; then + fi + done +fi -for ac_header in libintl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:9470: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then + fi + fi + +echo "$as_me:10030: checking for nl_langinfo and CODESET" >&5 +echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 +if test "${am_cv_langinfo_codeset+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 9476 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 10036 "configure" #include "confdefs.h" -#include <$ac_header> +#include <langinfo.h> +int +main (void) +{ +char* cs = nl_langinfo(CODESET); (void)cs + ; + return 0; +} _ACEOF -if { (eval echo "$as_me:9480: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:10048: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:9486: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" + echo "$as_me:10051: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:10054: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10057: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + am_cv_langinfo_codeset=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:9505: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -EOF - -fi -done - - fi -fi - -if test -z "$INTLDIR_MAKE" ; then - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I../intl" - +cat "conftest.$ac_ext" >&5 +am_cv_langinfo_codeset=no fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" -if test "$BUILD_INCLUDED_LIBINTL" = yes ; then - GT_YES="#" - GT_NO= -else - GT_YES= - GT_NO="#" fi - -if test "$USE_INCLUDED_LIBINTL" = yes ; then - if test "$nls_cv_force_use_gnu_gettext" = yes ; then - -cat >>confdefs.h <<\EOF -#define HAVE_GETTEXT 1 -EOF - - elif test "$nls_cv_use_gnu_gettext" = yes ; then - -cat >>confdefs.h <<\EOF -#define HAVE_GETTEXT 1 -EOF - - fi - if test -n "$nls_cv_header_intl" ; then +echo "$as_me:10068: result: $am_cv_langinfo_codeset" >&5 +echo "${ECHO_T}$am_cv_langinfo_codeset" >&6 + if test "$am_cv_langinfo_codeset" = yes; then cat >>confdefs.h <<\EOF -#define HAVE_LIBINTL_H 1 +#define HAVE_LANGINFO_CODESET 1 EOF fi -fi -echo "$as_me:9556: checking if -lm needed for math functions" >&5 -echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6 -if test "${cf_cv_need_libm+set}" = set; then + if test "$ac_cv_header_locale_h" = yes; then + echo "$as_me:10079: checking for LC_MESSAGES" >&5 +echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 +if test "${am_cv_val_LC_MESSAGES+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - - cat >conftest.$ac_ext <<_ACEOF -#line 9563 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 10085 "configure" #include "confdefs.h" - - #include <stdio.h> - #include <stdlib.h> - #include <math.h> - +#include <locale.h> int main (void) { -double x = rand(); printf("result = %g\n", sqrt(x)) +return LC_MESSAGES ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:9579: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:10097: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:9582: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:9585: \"$ac_try\"") >&5 + echo "$as_me:10100: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:10103: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9588: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_need_libm=no + echo "$as_me:10106: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + am_cv_val_LC_MESSAGES=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_cv_need_libm=yes +cat "conftest.$ac_ext" >&5 +am_cv_val_LC_MESSAGES=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:9598: result: $cf_cv_need_libm" >&5 -echo "${ECHO_T}$cf_cv_need_libm" >&6 -if test "$cf_cv_need_libm" = yes -then +echo "$as_me:10116: result: $am_cv_val_LC_MESSAGES" >&5 +echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 + if test "$am_cv_val_LC_MESSAGES" = yes; then -cf_add_libs="-lm" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" +cat >>confdefs.h <<\EOF +#define HAVE_LC_MESSAGES 1 +EOF + fi fi + echo "$as_me:10126: checking whether NLS is requested" >&5 +echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 -echo "$as_me:9621: checking if you want to use dmalloc for testing" >&5 -echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6 +# Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=no +fi; + echo "$as_me:10136: result: $USE_NLS" >&5 +echo "${ECHO_T}$USE_NLS" >&6 -# Check whether --with-dmalloc or --without-dmalloc was given. -if test "${with_dmalloc+set}" = set; then - withval="$with_dmalloc" + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + INTLLIBS= -cat >>confdefs.h <<EOF -#define USE_DMALLOC 1 + if test "$USE_NLS" = "yes"; then + POSUB=po + +cat >>confdefs.h <<\EOF +#define ENABLE_NLS 1 EOF - : ${with_cflags:=-g} - : ${with_no_leaks:=yes} - with_dmalloc=yes + echo "$as_me:10150: checking whether included gettext is requested" >&5 +echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 + +# Check whether --with-included-gettext or --without-included-gettext was given. +if test "${with_included_gettext+set}" = set; then + withval="$with_included_gettext" + nls_cv_force_use_gnu_gettext=$withval else - with_dmalloc= + nls_cv_force_use_gnu_gettext=no fi; -echo "$as_me:9638: result: ${with_dmalloc:-no}" >&5 -echo "${ECHO_T}${with_dmalloc:-no}" >&6 + echo "$as_me:10160: result: $nls_cv_force_use_gnu_gettext" >&5 +echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 -case .$with_cflags in -(.*-g*) - case .$CFLAGS in - (.*-g*) - ;; - (*) + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + CATOBJEXT=NONE + + cf_save_msgfmt_path="$MSGFMT" + cf_save_xgettext_path="$XGETTEXT" + + # Extract the first word of "msgfmt", so it can be a program name with args. + +set dummy msgfmt; ac_word=$2 +echo "$as_me:10173: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + ([\\/]*|?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + (*) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_word$ac_exeext" ; then + if "$ac_dir/$ac_word" --statistics /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + 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 + echo "$as_me:10200: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:10203: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:10209: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + echo "$as_me:10226: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:10238: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:10241: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. + +set dummy xgettext; ac_word=$2 +echo "$as_me:10248: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + ([\\/]*|?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + (*) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_word$ac_exeext" ; then + if "$ac_dir/$ac_word" --omit-header /dev/null >/dev/null 2>&1; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + 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 + echo "$as_me:10275: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:10278: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + cf_save_OPTS_1="$CPPFLAGS" + if test "x$cf_save_msgfmt_path" = "x$MSGFMT" && \ + test "x$cf_save_xgettext_path" = "x$XGETTEXT" ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= -for cf_add_cflags in -g +for cf_add_cflags in -DIGNORE_MSGFMT_HACK do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi - ;; - esac - ;; -esac + fi -if test "$with_dmalloc" = yes ; then - echo "$as_me:9752: checking for dmalloc.h" >&5 -echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6 -if test "${ac_cv_header_dmalloc_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 9758 "configure" -#include "confdefs.h" -#include <dmalloc.h> -_ACEOF -if { (eval echo "$as_me:9762: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:9768: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_cv_header_dmalloc_h=yes -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_header_dmalloc_h=no -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:9787: result: $ac_cv_header_dmalloc_h" >&5 -echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6 -if test $ac_cv_header_dmalloc_h = yes; then + cf_save_LIBS_1="$LIBS" -echo "$as_me:9791: checking for dmalloc_debug in -ldmalloc" >&5 -echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6 -if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldmalloc $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 9799 "configure" +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $LIBICONV; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_intl= +cf_cv_library_path_intl= + +echo "${as_me:-configure}:10409: testing Starting FIND_LINKAGE(intl,) ..." 1>&5 + +cf_save_LIBS="$LIBS" + +cat >"conftest.$ac_ext" <<_ACEOF +#line 10414 "configure" #include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dmalloc_debug (); +#include <libintl.h> +extern int _nl_msg_cat_cntr; + int main (void) { -dmalloc_debug (); + + bindtextdomain ("", ""); + return (int) gettext ("") + +#ifndef IGNORE_MSGFMT_HACK + + _nl_msg_cat_cntr +#endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:9818: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:10436: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:9821: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:9824: \"$ac_try\"") >&5 + echo "$as_me:10439: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:10442: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9827: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dmalloc_dmalloc_debug=yes + echo "$as_me:10445: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_find_linkage_intl=yes + cf_cv_header_path_intl=/usr/include + cf_cv_library_path_intl=/usr/lib + else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dmalloc_dmalloc_debug=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:9838: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 -echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6 -if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then - cat >>confdefs.h <<EOF -#define HAVE_LIBDMALLOC 1 -EOF +cat "conftest.$ac_ext" >&5 - LIBS="-ldmalloc $LIBS" +LIBS="-lintl $cf_save_LIBS" -fi +cat >"conftest.$ac_ext" <<_ACEOF +#line 10459 "configure" +#include "confdefs.h" -fi +#include <libintl.h> +extern int _nl_msg_cat_cntr; -fi +int +main (void) +{ -echo "$as_me:9853: checking if you want to use dbmalloc for testing" >&5 -echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6 + bindtextdomain ("", ""); + return (int) gettext ("") -# Check whether --with-dbmalloc or --without-dbmalloc was given. -if test "${with_dbmalloc+set}" = set; then - withval="$with_dbmalloc" +#ifndef IGNORE_MSGFMT_HACK + + _nl_msg_cat_cntr +#endif -cat >>confdefs.h <<EOF -#define USE_DBMALLOC 1 -EOF + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:10481: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10484: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:10487: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10490: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_find_linkage_intl=yes + cf_cv_header_path_intl=/usr/include + cf_cv_library_path_intl=/usr/lib + cf_cv_library_file_intl="-lintl" - : ${with_cflags:=-g} - : ${with_no_leaks:=yes} - with_dbmalloc=yes else - with_dbmalloc= -fi; -echo "$as_me:9870: result: ${with_dbmalloc:-no}" >&5 -echo "${ECHO_T}${with_dbmalloc:-no}" >&6 + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 -case .$with_cflags in -(.*-g*) - case .$CFLAGS in - (.*-g*) - ;; - (*) + cf_cv_find_linkage_intl=no + LIBS="$cf_save_LIBS" -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= + test -n "$verbose" && echo " find linkage for intl library" 1>&6 -for cf_add_cflags in -g -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` +echo "${as_me:-configure}:10507: testing find linkage for intl library ..." 1>&5 - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes +echo "${as_me:-configure}:10509: testing Searching for headers in FIND_LINKAGE(intl,) ..." 1>&5 - if test $cf_fix_cppflags = yes ; then + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +cf_search= - continue - elif test "${cf_tst_cflags}" = "\"'" ; then +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case "$cf_header_path" in + (-I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +test "x$cf_header_path" != "xNONE" && \ +test -d "$cf_header_path" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" + test -d "$cf_header_path/include" && cf_search="$cf_search $cf_header_path/include" + test -d "$cf_header_path/include/intl" && cf_search="$cf_search $cf_header_path/include/intl" + test -d "$cf_header_path/include/intl/include" && cf_search="$cf_search $cf_header_path/include/intl/include" + test -d "$cf_header_path/intl/include" && cf_search="$cf_search $cf_header_path/intl/include" + test -d "$cf_header_path/intl/include/intl" && cf_search="$cf_search $cf_header_path/intl/include/intl" +} - continue - fi + cf_header_path_list="$cf_header_path_list $cf_search" ;; esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` - -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + done +fi - ;; - esac +# add the variations for the package we are looking for - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" +cf_search= - ;; - esac - ;; - (*) +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d "$prefix/include" && cf_search="$cf_search $prefix/include" + test -d "$prefix/include/intl" && cf_search="$cf_search $prefix/include/intl" + test -d "$prefix/include/intl/include" && cf_search="$cf_search $prefix/include/intl/include" + test -d "$prefix/intl/include" && cf_search="$cf_search $prefix/intl/include" + test -d "$prefix/intl/include/intl" && cf_search="$cf_search $prefix/intl/include/intl" +} - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do - ;; - esac - ;; -(yes) +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include" + test -d "$cf_subdir_prefix/include/intl" && cf_search="$cf_search $cf_subdir_prefix/include/intl" + test -d "$cf_subdir_prefix/include/intl/include" && cf_search="$cf_search $cf_subdir_prefix/include/intl/include" + test -d "$cf_subdir_prefix/intl/include" && cf_search="$cf_search $cf_subdir_prefix/intl/include" + test -d "$cf_subdir_prefix/intl/include/intl" && cf_search="$cf_search $cf_subdir_prefix/intl/include/intl" +} - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +done - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d "$includedir" && cf_search="$cf_search $includedir" + test -d "$includedir/intl" && cf_search="$cf_search $includedir/intl" +} - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d "$oldincludedir" && cf_search="$cf_search $oldincludedir" + test -d "$oldincludedir/intl" && cf_search="$cf_search $oldincludedir/intl" +} -if test -n "$cf_new_cflags" ; then +cf_search="$cf_search $cf_header_path_list" - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" + for cf_cv_header_path_intl in $cf_search + do + if test -d "$cf_cv_header_path_intl" ; then + test -n "$verbose" && echo " ... testing $cf_cv_header_path_intl" 1>&6 -fi +echo "${as_me:-configure}:10600: testing ... testing $cf_cv_header_path_intl ..." 1>&5 -if test -n "$cf_new_cppflags" ; then + CPPFLAGS="$cf_save_CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_intl" -fi + cat >"conftest.$ac_ext" <<_ACEOF +#line 10608 "configure" +#include "confdefs.h" -if test -n "$cf_new_extra_cppflags" ; then +#include <libintl.h> +extern int _nl_msg_cat_cntr; - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +int +main (void) +{ -fi + bindtextdomain ("", ""); + return (int) gettext ("") - ;; - esac - ;; -esac +#ifndef IGNORE_MSGFMT_HACK + + _nl_msg_cat_cntr +#endif -if test "$with_dbmalloc" = yes ; then - echo "$as_me:9984: checking for dbmalloc.h" >&5 -echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6 -if test "${ac_cv_header_dbmalloc_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 9990 "configure" -#include "confdefs.h" -#include <dbmalloc.h> + ; + return 0; +} _ACEOF -if { (eval echo "$as_me:9994: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:10630: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:10000: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_cv_header_dbmalloc_h=yes -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_header_dbmalloc_h=no -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:10019: result: $ac_cv_header_dbmalloc_h" >&5 -echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6 -if test $ac_cv_header_dbmalloc_h = yes; then - -echo "$as_me:10023: checking for debug_malloc in -ldbmalloc" >&5 -echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6 -if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldbmalloc $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 10031 "configure" -#include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char debug_malloc (); -int -main (void) -{ -debug_malloc (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:10050: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:10053: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:10056: \"$ac_try\"") >&5 + echo "$as_me:10633: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:10636: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10059: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dbmalloc_debug_malloc=yes + echo "$as_me:10639: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + test -n "$verbose" && echo " ... found intl headers in $cf_cv_header_path_intl" 1>&6 + +echo "${as_me:-configure}:10644: testing ... found intl headers in $cf_cv_header_path_intl ..." 1>&5 + + cf_cv_find_linkage_intl=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dbmalloc_debug_malloc=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:10070: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 -echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6 -if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then - cat >>confdefs.h <<EOF -#define HAVE_LIBDBMALLOC 1 -EOF - - LIBS="-ldbmalloc $LIBS" +cat "conftest.$ac_ext" >&5 -fi + CPPFLAGS="$cf_save_CPPFLAGS" fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + fi + done -fi + if test "$cf_cv_find_linkage_intl" = maybe ; then -echo "$as_me:10085: checking if you want to use purify for testing" >&5 -echo $ECHO_N "checking if you want to use purify for testing... $ECHO_C" >&6 +echo "${as_me:-configure}:10662: testing Searching for intl library in FIND_LINKAGE(intl,) ..." 1>&5 -# Check whether --with-purify or --without-purify was given. -if test "${with_purify+set}" = set; then - withval="$with_purify" + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" -cat >>confdefs.h <<EOF -#define USE_PURIFY 1 -EOF + if test "$cf_cv_find_linkage_intl" != yes ; then - : ${with_cflags:=-g} - : ${with_no_leaks:=yes} - with_purify=yes -else - with_purify= -fi; -echo "$as_me:10102: result: ${with_purify:-no}" >&5 -echo "${ECHO_T}${with_purify:-no}" >&6 +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case "$cf_library_path" in + (-L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -case .$with_cflags in -(.*-g*) - case .$CFLAGS in - (.*-g*) - ;; - (*) +test "x$cf_library_path" != "xNONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d "$cf_library_path/lib" && cf_search="$cf_search $cf_library_path/lib" + test -d "$cf_library_path/lib/intl" && cf_search="$cf_search $cf_library_path/lib/intl" + test -d "$cf_library_path/lib/intl/lib" && cf_search="$cf_search $cf_library_path/lib/intl/lib" + test -d "$cf_library_path/intl/lib" && cf_search="$cf_search $cf_library_path/intl/lib" + test -d "$cf_library_path/intl/lib/intl" && cf_search="$cf_search $cf_library_path/intl/lib/intl" +} -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done +fi -for cf_add_cflags in -g -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` +cf_search= - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib" + test -d "$prefix/lib/intl" && cf_search="$cf_search $prefix/lib/intl" + test -d "$prefix/lib/intl/lib" && cf_search="$cf_search $prefix/lib/intl/lib" + test -d "$prefix/intl/lib" && cf_search="$cf_search $prefix/intl/lib" + test -d "$prefix/intl/lib/intl" && cf_search="$cf_search $prefix/intl/lib/intl" +} - if test $cf_fix_cppflags = yes ; then +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib" + test -d "$cf_subdir_prefix/lib/intl" && cf_search="$cf_search $cf_subdir_prefix/lib/intl" + test -d "$cf_subdir_prefix/lib/intl/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/intl/lib" + test -d "$cf_subdir_prefix/intl/lib" && cf_search="$cf_search $cf_subdir_prefix/intl/lib" + test -d "$cf_subdir_prefix/intl/lib/intl" && cf_search="$cf_search $cf_subdir_prefix/intl/lib/intl" +} - continue - elif test "${cf_tst_cflags}" = "\"'" ; then +done - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +cf_search="$cf_library_path_list $cf_search" - continue - fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + for cf_cv_library_path_intl in $cf_search + do + if test -d "$cf_cv_library_path_intl" ; then + test -n "$verbose" && echo " ... testing $cf_cv_library_path_intl" 1>&6 -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` +echo "${as_me:-configure}:10737: testing ... testing $cf_cv_library_path_intl ..." 1>&5 - ;; - esac + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-lintl $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_intl" + cat >"conftest.$ac_ext" <<_ACEOF +#line 10743 "configure" +#include "confdefs.h" - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" +#include <libintl.h> +extern int _nl_msg_cat_cntr; - ;; - esac - ;; - (*) +int +main (void) +{ - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + bindtextdomain ("", ""); + return (int) gettext ("") - ;; - esac - ;; -(yes) +#ifndef IGNORE_MSGFMT_HACK + + _nl_msg_cat_cntr +#endif - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:10765: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10768: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:10771: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10774: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + test -n "$verbose" && echo " ... found intl library in $cf_cv_library_path_intl" 1>&6 - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done +echo "${as_me:-configure}:10779: testing ... found intl library in $cf_cv_library_path_intl ..." 1>&5 -if test -n "$cf_new_cflags" ; then + cf_cv_find_linkage_intl=yes + cf_cv_library_file_intl="-lintl" + break +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + fi + done + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi -if test -n "$cf_new_cppflags" ; then - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + else + cf_cv_find_linkage_intl=no + fi fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" -if test -n "$cf_new_extra_cppflags" ; then +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +LIBS="$cf_save_LIBS" +if test "$cf_cv_find_linkage_intl" = yes ; then +cf_cv_func_gettext=yes +else +cf_cv_func_gettext=no fi - ;; - esac - ;; -esac + echo "$as_me:10818: checking for libintl.h and gettext()" >&5 +echo $ECHO_N "checking for libintl.h and gettext()... $ECHO_C" >&6 + echo "$as_me:10820: result: $cf_cv_func_gettext" >&5 +echo "${ECHO_T}$cf_cv_func_gettext" >&6 -echo "$as_me:10215: checking if you want to use valgrind for testing" >&5 -echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6 + LIBS="$cf_save_LIBS_1" + CPPFLAGS="$cf_save_OPTS_1" -# Check whether --with-valgrind or --without-valgrind was given. -if test "${with_valgrind+set}" = set; then - withval="$with_valgrind" + if test "$cf_cv_func_gettext" = yes ; then -cat >>confdefs.h <<EOF -#define USE_VALGRIND 1 +cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL_H 1 EOF - : ${with_cflags:=-g} - : ${with_no_leaks:=yes} - with_valgrind=yes -else - with_valgrind= -fi; -echo "$as_me:10232: result: ${with_valgrind:-no}" >&5 -echo "${ECHO_T}${with_valgrind:-no}" >&6 + if test "$PACKAGE" != gettext; then -case .$with_cflags in -(.*-g*) - case .$CFLAGS in - (.*-g*) - ;; - (*) +cat >>confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= +if test -n "$cf_cv_header_path_intl" ; then + for cf_add_incdir in $cf_cv_header_path_intl + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi -for cf_add_cflags in -g -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - if test $cf_fix_cppflags = yes ; then + cat >"conftest.$ac_ext" <<_ACEOF +#line 10865 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main (void) +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:10877: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:10880: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:10883: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10886: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - continue - elif test "${cf_tst_cflags}" = "\"'" ; then +echo "${as_me:-configure}:10903: testing adding $cf_add_incdir to include-path ..." 1>&5 - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - continue - fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done +fi -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + if test -n "$cf_cv_library_file_intl" ; then + INTLLIBS="$cf_cv_library_file_intl $LIBICONV" - ;; - esac +if test -n "$cf_cv_library_path_intl" ; then + for cf_add_libdir in $cf_cv_library_path_intl + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" +echo "${as_me:-configure}:10942: testing adding $cf_add_libdir to library-path ..." 1>&5 - ;; - esac - ;; - (*) + INTLLIBS="-L$cf_add_libdir $INTLLIBS" + fi + fi + done +fi - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + fi - ;; - esac - ;; -(yes) + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +for ac_func in dcgettext +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:10958: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 10964 "configure" +#include "confdefs.h" +#define $ac_func autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef $ac_func - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` +#ifdef __cplusplus +extern "C" +#endif - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (void); -if test -n "$cf_new_cflags" ; then +int +main (void) +{ - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" +/* The GNU C library defines stubs 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_$ac_func) || defined (__stub___$ac_func) +#error found stub for $ac_func +#endif + return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:10995: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10998: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:11001: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11004: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +eval "$as_ac_var=no" fi - -if test -n "$cf_new_cppflags" ; then - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi +echo "$as_me:11014: result: `eval echo '${'"$as_ac_var"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6 +if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF fi +done -if test -n "$cf_new_extra_cppflags" ; then + LIBS="$gt_save_LIBS" - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + CATOBJEXT=.gmo + fi + elif test -z "$MSGFMT" || test -z "$XGETTEXT" ; then + { echo "$as_me:11029: WARNING: disabling NLS feature" >&5 +echo "$as_me: WARNING: disabling NLS feature" >&2;} + sed -e /ENABLE_NLS/d confdefs.h >confdefs.tmp + mv confdefs.tmp confdefs.h + ALL_LINGUAS= + CATOBJEXT=.ignored + MSGFMT=":" + GMSGFMT=":" + XGETTEXT=":" + POSUB= + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + USE_NLS=no + nls_cv_use_gnu_gettext=no + fi -fi + if test "$CATOBJEXT" = "NONE"; then + nls_cv_use_gnu_gettext=maybe + fi + fi - ;; - esac - ;; -esac + if test "$nls_cv_use_gnu_gettext" != "no"; then + CATOBJEXT=.gmo + if test -f "$srcdir/intl/libintl.h" ; then + INTLOBJS="\$(GETTOBJS)" + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + elif test "$nls_cv_use_gnu_gettext" = "yes"; then + nls_cv_use_gnu_gettext=no + { echo "$as_me:11060: WARNING: no NLS library is packaged with this application" >&5 +echo "$as_me: WARNING: no NLS library is packaged with this application" >&2;} + fi + fi -echo "$as_me:10345: checking if you want to perform memory-leak testing" >&5 -echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6 + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + { echo "$as_me:11069: WARNING: found msgfmt program is not GNU msgfmt" >&5 +echo "$as_me: WARNING: found msgfmt program is not GNU msgfmt" >&2;} + fi + fi -# Check whether --with-no-leaks or --without-no-leaks was given. -if test "${with_no_leaks+set}" = set; then - withval="$with_no_leaks" + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + { echo "$as_me:11078: WARNING: found xgettext program is not GNU xgettext" >&5 +echo "$as_me: WARNING: found xgettext program is not GNU xgettext" >&2;} + fi + fi + fi -cat >>confdefs.h <<\EOF -#define NO_LEAKS 1 -EOF + if test "$XGETTEXT" != ":"; then + ac_config_commands="$ac_config_commands default-1" - cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}" - case ${cf_doalloc} in - (*yes*) ;; - (*) -cat >>confdefs.h <<\EOF -#define DOALLOC 10000 -EOF - ;; - esac - with_no_leaks=yes -else - with_no_leaks= -fi; -echo "$as_me:10369: result: $with_no_leaks" >&5 -echo "${ECHO_T}$with_no_leaks" >&6 - -echo "$as_me:10372: checking if you want --trace option" >&5 -echo $ECHO_N "checking if you want --trace option... $ECHO_C" >&6 - -# Check whether --enable-trace or --disable-trace was given. -if test "${enable_trace+set}" = set; then - enableval="$enable_trace" + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + if test "$nls_cv_use_gnu_gettext" = "yes"; then + for ac_prog in bison +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:11096: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_INTLBISON+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - enableval=yes -fi; -echo "$as_me:10382: result: $enableval" >&5 -echo "${ECHO_T}$enableval" >&6 -if test "$enableval" != no ; then -EXTRAOBJS="$EXTRAOBJS trace\$o" - -cat >>confdefs.h <<\EOF -#define HAVE_DLG_TRACE 1 -EOF + if test -n "$INTLBISON"; then + ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_INTLBISON="$ac_prog" +echo "$as_me:11111: found $ac_dir/$ac_word" >&5 +break +done +fi +fi +INTLBISON=$ac_cv_prog_INTLBISON +if test -n "$INTLBISON"; then + echo "$as_me:11119: result: $INTLBISON" >&5 +echo "${ECHO_T}$INTLBISON" >&6 else - : + echo "$as_me:11122: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -LD_RPATH_OPT= -echo "$as_me:10396: checking for an rpath option" >&5 -echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6 -case $cf_cv_system_name in -(irix*) - if test "$GCC" = yes; then - LD_RPATH_OPT="-Wl,-rpath," - else - LD_RPATH_OPT="-rpath " - fi - ;; -(linux*|gnu*|k*bsd*-gnu|freebsd*) - LD_RPATH_OPT="-Wl,-rpath," - ;; -(openbsd[2-9].*|mirbsd*) - LD_RPATH_OPT="-Wl,-rpath," - ;; -(dragonfly*) - LD_RPATH_OPT="-rpath " - ;; -(netbsd*) - LD_RPATH_OPT="-Wl,-rpath," - ;; -(osf*|mls+*) - LD_RPATH_OPT="-rpath " - ;; -(solaris2*) - LD_RPATH_OPT="-R" - ;; -(*) - ;; -esac -echo "$as_me:10427: result: $LD_RPATH_OPT" >&5 -echo "${ECHO_T}$LD_RPATH_OPT" >&6 + test -n "$INTLBISON" && break +done -case "x$LD_RPATH_OPT" in -(x-R*) - echo "$as_me:10432: checking if we need a space after rpath option" >&5 -echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6 - cf_save_LIBS="$LIBS" + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + echo "$as_me:11132: checking version of bison" >&5 +echo $ECHO_N "checking version of bison... $ECHO_C" >&6 + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case "$ac_prog_version" in + ('') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + (1.2[6-9]*|1.[3-9][0-9]*|[2-9].*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + (*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + echo "$as_me:11141: result: $ac_prog_version" >&5 +echo "${ECHO_T}$ac_prog_version" >&6 + fi + if test "$ac_verc_fail" = yes; then + INTLBISON=: + fi + fi -cf_add_libs="${LD_RPATH_OPT}$libdir" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + fi - cat >conftest.$ac_ext <<_ACEOF -#line 10453 "configure" -#include "confdefs.h" + nls_cv_header_intl= + nls_cv_header_libgt= -int -main (void) -{ + DATADIRNAME=share - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:10465: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:10468: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:10471: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:10474: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_rpath_space=no -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_rpath_space=yes -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - LIBS="$cf_save_LIBS" - echo "$as_me:10484: result: $cf_rpath_space" >&5 -echo "${ECHO_T}$cf_rpath_space" >&6 - test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " - ;; -esac + INSTOBJEXT=.mo -REL_VERSION=${VERSION_MAJOR}.${VERSION_MINOR} -ABI_VERSION=`echo "$VERSION" |sed -e 's/:/./g'` -cf_cv_rel_version=$REL_VERSION + GENCAT=gencat -test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0 + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo "$as_me:11168: checking for catalogs to be installed" >&5 +echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; 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 + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + echo "$as_me:11188: result: $LINGUAS" >&5 +echo "${ECHO_T}$LINGUAS" >&6 + fi -# Check whether --with-rel-version or --without-rel-version was given. -if test "${with_rel_version+set}" = set; then - withval="$with_rel_version" - { echo "$as_me:10499: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5 -echo "$as_me: WARNING: overriding release version $cf_cv_rel_version to $withval" >&2;} - cf_cv_rel_version=$withval -fi; + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi - DIALOG_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'` - DIALOG_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'` + INTL_LIBTOOL_SUFFIX_PREFIX= -if test -n "$DIALOG_MAJOR" ; then - case $DIALOG_MAJOR in - ([0-9]*) - ;; - (*) - { { echo "$as_me:10512: error: Release major-version is not a number: $DIALOG_MAJOR" >&5 -echo "$as_me: error: Release major-version is not a number: $DIALOG_MAJOR" >&2;} - { (exit 1); exit 1; }; } - ;; - esac -else - { { echo "$as_me:10518: error: Release major-version value is empty" >&5 -echo "$as_me: error: Release major-version value is empty" >&2;} - { (exit 1); exit 1; }; } -fi +if test "$USE_NLS" = yes ; then -if test -n "$DIALOG_MINOR" ; then - case $DIALOG_MINOR in - ([0-9]*) - ;; - (*) - { { echo "$as_me:10528: error: Release minor-version is not a number: $DIALOG_MINOR" >&5 -echo "$as_me: error: Release minor-version is not a number: $DIALOG_MINOR" >&2;} - { (exit 1); exit 1; }; } - ;; - esac +# Check whether --with-textdomain or --without-textdomain was given. +if test "${with_textdomain+set}" = set; then + withval="$with_textdomain" + NLS_TEXTDOMAIN=$withval else - { { echo "$as_me:10534: error: Release minor-version value is empty" >&5 -echo "$as_me: error: Release minor-version value is empty" >&2;} - { (exit 1); exit 1; }; } + NLS_TEXTDOMAIN=$PACKAGE +fi; + +cat >>confdefs.h <<EOF +#define NLS_TEXTDOMAIN "$NLS_TEXTDOMAIN" +EOF + fi -test -z "$cf_cv_abi_version" && cf_cv_abi_version=0 +INTLDIR_MAKE= +MSG_DIR_MAKE= +SUB_MAKEFILE= -# Check whether --with-abi-version or --without-abi-version was given. -if test "${with_abi_version+set}" = set; then - withval="$with_abi_version" +cf_makefile=makefile - if test "x$cf_cv_abi_version" != "x$withval" - then - { echo "$as_me:10547: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5 -echo "$as_me: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&2;} - case $cf_cv_rel_version in - (5.*) - cf_cv_rel_version=$withval.0 - ;; - (6.*) - cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release - ;; - esac - fi - cf_cv_abi_version=$withval -fi; +use_our_messages=no +if test "$USE_NLS" = yes ; then +if test -d "$srcdir/po" ; then +echo "$as_me:11224: checking if we should use included message-library" >&5 +echo $ECHO_N "checking if we should use included message-library... $ECHO_C" >&6 -if test -n "$cf_cv_abi_version" ; then - case $cf_cv_abi_version in - ([0-9]*) - ;; - (*) - { { echo "$as_me:10566: error: ABI version is not a number: $cf_cv_abi_version" >&5 -echo "$as_me: error: ABI version is not a number: $cf_cv_abi_version" >&2;} - { (exit 1); exit 1; }; } - ;; - esac +# Check whether --enable-included-msgs or --disable-included-msgs was given. +if test "${enable_included_msgs+set}" = set; then + enableval="$enable_included_msgs" + use_our_messages=$enableval else - { { echo "$as_me:10572: error: ABI version value is empty" >&5 -echo "$as_me: error: ABI version value is empty" >&2;} - { (exit 1); exit 1; }; } + use_our_messages=yes +fi; +fi +echo "$as_me:11235: result: $use_our_messages" >&5 +echo "${ECHO_T}$use_our_messages" >&6 fi -LIB_MODEL=static -DFT_LWR_MODEL=$LIB_MODEL -LIBTOOL_MAKE="#" - -# use to comment-out makefile lines -MAKE_NORMAL= -MAKE_STATIC= -MAKE_SHARED="#" -MAKE_DLLS="#" +MSG_DIR_MAKE="#" +if test "$use_our_messages" = yes +then + SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn" + MSG_DIR_MAKE= +fi -shlibdir=$libdir +if test "$USE_INCLUDED_LIBINTL" = yes ; then + if test "$nls_cv_force_use_gnu_gettext" = yes ; then + : + elif test "$nls_cv_use_gnu_gettext" = yes ; then + : + else + INTLDIR_MAKE="#" + fi + if test -z "$INTLDIR_MAKE"; then -echo "$as_me:10589: checking if libtool -version-number should be used" >&5 -echo $ECHO_N "checking if libtool -version-number should be used... $ECHO_C" >&6 +cat >>confdefs.h <<\EOF +#define HAVE_LIBGETTEXT_H 1 +EOF -# Check whether --enable-libtool-version or --disable-libtool-version was given. -if test "${enable_libtool_version+set}" = set; then - enableval="$enable_libtool_version" - test "$enableval" != no && enableval=yes - if test "$enableval" != "yes" ; then - cf_libtool_version=no - else - cf_libtool_version=yes + for cf_makefile in \ + $srcdir/intl/Makefile.in \ + $srcdir/intl/makefile.in + do + if test -f "$cf_makefile" ; then + SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}" + break + fi + done fi else - enableval=yes - cf_libtool_version=yes - -fi; -echo "$as_me:10606: result: $cf_libtool_version" >&5 -echo "${ECHO_T}$cf_libtool_version" >&6 + INTLDIR_MAKE="#" + if test "$USE_NLS" = yes ; then -if test "$cf_libtool_version" = yes ; then - LIBTOOL_VERSION="-version-number" +for ac_header in libintl.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:11277: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - LIBTOOL_VERSION="-version-info" - case "x$VERSION" in - (x) - { echo "$as_me:10615: WARNING: VERSION was not set" >&5 -echo "$as_me: WARNING: VERSION was not set" >&2;} - ;; - (x*.*.*) - ABI_VERSION="$VERSION" - test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 + cat >"conftest.$ac_ext" <<_ACEOF +#line 11283 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:11287: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:11293: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:11312: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF -echo "${as_me:-configure}:10622: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 +fi +done - ;; - (x*:*:*) - ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'` - test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 + fi +fi -echo "${as_me:-configure}:10629: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 +if test -z "$INTLDIR_MAKE" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I../intl" - ;; - (*) - { echo "$as_me:10633: WARNING: unexpected VERSION value: $VERSION" >&5 -echo "$as_me: WARNING: unexpected VERSION value: $VERSION" >&2;} - ;; - esac fi -LIBTOOL= +if test "$BUILD_INCLUDED_LIBINTL" = yes ; then + GT_YES="#" + GT_NO= +else + GT_YES= + GT_NO="#" +fi -# common library maintenance symbols that are convenient for libtool scripts: -LIB_CREATE='${AR} -cr' -LIB_OBJECT='${OBJECTS}' -LIB_SUFFIX=.a -LIB_PREP="$RANLIB" +if test "$USE_INCLUDED_LIBINTL" = yes ; then + if test "$nls_cv_force_use_gnu_gettext" = yes ; then -# symbols used to prop libtool up to enable it to determine what it should be -# doing: -LIB_CLEAN= -LIB_COMPILE= -LIB_LINK='${CC}' -LIB_INSTALL= -LIB_UNINSTALL= +cat >>confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF -echo "$as_me:10655: checking if you want to build libraries with libtool" >&5 -echo $ECHO_N "checking if you want to build libraries with libtool... $ECHO_C" >&6 + elif test "$nls_cv_use_gnu_gettext" = yes ; then -# Check whether --with-libtool or --without-libtool was given. -if test "${with_libtool+set}" = set; then - withval="$with_libtool" - with_libtool=$withval -else - with_libtool=no -fi; -echo "$as_me:10665: result: $with_libtool" >&5 -echo "${ECHO_T}$with_libtool" >&6 -if test "$with_libtool" != "no"; then +cat >>confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF - if test "$with_libtool" != "yes" ; then + fi + if test -n "$nls_cv_header_intl" ; then -if test "x$prefix" != xNONE; then - cf_path_syntax="$prefix" -else - cf_path_syntax="$ac_default_prefix" -fi +cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL_H 1 +EOF -case ".$with_libtool" in -(.\$\(*\)*|.\'*\'*) - ;; -(..|./*|.\\*) - ;; -(.[a-zA-Z]:[\\/]*) # OS/2 EMX - ;; -(.\${*prefix}*|.\${*dir}*) - eval with_libtool="$with_libtool" - case ".$with_libtool" in - (.NONE/*) - with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` - ;; - esac - ;; -(.no|.NONE/*) - with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` - ;; -(*) - { { echo "$as_me:10696: error: expected a pathname, not \"$with_libtool\"" >&5 -echo "$as_me: error: expected a pathname, not \"$with_libtool\"" >&2;} - { (exit 1); exit 1; }; } - ;; -esac + fi +fi - LIBTOOL=$with_libtool - else - if test -n "$ac_tool_prefix"; then - for ac_prog in libtool glibtool - 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 -echo "$as_me:10709: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_LIBTOOL+set}" = set; then +echo "$as_me:11363: checking if -lm needed for math functions" >&5 +echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6 +if test "${cf_cv_need_libm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$LIBTOOL"; then - ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. + + cat >"conftest.$ac_ext" <<_ACEOF +#line 11370 "configure" +#include "confdefs.h" + + #include <stdio.h> + #include <stdlib.h> + #include <math.h> + +int +main (void) +{ +double x = rand(); printf("result = %g\\n", sqrt(x)) + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:11386: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11389: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:11392: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11395: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_need_libm=no else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" -echo "$as_me:10724: found $ac_dir/$ac_word" >&5 -break + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_cv_need_libm=yes +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi +echo "$as_me:11405: result: $cf_cv_need_libm" >&5 +echo "${ECHO_T}$cf_cv_need_libm" >&6 +if test "$cf_cv_need_libm" = yes +then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done +LIBS="$cf_add_libs" fi -fi -LIBTOOL=$ac_cv_prog_LIBTOOL -if test -n "$LIBTOOL"; then - echo "$as_me:10732: result: $LIBTOOL" >&5 -echo "${ECHO_T}$LIBTOOL" >&6 + +echo "$as_me:11428: checking if you want to use dmalloc for testing" >&5 +echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6 + +# Check whether --with-dmalloc or --without-dmalloc was given. +if test "${with_dmalloc+set}" = set; then + withval="$with_dmalloc" + +cat >>confdefs.h <<EOF +#define USE_DMALLOC 1 +EOF + + : "${with_cflags:=-g}" + : "${enable_leaks:=no}" + with_dmalloc=yes else - echo "$as_me:10735: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi + with_dmalloc= +fi; +echo "$as_me:11445: result: ${with_dmalloc:-no}" >&5 +echo "${ECHO_T}${with_dmalloc:-no}" >&6 - test -n "$LIBTOOL" && break - done -fi -if test -z "$LIBTOOL"; then - ac_ct_LIBTOOL=$LIBTOOL - for ac_prog in libtool glibtool +case ".$with_cflags" in +(.*-g*) + case .$CFLAGS in + (.*-g*) + ;; + (*) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in -g do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:10748: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_LIBTOOL"; then - ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" -echo "$as_me:10763: found $ac_dir/$ac_word" >&5 -break -done +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` -fi -fi -ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL -if test -n "$ac_ct_LIBTOOL"; then - echo "$as_me:10771: result: $ac_ct_LIBTOOL" >&5 -echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 -else - echo "$as_me:10774: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes - test -n "$ac_ct_LIBTOOL" && break + if test "$cf_fix_cppflags" = yes ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + + ;; + esac + ;; + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + + ;; + esac + ;; +(yes) + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac done -test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" - LIBTOOL=$ac_ct_LIBTOOL +if test -n "$cf_new_cflags" ; then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi -if test -n "$LIBTOOL" && test "$LIBTOOL" != none -then - cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` -else - cf_cv_libtool_version= +if test -n "$cf_new_cppflags" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi -test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version - if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool - then +if test -n "$cf_new_extra_cppflags" ; then -unset ac_cv_prog_ac_ct_LIBTOOL -unset ac_ct_LIBTOOL -unset LIBTOOL + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" - if test -n "$ac_tool_prefix"; then - for ac_prog in glibtool - 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 -echo "$as_me:10805: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_LIBTOOL+set}" = set; then +fi + + ;; + esac + ;; +esac + +if test "$with_dmalloc" = yes ; then + echo "$as_me:11559: checking for dmalloc.h" >&5 +echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6 +if test "${ac_cv_header_dmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$LIBTOOL"; then - ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. + cat >"conftest.$ac_ext" <<_ACEOF +#line 11565 "configure" +#include "confdefs.h" +#include <dmalloc.h> +_ACEOF +if { (eval echo "$as_me:11569: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:11575: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" -echo "$as_me:10820: found $ac_dir/$ac_word" >&5 -break -done - -fi + ac_cpp_err=yes fi -LIBTOOL=$ac_cv_prog_LIBTOOL -if test -n "$LIBTOOL"; then - echo "$as_me:10828: result: $LIBTOOL" >&5 -echo "${ECHO_T}$LIBTOOL" >&6 +if test -z "$ac_cpp_err"; then + ac_cv_header_dmalloc_h=yes else - echo "$as_me:10831: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + ac_cv_header_dmalloc_h=no fi - - test -n "$LIBTOOL" && break - done +rm -f conftest.err "conftest.$ac_ext" fi -if test -z "$LIBTOOL"; then - ac_ct_LIBTOOL=$LIBTOOL - for ac_prog in glibtool -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:10844: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then +echo "$as_me:11594: result: $ac_cv_header_dmalloc_h" >&5 +echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6 +if test "$ac_cv_header_dmalloc_h" = yes; then + +echo "$as_me:11598: checking for dmalloc_debug in -ldmalloc" >&5 +echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6 +if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$ac_ct_LIBTOOL"; then - ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" -echo "$as_me:10859: found $ac_dir/$ac_word" >&5 -break -done + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldmalloc $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 11606 "configure" +#include "confdefs.h" -fi -fi -ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL -if test -n "$ac_ct_LIBTOOL"; then - echo "$as_me:10867: result: $ac_ct_LIBTOOL" >&5 -echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dmalloc_debug (); +int +main (void) +{ +dmalloc_debug (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:11625: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11628: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:11631: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11634: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_dmalloc_dmalloc_debug=yes else - echo "$as_me:10870: result: no" >&5 -echo "${ECHO_T}no" >&6 + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_dmalloc_dmalloc_debug=no fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:11645: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 +echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6 +if test "$ac_cv_lib_dmalloc_dmalloc_debug" = yes; then + cat >>confdefs.h <<EOF +#define HAVE_LIBDMALLOC 1 +EOF - test -n "$ac_ct_LIBTOOL" && break -done -test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" + LIBS="-ldmalloc $LIBS" - LIBTOOL=$ac_ct_LIBTOOL fi -if test -n "$LIBTOOL" && test "$LIBTOOL" != none -then - cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` -else - cf_cv_libtool_version= fi -test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version - fi - fi - if test -z "$LIBTOOL" ; then - { { echo "$as_me:10892: error: Cannot find libtool" >&5 -echo "$as_me: error: Cannot find libtool" >&2;} - { (exit 1); exit 1; }; } - fi - LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' - LIB_OBJECT='${OBJECTS:.o=.lo}' - LIB_SUFFIX=.la - LIB_CLEAN='${LIBTOOL} --mode=clean' - LIB_COMPILE='${LIBTOOL} --mode=compile' - LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' - LIB_INSTALL='${LIBTOOL} --mode=install' - LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' - LIB_PREP=: - -if test -n "$LIBTOOL" && test "$LIBTOOL" != none -then - echo "$as_me:10908: checking version of $LIBTOOL" >&5 -echo $ECHO_N "checking version of $LIBTOOL... $ECHO_C" >&6 - -if test -n "$LIBTOOL" && test "$LIBTOOL" != none -then - cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` -else - cf_cv_libtool_version= -fi -test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version - - echo "$as_me:10919: result: $cf_cv_libtool_version" >&5 -echo "${ECHO_T}$cf_cv_libtool_version" >&6 - if test -z "$cf_cv_libtool_version" ; then - { { echo "$as_me:10922: error: This is not GNU libtool" >&5 -echo "$as_me: error: This is not GNU libtool" >&2;} - { (exit 1); exit 1; }; } - fi -else - { { echo "$as_me:10927: error: GNU libtool has not been found" >&5 -echo "$as_me: error: GNU libtool has not been found" >&2;} - { (exit 1); exit 1; }; } -fi - - # special hack to add -no-undefined (which libtool should do for itself) - LT_UNDEF= - case "$cf_cv_system_name" in - (cygwin*|msys*|mingw32*|os2*|uwin*|aix[4-7]) - LT_UNDEF=-no-undefined - ;; - esac - - # special hack to add --tag option for C++ compiler - case $cf_cv_libtool_version in - (1.[5-9]*|[2-9].[0-9.a-z]*) - LIBTOOL_CXX="$LIBTOOL --tag=CXX" - LIBTOOL="$LIBTOOL --tag=CC" - ;; - (*) - LIBTOOL_CXX="$LIBTOOL" - ;; - esac -else - LIBTOOL="" - LIBTOOL_CXX="" fi -test -z "$LIBTOOL" && ECHO_LT= - -LIB_CREATE="$LIB_CREATE \$@" +echo "$as_me:11660: checking if you want to use dbmalloc for testing" >&5 +echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6 -if test "$with_libtool" = "yes" ; then - OBJEXT="lo" - LIB_MODEL=libtool - DFT_LWR_MODEL=$LIB_MODEL - LIBTOOL_MAKE= +# Check whether --with-dbmalloc or --without-dbmalloc was given. +if test "${with_dbmalloc+set}" = set; then + withval="$with_dbmalloc" -echo "$as_me:10965: checking for additional libtool options" >&5 -echo $ECHO_N "checking for additional libtool options... $ECHO_C" >&6 +cat >>confdefs.h <<EOF +#define USE_DBMALLOC 1 +EOF -# Check whether --with-libtool-opts or --without-libtool-opts was given. -if test "${with_libtool_opts+set}" = set; then - withval="$with_libtool_opts" - with_libtool_opts=$withval + : "${with_cflags:=-g}" + : "${enable_leaks:=no}" + with_dbmalloc=yes else - with_libtool_opts=no + with_dbmalloc= fi; -echo "$as_me:10975: result: $with_libtool_opts" >&5 -echo "${ECHO_T}$with_libtool_opts" >&6 +echo "$as_me:11677: result: ${with_dbmalloc:-no}" >&5 +echo "${ECHO_T}${with_dbmalloc:-no}" >&6 -case .$with_libtool_opts in -(.yes|.no|.) - ;; -(*) - LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" - ;; -esac +case ".$with_cflags" in +(.*-g*) + case .$CFLAGS in + (.*-g*) + ;; + (*) -echo "$as_me:10986: checking if exported-symbols file should be used" >&5 -echo $ECHO_N "checking if exported-symbols file should be used... $ECHO_C" >&6 +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= -# Check whether --with-export-syms or --without-export-syms was given. -if test "${with_export_syms+set}" = set; then - withval="$with_export_syms" - with_export_syms=$withval -else - with_export_syms=no -fi; -if test "x$with_export_syms" = xyes -then - with_export_syms='${top_srcdir}/package/${PACKAGE}.sym' +for cf_add_cflags in -g +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` -fi -echo "$as_me:11001: result: $with_export_syms" >&5 -echo "${ECHO_T}$with_export_syms" >&6 -if test "x$with_export_syms" != xno -then - EXPORT_SYMS="-export-symbols $with_export_syms" + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes -fi + if test "$cf_fix_cppflags" = yes ; then - MAKE_NORMAL="#" - MAKE_STATIC="#" - MAKE_SHARED= -else - echo "$as_me:11013: checking if you want to build shared libraries" >&5 -echo $ECHO_N "checking if you want to build shared libraries... $ECHO_C" >&6 + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -# Check whether --with-shared or --without-shared was given. -if test "${with_shared+set}" = set; then - withval="$with_shared" - with_shared=$withval -else - with_shared=no -fi; - echo "$as_me:11023: result: $with_shared" >&5 -echo "${ECHO_T}$with_shared" >&6 - if test "$with_shared" = "yes" ; then - LIB_MODEL=shared - DFT_LWR_MODEL=$LIB_MODEL + continue + elif test "${cf_tst_cflags}" = "\"'" ; then - RM_SHARED_OPTS= - LOCAL_LDFLAGS= - LOCAL_LDFLAGS2= - LD_SHARED_OPTS= - INSTALL_LIB="-m 644" - : ${rel_builddir:=.} + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - shlibdir=$libdir + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` - MAKE_DLLS="#" +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` - cf_cv_do_symlinks=no - cf_ld_rpath_opt= - test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" + ;; + esac - echo "$as_me:11044: checking if release/abi version should be used for shared libs" >&5 -echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6 + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" -# Check whether --with-shlib-version or --without-shlib-version was given. -if test "${with_shlib_version+set}" = set; then - withval="$with_shlib_version" - test -z "$withval" && withval=auto - case $withval in - (yes) - cf_cv_shlib_version=auto - ;; - (rel|abi|auto) - cf_cv_shlib_version=$withval + ;; + esac ;; (*) - echo "$as_me:11059: result: $withval" >&5 -echo "${ECHO_T}$withval" >&6 - { { echo "$as_me:11061: error: option value must be one of: rel, abi, or auto" >&5 -echo "$as_me: error: option value must be one of: rel, abi, or auto" >&2;} - { (exit 1); exit 1; }; } + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac + ;; +(yes) -else - cf_cv_shlib_version=auto -fi; - echo "$as_me:11070: result: $cf_cv_shlib_version" >&5 -echo "${ECHO_T}$cf_cv_shlib_version" >&6 + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_cv_rm_so_locs=no - cf_try_cflags= + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` - # Some less-capable ports of gcc support only -fpic - CC_SHARED_OPTS= + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done - cf_try_fPIC=no - if test "$GCC" = yes - then - cf_try_fPIC=yes - else - case $cf_cv_system_name in - (*linux*) # e.g., PGI compiler - cf_try_fPIC=yes - ;; - esac - fi +if test -n "$cf_new_cflags" ; then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" - if test "$cf_try_fPIC" = yes - then - echo "$as_me:11093: checking which $CC option to use" >&5 -echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6 - cf_save_CFLAGS="$CFLAGS" - for CC_SHARED_OPTS in -fPIC -fpic '' - do - CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" - cat >conftest.$ac_ext <<_ACEOF -#line 11100 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -int x = 1 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:11112: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:11115: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11118: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:11121: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 fi -rm -f conftest.$ac_objext conftest.$ac_ext - done - echo "$as_me:11130: result: $CC_SHARED_OPTS" >&5 -echo "${ECHO_T}$CC_SHARED_OPTS" >&6 - CFLAGS="$cf_save_CFLAGS" - fi - cf_cv_shlib_version_infix=no +if test -n "$cf_new_cppflags" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + +fi + +if test -n "$cf_new_extra_cppflags" ; then + + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + +fi - case $cf_cv_system_name in - (aix4.3-9*|aix[5-7]*) - if test "$GCC" = yes; then - CC_SHARED_OPTS='-Wl,-brtl' - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' - else - CC_SHARED_OPTS='-brtl' - # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' - fi - ;; - (beos*) - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0' - ;; - (cygwin*) - CC_SHARED_OPTS= - MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' - RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" - cf_cv_shlib_version=cygdll - cf_cv_shlib_version_infix=cygdll - shlibdir=$bindir - MAKE_DLLS= - cat >mk_shared_lib.sh <<-CF_EOF - #!$SHELL - SHARED_LIB=\$1 - IMPORT_LIB=\`echo "\$1" | sed -e 's/cyg/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` - shift - cat <<-EOF - Linking shared library - ** SHARED_LIB \$SHARED_LIB - ** IMPORT_LIB \$IMPORT_LIB -EOF - exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} -CF_EOF - chmod +x mk_shared_lib.sh - ;; - (msys*) - CC_SHARED_OPTS= - MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' - RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" - cf_cv_shlib_version=msysdll - cf_cv_shlib_version_infix=msysdll - shlibdir=$bindir - MAKE_DLLS= - cat >mk_shared_lib.sh <<-CF_EOF - #!$SHELL - SHARED_LIB=\$1 - IMPORT_LIB=\`echo "\$1" | sed -e 's/msys-/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` - shift - cat <<-EOF - Linking shared library - ** SHARED_LIB \$SHARED_LIB - ** IMPORT_LIB \$IMPORT_LIB -EOF - exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} -CF_EOF - chmod +x mk_shared_lib.sh ;; - (darwin*) - cf_try_cflags="no-cpp-precomp" - CC_SHARED_OPTS="-dynamic" - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@' - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi - cf_cv_shlib_version_infix=yes - echo "$as_me:11201: checking if ld -search_paths_first works" >&5 -echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6 -if test "${cf_cv_ldflags_search_paths_first+set}" = set; then + esac + ;; +esac + +if test "$with_dbmalloc" = yes ; then + echo "$as_me:11791: checking for dbmalloc.h" >&5 +echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6 +if test "${ac_cv_header_dbmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + cat >"conftest.$ac_ext" <<_ACEOF +#line 11797 "configure" +#include "confdefs.h" +#include <dbmalloc.h> +_ACEOF +if { (eval echo "$as_me:11801: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:11807: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_dbmalloc_h=yes +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + ac_cv_header_dbmalloc_h=no +fi +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:11826: result: $ac_cv_header_dbmalloc_h" >&5 +echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6 +if test "$ac_cv_header_dbmalloc_h" = yes; then - cf_save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -Wl,-search_paths_first" - cat >conftest.$ac_ext <<_ACEOF -#line 11210 "configure" +echo "$as_me:11830: checking for debug_malloc in -ldbmalloc" >&5 +echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6 +if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldbmalloc $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 11838 "configure" #include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char debug_malloc (); int main (void) { -int i; +debug_malloc (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:11222: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:11857: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:11225: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:11228: \"$ac_try\"") >&5 + echo "$as_me:11860: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:11863: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11231: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ldflags_search_paths_first=yes + echo "$as_me:11866: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_dbmalloc_debug_malloc=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_cv_ldflags_search_paths_first=no +cat "conftest.$ac_ext" >&5 +ac_cv_lib_dbmalloc_debug_malloc=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$cf_save_LDFLAGS +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:11242: result: $cf_cv_ldflags_search_paths_first" >&5 -echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6 - if test $cf_cv_ldflags_search_paths_first = yes; then - LDFLAGS="$LDFLAGS -Wl,-search_paths_first" - fi - ;; - (hpux[7-8]*) - # HP-UX 8.07 ld lacks "+b" option used for libdir search-list - if test "$GCC" != yes; then - CC_SHARED_OPTS='+Z' - fi - MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $@' - INSTALL_LIB="-m 555" - ;; - (hpux*) - # (tested with gcc 2.7.2 -- I don't have c89) - if test "$GCC" = yes; then - LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' - else - CC_SHARED_OPTS='+Z' - LD_SHARED_OPTS='-Wl,+b,${libdir}' - fi - MK_SHARED_LIB='${LD} ${LDFLAGS} +b ${libdir} -b -o $@' - # HP-UX shared libraries must be executable, and should be - # readonly to exploit a quirk in the memory manager. - INSTALL_LIB="-m 555" - ;; - (interix*) - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - if test "$cf_cv_shlib_version" = rel; then - cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' - else - cf_shared_soname='`basename $@`' - fi - CC_SHARED_OPTS= - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@' - ;; - (irix*) - if test "$cf_cv_enable_rpath" = yes ; then - EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" - fi - # tested with IRIX 5.2 and 'cc'. - if test "$GCC" != yes; then - CC_SHARED_OPTS='-KPIC' - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $@` -o $@' - else - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $@` -o $@' - fi - cf_cv_rm_so_locs=yes - ;; - (linux*|gnu*|k*bsd*-gnu) - if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" - fi - if test "$cf_cv_enable_rpath" = yes ; then - EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" - fi +echo "$as_me:11877: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 +echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6 +if test "$ac_cv_lib_dbmalloc_debug_malloc" = yes; then + cat >>confdefs.h <<EOF +#define HAVE_LIBDBMALLOC 1 +EOF - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - if test "$cf_cv_shlib_version" = rel; then - cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' - else - cf_cv_shared_soname='`basename $@`' - fi + LIBS="-ldbmalloc $LIBS" - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' - ;; - (mingw*) - cf_cv_shlib_version=mingw - cf_cv_shlib_version_infix=mingw - shlibdir=$bindir - MAKE_DLLS= - if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="-Wl,--enable-auto-import" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" - EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" - fi - CC_SHARED_OPTS= - MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' - RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" - cat >mk_shared_lib.sh <<-CF_EOF - #!$SHELL - SHARED_LIB=\$1 - IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.a/'\` - shift - cat <<-EOF - Linking shared library - ** SHARED_LIB \$SHARED_LIB - ** IMPORT_LIB \$IMPORT_LIB -EOF - exec \$* ${LDFLAGS} -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} -CF_EOF - chmod +x mk_shared_lib.sh - ;; - (openbsd[2-9].*|mirbsd*) - if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" - fi - if test "$cf_cv_enable_rpath" = yes ; then - EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" - fi - CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" +fi - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - if test "$cf_cv_shlib_version" = rel; then - cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' - else - cf_cv_shared_soname='`basename $@`' - fi +fi - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' - ;; - (nto-qnx*|openbsd*|freebsd[12].*) - CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" - MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $@' - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - ;; - (dragonfly*|freebsd*) - CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" - if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then - LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" - LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" - EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" - fi +fi - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - if test "$cf_cv_shlib_version" = rel; then - cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' - else - cf_cv_shared_soname='`basename $@`' - fi - - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' - ;; - (netbsd*) - CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" - if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then - LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" - EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" - if test "$cf_cv_shlib_version" = auto; then - if test -f /usr/libexec/ld.elf_so; then - cf_cv_shlib_version=abi - else - cf_cv_shlib_version=rel - fi - fi - - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - if test "$cf_cv_shlib_version" = rel; then - cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' - else - cf_cv_shared_soname='`basename $@`' - fi +echo "$as_me:11892: checking if you want to use purify for testing" >&5 +echo $ECHO_N "checking if you want to use purify for testing... $ECHO_C" >&6 - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@' - else - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -Wl,-shared -Wl,-Bshareable -o $@' - fi - ;; - (osf*|mls+*) - # tested with OSF/1 V3.2 and 'cc' - # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't - # link with shared libs). - MK_SHARED_LIB='${LD} ${LDFLAGS} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`' - case $host_os in - (osf4*) - MK_SHARED_LIB="${MK_SHARED_LIB} -msym" - ;; - esac - MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@' - if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" - fi - cf_cv_rm_so_locs=yes - ;; - (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 - # tested with osr5.0.5 - if test "$GCC" != yes; then - CC_SHARED_OPTS='-belf -KPIC' - fi - MK_SHARED_LIB='${LD} ${LDFLAGS} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@' - if test "$cf_cv_enable_rpath" = yes ; then - # only way is to set LD_RUN_PATH but no switch for it - RUN_PATH=$libdir - fi - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - LINK_PROGS='LD_RUN_PATH=${libdir}' - LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' - ;; - (sunos4*) - # tested with SunOS 4.1.1 and gcc 2.7.0 - if test "$GCC" != yes; then - CC_SHARED_OPTS='-KPIC' - fi - MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $@' - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - ;; - (solaris2*) - # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 - # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 - if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" - fi - if test "$cf_cv_enable_rpath" = yes ; then - EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" - fi +# Check whether --with-purify or --without-purify was given. +if test "${with_purify+set}" = set; then + withval="$with_purify" - test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel - if test "$cf_cv_shlib_version" = rel; then - cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' - else - cf_cv_shared_soname='`basename $@`' - fi +cat >>confdefs.h <<EOF +#define USE_PURIFY 1 +EOF - if test "$GCC" != yes; then - cf_save_CFLAGS="$CFLAGS" - for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O - do - CFLAGS="$cf_shared_opts $cf_save_CFLAGS" - cat >conftest.$ac_ext <<_ACEOF -#line 11467 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -printf("Hello\n"); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:11479: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:11482: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11485: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:11488: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break + : "${with_cflags:=-g}" + : "${enable_leaks:=no}" + with_purify=yes else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext - done - CFLAGS="$cf_save_CFLAGS" - CC_SHARED_OPTS=$cf_shared_opts - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $@' - else - MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $@' - fi - ;; - (sysv5uw7*|unix_sv*) - # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) - if test "$GCC" != yes; then - CC_SHARED_OPTS='-KPIC' - fi - MK_SHARED_LIB='${LD} ${LDFLAGS} -d y -G -o $@' + with_purify= +fi; +echo "$as_me:11909: result: ${with_purify:-no}" >&5 +echo "${ECHO_T}${with_purify:-no}" >&6 + +case ".$with_cflags" in +(.*-g*) + case .$CFLAGS in + (.*-g*) ;; (*) - CC_SHARED_OPTS='unknown' - MK_SHARED_LIB='echo unknown' - ;; - esac - # This works if the last tokens in $MK_SHARED_LIB are the -o target. - case "$cf_cv_shlib_version" in - (rel|abi) - case "$MK_SHARED_LIB" in - (*'-o $@') - test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in -g +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test "$cf_fix_cppflags" = yes ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) ;; (*) - { echo "$as_me:11525: WARNING: ignored --with-shlib-version" >&5 -echo "$as_me: WARNING: ignored --with-shlib-version" >&2;} + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - esac + (*) - if test -n "$cf_try_cflags" - then -cat > conftest.$ac_ext <<EOF -#line 11535 "${as_me:-configure}" -#include <stdio.h> -int main(int argc, char *argv[]) -{ - printf("hello\n"); - return (argv[argc-1] == 0) ; -} -EOF - cf_save_CFLAGS="$CFLAGS" - for cf_opt in $cf_try_cflags - do - CFLAGS="$cf_save_CFLAGS -$cf_opt" - echo "$as_me:11547: checking if CFLAGS option -$cf_opt works" >&5 -echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6 - if { (eval echo "$as_me:11549: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:11552: \$? = $ac_status" >&5 - (exit $ac_status); }; then - echo "$as_me:11554: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - cf_save_CFLAGS="$CFLAGS" - else - echo "$as_me:11558: result: no" >&5 -echo "${ECHO_T}no" >&6 - fi - done - CFLAGS="$cf_save_CFLAGS" - fi + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" - # RPATH_LIST is a colon-separated list of directories - test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" - test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" + ;; + esac + ;; +(yes) + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` - test -n "$verbose" && echo " CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6 + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done -echo "${as_me:-configure}:11573: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5 +if test -n "$cf_new_cflags" ; then - test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" -echo "${as_me:-configure}:11577: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 +fi -echo "$as_me:11579: checking if versioned-symbols file should be used" >&5 -echo $ECHO_N "checking if versioned-symbols file should be used... $ECHO_C" >&6 +if test -n "$cf_new_cppflags" ; then -# Check whether --with-versioned-syms or --without-versioned-syms was given. -if test "${with_versioned_syms+set}" = set; then - withval="$with_versioned_syms" - with_versioned_syms=$withval -else - with_versioned_syms=no -fi; -if test "x$with_versioned_syms" = xyes -then - with_versioned_syms='${top_srcdir}/package/${PACKAGE}.map' + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi -echo "$as_me:11594: result: $with_versioned_syms" >&5 -echo "${ECHO_T}$with_versioned_syms" >&6 -RESULTING_SYMS= -VERSIONED_SYMS= -WILDCARD_SYMS= +if test -n "$cf_new_extra_cppflags" ; then -if test "x$with_versioned_syms" != xno -then - RESULTING_SYMS=$with_versioned_syms - case "x$MK_SHARED_LIB" in - (*-Wl,*) - VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}" - MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\${VERSIONED_SYMS} -Wl,%"` - test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" -echo "${as_me:-configure}:11610: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 +fi ;; - (*-dy\ *) - VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}" - MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\${VERSIONED_SYMS} -dy%"` - test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 + esac + ;; +esac + +echo "$as_me:12022: checking if you want to use valgrind for testing" >&5 +echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6 + +# Check whether --with-valgrind or --without-valgrind was given. +if test "${with_valgrind+set}" = set; then + withval="$with_valgrind" -echo "${as_me:-configure}:11618: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 +cat >>confdefs.h <<EOF +#define USE_VALGRIND 1 +EOF + + : "${with_cflags:=-g}" + : "${enable_leaks:=no}" + with_valgrind=yes +else + with_valgrind= +fi; +echo "$as_me:12039: result: ${with_valgrind:-no}" >&5 +echo "${ECHO_T}${with_valgrind:-no}" >&6 +case ".$with_cflags" in +(.*-g*) + case .$CFLAGS in + (.*-g*) ;; (*) - { echo "$as_me:11622: WARNING: this system does not support versioned-symbols" >&5 -echo "$as_me: WARNING: this system does not support versioned-symbols" >&2;} - ;; - esac - # Linux ld can selectively override scope, e.g., of symbols beginning with - # "_" by first declaring some as global, and then using a wildcard to - # declare the others as local. Some other loaders cannot do this. Check - # by constructing a (very) simple shared library and inspecting its - # symbols. - if test "x$VERSIONED_SYMS" != "x" - then - echo "$as_me:11634: checking if wildcards can be used to selectively omit symbols" >&5 -echo $ECHO_N "checking if wildcards can be used to selectively omit symbols... $ECHO_C" >&6 - WILDCARD_SYMS=no +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= - # make sources - rm -f conftest.* +for cf_add_cflags in -g +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - cat >conftest.ver <<EOF -module_1.0 { -global: - globalf1; -local: - localf1; -}; -module_2.0 { -global: - globalf2; -local: - localf2; - _*; -} module_1.0; -submodule_1.0 { -global: - subglobalf1; - _ismissing; -local: - sublocalf1; -}; -submodule_2.0 { -global: - subglobalf2; -local: - sublocalf2; - _*; -} submodule_1.0; -EOF - cat >conftest.$ac_ext <<EOF -#line 11671 "configure" -int _ismissing(void) { return 1; } -int _localf1(void) { return 1; } -int _localf2(void) { return 2; } -int globalf1(void) { return 1; } -int globalf2(void) { return 2; } -int _sublocalf1(void) { return 1; } -int _sublocalf2(void) { return 2; } -int subglobalf1(void) { return 1; } -int subglobalf2(void) { return 2; } -EOF - cat >conftest.mk <<EOF -CC=${CC} -CFLAGS=${CFLAGS} -CPPFLAGS=${CPPFLAGS} -LDFLAGS=${LDFLAGS} -LIBS=${LIBS} -VERSIONED_SYMS=${VERSIONED_SYMS} -RESULTING_SYMS=conftest.ver -MK_SHARED_LIB=${MK_SHARED_LIB} -conftest.so: conftest.$ac_cv_objext - \$(MK_SHARED_LIB) conftest.$ac_cv_objext -EOF + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes - # compile source, make library - if make -f conftest.mk 2>&5 >/dev/null - then - # test for missing symbol in either Data or Text section - cf_missing=`nm -P conftest.so 2>&5 |fgrep _ismissing | egrep '[ ][DT][ ]'` - test -n "$cf_missing" && WILDCARD_SYMS=yes - fi - echo "$as_me:11702: result: $WILDCARD_SYMS" >&5 -echo "${ECHO_T}$WILDCARD_SYMS" >&6 - rm -f conftest.* - fi -fi + if test "$cf_fix_cppflags" = yes ; then - LIB_PREP=: - LIB_CREATE="$MK_SHARED_LIB" - CFLAGS="$CFLAGS $CC_SHARED_OPTS" - MAKE_NORMAL="#" - MAKE_STATIC="#" - MAKE_SHARED= - fi -fi + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -LIB_SUFFIX= + continue + elif test "${cf_tst_cflags}" = "\"'" ; then - case X$LIB_MODEL in - (Xlibtool) - DFT_LIB_SUFFIX='.la' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX - ;; - (Xdebug) - DFT_LIB_SUFFIX='_g.a' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX - ;; - (Xprofile) - DFT_LIB_SUFFIX='_p.a' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX - ;; - (Xshared) - case $cf_cv_system_name in - (aix[5-7]*) - DFT_LIB_SUFFIX='.so' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX - ;; - (cygwin*|msys*|mingw*) - DFT_LIB_SUFFIX='.dll' - DFT_DEP_SUFFIX='.dll.a' + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi ;; - (darwin*) - DFT_LIB_SUFFIX='.dylib' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) ;; - (hpux*) - case $target in - (ia64*) - DFT_LIB_SUFFIX='.so' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX - ;; - (*) - DFT_LIB_SUFFIX='.sl' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + ;; esac - ;; - (*) - DFT_LIB_SUFFIX='.so' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; (*) - DFT_LIB_SUFFIX='.a' - DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac - if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" - then - DFT_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_LIB_SUFFIX}" - DFT_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_DEP_SUFFIX}" - fi + ;; +(yes) -LIB_SUFFIX=$DFT_LIB_SUFFIX + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -echo "$as_me:11777: checking for specific curses-directory" >&5 -echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` -# Check whether --with-curses-dir or --without-curses-dir was given. -if test "${with_curses_dir+set}" = set; then - withval="$with_curses_dir" - cf_cv_curses_dir=$withval -else - cf_cv_curses_dir=no -fi; -echo "$as_me:11787: result: $cf_cv_curses_dir" >&5 -echo "${ECHO_T}$cf_cv_curses_dir" >&6 + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done -if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) -then +if test -n "$cf_new_cflags" ; then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + +fi + +if test -n "$cf_new_cppflags" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + +fi + +if test -n "$cf_new_extra_cppflags" ; then + + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" -if test "x$prefix" != xNONE; then - cf_path_syntax="$prefix" -else - cf_path_syntax="$ac_default_prefix" fi -case ".$withval" in -(.\$\(*\)*|.\'*\'*) - ;; -(..|./*|.\\*) - ;; -(.[a-zA-Z]:[\\/]*) # OS/2 EMX - ;; -(.\${*prefix}*|.\${*dir}*) - eval withval="$withval" - case ".$withval" in - (.NONE/*) - withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; -(.no|.NONE/*) - withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` - ;; -(*) - { { echo "$as_me:11818: error: expected a pathname, not \"$withval\"" >&5 -echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} - { (exit 1); exit 1; }; } - ;; esac - if test -d "$cf_cv_curses_dir" - then - -if test -n "$cf_cv_curses_dir/include" ; then - for cf_add_incdir in $cf_cv_curses_dir/include - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi +echo "$as_me:12152: checking if you want to perform memory-leak testing" >&5 +echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6 - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS +# Check whether --with-no-leaks or --without-no-leaks was given. +if test "${with_no_leaks+set}" = set; then + withval="$with_no_leaks" - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +cat >>confdefs.h <<\EOF +#define NO_LEAKS 1 +EOF - cat >conftest.$ac_ext <<_ACEOF -#line 11854 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -printf("Hello") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:11866: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:11869: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11872: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:11875: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}" + case ${cf_doalloc} in + (*yes*) ;; + (*) +cat >>confdefs.h <<\EOF +#define DOALLOC 10000 +EOF + ;; + esac + enable_leaks=no else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - -echo "${as_me:-configure}:11892: testing adding $cf_add_incdir to include-path ..." 1>&5 - - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + enable_leaks=yes +fi; +if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi +echo "$as_me:12177: result: $with_no_leaks" >&5 +echo "${ECHO_T}$with_no_leaks" >&6 - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done -fi +echo "$as_me:12180: checking if you want --trace option" >&5 +echo $ECHO_N "checking if you want --trace option... $ECHO_C" >&6 -if test -n "$cf_cv_curses_dir/lib" ; then - for cf_add_libdir in $cf_cv_curses_dir/lib - do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 +# Check whether --enable-trace or --disable-trace was given. +if test "${enable_trace+set}" = set; then + enableval="$enable_trace" -echo "${as_me:-configure}:11928: testing adding $cf_add_libdir to library-path ..." 1>&5 +else + enableval=yes +fi; +echo "$as_me:12190: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS trace\$o" - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done -fi +cat >>confdefs.h <<\EOF +#define HAVE_DLG_TRACE 1 +EOF - fi +else + : fi -echo "$as_me:11939: checking if rpath option should be used" >&5 +echo "$as_me:12203: checking if rpath option should be used" >&5 echo $ECHO_N "checking if rpath option should be used... $ECHO_C" >&6 # Check whether --enable-rpath or --disable-rpath was given. if test "${enable_rpath+set}" = set; then enableval="$enable_rpath" cf_cv_enable_rpath=$enableval else cf_cv_enable_rpath=no fi; -echo "$as_me:11949: result: $cf_cv_enable_rpath" >&5 +echo "$as_me:12213: result: $cf_cv_enable_rpath" >&5 echo "${ECHO_T}$cf_cv_enable_rpath" >&6 -echo "$as_me:11952: checking for specific curses-directory" >&5 -echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 - -# Check whether --with-curses-dir or --without-curses-dir was given. -if test "${with_curses_dir+set}" = set; then - withval="$with_curses_dir" - cf_cv_curses_dir=$withval -else - cf_cv_curses_dir=no -fi; -echo "$as_me:11962: result: $cf_cv_curses_dir" >&5 -echo "${ECHO_T}$cf_cv_curses_dir" >&6 - -if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) +LD_RPATH_OPT= +if test "x$cf_cv_enable_rpath" != xno then - -if test "x$prefix" != xNONE; then - cf_path_syntax="$prefix" -else - cf_path_syntax="$ac_default_prefix" -fi - -case ".$withval" in -(.\$\(*\)*|.\'*\'*) - ;; -(..|./*|.\\*) - ;; -(.[a-zA-Z]:[\\/]*) # OS/2 EMX - ;; -(.\${*prefix}*|.\${*dir}*) - eval withval="$withval" - case ".$withval" in - (.NONE/*) - withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` + echo "$as_me:12219: checking for an rpath option" >&5 +echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6 + case "$cf_cv_system_name" in + (irix*) + if test "$GCC" = yes; then + LD_RPATH_OPT="-Wl,-rpath," + else + LD_RPATH_OPT="-rpath " + fi + ;; + (linux*|gnu*|k*bsd*-gnu|freebsd*) + LD_RPATH_OPT="-Wl,-rpath," + ;; + (openbsd[2-9].*|mirbsd*) + LD_RPATH_OPT="-Wl,-rpath," + ;; + (dragonfly*) + LD_RPATH_OPT="-rpath " + ;; + (netbsd*) + LD_RPATH_OPT="-Wl,-rpath," + ;; + (osf*|mls+*) + LD_RPATH_OPT="-rpath " + ;; + (solaris2*) + LD_RPATH_OPT="-R" + ;; + (*) ;; esac - ;; -(.no|.NONE/*) - withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` - ;; -(*) - { { echo "$as_me:11993: error: expected a pathname, not \"$withval\"" >&5 -echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} - { (exit 1); exit 1; }; } - ;; -esac + echo "$as_me:12250: result: $LD_RPATH_OPT" >&5 +echo "${ECHO_T}$LD_RPATH_OPT" >&6 - if test -d "$cf_cv_curses_dir" - then + case "x$LD_RPATH_OPT" in + (x-R*) + echo "$as_me:12255: checking if we need a space after rpath option" >&5 +echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6 + cf_save_LIBS="$LIBS" -if test -n "$cf_cv_curses_dir/include" ; then - for cf_add_incdir in $cf_cv_curses_dir/include - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in ${LD_RPATH_OPT}$libdir; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - - cat >conftest.$ac_ext <<_ACEOF -#line 12029 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 12276 "configure" #include "confdefs.h" -#include <stdio.h> + int main (void) { -printf("Hello") + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:12041: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:12288: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12044: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:12047: \"$ac_try\"") >&5 + echo "$as_me:12291: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:12294: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12050: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:12297: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_rpath_space=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes +cat "conftest.$ac_ext" >&5 +cf_rpath_space=yes +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + LIBS="$cf_save_LIBS" + echo "$as_me:12307: result: $cf_rpath_space" >&5 +echo "${ECHO_T}$cf_rpath_space" >&6 + test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " + ;; + esac fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 +REL_VERSION=${VERSION_MAJOR}.${VERSION_MINOR} +ABI_VERSION=`echo "$VERSION" |sed -e 's/:/./g'` +cf_cv_rel_version=$REL_VERSION -echo "${as_me:-configure}:12067: testing adding $cf_add_incdir to include-path ..." 1>&5 +test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +# Check whether --with-rel-version or --without-rel-version was given. +if test "${with_rel_version+set}" = set; then + withval="$with_rel_version" + { echo "$as_me:12323: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5 +echo "$as_me: WARNING: overriding release version $cf_cv_rel_version to $withval" >&2;} + cf_cv_rel_version=$withval +fi; - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done -fi - -if test -n "$cf_cv_curses_dir/lib" ; then - for cf_add_libdir in $cf_cv_curses_dir/lib - do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 - -echo "${as_me:-configure}:12103: testing adding $cf_add_libdir to library-path ..." 1>&5 + DIALOG_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'` + DIALOG_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'` - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done +if test -n "$DIALOG_MAJOR" ; then + case $DIALOG_MAJOR in + ([0-9]*) + ;; + (*) + { { echo "$as_me:12336: error: Release major-version is not a number: $DIALOG_MAJOR" >&5 +echo "$as_me: error: Release major-version is not a number: $DIALOG_MAJOR" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +else + { { echo "$as_me:12342: error: Release major-version value is empty" >&5 +echo "$as_me: error: Release major-version value is empty" >&2;} + { (exit 1); exit 1; }; } fi - fi +if test -n "$DIALOG_MINOR" ; then + case $DIALOG_MINOR in + ([0-9]*) + ;; + (*) + { { echo "$as_me:12352: error: Release minor-version is not a number: $DIALOG_MINOR" >&5 +echo "$as_me: error: Release minor-version is not a number: $DIALOG_MINOR" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +else + { { echo "$as_me:12358: error: Release minor-version value is empty" >&5 +echo "$as_me: error: Release minor-version value is empty" >&2;} + { (exit 1); exit 1; }; } fi -cf_cv_screen=curses +test -z "$cf_cv_abi_version" && cf_cv_abi_version=0 -echo "$as_me:12116: checking for specified curses library type" >&5 -echo $ECHO_N "checking for specified curses library type... $ECHO_C" >&6 +# Check whether --with-abi-version or --without-abi-version was given. +if test "${with_abi_version+set}" = set; then + withval="$with_abi_version" -# Check whether --with-screen or --without-screen was given. -if test "${with_screen+set}" = set; then - withval="$with_screen" - cf_cv_screen=$withval -else + if test "x$cf_cv_abi_version" != "x$withval" + then + { echo "$as_me:12371: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5 +echo "$as_me: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&2;} + case "$cf_cv_rel_version" in + (5.*) + cf_cv_rel_version=$withval.0 + ;; + (6.*) + cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release + ;; + esac + fi + cf_cv_abi_version=$withval +fi; -# Check whether --with-ncursesw or --without-ncursesw was given. -if test "${with_ncursesw+set}" = set; then - withval="$with_ncursesw" - cf_cv_screen=ncursesw +if test -n "$cf_cv_abi_version" ; then + case $cf_cv_abi_version in + ([0-9]*) + ;; + (*) + { { echo "$as_me:12390: error: ABI version is not a number: $cf_cv_abi_version" >&5 +echo "$as_me: error: ABI version is not a number: $cf_cv_abi_version" >&2;} + { (exit 1); exit 1; }; } + ;; + esac else + { { echo "$as_me:12396: error: ABI version value is empty" >&5 +echo "$as_me: error: ABI version value is empty" >&2;} + { (exit 1); exit 1; }; } +fi -# Check whether --with-ncurses or --without-ncurses was given. -if test "${with_ncurses+set}" = set; then - withval="$with_ncurses" - cf_cv_screen=ncurses -else +LIB_MODEL=static +DFT_LWR_MODEL=$LIB_MODEL +LIBTOOL_MAKE="#" -# Check whether --with-pdcurses or --without-pdcurses was given. -if test "${with_pdcurses+set}" = set; then - withval="$with_pdcurses" - cf_cv_screen=pdcurses -else +# use to comment-out makefile lines +MAKE_NORMAL= +MAKE_STATIC= +MAKE_SHARED="#" +MAKE_DLLS="#" -# Check whether --with-curses-colr or --without-curses-colr was given. -if test "${with_curses_colr+set}" = set; then - withval="$with_curses_colr" - cf_cv_screen=curses_colr +shlibdir=$libdir + +echo "$as_me:12413: checking if libtool -version-number should be used" >&5 +echo $ECHO_N "checking if libtool -version-number should be used... $ECHO_C" >&6 + +# Check whether --enable-libtool-version or --disable-libtool-version was given. +if test "${enable_libtool_version+set}" = set; then + enableval="$enable_libtool_version" + test "$enableval" != no && enableval=yes + if test "$enableval" != "yes" ; then + cf_libtool_version=no + else + cf_libtool_version=yes + fi else + enableval=yes + cf_libtool_version=yes -# Check whether --with-curses-5lib or --without-curses-5lib was given. -if test "${with_curses_5lib+set}" = set; then - withval="$with_curses_5lib" - cf_cv_screen=curses_5lib -fi; -fi; -fi; -fi; -fi; fi; +echo "$as_me:12430: result: $cf_libtool_version" >&5 +echo "${ECHO_T}$cf_libtool_version" >&6 -echo "$as_me:12160: result: $cf_cv_screen" >&5 -echo "${ECHO_T}$cf_cv_screen" >&6 +if test "$cf_libtool_version" = yes ; then + LIBTOOL_VERSION="-version-number" +else + LIBTOOL_VERSION="-version-info" + case "x$VERSION" in + (x) + { echo "$as_me:12439: WARNING: VERSION was not set" >&5 +echo "$as_me: WARNING: VERSION was not set" >&2;} + ;; + (x*.*.*) + ABI_VERSION="$VERSION" + test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 -case $cf_cv_screen in -(curses|curses_*) +echo "${as_me:-configure}:12446: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 -echo "$as_me:12166: checking for extra include directories" >&5 -echo $ECHO_N "checking for extra include directories... $ECHO_C" >&6 -if test "${cf_cv_curses_incdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + ;; + (x*:*:*) + ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'` + test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 -cf_cv_curses_incdir=no -case $host_os in -(hpux10.*) - if test "x$cf_cv_screen" = "xcurses_colr" - then - test -d /usr/include/curses_colr && \ - cf_cv_curses_incdir="-I/usr/include/curses_colr" - fi - ;; -(sunos3*|sunos4*) - if test "x$cf_cv_screen" = "xcurses_5lib" - then - test -d /usr/5lib && \ - test -d /usr/5include && \ - cf_cv_curses_incdir="-I/usr/5include" - fi - ;; -esac +echo "${as_me:-configure}:12453: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 + ;; + (*) + { echo "$as_me:12457: WARNING: unexpected VERSION value: $VERSION" >&5 +echo "$as_me: WARNING: unexpected VERSION value: $VERSION" >&2;} + ;; + esac fi -echo "$as_me:12192: result: $cf_cv_curses_incdir" >&5 -echo "${ECHO_T}$cf_cv_curses_incdir" >&6 -if test "$cf_cv_curses_incdir" != no -then - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_cv_curses_incdir" +LIBTOOL= -fi +# common library maintenance symbols that are convenient for libtool scripts: +LIB_CREATE='${AR} -cr' +LIB_OBJECT='${OBJECTS}' +LIB_SUFFIX=.a +LIB_PREP="$RANLIB" -echo "$as_me:12202: checking if we have identified curses headers" >&5 -echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 -if test "${cf_cv_ncurses_header+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else +# symbols used to prop libtool up to enable it to determine what it should be +# doing: +LIB_CLEAN= +LIB_COMPILE= +LIB_LINK='${CC}' +LIB_INSTALL= +LIB_UNINSTALL= -cf_cv_ncurses_header=none -for cf_header in \ - ncurses.h \ - curses.h ncurses/ncurses.h ncurses/curses.h -do -cat >conftest.$ac_ext <<_ACEOF -#line 12214 "configure" -#include "confdefs.h" -#include <${cf_header}> -int -main (void) -{ -initscr(); tgoto("?", 0,0) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:12226: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:12229: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:12232: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:12235: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_header=$cf_header; break +echo "$as_me:12479: checking if you want to build libraries with libtool" >&5 +echo $ECHO_N "checking if you want to build libraries with libtool... $ECHO_C" >&6 + +# Check whether --with-libtool or --without-libtool was given. +if test "${with_libtool+set}" = set; then + withval="$with_libtool" + with_libtool=$withval else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -done + with_libtool=no +fi; +echo "$as_me:12489: result: $with_libtool" >&5 +echo "${ECHO_T}$with_libtool" >&6 +if test "$with_libtool" != "no"; then -fi -echo "$as_me:12246: result: $cf_cv_ncurses_header" >&5 -echo "${ECHO_T}$cf_cv_ncurses_header" >&6 + if test "$with_libtool" != "yes" ; then -if test "$cf_cv_ncurses_header" = none ; then - { { echo "$as_me:12250: error: No curses header-files found" >&5 -echo "$as_me: error: No curses header-files found" >&2;} - { (exit 1); exit 1; }; } +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" fi -# cheat, to get the right #define's for HAVE_NCURSES_H, etc. - -for ac_header in $cf_cv_ncurses_header -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:12260: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 12266 "configure" -#include "confdefs.h" -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:12270: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:12276: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi +case ".$with_libtool" in +(.\$\(*\)*|.\'*\'*) + ;; +(..|./*|.\\*) + ;; +(.[a-zA-Z]:[\\/]*) # OS/2 EMX + ;; +(.\$\{*prefix\}*|.\$\{*dir\}*) + eval with_libtool="$with_libtool" + case ".$with_libtool" in + (.NONE/*) + with_libtool=`echo "$with_libtool" | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; +(.no|.NONE/*) + with_libtool=`echo "$with_libtool" | sed -e s%NONE%$cf_path_syntax%` + ;; +(*) + { { echo "$as_me:12520: error: expected a pathname, not \"$with_libtool\"" >&5 +echo "$as_me: error: expected a pathname, not \"$with_libtool\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac + + LIBTOOL=$with_libtool + else + if test -n "$ac_tool_prefix"; then + for ac_prog in libtool glibtool + 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 +echo "$as_me:12533: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_LIBTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" + if test -n "$LIBTOOL"; then + ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" +echo "$as_me:12548: found $ac_dir/$ac_word" >&5 +break +done + fi -rm -f conftest.err conftest.$ac_ext fi -echo "$as_me:12295: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -EOF +LIBTOOL=$ac_cv_prog_LIBTOOL +if test -n "$LIBTOOL"; then + echo "$as_me:12556: result: $LIBTOOL" >&5 +echo "${ECHO_T}$LIBTOOL" >&6 +else + echo "$as_me:12559: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + test -n "$LIBTOOL" && break + done fi +if test -z "$LIBTOOL"; then + ac_ct_LIBTOOL=$LIBTOOL + for ac_prog in libtool glibtool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:12572: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_LIBTOOL"; then + ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" +echo "$as_me:12587: found $ac_dir/$ac_word" >&5 +break done -echo "$as_me:12305: checking for terminfo header" >&5 -echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 -if test "${cf_cv_term_header+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +fi +ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL +if test -n "$ac_ct_LIBTOOL"; then + echo "$as_me:12595: result: $ac_ct_LIBTOOL" >&5 +echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 else + echo "$as_me:12598: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -case ${cf_cv_ncurses_header} in -(*/ncurses.h|*/ncursesw.h) - cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` - ;; -(*) - cf_term_header=term.h - ;; -esac + test -n "$ac_ct_LIBTOOL" && break +done +test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" -for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" -do -cat >conftest.$ac_ext <<_ACEOF -#line 12323 "configure" -#include "confdefs.h" -#include <stdio.h> -#include <${cf_cv_ncurses_header:-curses.h}> -#include <$cf_test> + LIBTOOL=$ac_ct_LIBTOOL +fi -int -main (void) -{ -int x = auto_left_margin - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:12338: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:12341: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:12344: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:12347: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if test -n "$LIBTOOL" && test "$LIBTOOL" != none +then + cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` +else + cf_cv_libtool_version= +fi +test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version - cf_cv_term_header="$cf_test" + if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool + then + +unset ac_cv_prog_ac_ct_LIBTOOL +unset ac_ct_LIBTOOL +unset LIBTOOL + + if test -n "$ac_tool_prefix"; then + for ac_prog in glibtool + 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 +echo "$as_me:12629: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_LIBTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 + if test -n "$LIBTOOL"; then + ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" +echo "$as_me:12644: found $ac_dir/$ac_word" >&5 +break +done - cf_cv_term_header=unknown +fi +fi +LIBTOOL=$ac_cv_prog_LIBTOOL +if test -n "$LIBTOOL"; then + echo "$as_me:12652: result: $LIBTOOL" >&5 +echo "${ECHO_T}$LIBTOOL" >&6 +else + echo "$as_me:12655: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + test -n "$LIBTOOL" && break + done fi -rm -f conftest.$ac_objext conftest.$ac_ext - test "$cf_cv_term_header" != unknown && break +if test -z "$LIBTOOL"; then + ac_ct_LIBTOOL=$LIBTOOL + for ac_prog in glibtool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:12668: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_LIBTOOL"; then + ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" +echo "$as_me:12683: found $ac_dir/$ac_word" >&5 +break done fi -echo "$as_me:12363: result: $cf_cv_term_header" >&5 -echo "${ECHO_T}$cf_cv_term_header" >&6 +fi +ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL +if test -n "$ac_ct_LIBTOOL"; then + echo "$as_me:12691: result: $ac_ct_LIBTOOL" >&5 +echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 +else + echo "$as_me:12694: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -# Set definitions to allow ifdef'ing to accommodate subdirectories + test -n "$ac_ct_LIBTOOL" && break +done +test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" -case $cf_cv_term_header in -(*term.h) + LIBTOOL=$ac_ct_LIBTOOL +fi -cat >>confdefs.h <<\EOF -#define HAVE_TERM_H 1 -EOF +if test -n "$LIBTOOL" && test "$LIBTOOL" != none +then + cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` +else + cf_cv_libtool_version= +fi +test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version - ;; -esac + fi + fi + if test -z "$LIBTOOL" ; then + { { echo "$as_me:12716: error: Cannot find libtool" >&5 +echo "$as_me: error: Cannot find libtool" >&2;} + { (exit 1); exit 1; }; } + fi + LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' + LIB_OBJECT='${OBJECTS:.o=.lo}' + LIB_SUFFIX=.la + LIB_CLEAN='${LIBTOOL} --mode=clean' + LIB_COMPILE='${LIBTOOL} --mode=compile' + LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' + LIB_INSTALL='${LIBTOOL} --mode=install' + LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' + LIB_PREP=: -case $cf_cv_term_header in -(ncurses/term.h) +if test -n "$LIBTOOL" && test "$LIBTOOL" != none +then + echo "$as_me:12732: checking version of $LIBTOOL" >&5 +echo $ECHO_N "checking version of $LIBTOOL... $ECHO_C" >&6 -cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_TERM_H 1 -EOF +if test -n "$LIBTOOL" && test "$LIBTOOL" != none +then + cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` +else + cf_cv_libtool_version= +fi +test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version - ;; -(ncursesw/term.h) - -cat >>confdefs.h <<\EOF -#define HAVE_NCURSESW_TERM_H 1 -EOF + echo "$as_me:12743: result: $cf_cv_libtool_version" >&5 +echo "${ECHO_T}$cf_cv_libtool_version" >&6 + if test -z "$cf_cv_libtool_version" ; then + { { echo "$as_me:12746: error: This is not GNU libtool" >&5 +echo "$as_me: error: This is not GNU libtool" >&2;} + { (exit 1); exit 1; }; } + fi +else + { { echo "$as_me:12751: error: GNU libtool has not been found" >&5 +echo "$as_me: error: GNU libtool has not been found" >&2;} + { (exit 1); exit 1; }; } +fi - ;; -esac + # special hack to add -no-undefined (which libtool should do for itself) + LT_UNDEF= + case "$cf_cv_system_name" in + (cygwin*|msys*|mingw32*|os2*|uwin*|aix[4-7]) + LT_UNDEF=-no-undefined + ;; + esac -echo "$as_me:12395: checking for ncurses version" >&5 -echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 -if test "${cf_cv_ncurses_version+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # special hack to add --tag option for C++ compiler + case "$cf_cv_libtool_version" in + (1.[5-9]*|[2-9].[0-9.a-z]*) + LIBTOOL_CXX="$LIBTOOL --tag=CXX" + LIBTOOL="$LIBTOOL --tag=CC" + ;; + (*) + LIBTOOL_CXX="$LIBTOOL" + ;; + esac else + LIBTOOL="" + LIBTOOL_CXX="" +fi - cf_cv_ncurses_version=no - cf_tempfile=out$$ - rm -f $cf_tempfile - if test "$cross_compiling" = yes; then +test -z "$LIBTOOL" && ECHO_LT= - # This will not work if the preprocessor splits the line after the - # Autoconf token. The 'unproto' program does that. - cat > conftest.$ac_ext <<EOF -#include <${cf_cv_ncurses_header:-curses.h}> -#undef Autoconf -#ifdef NCURSES_VERSION -Autoconf NCURSES_VERSION -#else -#ifdef __NCURSES_H -Autoconf "old" -#endif -; -#endif -EOF - cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" - { (eval echo "$as_me:12421: \"$cf_try\"") >&5 - (eval $cf_try) 2>&5 - ac_status=$? - echo "$as_me:12424: \$? = $ac_status" >&5 - (exit $ac_status); } - if test -f conftest.out ; then - cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` - test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" - rm -f conftest.out - fi +LIB_CREATE="$LIB_CREATE \$@" + +if test "$with_libtool" = "yes" ; then + OBJEXT="lo" + LIB_MODEL=libtool + DFT_LWR_MODEL=$LIB_MODEL + LIBTOOL_MAKE= + +echo "$as_me:12789: checking for additional libtool options" >&5 +echo $ECHO_N "checking for additional libtool options... $ECHO_C" >&6 +# Check whether --with-libtool-opts or --without-libtool-opts was given. +if test "${with_libtool_opts+set}" = set; then + withval="$with_libtool_opts" + with_libtool_opts=$withval else - cat >conftest.$ac_ext <<_ACEOF -#line 12434 "configure" -#include "confdefs.h" + with_libtool_opts=no +fi; +echo "$as_me:12799: result: $with_libtool_opts" >&5 +echo "${ECHO_T}$with_libtool_opts" >&6 -#include <${cf_cv_ncurses_header:-curses.h}> -#include <stdio.h> -int main(void) -{ - FILE *fp = fopen("$cf_tempfile", "w"); -#ifdef NCURSES_VERSION -# ifdef NCURSES_VERSION_PATCH - fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); -# else - fprintf(fp, "%s\n", NCURSES_VERSION); -# endif -#else -# ifdef __NCURSES_H - fprintf(fp, "old\n"); -# else - make an error -# endif -#endif - ${cf_cv_main_return:-return}(0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:12459: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:12462: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:12464: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:12467: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +case .$with_libtool_opts in +(.yes|.no|.) + ;; +(*) + LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" + ;; +esac - cf_cv_ncurses_version=`cat $cf_tempfile` +echo "$as_me:12810: checking if exported-symbols file should be used" >&5 +echo $ECHO_N "checking if exported-symbols file should be used... $ECHO_C" >&6 + +# Check whether --with-export-syms or --without-export-syms was given. +if test "${with_export_syms+set}" = set; then + withval="$with_export_syms" + with_export_syms=$withval else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + with_export_syms=no +fi; +if test "x$with_export_syms" = xyes +then + with_export_syms='${top_srcdir}/package/${PACKAGE}.sym' + fi - rm -f $cf_tempfile +echo "$as_me:12825: result: $with_export_syms" >&5 +echo "${ECHO_T}$with_export_syms" >&6 +if test "x$with_export_syms" != xno +then + EXPORT_SYMS="-export-symbols $with_export_syms" fi -echo "$as_me:12481: result: $cf_cv_ncurses_version" >&5 -echo "${ECHO_T}$cf_cv_ncurses_version" >&6 -test "$cf_cv_ncurses_version" = no || -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF -echo "$as_me:12488: checking if we have identified curses libraries" >&5 -echo $ECHO_N "checking if we have identified curses libraries... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -#line 12491 "configure" -#include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> -int -main (void) -{ -initscr(); tgoto("?", 0,0) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12503: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:12506: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12509: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:12512: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_result=yes + MAKE_NORMAL="#" + MAKE_STATIC="#" + MAKE_SHARED= else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_result=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -echo "$as_me:12521: result: $cf_result" >&5 -echo "${ECHO_T}$cf_result" >&6 + echo "$as_me:12837: checking if you want to build shared libraries" >&5 +echo $ECHO_N "checking if you want to build shared libraries... $ECHO_C" >&6 -if test "$cf_result" = no ; then -case $host_os in -(freebsd*) - echo "$as_me:12527: checking for tgoto in -lmytinfo" >&5 -echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 -if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --with-shared or --without-shared was given. +if test "${with_shared+set}" = set; then + withval="$with_shared" + with_shared=$withval else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmytinfo $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 12535 "configure" -#include "confdefs.h" + with_shared=no +fi; + echo "$as_me:12847: result: $with_shared" >&5 +echo "${ECHO_T}$with_shared" >&6 + if test "$with_shared" = "yes" ; then + LIB_MODEL=shared + DFT_LWR_MODEL=$LIB_MODEL -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char tgoto (); + RM_SHARED_OPTS= + LOCAL_LDFLAGS= + LOCAL_LDFLAGS2= + LD_SHARED_OPTS= + INSTALL_LIB="-m 644" + : ${rel_builddir:=.} + + shlibdir=$libdir + + MAKE_DLLS="#" + + cf_cv_do_symlinks=no + cf_ld_rpath_opt= + test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" + + echo "$as_me:12868: checking if release/abi version should be used for shared libs" >&5 +echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6 + +# Check whether --with-shlib-version or --without-shlib-version was given. +if test "${with_shlib_version+set}" = set; then + withval="$with_shlib_version" + test -z "$withval" && withval=auto + case "$withval" in + (yes) + cf_cv_shlib_version=auto + ;; + (rel|abi|auto) + cf_cv_shlib_version=$withval + ;; + (*) + echo "$as_me:12883: result: $withval" >&5 +echo "${ECHO_T}$withval" >&6 + { { echo "$as_me:12885: error: option value must be one of: rel, abi, or auto" >&5 +echo "$as_me: error: option value must be one of: rel, abi, or auto" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + +else + cf_cv_shlib_version=auto +fi; + echo "$as_me:12894: result: $cf_cv_shlib_version" >&5 +echo "${ECHO_T}$cf_cv_shlib_version" >&6 + + cf_cv_rm_so_locs=no + cf_try_cflags= + + # Some less-capable ports of gcc support only -fpic + CC_SHARED_OPTS= + + cf_try_fPIC=no + if test "$GCC" = yes + then + cf_try_fPIC=yes + else + case "$cf_cv_system_name" in + (*linux*) # e.g., PGI compiler + cf_try_fPIC=yes + ;; + esac + fi + + if test "$cf_try_fPIC" = yes + then + echo "$as_me:12917: checking which $CC option to use" >&5 +echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6 + cf_save_CFLAGS="$CFLAGS" + for CC_SHARED_OPTS in -fPIC -fpic '' + do + CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 12924 "configure" +#include "confdefs.h" +#include <stdio.h> int main (void) { -tgoto (); +int x = 1 ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12554: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:12936: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:12557: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12560: \"$ac_try\"") >&5 + echo "$as_me:12939: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:12942: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12563: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_mytinfo_tgoto=yes + echo "$as_me:12945: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_mytinfo_tgoto=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +cat "conftest.$ac_ext" >&5 fi -echo "$as_me:12574: result: $ac_cv_lib_mytinfo_tgoto" >&5 -echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 -if test $ac_cv_lib_mytinfo_tgoto = yes; then +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + done + echo "$as_me:12954: result: $CC_SHARED_OPTS" >&5 +echo "${ECHO_T}$CC_SHARED_OPTS" >&6 + CFLAGS="$cf_save_CFLAGS" + fi + + cf_cv_shlib_version_infix=no + + case "$cf_cv_system_name" in + (aix4.3-9*|aix[5-7]*) + if test "$GCC" = yes; then + CC_SHARED_OPTS='-Wl,-brtl' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' + else + CC_SHARED_OPTS='-brtl' + # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' + fi + ;; + (beos*) + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0' + ;; + (cygwin*) + CC_SHARED_OPTS= + MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' + RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" + cf_cv_shlib_version=cygdll + cf_cv_shlib_version_infix=cygdll + shlibdir=$bindir + MAKE_DLLS= + cat >mk_shared_lib.sh <<-CF_EOF + #!$SHELL + SHARED_LIB=\$1 + IMPORT_LIB=\`echo "\$1" | sed -e 's/cyg/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` + shift + cat <<-EOF + Linking shared library + ** SHARED_LIB \$SHARED_LIB + ** IMPORT_LIB \$IMPORT_LIB +EOF + exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} +CF_EOF + chmod +x mk_shared_lib.sh + ;; + (msys*) + CC_SHARED_OPTS= + MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' + RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" + cf_cv_shlib_version=msysdll + cf_cv_shlib_version_infix=msysdll + shlibdir=$bindir + MAKE_DLLS= + cat >mk_shared_lib.sh <<-CF_EOF + #!$SHELL + SHARED_LIB=\$1 + IMPORT_LIB=\`echo "\$1" | sed -e 's/msys-/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` + shift + cat <<-EOF + Linking shared library + ** SHARED_LIB \$SHARED_LIB + ** IMPORT_LIB \$IMPORT_LIB +EOF + exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} +CF_EOF + chmod +x mk_shared_lib.sh + ;; + (darwin*) + cf_try_cflags="no-cpp-precomp" + CC_SHARED_OPTS="-dynamic" + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@' + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi + cf_cv_shlib_version_infix=yes + echo "$as_me:13025: checking if ld -search_paths_first works" >&5 +echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6 +if test "${cf_cv_ldflags_search_paths_first+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cf_save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + cat >"conftest.$ac_ext" <<_ACEOF +#line 13034 "configure" +#include "confdefs.h" + +int +main (void) +{ +int i; + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:13046: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:13049: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:13052: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13055: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ldflags_search_paths_first=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_cv_ldflags_search_paths_first=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + LDFLAGS=$cf_save_LDFLAGS +fi +echo "$as_me:13066: result: $cf_cv_ldflags_search_paths_first" >&5 +echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6 + if test "$cf_cv_ldflags_search_paths_first" = yes; then + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + fi + ;; + (hpux[7-8]*) + # HP-UX 8.07 ld lacks "+b" option used for libdir search-list + if test "$GCC" != yes; then + CC_SHARED_OPTS='+Z' + fi + MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $@' + INSTALL_LIB="-m 555" + ;; + (hpux*) + # (tested with gcc 2.7.2 -- I don't have c89) + if test "$GCC" = yes; then + LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' + else + CC_SHARED_OPTS='+Z' + LD_SHARED_OPTS='-Wl,+b,${libdir}' + fi + MK_SHARED_LIB='${LD} ${LDFLAGS} +b ${libdir} -b -o $@' + # HP-UX shared libraries must be executable, and should be + # readonly to exploit a quirk in the memory manager. + INSTALL_LIB="-m 555" + ;; + (interix*) + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + if test "$cf_cv_shlib_version" = rel; then + cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' + else + cf_shared_soname='`basename $@`' + fi + CC_SHARED_OPTS= + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@' + ;; + (irix*) + if test "$cf_cv_enable_rpath" = yes ; then + EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" + fi + # tested with IRIX 5.2 and 'cc'. + if test "$GCC" != yes; then + CC_SHARED_OPTS='-KPIC' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $@` -o $@' + else + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $@` -o $@' + fi + cf_cv_rm_so_locs=yes + ;; + (linux*|gnu*|k*bsd*-gnu) + if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then + LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + fi + if test "$cf_cv_enable_rpath" = yes ; then + EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" + fi + + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + if test "$cf_cv_shlib_version" = rel; then + cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' + else + cf_cv_shared_soname='`basename $@`' + fi + + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' + ;; + (mingw*msvc*) + cf_cv_shlib_version=msvcdll + cf_cv_shlib_version_infix=msvcdll + shlibdir=$bindir + MAKE_DLLS= + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-link -dll" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + EXTRA_LDFLAGS="-link -dll $EXTRA_LDFLAGS" + fi + CC_SHARED_OPTS= + MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${LD} ${CFLAGS}' + RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.lib" + cat >mk_shared_lib.sh <<-CF_EOF + #!$SHELL + SHARED_LIB=\$1 + IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.lib/'\` + shift + my_ld=\$1 + shift + cat <<-EOF + Linking shared library + ** SHARED LIB \$SHARED_LIB + ** IMPORT_LIB \$IMPORT_LIB +EOF + args=\$(echo \$* | sed -E "s#-l(\w*)#\1.dll.lib#g" | sed -E "s#-L(\w*)#-LIBPATH:\1#g") + exec \$my_ld -DLL -IMPLIB:"\${IMPORT_LIB}" -OUT:"\${SHARED_LIB}" ${LDFLAGS} \$args + mv "\${IMPORT_LIB}" "\${IMPORT_LIB}" +CF_EOF + chmod +x mk_shared_lib.sh + cat >mk_prog.sh <<-CF_EOF + #!$SHELL + shift + # Ignore first argument (compiler) and use LD (link.exe) unconditionally + LD="$LD" + clopts=() + ldopts=("/subsystem:console") + libs=() + isdll=0 + while test \$# -gt 0; do + case "\$1" in + -link) + # ignore -link argument + ;; + -M[TD] | -M[TD]d) + # ignore runtime-library option + ;; + -dll) + isdll=1 + ;; + -W* | -w*) + # ignore warnings + ;; + -D*) + clopts+=("\$1") + ;; + -I*) + clopts+=("\$1") + ;; + -l*) + libs+=("\`echo \"\$1\" | sed \"s/^-l//\"\`") + ;; + -L*) + ldopts+=("\`echo \"\$1\" | sed \"s/^-L/-LIBPATH:/\"\`") + ;; + *.obj | *.o) + ldopts+=("\$1") + ;; + -Wl,*) + for linkarg in \`echo '\$1' | sed -e 's/-Wl,//' -e 's/,/ /'\`; do + ldopts+=("\${linkarg}") + done + ;; + *.lib) + ldopts+=("\$1") + ;; + -o) + shift + ldopts+=("-out:\$1") + ;; + *) + clopts+=("\$1") + ldopts+=("\$1") + ;; + esac + shift + done + if [ "\$isdll" -ne 0 ]; then + for lib in \${libs[*]}; do + ldopts+=("\$lib.dll.lib") + done + else + for lib in \${libs[*]}; do + ldopts+=("\$lib.lib") + done + fi + cat <<-EOF + Creating program + ** ld options: "\${ldopts[@]}" +EOF + exec \$LD \${ldopts[@]} +CF_EOF + chmod +x mk_prog.sh + LINK_PROGS="$SHELL ${rel_builddir}/mk_prog.sh" + LINK_TESTS="$SHELL ${rel_builddir}/mk_prog.sh" + ;; + (mingw*) + cf_cv_shlib_version=mingw + cf_cv_shlib_version_infix=mingw + shlibdir=$bindir + MAKE_DLLS= + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-Wl,--enable-auto-import" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" + fi + CC_SHARED_OPTS= + MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' + RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" + cat >mk_shared_lib.sh <<-CF_EOF + #!$SHELL + SHARED_LIB=\$1 + IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.a/'\` + shift + cat <<-EOF + Linking shared library + ** SHARED_LIB \$SHARED_LIB + ** IMPORT_LIB \$IMPORT_LIB +EOF + exec \$* ${LDFLAGS} -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} +CF_EOF + chmod +x mk_shared_lib.sh + ;; + (openbsd[2-9].*|mirbsd*) + if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then + LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + fi + if test "$cf_cv_enable_rpath" = yes ; then + EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" + fi + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" + + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + if test "$cf_cv_shlib_version" = rel; then + cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' + else + cf_cv_shared_soname='`basename $@`' + fi + + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' + ;; + (nskJ*) + CC_SHARED_OPTS= + MK_SHARED_LIB='${LD} -Wshared -Weld=-export_all -o $@' + ;; + (nskL*) + CC_SHARED_OPTS= + MK_SHARED_LIB='${LD} -Wshared -Wxld=-export_all -o $@' + ;; + (nto-qnx*|openbsd*|freebsd[12].*) + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" + MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $@' + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + ;; + (dragonfly*|freebsd*) + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" + if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then + LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" + LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" + EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" + fi + + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + if test "$cf_cv_shlib_version" = rel; then + cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' + else + cf_cv_shared_soname='`basename $@`' + fi + + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' + ;; + (netbsd*) + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" + if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then + LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" + if test "$cf_cv_shlib_version" = auto; then + if test -f /usr/libexec/ld.elf_so; then + cf_cv_shlib_version=abi + else + cf_cv_shlib_version=rel + fi + fi + + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + if test "$cf_cv_shlib_version" = rel; then + cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' + else + cf_cv_shared_soname='`basename $@`' + fi + + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@' + else + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -o $@' + fi + ;; + (osf*|mls+*) + # tested with OSF/1 V3.2 and 'cc' + # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't + # link with shared libs). + MK_SHARED_LIB='${LD} ${LDFLAGS} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`' + case "$host_os" in + (osf4*) + MK_SHARED_LIB="${MK_SHARED_LIB} -msym" + ;; + esac + MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@' + if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then + LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + fi + cf_cv_rm_so_locs=yes + ;; + (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 + # tested with osr5.0.5 + if test "$GCC" != yes; then + CC_SHARED_OPTS='-belf -KPIC' + fi + MK_SHARED_LIB='${LD} ${LDFLAGS} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@' + if test "$cf_cv_enable_rpath" = yes ; then + # only way is to set LD_RUN_PATH but no switch for it + RUN_PATH=$libdir + fi + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + LINK_PROGS='LD_RUN_PATH=${libdir}' + LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' + ;; + (sunos4*) + # tested with SunOS 4.1.1 and gcc 2.7.0 + if test "$GCC" != yes; then + CC_SHARED_OPTS='-KPIC' + fi + MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $@' + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + ;; + (solaris2*) + # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 + # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + fi + if test "$cf_cv_enable_rpath" = yes ; then + EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" + fi + + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + if test "$cf_cv_shlib_version" = rel; then + cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' + else + cf_cv_shared_soname='`basename $@`' + fi + + if test "$GCC" != yes; then + cf_save_CFLAGS="$CFLAGS" + for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O + do + CFLAGS="$cf_shared_opts $cf_save_CFLAGS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 13405 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main (void) +{ +printf("Hello\\n"); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:13417: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:13420: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:13423: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13426: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + done + CFLAGS="$cf_save_CFLAGS" + CC_SHARED_OPTS=$cf_shared_opts + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $@' + else + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $@' + fi + ;; + (sysv5uw7*|unix_sv*) + # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) + if test "$GCC" != yes; then + CC_SHARED_OPTS='-KPIC' + fi + MK_SHARED_LIB='${LD} ${LDFLAGS} -d y -G -o $@' + ;; + (*) + CC_SHARED_OPTS='unknown' + MK_SHARED_LIB='echo unknown' + ;; + esac -cf_add_libs="-lmytinfo" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" + # This works if the last tokens in $MK_SHARED_LIB are the -o target. + case "$cf_cv_shlib_version" in + (rel|abi) + case "$MK_SHARED_LIB" in + (*'-o $@') + test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes + ;; + (*) + { echo "$as_me:13463: WARNING: ignored --with-shlib-version" >&5 +echo "$as_me: WARNING: ignored --with-shlib-version" >&2;} + ;; + esac + ;; + esac + + if test -n "$cf_try_cflags" + then +cat > conftest.$ac_ext <<EOF +#line 13473 "${as_me:-configure}" +#include <stdio.h> +int main(int argc, char *argv[]) +{ + printf("hello\\n"); + return (argv[argc-1] == 0) ; +} +EOF + cf_save_CFLAGS="$CFLAGS" + for cf_opt in $cf_try_cflags + do + CFLAGS="$cf_save_CFLAGS -$cf_opt" + echo "$as_me:13485: checking if CFLAGS option -$cf_opt works" >&5 +echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6 + if { (eval echo "$as_me:13487: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:13490: \$? = $ac_status" >&5 + (exit "$ac_status"); }; then + echo "$as_me:13492: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + cf_save_CFLAGS="$CFLAGS" + else + echo "$as_me:13496: result: no" >&5 +echo "${ECHO_T}no" >&6 + fi + done + CFLAGS="$cf_save_CFLAGS" + fi + + # RPATH_LIST is a colon-separated list of directories + test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" + test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" + + test "$cf_cv_rm_so_locs" = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" + + test -n "$verbose" && echo " CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6 + +echo "${as_me:-configure}:13511: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5 + + test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 + +echo "${as_me:-configure}:13515: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 + +echo "$as_me:13517: checking if versioned-symbols file should be used" >&5 +echo $ECHO_N "checking if versioned-symbols file should be used... $ECHO_C" >&6 + +# Check whether --with-versioned-syms or --without-versioned-syms was given. +if test "${with_versioned_syms+set}" = set; then + withval="$with_versioned_syms" + with_versioned_syms=$withval +else + with_versioned_syms=no +fi; +case "x$with_versioned_syms" in +(xyes) + with_versioned_syms='${top_srcdir}/package/${PACKAGE}.map' + + ;; +(xno) + ;; +(x/*) + test -f "$with_versioned_syms" || { { echo "$as_me:13535: error: expected a filename: $with_versioned_syms" >&5 +echo "$as_me: error: expected a filename: $with_versioned_syms" >&2;} + { (exit 1); exit 1; }; } + ;; +(*) + test -f "$with_versioned_syms" || { { echo "$as_me:13540: error: expected a filename: $with_versioned_syms" >&5 +echo "$as_me: error: expected a filename: $with_versioned_syms" >&2;} + { (exit 1); exit 1; }; } + with_versioned_syms=`pwd`/"$with_versioned_syms" + ;; +esac +echo "$as_me:13546: result: $with_versioned_syms" >&5 +echo "${ECHO_T}$with_versioned_syms" >&6 + +RESULTING_SYMS= +VERSIONED_SYMS= +WILDCARD_SYMS= + +if test "x$with_versioned_syms" != xno +then + RESULTING_SYMS=$with_versioned_syms + case "x$MK_SHARED_LIB" in + (*-Wl,*) + VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}" + MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\${VERSIONED_SYMS} -Wl,%"` + test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 + +echo "${as_me:-configure}:13562: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 + + ;; + (*-dy\ *) + VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}" + MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\${VERSIONED_SYMS} -dy%"` + test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 + +echo "${as_me:-configure}:13570: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 + + ;; + (*) + { echo "$as_me:13574: WARNING: this system does not support versioned-symbols" >&5 +echo "$as_me: WARNING: this system does not support versioned-symbols" >&2;} + ;; + esac + + # Linux ld can selectively override scope, e.g., of symbols beginning with + # "_" by first declaring some as global, and then using a wildcard to + # declare the others as local. Some other loaders cannot do this. Check + # by constructing a (very) simple shared library and inspecting its + # symbols. + if test "x$VERSIONED_SYMS" != "x" + then + echo "$as_me:13586: checking if wildcards can be used to selectively omit symbols" >&5 +echo $ECHO_N "checking if wildcards can be used to selectively omit symbols... $ECHO_C" >&6 + WILDCARD_SYMS=no + + # make sources + rm -f conftest.* + + cat >conftest.ver <<EOF +module_1.0 { +global: + globalf1; +local: + localf1; +}; +module_2.0 { +global: + globalf2; +local: + localf2; + _*; +} module_1.0; +submodule_1.0 { +global: + subglobalf1; + _ismissing; +local: + sublocalf1; +}; +submodule_2.0 { +global: + subglobalf2; +local: + sublocalf2; + _*; +} submodule_1.0; +EOF + cat >conftest.$ac_ext <<EOF +#line 13623 "configure" +int _ismissing(void) { return 1; } +int _localf1(void) { return 1; } +int _localf2(void) { return 2; } +int globalf1(void) { return 1; } +int globalf2(void) { return 2; } +int _sublocalf1(void) { return 1; } +int _sublocalf2(void) { return 2; } +int subglobalf1(void) { return 1; } +int subglobalf2(void) { return 2; } +EOF + cat >conftest.mk <<EOF +CC=${CC} +CFLAGS=${CFLAGS} +CPPFLAGS=${CPPFLAGS} +LDFLAGS=${LDFLAGS} +LIBS=${LIBS} +VERSIONED_SYMS=${VERSIONED_SYMS} +RESULTING_SYMS=conftest.ver +MK_SHARED_LIB=${MK_SHARED_LIB} +conftest.so: conftest.$ac_cv_objext + \$(MK_SHARED_LIB) conftest.$ac_cv_objext +EOF + + # compile source, make library + if make -f conftest.mk 2>&5 >/dev/null then - cf_add_1lib= - break + # test for missing symbol in either Data or Text section + cf_missing="`nm -P conftest.so 2>&5 |${FGREP-fgrep} _ismissing | ${EGREP-egrep} '[ ][DT][ ]'`" + test -n "$cf_missing" && WILDCARD_SYMS=yes fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" + echo "$as_me:13654: result: $WILDCARD_SYMS" >&5 +echo "${ECHO_T}$WILDCARD_SYMS" >&6 + rm -f conftest.* + fi +fi + + LIB_PREP=: + LIB_CREATE="$MK_SHARED_LIB" + CFLAGS="$CFLAGS $CC_SHARED_OPTS" + MAKE_NORMAL="#" + MAKE_STATIC="#" + MAKE_SHARED= + fi +fi + +LIB_SUFFIX= + + case X$LIB_MODEL in + (Xlibtool) + DFT_LIB_SUFFIX='.la' + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + (Xdebug) + case "$cf_cv_system_name" in + (*-msvc*) + DFT_LIB_SUFFIX='_g.lib' + ;; + (*) + DFT_LIB_SUFFIX='_g.a' + ;; + esac + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + (Xprofile) + case "$cf_cv_system_name" in + (*-msvc*) + DFT_LIB_SUFFIX='_p.lib' + ;; + (*) + DFT_LIB_SUFFIX='_p.a' + ;; + esac + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + (Xshared) + case "$cf_cv_system_name" in + (aix[5-7]*) + DFT_LIB_SUFFIX='.so' + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + (*-msvc*) + DFT_LIB_SUFFIX='.dll' + DFT_DEP_SUFFIX='.dll.lib' + ;; + (cygwin*|msys*|mingw*) + DFT_LIB_SUFFIX='.dll' + DFT_DEP_SUFFIX='.dll.a' + ;; + (darwin*) + DFT_LIB_SUFFIX='.dylib' + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + (hpux*) + case "$target" in + (ia64*) + DFT_LIB_SUFFIX='.so' + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + (*) + DFT_LIB_SUFFIX='.sl' + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + esac + ;; + (*) + DFT_LIB_SUFFIX='.so' + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + esac + ;; + (*) + case "$target" in + (*-msvc*) + DFT_LIB_SUFFIX='.lib' + ;; + (*) + DFT_LIB_SUFFIX='.a' + ;; + esac + DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX + ;; + esac + if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" + then + DFT_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_LIB_SUFFIX}" + DFT_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_DEP_SUFFIX}" + fi -fi +LIB_SUFFIX=$DFT_LIB_SUFFIX - ;; -(hpux10.*) - # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr - # next (1998), and xcurses "newer" (2000). There is no header file for - # Hcurses; the subdirectory curses_colr has the headers (curses.h and - # term.h) for cur_colr - if test "x$cf_cv_screen" = "xcurses_colr" - then - echo "$as_me:12604: checking for initscr in -lcur_colr" >&5 -echo $ECHO_N "checking for initscr in -lcur_colr... $ECHO_C" >&6 -if test "${ac_cv_lib_cur_colr_initscr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo "$as_me:13754: checking for specific curses-directory" >&5 +echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 + +# Check whether --with-curses-dir or --without-curses-dir was given. +if test "${with_curses_dir+set}" = set; then + withval="$with_curses_dir" + cf_cv_curses_dir=$withval else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcur_colr $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 12612 "configure" -#include "confdefs.h" + cf_cv_curses_dir=no +fi; +echo "$as_me:13764: result: $cf_cv_curses_dir" >&5 +echo "${ECHO_T}$cf_cv_curses_dir" >&6 -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initscr (); -int -main (void) -{ -initscr (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12631: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:12634: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12637: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:12640: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_cur_colr_initscr=yes +if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" +then + +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_cur_colr_initscr=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + cf_path_syntax="$ac_default_prefix" fi -echo "$as_me:12651: result: $ac_cv_lib_cur_colr_initscr" >&5 -echo "${ECHO_T}$ac_cv_lib_cur_colr_initscr" >&6 -if test $ac_cv_lib_cur_colr_initscr = yes; then -cf_add_libs="-lcur_colr" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs +case ".$withval" in +(.\$\(*\)*|.\'*\'*) + ;; +(..|./*|.\\*) + ;; +(.[a-zA-Z]:[\\/]*) # OS/2 EMX + ;; +(.\$\{*prefix\}*|.\$\{*dir\}*) + eval withval="$withval" + case ".$withval" in + (.NONE/*) + withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; +(.no|.NONE/*) + withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%` + ;; +(*) + { { echo "$as_me:13795: error: expected a pathname, not \"$withval\"" >&5 +echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac + + if test -d "$cf_cv_curses_dir" + then + +if test -n "$cf_cv_curses_dir/include" ; then + for cf_add_incdir in $cf_cv_curses_dir/include + do + while test "$cf_add_incdir" != /usr/include do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" - ac_cv_func_initscr=yes + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS -else + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - echo "$as_me:12675: checking for initscr in -lHcurses" >&5 -echo $ECHO_N "checking for initscr in -lHcurses... $ECHO_C" >&6 -if test "${ac_cv_lib_Hcurses_initscr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lHcurses $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 12683 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 13831 "configure" #include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initscr (); +#include <stdio.h> int main (void) { -initscr (); +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12702: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:13843: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:12705: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12708: \"$ac_try\"") >&5 + echo "$as_me:13846: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:13849: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12711: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_Hcurses_initscr=yes + echo "$as_me:13852: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_Hcurses_initscr=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi -echo "$as_me:12722: result: $ac_cv_lib_Hcurses_initscr" >&5 -echo "${ECHO_T}$ac_cv_lib_Hcurses_initscr" >&6 -if test $ac_cv_lib_Hcurses_initscr = yes; then - - # HP's header uses __HP_CURSES, but user claims _HP_CURSES. - -cf_add_libs="-lHcurses" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-D__HP_CURSES -D_HP_CURSES" + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - ac_cv_func_initscr=yes +echo "${as_me:-configure}:13869: testing adding $cf_add_incdir to include-path ..." 1>&5 -fi + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done fi - fi - ;; -(linux*) - case `arch 2>/dev/null` in - (x86_64) - if test -d /lib64 - then - -if test -n "/lib64" ; then - for cf_add_libdir in /lib64 +if test -n "$cf_cv_curses_dir/lib" ; then + for cf_add_libdir in $cf_cv_curses_dir/lib do - if test $cf_add_libdir = /usr/lib ; then + if test "$cf_add_libdir" = /usr/lib ; then : - elif test -d $cf_add_libdir + elif test -d "$cf_add_libdir" then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 -echo "${as_me:-configure}:12780: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:13905: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi - else + fi +fi -if test -n "/lib" ; then - for cf_add_libdir in /lib +echo "$as_me:13916: checking for specific curses-directory" >&5 +echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 + +# Check whether --with-curses-dir or --without-curses-dir was given. +if test "${with_curses_dir+set}" = set; then + withval="$with_curses_dir" + cf_cv_curses_dir=$withval +else + cf_cv_curses_dir=no +fi; +echo "$as_me:13926: result: $cf_cv_curses_dir" >&5 +echo "${ECHO_T}$cf_cv_curses_dir" >&6 + +if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" +then + +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" +fi + +case ".$withval" in +(.\$\(*\)*|.\'*\'*) + ;; +(..|./*|.\\*) + ;; +(.[a-zA-Z]:[\\/]*) # OS/2 EMX + ;; +(.\$\{*prefix\}*|.\$\{*dir\}*) + eval withval="$withval" + case ".$withval" in + (.NONE/*) + withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; +(.no|.NONE/*) + withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%` + ;; +(*) + { { echo "$as_me:13957: error: expected a pathname, not \"$withval\"" >&5 +echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac + + if test -d "$cf_cv_curses_dir" + then + +if test -n "$cf_cv_curses_dir/include" ; then + for cf_add_incdir in $cf_cv_curses_dir/include + do + while test "$cf_add_incdir" != /usr/include do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS -echo "${as_me:-configure}:12809: testing adding $cf_add_libdir to library-path ..." 1>&5 + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - LDFLAGS="-L$cf_add_libdir $LDFLAGS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 13993 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main (void) +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:14005: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:14008: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:14011: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:14014: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS fi + fi fi - done -fi - fi - ;; - (*) + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -if test -n "/lib" ; then - for cf_add_libdir in /lib - do - if test $cf_add_libdir = /usr/lib ; then - : - elif test -d $cf_add_libdir - then - cf_have_libdir=no - if test -n "$LDFLAGS$LIBS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_libdir in $LDFLAGS $LIBS ; do - if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then - cf_have_libdir=yes; break - fi - done - fi - if test "$cf_have_libdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 +echo "${as_me:-configure}:14031: testing adding $cf_add_incdir to include-path ..." 1>&5 -echo "${as_me:-configure}:12840: testing adding $cf_add_libdir to library-path ..." 1>&5 + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break fi + else + break + fi done + done fi - ;; - esac - ;; -(sunos3*|sunos4*) - if test "x$cf_cv_screen" = "xcurses_5lib" - then - if test -d /usr/5lib ; then - -if test -n "/usr/5lib" ; then - for cf_add_libdir in /usr/5lib +if test -n "$cf_cv_curses_dir/lib" ; then + for cf_add_libdir in $cf_cv_curses_dir/lib do - if test $cf_add_libdir = /usr/lib ; then + if test "$cf_add_libdir" = /usr/lib ; then : - elif test -d $cf_add_libdir + elif test -d "$cf_add_libdir" then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 -echo "${as_me:-configure}:12875: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:14067: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi -cf_add_libs="-lcurses -ltermcap" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" - - fi fi - ac_cv_func_initscr=yes - ;; -esac +fi -if test ".$ac_cv_func_initscr" != .yes ; then - cf_save_LIBS="$LIBS" +cf_cv_screen=curses - if test ".${cf_cv_ncurses_version:-no}" != .no - then - cf_check_list="ncurses curses cursesX" - else - cf_check_list="cursesX curses ncurses" - fi +echo "$as_me:14080: checking for specified curses library type" >&5 +echo $ECHO_N "checking for specified curses library type... $ECHO_C" >&6 - # Check for library containing tgoto. Do this before curses library - # because it may be needed to link the test-case for initscr. - if test "x$cf_term_lib" = x - then - echo "$as_me:12919: checking for tgoto" >&5 -echo $ECHO_N "checking for tgoto... $ECHO_C" >&6 -if test "${ac_cv_func_tgoto+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --with-screen or --without-screen was given. +if test "${with_screen+set}" = set; then + withval="$with_screen" + cf_cv_screen=$withval else - cat >conftest.$ac_ext <<_ACEOF -#line 12925 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char tgoto (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char tgoto (); -char (*f) (); - -int -main (void) -{ -/* 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_tgoto) || defined (__stub___tgoto) -choke me -#else -f = tgoto; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12956: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:12959: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12962: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:12965: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_tgoto=yes +# Check whether --with-ncursesw or --without-ncursesw was given. +if test "${with_ncursesw+set}" = set; then + withval="$with_ncursesw" + cf_cv_screen=ncursesw else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_tgoto=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:12975: result: $ac_cv_func_tgoto" >&5 -echo "${ECHO_T}$ac_cv_func_tgoto" >&6 -if test $ac_cv_func_tgoto = yes; then - cf_term_lib=predefined + +# Check whether --with-ncurses or --without-ncurses was given. +if test "${with_ncurses+set}" = set; then + withval="$with_ncurses" + cf_cv_screen=ncurses else - for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown - do - as_ac_Lib=`echo "ac_cv_lib_$cf_term_lib''_tgoto" | $as_tr_sh` -echo "$as_me:12984: checking for tgoto in -l$cf_term_lib" >&5 -echo $ECHO_N "checking for tgoto in -l$cf_term_lib... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Lib+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --with-pdcurses or --without-pdcurses was given. +if test "${with_pdcurses+set}" = set; then + withval="$with_pdcurses" + cf_cv_screen=pdcurses else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$cf_term_lib $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 12992 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char tgoto (); -int -main (void) -{ -tgoto (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13011: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:13014: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13017: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:13020: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Lib=yes" +# Check whether --with-curses-colr or --without-curses-colr was given. +if test "${with_curses_colr+set}" = set; then + withval="$with_curses_colr" + cf_cv_screen=curses_colr else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -eval "$as_ac_Lib=no" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:13031: result: `eval echo '${'$as_ac_Lib'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 -if test `eval echo '${'$as_ac_Lib'}'` = yes; then - : ${cf_nculib_root:=$cf_term_lib} - break +# Check whether --with-curses-5lib or --without-curses-5lib was given. +if test "${with_curses_5lib+set}" = set; then + withval="$with_curses_5lib" + cf_cv_screen=curses_5lib +fi; +fi; +fi; +fi; +fi; +fi; -fi +echo "$as_me:14124: result: $cf_cv_screen" >&5 +echo "${ECHO_T}$cf_cv_screen" >&6 - done +case $cf_cv_screen in +(curses|curses_*) -fi +echo "$as_me:14130: checking for extra include directories" >&5 +echo $ECHO_N "checking for extra include directories... $ECHO_C" >&6 +if test "${cf_cv_curses_incdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else +cf_cv_curses_incdir=no +case "$host_os" in +(hpux10.*) + if test "x$cf_cv_screen" = "xcurses_colr" + then + test -d /usr/include/curses_colr && \ + cf_cv_curses_incdir="-I/usr/include/curses_colr" fi - - # Check for library containing initscr - test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" - if test "x$cf_curs_lib" = x + ;; +(sunos3*|sunos4*) + if test "x$cf_cv_screen" = "xcurses_5lib" then - for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown - do - LIBS="-l$cf_curs_lib $cf_save_LIBS" - if test "$cf_term_lib" = unknown || test "$cf_term_lib" = "$cf_curs_lib" ; then - echo "$as_me:13054: checking if we can link with $cf_curs_lib library" >&5 -echo $ECHO_N "checking if we can link with $cf_curs_lib library... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -#line 13057 "configure" -#include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> -int -main (void) -{ -initscr() - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13069: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:13072: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13075: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:13078: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_result=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_result=no + test -d /usr/5lib && \ + test -d /usr/5include && \ + cf_cv_curses_incdir="-I/usr/5include" + fi + ;; +esac + +fi +echo "$as_me:14156: result: $cf_cv_curses_incdir" >&5 +echo "${ECHO_T}$cf_cv_curses_incdir" >&6 +if test "$cf_cv_curses_incdir" != no +then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_cv_curses_incdir" + fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - echo "$as_me:13087: result: $cf_result" >&5 -echo "${ECHO_T}$cf_result" >&6 - test $cf_result = yes && break - elif test "$cf_curs_lib" = "$cf_term_lib" ; then - cf_result=no - elif test "$cf_term_lib" != predefined ; then - echo "$as_me:13093: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5 -echo $ECHO_N "checking if we need both $cf_curs_lib and $cf_term_lib libraries... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -#line 13096 "configure" -#include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> -int -main (void) -{ -initscr(); tgoto((char *)0, 0, 0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13108: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:13111: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13114: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:13117: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_result=no + +echo "$as_me:14166: checking if we have identified curses headers" >&5 +echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 +if test "${cf_cv_ncurses_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 13126 "configure" +cf_cv_ncurses_header=none +for cf_header in \ + ncurses.h \ + curses.h ncurses/ncurses.h ncurses/curses.h +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 14178 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> +#include <${cf_header}> int main (void) { -initscr() +initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13138: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:14190: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:13141: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13144: \"$ac_try\"") >&5 + echo "$as_me:14193: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:14196: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13147: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_result=yes + echo "$as_me:14199: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_result=error +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" +done fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - echo "$as_me:13159: result: $cf_result" >&5 -echo "${ECHO_T}$cf_result" >&6 - test $cf_result != error && break - fi - done - fi - test $cf_curs_lib = unknown && { { echo "$as_me:13165: error: no curses library found" >&5 -echo "$as_me: error: no curses library found" >&2;} +echo "$as_me:14210: result: $cf_cv_ncurses_header" >&5 +echo "${ECHO_T}$cf_cv_ncurses_header" >&6 + +if test "$cf_cv_ncurses_header" = none ; then + { { echo "$as_me:14214: error: No curses header-files found" >&5 +echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } -fi fi - ;; -(ncursesw*) +# cheat, to get the right #define's for HAVE_NCURSES_H, etc. -echo "$as_me:13174: checking for multibyte character support" >&5 -echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6 -if test "${cf_cv_utf8_lib+set}" = set; then +for ac_header in $cf_cv_ncurses_header +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:14224: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - - cf_save_LIBS="$LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 13182 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 14230 "configure" #include "confdefs.h" - -#include <stdlib.h> -int -main (void) -{ -putwc(0,0); - ; - return 0; -} +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13195: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:13198: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13201: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 +if { (eval echo "$as_me:14234: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - echo "$as_me:13204: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_utf8_lib=yes + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:14240: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - -# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these -# will be set on completion of the AC_TRY_LINK below. -cf_cv_header_path_utf8= -cf_cv_library_path_utf8= - -echo "${as_me:-configure}:13216: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 - -cf_save_LIBS="$LIBS" - -cat >conftest.$ac_ext <<_ACEOF -#line 13221 "configure" -#include "confdefs.h" - -#include <libutf8.h> -int -main (void) -{ -putwc(0,0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13234: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:13237: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13240: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:13243: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + cat "conftest.$ac_ext" >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:14259: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF - cf_cv_find_linkage_utf8=yes - cf_cv_header_path_utf8=/usr/include - cf_cv_library_path_utf8=/usr/lib +fi +done +echo "$as_me:14269: checking for terminfo header" >&5 +echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -LIBS="-lutf8 $cf_save_LIBS" +case "${cf_cv_ncurses_header}" in +(*/ncurses.h|*/ncursesw.h) + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + ;; +(*) + cf_term_header=term.h + ;; +esac -cat >conftest.$ac_ext <<_ACEOF -#line 13257 "configure" +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 14287 "configure" #include "confdefs.h" +#include <stdio.h> +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> -#include <libutf8.h> int main (void) { -putwc(0,0); +int x = auto_left_margin; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13270: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:14302: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:13273: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13276: \"$ac_try\"") >&5 + echo "$as_me:14305: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:14308: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13279: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_find_linkage_utf8=yes - cf_cv_header_path_utf8=/usr/include - cf_cv_library_path_utf8=/usr/lib - cf_cv_library_file_utf8="-lutf8" + echo "$as_me:14311: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - cf_cv_find_linkage_utf8=no - LIBS="$cf_save_LIBS" - - test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 - -echo "${as_me:-configure}:13296: testing find linkage for utf8 library ..." 1>&5 +cat "conftest.$ac_ext" >&5 -echo "${as_me:-configure}:13298: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 + cf_cv_term_header=unknown - cf_save_CPPFLAGS="$CPPFLAGS" - cf_test_CPPFLAGS="$CPPFLAGS" +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + test "$cf_cv_term_header" != unknown && break +done -cf_search= +fi +echo "$as_me:14327: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 -# collect the current set of include-directories from compiler flags -cf_header_path_list="" -if test -n "${CFLAGS}${CPPFLAGS}" ; then - for cf_header_path in $CPPFLAGS $CFLAGS - do - case $cf_header_path in - (-I*) - cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` +# Set definitions to allow ifdef'ing to accommodate subdirectories -test "x$cf_header_path" != "xNONE" && \ -test -d "$cf_header_path" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" - test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" - test -d $cf_header_path/include/utf8 && cf_search="$cf_search $cf_header_path/include/utf8" - test -d $cf_header_path/include/utf8/include && cf_search="$cf_search $cf_header_path/include/utf8/include" - test -d $cf_header_path/utf8/include && cf_search="$cf_search $cf_header_path/utf8/include" - test -d $cf_header_path/utf8/include/utf8 && cf_search="$cf_search $cf_header_path/utf8/include/utf8" -} +case "$cf_cv_term_header" in +(*term.h) - cf_header_path_list="$cf_header_path_list $cf_search" - ;; - esac - done -fi +cat >>confdefs.h <<\EOF +#define HAVE_TERM_H 1 +EOF -# add the variations for the package we are looking for + ;; +esac -cf_search= +case "$cf_cv_term_header" in +(ncurses/term.h) -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $prefix" - test -d $prefix/include && cf_search="$cf_search $prefix/include" - test -d $prefix/include/utf8 && cf_search="$cf_search $prefix/include/utf8" - test -d $prefix/include/utf8/include && cf_search="$cf_search $prefix/include/utf8/include" - test -d $prefix/utf8/include && cf_search="$cf_search $prefix/utf8/include" - test -d $prefix/utf8/include/utf8 && cf_search="$cf_search $prefix/utf8/include/utf8" -} +cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_TERM_H 1 +EOF -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do + ;; +(ncursesw/term.h) -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" - test -d $cf_subdir_prefix/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/include/utf8" - test -d $cf_subdir_prefix/include/utf8/include && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include" - test -d $cf_subdir_prefix/utf8/include && cf_search="$cf_search $cf_subdir_prefix/utf8/include" - test -d $cf_subdir_prefix/utf8/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8" -} +cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_TERM_H 1 +EOF -done + ;; +esac -test "$includedir" != NONE && \ -test "$includedir" != "/usr/include" && \ -test -d "$includedir" && { - test -d $includedir && cf_search="$cf_search $includedir" - test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8" -} +echo "$as_me:14359: checking for ncurses version" >&5 +echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 +if test "${cf_cv_ncurses_version+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else -test "$oldincludedir" != NONE && \ -test "$oldincludedir" != "/usr/include" && \ -test -d "$oldincludedir" && { - test -d $oldincludedir && cf_search="$cf_search $oldincludedir" - test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8" -} + cf_cv_ncurses_version=no + cf_tempfile=out$$ + rm -f "$cf_tempfile" + if test "$cross_compiling" = yes; then -cf_search="$cf_search $cf_header_path_list" + # This will not work if the preprocessor splits the line after the + # Autoconf token. The 'unproto' program does that. + cat > "conftest.$ac_ext" <<EOF +#include <${cf_cv_ncurses_header:-curses.h}> +#undef Autoconf +#ifdef NCURSES_VERSION +Autoconf NCURSES_VERSION +#else +#ifdef __NCURSES_H +Autoconf "old" +#endif +; +#endif +EOF + cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" + { (eval echo "$as_me:14385: \"$cf_try\"") >&5 + (eval $cf_try) 2>&5 + ac_status=$? + echo "$as_me:14388: \$? = $ac_status" >&5 + (exit "$ac_status"); } + if test -f conftest.out ; then + cf_out=`sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%' conftest.out` + test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" + rm -f conftest.out + fi - for cf_cv_header_path_utf8 in $cf_search - do - if test -d $cf_cv_header_path_utf8 ; then - test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 14398 "configure" +#include "confdefs.h" -echo "${as_me:-configure}:13389: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 +#include <${cf_cv_ncurses_header:-curses.h}> +#include <stdio.h> +int main(void) +{ + FILE *fp = fopen("$cf_tempfile", "w"); +#ifdef NCURSES_VERSION +# ifdef NCURSES_VERSION_PATCH + fprintf(fp, "%s.%d\\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); +# else + fprintf(fp, "%s\\n", NCURSES_VERSION); +# endif +#else +# ifdef __NCURSES_H + fprintf(fp, "old\\n"); +# else + make an error +# endif +#endif + ${cf_cv_main_return:-return}(0); +} +_ACEOF +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:14423: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:14426: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:14428: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:14431: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then - CPPFLAGS="$cf_save_CPPFLAGS" + cf_cv_ncurses_version=`cat $cf_tempfile` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +fi +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi + rm -f "$cf_tempfile" - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_utf8" +fi +echo "$as_me:14445: result: $cf_cv_ncurses_version" >&5 +echo "${ECHO_T}$cf_cv_ncurses_version" >&6 +test "$cf_cv_ncurses_version" = no || +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF - cat >conftest.$ac_ext <<_ACEOF -#line 13397 "configure" +echo "$as_me:14452: checking if we have identified curses libraries" >&5 +echo $ECHO_N "checking if we have identified curses libraries... $ECHO_C" >&6 +cat >"conftest.$ac_ext" <<_ACEOF +#line 14455 "configure" #include "confdefs.h" - -#include <libutf8.h> +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -putwc(0,0); +initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:13410: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:14467: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13413: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:13416: \"$ac_try\"") >&5 + echo "$as_me:14470: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:14473: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13419: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 - -echo "${as_me:-configure}:13424: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 - - cf_cv_find_linkage_utf8=maybe - cf_test_CPPFLAGS="$CPPFLAGS" - break + echo "$as_me:14476: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_result=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - CPPFLAGS="$cf_save_CPPFLAGS" - -fi -rm -f conftest.$ac_objext conftest.$ac_ext - fi - done - - if test "$cf_cv_find_linkage_utf8" = maybe ; then - -echo "${as_me:-configure}:13442: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 - - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" - - if test "$cf_cv_find_linkage_utf8" != yes ; then - -cf_search= -cf_library_path_list="" -if test -n "${LDFLAGS}${LIBS}" ; then - for cf_library_path in $LDFLAGS $LIBS - do - case $cf_library_path in - (-L*) - cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` - -test "x$cf_library_path" != "xNONE" && \ -test -d "$cf_library_path" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" - test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" - test -d $cf_library_path/lib/utf8 && cf_search="$cf_search $cf_library_path/lib/utf8" - test -d $cf_library_path/lib/utf8/lib && cf_search="$cf_search $cf_library_path/lib/utf8/lib" - test -d $cf_library_path/utf8/lib && cf_search="$cf_search $cf_library_path/utf8/lib" - test -d $cf_library_path/utf8/lib/utf8 && cf_search="$cf_search $cf_library_path/utf8/lib/utf8" -} - - cf_library_path_list="$cf_library_path_list $cf_search" - ;; - esac - done +cat "conftest.$ac_ext" >&5 +cf_result=no fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +echo "$as_me:14485: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 -cf_search= - -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $prefix" - test -d $prefix/lib && cf_search="$cf_search $prefix/lib" - test -d $prefix/lib/utf8 && cf_search="$cf_search $prefix/lib/utf8" - test -d $prefix/lib/utf8/lib && cf_search="$cf_search $prefix/lib/utf8/lib" - test -d $prefix/utf8/lib && cf_search="$cf_search $prefix/utf8/lib" - test -d $prefix/utf8/lib/utf8 && cf_search="$cf_search $prefix/utf8/lib/utf8" -} - -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do - -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" - test -d $cf_subdir_prefix/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/lib/utf8" - test -d $cf_subdir_prefix/lib/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib" - test -d $cf_subdir_prefix/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/utf8/lib" - test -d $cf_subdir_prefix/utf8/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8" -} - -done - -cf_search="$cf_library_path_list $cf_search" - - for cf_cv_library_path_utf8 in $cf_search - do - if test -d $cf_cv_library_path_utf8 ; then - test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6 - -echo "${as_me:-configure}:13517: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 - - CPPFLAGS="$cf_test_CPPFLAGS" - LIBS="-lutf8 $cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8" - cat >conftest.$ac_ext <<_ACEOF -#line 13523 "configure" +if test "$cf_result" = no ; then +case "$host_os" in +(freebsd*) + echo "$as_me:14491: checking for tgoto in -lmytinfo" >&5 +echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 +if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmytinfo $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 14499 "configure" #include "confdefs.h" -#include <libutf8.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); int main (void) { -putwc(0,0); +tgoto (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13536: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:14518: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13539: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13542: \"$ac_try\"") >&5 + echo "$as_me:14521: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:14524: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13545: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 - -echo "${as_me:-configure}:13550: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 - - cf_cv_find_linkage_utf8=yes - cf_cv_library_file_utf8="-lutf8" - break + echo "$as_me:14527: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 - - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS" - +cat "conftest.$ac_ext" >&5 +ac_cv_lib_mytinfo_tgoto=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - fi - done - CPPFLAGS="$cf_save_CPPFLAGS" - LDFLAGS="$cf_save_LDFLAGS" - fi - - else - cf_cv_find_linkage_utf8=no - fi - +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +echo "$as_me:14538: result: $ac_cv_lib_mytinfo_tgoto" >&5 +echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 +if test "$ac_cv_lib_mytinfo_tgoto" = yes; then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lmytinfo; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - -LIBS="$cf_save_LIBS" -if test "$cf_cv_find_linkage_utf8" = yes ; then -cf_cv_utf8_lib=add-on + ;; +(hpux10.*) + # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr + # next (1998), and xcurses "newer" (2000). There is no header file for + # Hcurses; the subdirectory curses_colr has the headers (curses.h and + # term.h) for cur_colr + if test "x$cf_cv_screen" = "xcurses_colr" + then + echo "$as_me:14568: checking for initscr in -lcur_colr" >&5 +echo $ECHO_N "checking for initscr in -lcur_colr... $ECHO_C" >&6 +if test "${ac_cv_lib_cur_colr_initscr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else -cf_cv_utf8_lib=no -fi + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcur_colr $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 14576 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +int +main (void) +{ +initscr (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:14595: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:14598: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:14601: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:14604: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_cur_colr_initscr=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_lib_cur_colr_initscr=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:13592: result: $cf_cv_utf8_lib" >&5 -echo "${ECHO_T}$cf_cv_utf8_lib" >&6 - -# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between -# ncurses/ncursesw: -if test "$cf_cv_utf8_lib" = "add-on" ; then - -cat >>confdefs.h <<\EOF -#define HAVE_LIBUTF8_H 1 -EOF - -if test -n "$cf_cv_header_path_utf8" ; then - for cf_add_incdir in $cf_cv_header_path_utf8 - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done +echo "$as_me:14615: result: $ac_cv_lib_cur_colr_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_cur_colr_initscr" >&6 +if test "$ac_cv_lib_cur_colr_initscr" = yes; then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lcur_colr; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS + ac_cv_func_initscr=yes - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +else - cat >conftest.$ac_ext <<_ACEOF -#line 13630 "configure" + echo "$as_me:14639: checking for initscr in -lHcurses" >&5 +echo $ECHO_N "checking for initscr in -lHcurses... $ECHO_C" >&6 +if test "${ac_cv_lib_Hcurses_initscr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lHcurses $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 14647 "configure" #include "confdefs.h" -#include <stdio.h> + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); int main (void) { -printf("Hello") +initscr (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:13642: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:14666: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13645: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:13648: \"$ac_try\"") >&5 + echo "$as_me:14669: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:14672: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13651: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:14675: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_Hcurses_initscr=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes +cat "conftest.$ac_ext" >&5 +ac_cv_lib_Hcurses_initscr=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:14686: result: $ac_cv_lib_Hcurses_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_Hcurses_initscr" >&6 +if test "$ac_cv_lib_Hcurses_initscr" = yes; then + + # HP's header uses __HP_CURSES, but user claims _HP_CURSES. + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lHcurses; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-D__HP_CURSES -D_HP_CURSES" -echo "${as_me:-configure}:13668: testing adding $cf_add_incdir to include-path ..." 1>&5 + ac_cv_func_initscr=yes - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +fi - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done fi -if test -n "$cf_cv_library_path_utf8" ; then - for cf_add_libdir in $cf_cv_library_path_utf8 + fi + ;; +(linux*) + case `arch 2>/dev/null` in + (x86_64) + if test -d /lib64 + then + +if test -n "/lib64" ; then + for cf_add_libdir in /lib64 do - if test $cf_add_libdir = /usr/lib ; then + if test "$cf_add_libdir" = /usr/lib ; then : - elif test -d $cf_add_libdir + elif test -d "$cf_add_libdir" then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 -echo "${as_me:-configure}:13704: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:14744: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi -cf_add_libs="$cf_cv_library_file_utf8" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs + else + +if test -n "/lib" ; then + for cf_add_libdir in /lib do - if test "x$cf_add_1lib" = "x$cf_add_2lib" + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" then - cf_add_1lib= - break + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me:-configure}:14773: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" - fi -cf_ncuconfig_root=$cf_cv_screen -cf_have_ncuconfig=no - -if test "x${PKG_CONFIG:=none}" != xnone; then - echo "$as_me:13734: checking pkg-config for $cf_ncuconfig_root" >&5 -echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 - if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then - echo "$as_me:13737: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - - echo "$as_me:13740: checking if the $cf_ncuconfig_root package files work" >&5 -echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 - cf_have_ncuconfig=unknown - - cf_save_CPPFLAGS="$CPPFLAGS" - cf_save_LIBS="$LIBS" - -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= - -for cf_add_cflags in `$PKG_CONFIG --cflags $cf_ncuconfig_root` -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes + fi + ;; + (*) - if test $cf_fix_cppflags = yes ; then +if test -n "/lib" ; then + for cf_add_libdir in /lib + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +echo "${as_me:-configure}:14804: testing adding $cf_add_libdir to library-path ..." 1>&5 - continue - elif test "${cf_tst_cflags}" = "\"'" ; then + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + ;; + esac + ;; +(sunos3*|sunos4*) + if test "x$cf_cv_screen" = "xcurses_5lib" + then + if test -d /usr/5lib ; then - continue +if test -n "/usr/5lib" ; then + for cf_add_libdir in /usr/5lib + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` +echo "${as_me:-configure}:14839: testing adding $cf_add_libdir to library-path ..." 1>&5 - ;; - esac + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lcurses -ltermcap; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" - ;; - esac - ;; - (*) + fi + fi + ac_cv_func_initscr=yes + ;; +esac - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" +if test ".$ac_cv_func_initscr" != .yes ; then + cf_save_LIBS="$LIBS" - ;; - esac - ;; -(yes) + if test ".${cf_cv_ncurses_version:-no}" != .no + then + cf_check_list="ncurses curses cursesX" + else + cf_check_list="cursesX curses ncurses" + fi - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + # Check for library containing tgoto. Do this before curses library + # because it may be needed to link the test-case for initscr. + if test "x$cf_term_lib" = x + then + echo "$as_me:14883: checking for tgoto" >&5 +echo $ECHO_N "checking for tgoto... $ECHO_C" >&6 +if test "${ac_cv_func_tgoto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 14889 "configure" +#include "confdefs.h" +#define tgoto autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef tgoto - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` +#ifdef __cplusplus +extern "C" +#endif - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (void); -if test -n "$cf_new_cflags" ; then +int +main (void) +{ - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" +/* The GNU C library defines stubs 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_tgoto) || defined (__stub___tgoto) +#error found stub for tgoto +#endif + return tgoto (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:14920: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:14923: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:14926: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:14929: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_tgoto=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +ac_cv_func_tgoto=no fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +fi +echo "$as_me:14939: result: $ac_cv_func_tgoto" >&5 +echo "${ECHO_T}$ac_cv_func_tgoto" >&6 +if test "$ac_cv_func_tgoto" = yes; then + cf_term_lib=predefined +else -if test -n "$cf_new_cppflags" ; then - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown + do + as_ac_Lib=`echo "ac_cv_lib_$cf_term_lib''_tgoto" | $as_tr_sh` +echo "$as_me:14948: checking for tgoto in -l$cf_term_lib" >&5 +echo $ECHO_N "checking for tgoto in -l$cf_term_lib... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Lib+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$cf_term_lib $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 14956 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); +int +main (void) +{ +tgoto (); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:14975: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:14978: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:14981: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:14984: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +eval "$as_ac_Lib=no" +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi +echo "$as_me:14995: result: `eval echo '${'"$as_ac_Lib"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Lib"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Lib"'}'`" = yes; then -if test -n "$cf_new_extra_cppflags" ; then + : "${cf_nculib_root:=$cf_term_lib}" + break - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +fi + + done fi -cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" + fi - cat >conftest.$ac_ext <<_ACEOF -#line 13862 "configure" + # Check for library containing initscr + test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" + if test "x$cf_curs_lib" = x + then + for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown + do + LIBS="-l$cf_curs_lib $cf_save_LIBS" + if test "$cf_term_lib" = unknown || test "$cf_term_lib" = "$cf_curs_lib" ; then + echo "$as_me:15018: checking if we can link with $cf_curs_lib library" >&5 +echo $ECHO_N "checking if we can link with $cf_curs_lib library... $ECHO_C" >&6 + cat >"conftest.$ac_ext" <<_ACEOF +#line 15021 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); +initscr() ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13874: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15033: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13877: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13880: \"$ac_try\"") >&5 + echo "$as_me:15036: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15039: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13883: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - if test "$cross_compiling" = yes; then - cf_have_ncuconfig=maybe + echo "$as_me:15042: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_result=yes else - cat >conftest.$ac_ext <<_ACEOF -#line 13889 "configure" + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_result=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + echo "$as_me:15051: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + test "$cf_result" = yes && break + elif test "$cf_curs_lib" = "$cf_term_lib" ; then + cf_result=no + elif test "$cf_term_lib" != predefined ; then + echo "$as_me:15057: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5 +echo $ECHO_N "checking if we need both $cf_curs_lib and $cf_term_lib libraries... $ECHO_C" >&6 + cat >"conftest.$ac_ext" <<_ACEOF +#line 15060 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> - int main(void) - { char *xx = curses_version(); return (xx == 0); } +int +main (void) +{ +initscr(); tgoto((char *)0, 0, 0); + ; + return 0; +} _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:13896: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15072: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13899: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:13901: \"$ac_try\"") >&5 + echo "$as_me:15075: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15078: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13904: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_have_ncuconfig=yes + echo "$as_me:15081: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_result=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_ncuconfig=no -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 + + LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 15090 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15102: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:15105: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15108: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:15111: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_result=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_ncuconfig=no +cat "conftest.$ac_ext" >&5 +cf_result=error fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - echo "$as_me:13921: result: $cf_have_ncuconfig" >&5 -echo "${ECHO_T}$cf_have_ncuconfig" >&6 - test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes - if test "$cf_have_ncuconfig" != "yes" - then - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - NCURSES_CONFIG_PKG=none - else +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + echo "$as_me:15123: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + test "$cf_result" != error && break + fi + done + fi + test "$cf_curs_lib" = unknown && { { echo "$as_me:15129: error: no curses library found" >&5 +echo "$as_me: error: no curses library found" >&2;} + { (exit 1); exit 1; }; } +fi +fi - NCURSES_CONFIG_PKG=$cf_ncuconfig_root + ;; +(ncursesw*) -echo "$as_me:13937: checking for terminfo header" >&5 -echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 -if test "${cf_cv_term_header+set}" = set; then +echo "$as_me:15138: checking for multibyte character support" >&5 +echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6 +if test "${cf_cv_utf8_lib+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -case ${cf_cv_ncurses_header} in -(*/ncurses.h|*/ncursesw.h) - cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` - ;; -(*) - cf_term_header=term.h - ;; -esac - -for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" -do -cat >conftest.$ac_ext <<_ACEOF -#line 13955 "configure" + cf_save_LIBS="$LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 15146 "configure" #include "confdefs.h" -#include <stdio.h> -#include <${cf_cv_ncurses_header:-curses.h}> -#include <$cf_test> +#include <stdlib.h> int main (void) { -int x = auto_left_margin +putwc(0,0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:13970: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15159: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13973: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:13976: \"$ac_try\"") >&5 + echo "$as_me:15162: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15165: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13979: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_term_header="$cf_test" + echo "$as_me:15168: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_utf8_lib=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 - cf_cv_term_header=unknown +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_utf8= +cf_cv_library_path_utf8= -fi -rm -f conftest.$ac_objext conftest.$ac_ext - test "$cf_cv_term_header" != unknown && break -done +echo "${as_me:-configure}:15180: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 -fi -echo "$as_me:13995: result: $cf_cv_term_header" >&5 -echo "${ECHO_T}$cf_cv_term_header" >&6 +cf_save_LIBS="$LIBS" -# Set definitions to allow ifdef'ing to accommodate subdirectories +cat >"conftest.$ac_ext" <<_ACEOF +#line 15185 "configure" +#include "confdefs.h" -case $cf_cv_term_header in -(*term.h) +#include <libutf8.h> +int +main (void) +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15198: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:15201: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15204: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:15207: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then -cat >>confdefs.h <<\EOF -#define HAVE_TERM_H 1 -EOF + cf_cv_find_linkage_utf8=yes + cf_cv_header_path_utf8=/usr/include + cf_cv_library_path_utf8=/usr/lib - ;; -esac +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 -case $cf_cv_term_header in -(ncurses/term.h) +LIBS="-lutf8 $cf_save_LIBS" -cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_TERM_H 1 -EOF +cat >"conftest.$ac_ext" <<_ACEOF +#line 15221 "configure" +#include "confdefs.h" - ;; -(ncursesw/term.h) +#include <libutf8.h> +int +main (void) +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15234: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:15237: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15240: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:15243: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then -cat >>confdefs.h <<\EOF -#define HAVE_NCURSESW_TERM_H 1 -EOF + cf_cv_find_linkage_utf8=yes + cf_cv_header_path_utf8=/usr/include + cf_cv_library_path_utf8=/usr/lib + cf_cv_library_file_utf8="-lutf8" + +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 + + cf_cv_find_linkage_utf8=no + LIBS="$cf_save_LIBS" + + test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 - ;; -esac +echo "${as_me:-configure}:15260: testing find linkage for utf8 library ..." 1>&5 - fi +echo "${as_me:-configure}:15262: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 - else - echo "$as_me:14030: result: no" >&5 -echo "${ECHO_T}no" >&6 - NCURSES_CONFIG_PKG=none - fi -else - NCURSES_CONFIG_PKG=none -fi + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" -if test "x$cf_have_ncuconfig" = "xno"; then - cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}" +cf_search= -if test -n "$ac_tool_prefix"; then - for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config - 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 -echo "$as_me:14046: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NCURSES_CONFIG"; then - ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" -echo "$as_me:14061: found $ac_dir/$ac_word" >&5 -break -done +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case "$cf_header_path" in + (-I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` -fi -fi -NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG -if test -n "$NCURSES_CONFIG"; then - echo "$as_me:14069: result: $NCURSES_CONFIG" >&5 -echo "${ECHO_T}$NCURSES_CONFIG" >&6 -else - echo "$as_me:14072: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi +test "x$cf_header_path" != "xNONE" && \ +test -d "$cf_header_path" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" + test -d "$cf_header_path/include" && cf_search="$cf_search $cf_header_path/include" + test -d "$cf_header_path/include/utf8" && cf_search="$cf_search $cf_header_path/include/utf8" + test -d "$cf_header_path/include/utf8/include" && cf_search="$cf_search $cf_header_path/include/utf8/include" + test -d "$cf_header_path/utf8/include" && cf_search="$cf_search $cf_header_path/utf8/include" + test -d "$cf_header_path/utf8/include/utf8" && cf_search="$cf_search $cf_header_path/utf8/include/utf8" +} - test -n "$NCURSES_CONFIG" && break - done + cf_header_path_list="$cf_header_path_list $cf_search" + ;; + esac + done fi -if test -z "$NCURSES_CONFIG"; then - ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG - for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:14085: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_NCURSES_CONFIG"; then - ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" -echo "$as_me:14100: found $ac_dir/$ac_word" >&5 -break -done -fi -fi -ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG -if test -n "$ac_ct_NCURSES_CONFIG"; then - echo "$as_me:14108: result: $ac_ct_NCURSES_CONFIG" >&5 -echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 -else - echo "$as_me:14111: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi +# add the variations for the package we are looking for - test -n "$ac_ct_NCURSES_CONFIG" && break -done -test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" +cf_search= - NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG -fi +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d "$prefix/include" && cf_search="$cf_search $prefix/include" + test -d "$prefix/include/utf8" && cf_search="$cf_search $prefix/include/utf8" + test -d "$prefix/include/utf8/include" && cf_search="$cf_search $prefix/include/utf8/include" + test -d "$prefix/utf8/include" && cf_search="$cf_search $prefix/utf8/include" + test -d "$prefix/utf8/include/utf8" && cf_search="$cf_search $prefix/utf8/include/utf8" +} - if test "$NCURSES_CONFIG" != none ; then +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include" + test -d "$cf_subdir_prefix/include/utf8" && cf_search="$cf_search $cf_subdir_prefix/include/utf8" + test -d "$cf_subdir_prefix/include/utf8/include" && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include" + test -d "$cf_subdir_prefix/utf8/include" && cf_search="$cf_search $cf_subdir_prefix/utf8/include" + test -d "$cf_subdir_prefix/utf8/include/utf8" && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8" +} -for cf_add_cflags in `$NCURSES_CONFIG --cflags` -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` +done - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d "$includedir" && cf_search="$cf_search $includedir" + test -d "$includedir/utf8" && cf_search="$cf_search $includedir/utf8" +} - if test $cf_fix_cppflags = yes ; then +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d "$oldincludedir" && cf_search="$cf_search $oldincludedir" + test -d "$oldincludedir/utf8" && cf_search="$cf_search $oldincludedir/utf8" +} - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +cf_search="$cf_search $cf_header_path_list" - continue - elif test "${cf_tst_cflags}" = "\"'" ; then + for cf_cv_header_path_utf8 in $cf_search + do + if test -d "$cf_cv_header_path_utf8" ; then + test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6 - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" +echo "${as_me:-configure}:15353: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 - continue - fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + CPPFLAGS="$cf_save_CPPFLAGS" -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_utf8" - ;; - esac + cat >"conftest.$ac_ext" <<_ACEOF +#line 15361 "configure" +#include "confdefs.h" - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" +#include <libutf8.h> +int +main (void) +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:15374: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:15377: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:15380: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:15383: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then - ;; - esac - ;; - (*) + test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" +echo "${as_me:-configure}:15388: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 - ;; - esac - ;; -(yes) + cf_cv_find_linkage_utf8=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + CPPFLAGS="$cf_save_CPPFLAGS" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + fi + done - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done + if test "$cf_cv_find_linkage_utf8" = maybe ; then -if test -n "$cf_new_cflags" ; then +echo "${as_me:-configure}:15406: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" -fi + if test "$cf_cv_find_linkage_utf8" != yes ; then -if test -n "$cf_new_cppflags" ; then +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case "$cf_library_path" in + (-L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" +test "x$cf_library_path" != "xNONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d "$cf_library_path/lib" && cf_search="$cf_search $cf_library_path/lib" + test -d "$cf_library_path/lib/utf8" && cf_search="$cf_search $cf_library_path/lib/utf8" + test -d "$cf_library_path/lib/utf8/lib" && cf_search="$cf_search $cf_library_path/lib/utf8/lib" + test -d "$cf_library_path/utf8/lib" && cf_search="$cf_search $cf_library_path/utf8/lib" + test -d "$cf_library_path/utf8/lib/utf8" && cf_search="$cf_search $cf_library_path/utf8/lib/utf8" +} + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done fi -if test -n "$cf_new_extra_cppflags" ; then +cf_search= - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib" + test -d "$prefix/lib/utf8" && cf_search="$cf_search $prefix/lib/utf8" + test -d "$prefix/lib/utf8/lib" && cf_search="$cf_search $prefix/lib/utf8/lib" + test -d "$prefix/utf8/lib" && cf_search="$cf_search $prefix/utf8/lib" + test -d "$prefix/utf8/lib/utf8" && cf_search="$cf_search $prefix/utf8/lib/utf8" +} -fi +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do + +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib" + test -d "$cf_subdir_prefix/lib/utf8" && cf_search="$cf_search $cf_subdir_prefix/lib/utf8" + test -d "$cf_subdir_prefix/lib/utf8/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib" + test -d "$cf_subdir_prefix/utf8/lib" && cf_search="$cf_search $cf_subdir_prefix/utf8/lib" + test -d "$cf_subdir_prefix/utf8/lib/utf8" && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8" +} -cf_add_libs="`$NCURSES_CONFIG --libs`" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done -LIBS="$cf_add_libs" - # even with config script, some packages use no-override for curses.h +cf_search="$cf_library_path_list $cf_search" -echo "$as_me:14240: checking if we have identified curses headers" >&5 -echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 -if test "${cf_cv_ncurses_header+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + for cf_cv_library_path_utf8 in $cf_search + do + if test -d "$cf_cv_library_path_utf8" ; then + test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6 -cf_cv_ncurses_header=none -for cf_header in \ - ncurses.h $cf_cv_screen/ncurses.h \ - curses.h $cf_cv_screen/curses.h -do -cat >conftest.$ac_ext <<_ACEOF -#line 14252 "configure" +echo "${as_me:-configure}:15481: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 + + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-lutf8 $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8" + cat >"conftest.$ac_ext" <<_ACEOF +#line 15487 "configure" #include "confdefs.h" -#include <${cf_header}> + +#include <libutf8.h> int main (void) { -initscr(); tgoto("?", 0,0) +putwc(0,0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14264: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15500: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14267: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14270: \"$ac_try\"") >&5 + echo "$as_me:15503: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15506: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14273: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_header=$cf_header; break + echo "$as_me:15509: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 + +echo "${as_me:-configure}:15514: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 + + cf_cv_find_linkage_utf8=yes + cf_cv_library_file_utf8="-lutf8" + break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" + fi -rm -f conftest.$ac_objext conftest.$ac_ext -done +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + fi + done + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi + + else + cf_cv_find_linkage_utf8=no + fi fi -echo "$as_me:14284: result: $cf_cv_ncurses_header" >&5 -echo "${ECHO_T}$cf_cv_ncurses_header" >&6 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" -if test "$cf_cv_ncurses_header" = none ; then - { { echo "$as_me:14288: error: No curses header-files found" >&5 -echo "$as_me: error: No curses header-files found" >&2;} - { (exit 1); exit 1; }; } fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" -# cheat, to get the right #define's for HAVE_NCURSES_H, etc. +LIBS="$cf_save_LIBS" -for ac_header in $cf_cv_ncurses_header -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:14298: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 14304 "configure" -#include "confdefs.h" -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:14308: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:14314: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi +if test "$cf_cv_find_linkage_utf8" = yes ; then +cf_cv_utf8_lib=add-on else - ac_cpp_err=yes +cf_cv_utf8_lib=no fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" + fi -rm -f conftest.err conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:14333: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -EOF +echo "$as_me:15556: result: $cf_cv_utf8_lib" >&5 +echo "${ECHO_T}$cf_cv_utf8_lib" >&6 -fi -done +# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between +# ncurses/ncursesw: +if test "$cf_cv_utf8_lib" = "add-on" ; then cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF - -cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - - cat >>confdefs.h <<EOF -#define $cf_nculib_ROOT 1 +#define HAVE_LIBUTF8_H 1 EOF - cf_cv_ncurses_version=`$NCURSES_CONFIG --version` - - else - -cf_ncuhdr_root=$cf_cv_screen - -test -n "$cf_cv_curses_dir" && \ -test "$cf_cv_curses_dir" != "no" && { \ - -if test -n "$cf_cv_curses_dir/include/$cf_ncuhdr_root" ; then - for cf_add_incdir in $cf_cv_curses_dir/include/$cf_ncuhdr_root +if test -n "$cf_cv_header_path_utf8" ; then + for cf_add_incdir in $cf_cv_header_path_utf8 do - while test $cf_add_incdir != /usr/include + while test "$cf_add_incdir" != /usr/include do - if test -d $cf_add_incdir + if test -d "$cf_add_incdir" then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - cat >conftest.$ac_ext <<_ACEOF -#line 14389 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 15594 "configure" #include "confdefs.h" #include <stdio.h> int main (void) { printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14401: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:15606: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14404: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14407: \"$ac_try\"") >&5 + echo "$as_me:15609: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:15612: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14410: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:15615: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -echo "${as_me:-configure}:14427: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:15632: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi -} +if test -n "$cf_cv_library_path_utf8" ; then + for cf_add_libdir in $cf_cv_library_path_utf8 + do + if test "$cf_add_libdir" = /usr/lib ; then + : + elif test -d "$cf_add_libdir" + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me:-configure}:15668: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_cv_library_file_utf8; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + +fi + +cf_ncuconfig_root=$cf_cv_screen +cf_have_ncuconfig=no + +if test "x${PKG_CONFIG:=none}" != xnone; then + echo "$as_me:15698: checking pkg-config for $cf_ncuconfig_root" >&5 +echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 + if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then + echo "$as_me:15701: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + + echo "$as_me:15704: checking if the $cf_ncuconfig_root package files work" >&5 +echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 + cf_have_ncuconfig=unknown + + cf_save_CFLAGS="$CFLAGS" + cf_save_CPPFLAGS="$CPPFLAGS" + cf_save_LIBS="$LIBS" + + cf_pkg_cflags="`$PKG_CONFIG --cflags $cf_ncuconfig_root`" + cf_pkg_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" + + # while -W for passing linker flags is prevalent, it is not "standard". + # At least one wrapper for c89/c99 (in Apple's xcode) has its own + # incompatible _and_ non-standard -W option which gives an error. Work + # around that pitfall. + case "x${CC}@@${cf_pkg_libs}@${cf_pkg_cflags}" in + (x*c[89]9@@*-W*) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $cf_pkg_cflags +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test "$cf_fix_cppflags" = yes ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + + ;; + esac + ;; + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + + ;; + esac + ;; +(yes) + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + +fi + +if test -n "$cf_new_cppflags" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + +fi + +if test -n "$cf_new_extra_cppflags" ; then -echo "$as_me:14446: checking for $cf_ncuhdr_root header in include-path" >&5 -echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 -if test "${cf_cv_ncurses_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" - cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" - ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" - for cf_header in $cf_header_list - do +fi - cat >conftest.$ac_ext <<_ACEOF -#line 14458 "configure" -#include "confdefs.h" +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkg_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" -#include <$cf_header> + cat >"conftest.$ac_ext" <<_ACEOF +#line 15837 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { - -#ifdef NCURSES_VERSION - -printf("%s\n", NCURSES_VERSION); -#else -#ifdef __NCURSES_H -printf("old\n"); -#else - make an error -#endif -#endif - +initscr(); mousemask(0,0); tigetstr((char *)0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14482: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:15849: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14485: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14488: \"$ac_try\"") >&5 + echo "$as_me:15852: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:15855: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14491: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_h=$cf_header - + echo "$as_me:15858: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + if test "$cross_compiling" = yes; then + cf_test_ncuconfig=maybe +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 15864 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> + int main(void) + { char *xx = curses_version(); return (xx == 0); } +_ACEOF +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:15871: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:15874: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:15876: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:15879: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_test_ncuconfig=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_test_ncuconfig=no +fi +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_cv_ncurses_h=no +cat "conftest.$ac_ext" >&5 +cf_test_ncuconfig=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" - test "$cf_cv_ncurses_h" != no && break - done + CFLAGS="$cf_save_CFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" -fi -echo "$as_me:14506: result: $cf_cv_ncurses_h" >&5 -echo "${ECHO_T}$cf_cv_ncurses_h" >&6 + if test "x$cf_test_ncuconfig" != xyes; then + cf_temp=`echo "x$cf_pkg_cflags" | sed -e s/^x// -e 's/-W[^ ]*//g'` + cf_pkg_cflags="$cf_temp" + cf_temp=`echo "x$cf_pkg_libs" | sed -e s/^x// -e 's/-W[^ ]*//g'` + cf_pkg_libs="$cf_temp" + fi + ;; + esac -if test "$cf_cv_ncurses_h" != no ; then - cf_cv_ncurses_header=$cf_cv_ncurses_h -else +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= -echo "$as_me:14513: checking for $cf_ncuhdr_root include-path" >&5 -echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 -if test "${cf_cv_ncurses_h2+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else +for cf_add_cflags in $cf_pkg_cflags +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test -n "$verbose" && echo + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes -cf_search= + if test "$cf_fix_cppflags" = yes ; then -# collect the current set of include-directories from compiler flags -cf_header_path_list="" -if test -n "${CFLAGS}${CPPFLAGS}" ; then - for cf_header_path in $CPPFLAGS $CFLAGS - do - case $cf_header_path in - (-I*) - cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -test "x$cf_header_path" != "xNONE" && \ -test -d "$cf_header_path" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" - test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" - test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" - test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" - test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" - test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" -} + continue + elif test "${cf_tst_cflags}" = "\"'" ; then - cf_header_path_list="$cf_header_path_list $cf_search" + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi ;; esac - done -fi + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` -# add the variations for the package we are looking for +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` -cf_search= + ;; + esac -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for include-directories under $prefix" - test -d $prefix/include && cf_search="$cf_search $prefix/include" - test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" - test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" - test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" - test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" -} + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do + ;; + esac + ;; + (*) -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" - test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" - test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" - test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" - test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" -} + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" -done + ;; + esac + ;; +(yes) -test "$includedir" != NONE && \ -test "$includedir" != "/usr/include" && \ -test -d "$includedir" && { - test -d $includedir && cf_search="$cf_search $includedir" - test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" -} + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -test "$oldincludedir" != NONE && \ -test "$oldincludedir" != "/usr/include" && \ -test -d "$oldincludedir" && { - test -d $oldincludedir && cf_search="$cf_search $oldincludedir" - test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" -} + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` -cf_search="$cf_search $cf_header_path_list" + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done - test -n "$verbose" && echo search path $cf_search - cf_save2_CPPFLAGS="$CPPFLAGS" - for cf_incdir in $cf_search - do +if test -n "$cf_new_cflags" ; then -if test -n "$cf_incdir" ; then - for cf_add_incdir in $cf_incdir - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS +fi + +if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" - cat >conftest.$ac_ext <<_ACEOF -#line 14634 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -printf("Hello") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14646: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:14649: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14652: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:14655: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 +if test -n "$cf_new_extra_cppflags" ; then -echo "${as_me:-configure}:14672: testing adding $cf_add_incdir to include-path ..." 1>&5 + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +fi - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkg_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break fi - else - break - fi done - done -fi - - for cf_header in \ - ncurses.h \ - curses.h - do - - cat >conftest.$ac_ext <<_ACEOF -#line 14695 "configure" -#include "confdefs.h" - -#include <$cf_header> -int -main (void) -{ - -#ifdef NCURSES_VERSION - -printf("%s\n", NCURSES_VERSION); -#else -#ifdef __NCURSES_H -printf("old\n"); -#else - make an error -#endif -#endif + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + cat >"conftest.$ac_ext" <<_ACEOF +#line 16025 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr(); mousemask(0,0); tigetstr((char *)0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14719: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:16037: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14722: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14725: \"$ac_try\"") >&5 + echo "$as_me:16040: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:16043: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14728: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_h2=$cf_header - + echo "$as_me:16046: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + if test "$cross_compiling" = yes; then + cf_have_ncuconfig=maybe else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_cv_ncurses_h2=no + cat >"conftest.$ac_ext" <<_ACEOF +#line 16052 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> + int main(void) + { char *xx = curses_version(); return (xx == 0); } +_ACEOF +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:16059: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:16062: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:16064: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:16067: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_have_ncuconfig=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_ncuconfig=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - - if test "$cf_cv_ncurses_h2" != no ; then - cf_cv_ncurses_h2=$cf_incdir/$cf_header - test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 - break - fi - test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 - done - CPPFLAGS="$cf_save2_CPPFLAGS" - test "$cf_cv_ncurses_h2" != no && break - done - test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:14749: error: not found" >&5 -echo "$as_me: error: not found" >&2;} - { (exit 1); exit 1; }; } - +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:14754: result: $cf_cv_ncurses_h2" >&5 -echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_ncuconfig=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + echo "$as_me:16084: result: $cf_have_ncuconfig" >&5 +echo "${ECHO_T}$cf_have_ncuconfig" >&6 + test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes + if test "$cf_have_ncuconfig" != "yes" + then + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + NCURSES_CONFIG_PKG=none + else - cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` - cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` - if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then - cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header - fi +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF -if test -n "$cf_1st_incdir" ; then - for cf_add_incdir in $cf_1st_incdir - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi + NCURSES_CONFIG_PKG=$cf_ncuconfig_root - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS +echo "$as_me:16100: checking for terminfo header" >&5 +echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +case "${cf_cv_ncurses_header}" in +(*/ncurses.h|*/ncursesw.h) + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + ;; +(*) + cf_term_header=term.h + ;; +esac - cat >conftest.$ac_ext <<_ACEOF -#line 14790 "configure" +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 16118 "configure" #include "confdefs.h" #include <stdio.h> +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> + int main (void) { -printf("Hello") +int x = auto_left_margin; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14802: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16133: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14805: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14808: \"$ac_try\"") >&5 + echo "$as_me:16136: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16139: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14811: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:16142: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 +cat "conftest.$ac_ext" >&5 -echo "${as_me:-configure}:14828: testing adding $cf_add_incdir to include-path ..." 1>&5 - - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cf_cv_term_header=unknown - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + test "$cf_cv_term_header" != unknown && break +done fi +echo "$as_me:16158: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 -# Set definitions to allow ifdef'ing for ncurses.h +# Set definitions to allow ifdef'ing to accommodate subdirectories -case $cf_cv_ncurses_header in -(*ncurses.h) +case "$cf_cv_term_header" in +(*term.h) cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_H 1 +#define HAVE_TERM_H 1 EOF ;; esac -case $cf_cv_ncurses_header in -(ncurses/curses.h|ncurses/ncurses.h) +case "$cf_cv_term_header" in +(ncurses/term.h) cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_NCURSES_H 1 +#define HAVE_NCURSES_TERM_H 1 EOF ;; -(ncursesw/curses.h|ncursesw/ncurses.h) +(ncursesw/term.h) cat >>confdefs.h <<\EOF -#define HAVE_NCURSESW_NCURSES_H 1 +#define HAVE_NCURSESW_TERM_H 1 EOF ;; esac -echo "$as_me:14876: checking for terminfo header" >&5 -echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 -if test "${cf_cv_term_header+set}" = set; then + fi + + else + echo "$as_me:16193: result: no" >&5 +echo "${ECHO_T}no" >&6 + NCURSES_CONFIG_PKG=none + fi +else + NCURSES_CONFIG_PKG=none +fi + +if test "x$cf_have_ncuconfig" = "xno"; then + cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}" + +if test -n "$ac_tool_prefix"; then + for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config + 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 +echo "$as_me:16209: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + if test -n "$NCURSES_CONFIG"; then + ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" +echo "$as_me:16224: found $ac_dir/$ac_word" >&5 +break +done -case ${cf_cv_ncurses_header} in -(*/ncurses.h|*/ncursesw.h) - cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` - ;; -(*) - cf_term_header=term.h - ;; -esac +fi +fi +NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG +if test -n "$NCURSES_CONFIG"; then + echo "$as_me:16232: result: $NCURSES_CONFIG" >&5 +echo "${ECHO_T}$NCURSES_CONFIG" >&6 +else + echo "$as_me:16235: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" + test -n "$NCURSES_CONFIG" && break + done +fi +if test -z "$NCURSES_CONFIG"; then + ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG + for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do -cat >conftest.$ac_ext <<_ACEOF -#line 14894 "configure" -#include "confdefs.h" -#include <stdio.h> -#include <${cf_cv_ncurses_header:-curses.h}> -#include <$cf_test> + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:16248: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_NCURSES_CONFIG"; then + ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" +echo "$as_me:16263: found $ac_dir/$ac_word" >&5 +break +done -int -main (void) -{ -int x = auto_left_margin - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:14909: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:14912: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14915: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:14918: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +fi +fi +ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG +if test -n "$ac_ct_NCURSES_CONFIG"; then + echo "$as_me:16271: result: $ac_ct_NCURSES_CONFIG" >&5 +echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 +else + echo "$as_me:16274: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_NCURSES_CONFIG" && break +done +test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" + + NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG +fi + + if test "$NCURSES_CONFIG" != none ; then + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in `$NCURSES_CONFIG --cflags` +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - cf_cv_term_header="$cf_test" -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes - cf_cv_term_header=unknown + if test "$cf_fix_cppflags" = yes ; then -fi -rm -f conftest.$ac_objext conftest.$ac_ext - test "$cf_cv_term_header" != unknown && break -done + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -fi -echo "$as_me:14934: result: $cf_cv_term_header" >&5 -echo "${ECHO_T}$cf_cv_term_header" >&6 + continue + elif test "${cf_tst_cflags}" = "\"'" ; then -# Set definitions to allow ifdef'ing to accommodate subdirectories + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -case $cf_cv_term_header in -(*term.h) + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` -cat >>confdefs.h <<\EOF -#define HAVE_TERM_H 1 -EOF +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` - ;; -esac + ;; + esac -case $cf_cv_term_header in -(ncurses/term.h) + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" -cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_TERM_H 1 -EOF + ;; + esac + ;; + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; + esac ;; -(ncursesw/term.h) +(yes) -cat >>confdefs.h <<\EOF -#define HAVE_NCURSESW_TERM_H 1 -EOF + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no ;; esac +done -# some applications need this, but should check for NCURSES_VERSION - -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF - -echo "$as_me:14972: checking for ncurses version" >&5 -echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 -if test "${cf_cv_ncurses_version+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else +if test -n "$cf_new_cflags" ; then - cf_cv_ncurses_version=no - cf_tempfile=out$$ - rm -f $cf_tempfile - if test "$cross_compiling" = yes; then + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" - # This will not work if the preprocessor splits the line after the - # Autoconf token. The 'unproto' program does that. - cat > conftest.$ac_ext <<EOF -#include <${cf_cv_ncurses_header:-curses.h}> -#undef Autoconf -#ifdef NCURSES_VERSION -Autoconf NCURSES_VERSION -#else -#ifdef __NCURSES_H -Autoconf "old" -#endif -; -#endif -EOF - cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" - { (eval echo "$as_me:14998: \"$cf_try\"") >&5 - (eval $cf_try) 2>&5 - ac_status=$? - echo "$as_me:15001: \$? = $ac_status" >&5 - (exit $ac_status); } - if test -f conftest.out ; then - cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` - test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" - rm -f conftest.out - fi +fi -else - cat >conftest.$ac_ext <<_ACEOF -#line 15011 "configure" -#include "confdefs.h" +if test -n "$cf_new_cppflags" ; then -#include <${cf_cv_ncurses_header:-curses.h}> -#include <stdio.h> -int main(void) -{ - FILE *fp = fopen("$cf_tempfile", "w"); -#ifdef NCURSES_VERSION -# ifdef NCURSES_VERSION_PATCH - fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); -# else - fprintf(fp, "%s\n", NCURSES_VERSION); -# endif -#else -# ifdef __NCURSES_H - fprintf(fp, "old\n"); -# else - make an error -# endif -#endif - ${cf_cv_main_return:-return}(0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:15036: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:15039: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:15041: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:15044: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" - cf_cv_ncurses_version=`cat $cf_tempfile` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - rm -f $cf_tempfile -fi -echo "$as_me:15058: result: $cf_cv_ncurses_version" >&5 -echo "${ECHO_T}$cf_cv_ncurses_version" >&6 -test "$cf_cv_ncurses_version" = no || -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF +if test -n "$cf_new_extra_cppflags" ; then -cf_nculib_root=$cf_cv_screen - # This works, except for the special case where we find gpm, but - # ncurses is in a nonstandard location via $LIBS, and we really want - # to link gpm. -cf_ncurses_LIBS="" -cf_ncurses_SAVE="$LIBS" -echo "$as_me:15071: checking for Gpm_Open in -lgpm" >&5 -echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 -if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgpm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 15079 "configure" -#include "confdefs.h" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char Gpm_Open (); -int -main (void) -{ -Gpm_Open (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15098: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:15101: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15104: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:15107: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_gpm_Gpm_Open=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_gpm_Gpm_Open=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:15118: result: $ac_cv_lib_gpm_Gpm_Open" >&5 -echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 -if test $ac_cv_lib_gpm_Gpm_Open = yes; then - echo "$as_me:15121: checking for initscr in -lgpm" >&5 -echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 -if test "${ac_cv_lib_gpm_initscr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgpm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 15129 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initscr (); -int -main (void) -{ -initscr (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15148: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:15151: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15154: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:15157: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_gpm_initscr=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_gpm_initscr=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:15168: result: $ac_cv_lib_gpm_initscr" >&5 -echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 -if test $ac_cv_lib_gpm_initscr = yes; then - LIBS="$cf_ncurses_SAVE" -else - cf_ncurses_LIBS="-lgpm" -fi +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in `$NCURSES_CONFIG --libs`; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" -fi + # even with config script, some packages use no-override for curses.h -case $host_os in -(freebsd*) - # This is only necessary if you are linking against an obsolete - # version of ncurses (but it should do no harm, since it's static). - if test "$cf_nculib_root" = ncurses ; then - echo "$as_me:15183: checking for tgoto in -lmytinfo" >&5 -echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 -if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then +echo "$as_me:16403: checking if we have identified curses headers" >&5 +echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 +if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmytinfo $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 15191 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char tgoto (); +cf_cv_ncurses_header=none +for cf_header in \ + ncurses.h $cf_cv_screen/ncurses.h \ + curses.h $cf_cv_screen/curses.h +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 16415 "configure" +#include "confdefs.h" +#include <${cf_header}> int main (void) { -tgoto (); +initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15210: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16427: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15213: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15216: \"$ac_try\"") >&5 + echo "$as_me:16430: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16433: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15219: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_mytinfo_tgoto=yes + echo "$as_me:16436: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_mytinfo_tgoto=no +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f "conftest.$ac_objext" "conftest.$ac_ext" +done + fi -echo "$as_me:15230: result: $ac_cv_lib_mytinfo_tgoto" >&5 -echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 -if test $ac_cv_lib_mytinfo_tgoto = yes; then - cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" +echo "$as_me:16447: result: $cf_cv_ncurses_header" >&5 +echo "${ECHO_T}$cf_cv_ncurses_header" >&6 + +if test "$cf_cv_ncurses_header" = none ; then + { { echo "$as_me:16451: error: No curses header-files found" >&5 +echo "$as_me: error: No curses header-files found" >&2;} + { (exit 1); exit 1; }; } fi - fi - ;; -esac +# cheat, to get the right #define's for HAVE_NCURSES_H, etc. -cf_add_libs="$cf_ncurses_LIBS" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS +for ac_header in $cf_cv_ncurses_header do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:16461: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 16467 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:16471: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + $EGREP -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:16477: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat "conftest.$ac_ext" >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:16496: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi done -LIBS="$cf_add_libs" -if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) -then +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF -cf_add_libs="-l$cf_nculib_root" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs +cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + cat >>confdefs.h <<EOF +#define $cf_nculib_ROOT 1 +EOF + + cf_cv_ncurses_version="`$NCURSES_CONFIG --version`" + + else + +cf_ncuhdr_root=$cf_cv_screen + +test -n "$cf_cv_curses_dir" && \ +test "$cf_cv_curses_dir" != "no" && { \ + +if test -n "$cf_cv_curses_dir/include/$cf_ncuhdr_root" ; then + for cf_add_incdir in $cf_cv_curses_dir/include/$cf_ncuhdr_root + do + while test "$cf_add_incdir" != /usr/include do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" -else + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS - eval 'cf_cv_have_lib_'$cf_nculib_root'=no' - cf_libdir="" - echo "$as_me:15279: checking for initscr" >&5 -echo $ECHO_N "checking for initscr... $ECHO_C" >&6 -if test "${ac_cv_func_initscr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 15285 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char initscr (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initscr (); -char (*f) (); + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >"conftest.$ac_ext" <<_ACEOF +#line 16552 "configure" +#include "confdefs.h" +#include <stdio.h> int main (void) { -/* 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_initscr) || defined (__stub___initscr) -choke me -#else -f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif - +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15316: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16564: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15319: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15322: \"$ac_try\"") >&5 + echo "$as_me:16567: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16570: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15325: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_initscr=yes + echo "$as_me:16573: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_initscr=no +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me:-configure}:16590: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done fi -echo "$as_me:15335: result: $ac_cv_func_initscr" >&5 -echo "${ECHO_T}$ac_cv_func_initscr" >&6 -if test $ac_cv_func_initscr = yes; then - eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' + +} + +echo "$as_me:16609: checking for $cf_ncuhdr_root header in include-path" >&5 +echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 +if test "${cf_cv_ncurses_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cf_save_LIBS="$LIBS" - echo "$as_me:15342: checking for initscr in -l$cf_nculib_root" >&5 -echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 - LIBS="-l$cf_nculib_root $LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 15346 "configure" + cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" + { test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw; } && cf_header_list="$cf_header_list curses.h ncurses.h" + for cf_header in $cf_header_list + do + + cat >"conftest.$ac_ext" <<_ACEOF +#line 16621 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> + +#include <$cf_header> int main (void) { -initscr() + +#ifdef NCURSES_VERSION + +printf("%s\\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\\n"); +#else + make an error +#endif +#endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15358: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16645: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15361: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15364: \"$ac_try\"") >&5 + echo "$as_me:16648: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16651: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15367: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:15369: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' + echo "$as_me:16654: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_h=$cf_header else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:15376: result: no" >&5 -echo "${ECHO_T}no" >&6 +cat "conftest.$ac_ext" >&5 +cf_cv_ncurses_h=no +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + + test "$cf_cv_ncurses_h" != no && break + done + +fi +echo "$as_me:16669: result: $cf_cv_ncurses_h" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h" >&6 + +if test "$cf_cv_ncurses_h" != no ; then + cf_cv_ncurses_header=$cf_cv_ncurses_h +else + +echo "$as_me:16676: checking for $cf_ncuhdr_root include-path" >&5 +echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 +if test "${cf_cv_ncurses_h2+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + test -n "$verbose" && echo cf_search= -cf_library_path_list="" -if test -n "${LDFLAGS}${LIBS}" ; then - for cf_library_path in $LDFLAGS $LIBS + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS do - case $cf_library_path in - (-L*) - cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + case "$cf_header_path" in + (-I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` -test "x$cf_library_path" != "xNONE" && \ -test -d "$cf_library_path" && \ +test "x$cf_header_path" != "xNONE" && \ +test -d "$cf_header_path" && \ { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" - test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" - test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" - test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" - test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" - test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" + test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" + test -d "$cf_header_path/include" && cf_search="$cf_search $cf_header_path/include" + test -d "$cf_header_path/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" + test -d "$cf_header_path/include/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" + test -d "$cf_header_path/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" + test -d "$cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } - cf_library_path_list="$cf_library_path_list $cf_search" + cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi +# add the variations for the package we are looking for + cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { - test -n "$verbose" && echo " ... testing for lib-directories under $prefix" - test -d $prefix/lib && cf_search="$cf_search $prefix/lib" - test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" - test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" - test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" - test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d "$prefix/include" && cf_search="$cf_search $prefix/include" + test -d "$prefix/include/$cf_ncuhdr_root" && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" + test -d "$prefix/include/$cf_ncuhdr_root/include" && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" + test -d "$prefix/$cf_ncuhdr_root/include" && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" + test -d "$prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do + +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include" + test -d "$cf_subdir_prefix/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" + test -d "$cf_subdir_prefix/include/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" + test -d "$cf_subdir_prefix/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" + test -d "$cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +done + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d "$includedir" && cf_search="$cf_search $includedir" + test -d "$includedir/$cf_ncuhdr_root" && cf_search="$cf_search $includedir/$cf_ncuhdr_root" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d "$oldincludedir" && cf_search="$cf_search $oldincludedir" + test -d "$oldincludedir/$cf_ncuhdr_root" && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" } -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do +cf_search="$cf_search $cf_header_path_list" -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" - test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" - test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" - test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" - test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" -} + test -n "$verbose" && echo "search path $cf_search" + cf_save2_CPPFLAGS="$CPPFLAGS" + for cf_incdir in $cf_search + do -done +if test -n "$cf_incdir" ; then + for cf_add_incdir in $cf_incdir + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi -cf_search="$cf_library_path_list $cf_search" + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS - for cf_libdir in $cf_search - do - echo "$as_me:15444: checking for -l$cf_nculib_root in $cf_libdir" >&5 -echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 - LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 15448 "configure" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + + cat >"conftest.$ac_ext" <<_ACEOF +#line 16797 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> +#include <stdio.h> int main (void) { -initscr() +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15460: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16809: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15463: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15466: \"$ac_try\"") >&5 + echo "$as_me:16812: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16815: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15469: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:15471: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' - break + echo "$as_me:16818: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:15478: result: no" >&5 -echo "${ECHO_T}no" >&6 - LIBS="$cf_save_LIBS" +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - done +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -fi +echo "${as_me:-configure}:16835: testing adding $cf_add_incdir to include-path ..." 1>&5 -eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" -if test $cf_found_library = no ; then - { { echo "$as_me:15493: error: Cannot link $cf_nculib_root library" >&5 -echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} - { (exit 1); exit 1; }; } + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done fi -fi + for cf_header in \ + ncurses.h \ + curses.h + do -if test -n "$cf_ncurses_LIBS" ; then - echo "$as_me:15501: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 -echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 - cf_ncurses_SAVE="$LIBS" - for p in $cf_ncurses_LIBS ; do - q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` - if test "$q" != "$LIBS" ; then - LIBS="$q" - fi - done - cat >conftest.$ac_ext <<_ACEOF -#line 15511 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 16858 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> + +#include <$cf_header> int main (void) { -initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); + +#ifdef NCURSES_VERSION + +printf("%s\\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\\n"); +#else + make an error +#endif +#endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15523: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16882: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15526: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15529: \"$ac_try\"") >&5 + echo "$as_me:16885: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16888: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15532: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:15534: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:15539: result: no" >&5 -echo "${ECHO_T}no" >&6 - LIBS="$cf_ncurses_SAVE" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi - -cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - -cat >>confdefs.h <<EOF -#define $cf_nculib_ROOT 1 -EOF + echo "$as_me:16891: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_h2=$cf_header - fi else - NCURSES_CONFIG=none + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_cv_ncurses_h2=no fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" - ;; -(ncurses*) - -cf_ncuconfig_root=$cf_cv_screen -cf_have_ncuconfig=no - -if test "x${PKG_CONFIG:=none}" != xnone; then - echo "$as_me:15564: checking pkg-config for $cf_ncuconfig_root" >&5 -echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 - if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then - echo "$as_me:15567: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - - echo "$as_me:15570: checking if the $cf_ncuconfig_root package files work" >&5 -echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 - cf_have_ncuconfig=unknown - - cf_save_CPPFLAGS="$CPPFLAGS" - cf_save_LIBS="$LIBS" - -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= - -for cf_add_cflags in `$PKG_CONFIG --cflags $cf_ncuconfig_root` -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes - - if test $cf_fix_cppflags = yes ; then - - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - - continue - elif test "${cf_tst_cflags}" = "\"'" ; then - - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - - continue + if test "$cf_cv_ncurses_h2" != no ; then + cf_cv_ncurses_h2=$cf_incdir/$cf_header + test -n "$verbose" && echo $ECHO_N " ... found $ECHO_C" 1>&6 + break fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` - -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` - - ;; - esac - - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" - - ;; - esac - ;; - (*) - - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" - - ;; - esac - ;; -(yes) - - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` - - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done - -if test -n "$cf_new_cflags" ; then - - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" - -fi - -if test -n "$cf_new_cppflags" ; then - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 + done + CPPFLAGS="$cf_save2_CPPFLAGS" + test "$cf_cv_ncurses_h2" != no && break + done + test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:16912: error: not found" >&5 +echo "$as_me: error: not found" >&2;} + { (exit 1); exit 1; }; } fi +echo "$as_me:16917: result: $cf_cv_ncurses_h2" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 -if test -n "$cf_new_extra_cppflags" ; then + cf_1st_incdir=`echo "$cf_cv_ncurses_h2" | sed -e 's%/[^/]*$%%'` + cf_cv_ncurses_header="`basename "$cf_cv_ncurses_h2"`" + if test "`basename "$cf_1st_incdir"`" = "$cf_ncuhdr_root" ; then + cf_cv_ncurses_header="$cf_ncuhdr_root/$cf_cv_ncurses_header" + fi - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +if test -n "$cf_1st_incdir" ; then + for cf_add_incdir in $cf_1st_incdir + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi -fi + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS -cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - cat >conftest.$ac_ext <<_ACEOF -#line 15692 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 16953 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> +#include <stdio.h> int main (void) { -initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15704: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:15707: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15710: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:15713: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - if test "$cross_compiling" = yes; then - cf_have_ncuconfig=maybe -else - cat >conftest.$ac_ext <<_ACEOF -#line 15719 "configure" -#include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> - int main(void) - { char *xx = curses_version(); return (xx == 0); } -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:15726: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:16965: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15729: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:15731: \"$ac_try\"") >&5 + echo "$as_me:16968: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:16971: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15734: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_have_ncuconfig=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_ncuconfig=no -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi + echo "$as_me:16974: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_ncuconfig=no +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - echo "$as_me:15751: result: $cf_have_ncuconfig" >&5 -echo "${ECHO_T}$cf_have_ncuconfig" >&6 - test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes - if test "$cf_have_ncuconfig" != "yes" - then - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - NCURSES_CONFIG_PKG=none +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me:-configure}:16991: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" else + break + fi + else + break + fi + done + done +fi + +fi + +# Set definitions to allow ifdef'ing for ncurses.h + +case "$cf_cv_ncurses_header" in +(*ncurses.h) cat >>confdefs.h <<\EOF -#define NCURSES 1 +#define HAVE_NCURSES_H 1 EOF - NCURSES_CONFIG_PKG=$cf_ncuconfig_root + ;; +esac + +case "$cf_cv_ncurses_header" in +(ncurses/curses.h|ncurses/ncurses.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_NCURSES_H 1 +EOF + + ;; +(ncursesw/curses.h|ncursesw/ncurses.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_NCURSES_H 1 +EOF + + ;; +esac -echo "$as_me:15767: checking for terminfo header" >&5 +echo "$as_me:17039: checking for terminfo header" >&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -case ${cf_cv_ncurses_header} in +case "${cf_cv_ncurses_header}" in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do -cat >conftest.$ac_ext <<_ACEOF -#line 15785 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 17057 "configure" #include "confdefs.h" #include <stdio.h> #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main (void) { -int x = auto_left_margin +int x = auto_left_margin; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:15800: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:17072: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15803: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:15806: \"$ac_try\"") >&5 + echo "$as_me:17075: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:17078: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15809: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:17081: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_term_header=unknown fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" test "$cf_cv_term_header" != unknown && break done fi -echo "$as_me:15825: result: $cf_cv_term_header" >&5 +echo "$as_me:17097: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories -case $cf_cv_term_header in +case "$cf_cv_term_header" in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac -case $cf_cv_term_header in +case "$cf_cv_term_header" in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac - fi - - else - echo "$as_me:15860: result: no" >&5 -echo "${ECHO_T}no" >&6 - NCURSES_CONFIG_PKG=none - fi -else - NCURSES_CONFIG_PKG=none -fi - -if test "x$cf_have_ncuconfig" = "xno"; then - cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}" - -if test -n "$ac_tool_prefix"; then - for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config - 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 -echo "$as_me:15876: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NCURSES_CONFIG"; then - ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" -echo "$as_me:15891: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG -if test -n "$NCURSES_CONFIG"; then - echo "$as_me:15899: result: $NCURSES_CONFIG" >&5 -echo "${ECHO_T}$NCURSES_CONFIG" >&6 -else - echo "$as_me:15902: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$NCURSES_CONFIG" && break - done -fi -if test -z "$NCURSES_CONFIG"; then - ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG - for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:15915: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_NCURSES_CONFIG"; then - ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. -else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" -echo "$as_me:15930: found $ac_dir/$ac_word" >&5 -break -done - -fi -fi -ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG -if test -n "$ac_ct_NCURSES_CONFIG"; then - echo "$as_me:15938: result: $ac_ct_NCURSES_CONFIG" >&5 -echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 -else - echo "$as_me:15941: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_NCURSES_CONFIG" && break -done -test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" - - NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG -fi - - if test "$NCURSES_CONFIG" != none ; then - -cf_fix_cppflags=no -cf_new_cflags= -cf_new_cppflags= -cf_new_extra_cppflags= - -for cf_add_cflags in `$NCURSES_CONFIG --cflags` -do -case $cf_fix_cppflags in -(no) - case $cf_add_cflags in - (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in - (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=yes - - if test $cf_fix_cppflags = yes ; then - - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - - continue - elif test "${cf_tst_cflags}" = "\"'" ; then - - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - - continue - fi - ;; - esac - case "$CPPFLAGS" in - (*$cf_add_cflags) - ;; - (*) - case $cf_add_cflags in - (-D*) - cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` - -CPPFLAGS=`echo "$CPPFLAGS" | \ - sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ - -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` - - ;; - esac - - test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " - cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" - - ;; - esac - ;; - (*) - - test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " - cf_new_cflags="${cf_new_cflags}$cf_add_cflags" - - ;; - esac - ;; -(yes) - - test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " - cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` - - test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ - && test -z "${cf_tst_cflags}" \ - && cf_fix_cppflags=no - ;; -esac -done - -if test -n "$cf_new_cflags" ; then - - test -n "$CFLAGS" && CFLAGS="$CFLAGS " - CFLAGS="${CFLAGS}$cf_new_cflags" - -fi +# some applications need this, but should check for NCURSES_VERSION -if test -n "$cf_new_cppflags" ; then +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" +echo "$as_me:17135: checking for ncurses version" >&5 +echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 +if test "${cf_cv_ncurses_version+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else -fi + cf_cv_ncurses_version=no + cf_tempfile=out$$ + rm -f "$cf_tempfile" + if test "$cross_compiling" = yes; then -if test -n "$cf_new_extra_cppflags" ; then + # This will not work if the preprocessor splits the line after the + # Autoconf token. The 'unproto' program does that. + cat > "conftest.$ac_ext" <<EOF +#include <${cf_cv_ncurses_header:-curses.h}> +#undef Autoconf +#ifdef NCURSES_VERSION +Autoconf NCURSES_VERSION +#else +#ifdef __NCURSES_H +Autoconf "old" +#endif +; +#endif +EOF + cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" + { (eval echo "$as_me:17161: \"$cf_try\"") >&5 + (eval $cf_try) 2>&5 + ac_status=$? + echo "$as_me:17164: \$? = $ac_status" >&5 + (exit "$ac_status"); } + if test -f conftest.out ; then + cf_out=`sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%' conftest.out` + test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" + rm -f conftest.out + fi - test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " - EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 17174 "configure" +#include "confdefs.h" -fi +#include <${cf_cv_ncurses_header:-curses.h}> +#include <stdio.h> +int main(void) +{ + FILE *fp = fopen("$cf_tempfile", "w"); +#ifdef NCURSES_VERSION +# ifdef NCURSES_VERSION_PATCH + fprintf(fp, "%s.%d\\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); +# else + fprintf(fp, "%s\\n", NCURSES_VERSION); +# endif +#else +# ifdef __NCURSES_H + fprintf(fp, "old\\n"); +# else + make an error +# endif +#endif + ${cf_cv_main_return:-return}(0); +} +_ACEOF +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:17199: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:17202: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:17204: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:17207: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then -cf_add_libs="`$NCURSES_CONFIG --libs`" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" + cf_cv_ncurses_version=`cat $cf_tempfile` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +fi +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi + rm -f "$cf_tempfile" - # even with config script, some packages use no-override for curses.h +fi +echo "$as_me:17221: result: $cf_cv_ncurses_version" >&5 +echo "${ECHO_T}$cf_cv_ncurses_version" >&6 +test "$cf_cv_ncurses_version" = no || +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF -echo "$as_me:16070: checking if we have identified curses headers" >&5 -echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 -if test "${cf_cv_ncurses_header+set}" = set; then +cf_nculib_root=$cf_cv_screen + # This works, except for the special case where we find gpm, but + # ncurses is in a nonstandard location via $LIBS, and we really want + # to link gpm. +cf_ncurses_LIBS="" +cf_ncurses_SAVE="$LIBS" +echo "$as_me:17234: checking for Gpm_Open in -lgpm" >&5 +echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 +if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - -cf_cv_ncurses_header=none -for cf_header in \ - ncurses.h $cf_cv_screen/ncurses.h \ - curses.h $cf_cv_screen/curses.h -do -cat >conftest.$ac_ext <<_ACEOF -#line 16082 "configure" + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgpm $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 17242 "configure" #include "confdefs.h" -#include <${cf_header}> + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char Gpm_Open (); int main (void) { -initscr(); tgoto("?", 0,0) +Gpm_Open (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16094: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17261: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16097: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16100: \"$ac_try\"") >&5 + echo "$as_me:17264: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17267: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16103: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_header=$cf_header; break + echo "$as_me:17270: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext conftest.$ac_ext -done - +cat "conftest.$ac_ext" >&5 +ac_cv_lib_gpm_Gpm_Open=no fi -echo "$as_me:16114: result: $cf_cv_ncurses_header" >&5 -echo "${ECHO_T}$cf_cv_ncurses_header" >&6 - -if test "$cf_cv_ncurses_header" = none ; then - { { echo "$as_me:16118: error: No curses header-files found" >&5 -echo "$as_me: error: No curses header-files found" >&2;} - { (exit 1); exit 1; }; } +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi - -# cheat, to get the right #define's for HAVE_NCURSES_H, etc. - -for ac_header in $cf_cv_ncurses_header -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:16128: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then +echo "$as_me:17281: result: $ac_cv_lib_gpm_Gpm_Open" >&5 +echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 +if test "$ac_cv_lib_gpm_Gpm_Open" = yes; then + echo "$as_me:17284: checking for initscr in -lgpm" >&5 +echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 +if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 16134 "configure" + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgpm $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 17292 "configure" #include "confdefs.h" -#include <$ac_header> + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +int +main (void) +{ +initscr (); + ; + return 0; +} _ACEOF -if { (eval echo "$as_me:16138: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17311: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:16144: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" + echo "$as_me:17314: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17317: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:17320: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - eval "$as_ac_Header=no" +cat "conftest.$ac_ext" >&5 +ac_cv_lib_gpm_initscr=no fi -rm -f conftest.err conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:16163: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<EOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -EOF - +echo "$as_me:17331: result: $ac_cv_lib_gpm_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 +if test "$ac_cv_lib_gpm_initscr" = yes; then + LIBS="$cf_ncurses_SAVE" +else + cf_ncurses_LIBS="-lgpm" fi -done - -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF - -cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - cat >>confdefs.h <<EOF -#define $cf_nculib_ROOT 1 -EOF - - cf_cv_ncurses_version=`$NCURSES_CONFIG --version` - - else - -cf_ncuhdr_root=$cf_cv_screen - -test -n "$cf_cv_curses_dir" && \ -test "$cf_cv_curses_dir" != "no" && { \ - -if test -n "$cf_cv_curses_dir/include/$cf_ncuhdr_root" ; then - for cf_add_incdir in $cf_cv_curses_dir/include/$cf_ncuhdr_root - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi - - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +fi - cat >conftest.$ac_ext <<_ACEOF -#line 16219 "configure" +case "$host_os" in +(freebsd*) + # This is only necessary if you are linking against an obsolete + # version of ncurses (but it should do no harm, since it's static). + if test "$cf_nculib_root" = ncurses ; then + echo "$as_me:17346: checking for tgoto in -lmytinfo" >&5 +echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 +if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmytinfo $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 17354 "configure" #include "confdefs.h" -#include <stdio.h> + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); int main (void) { -printf("Hello") +tgoto (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16231: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17373: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16234: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16237: \"$ac_try\"") >&5 + echo "$as_me:17376: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17379: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16240: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:17382: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes +cat "conftest.$ac_ext" >&5 +ac_cv_lib_mytinfo_tgoto=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:17393: result: $ac_cv_lib_mytinfo_tgoto" >&5 +echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 +if test "$ac_cv_lib_mytinfo_tgoto" = yes; then + cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + fi + ;; +esac -echo "${as_me:-configure}:16257: testing adding $cf_add_incdir to include-path ..." 1>&5 +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_ncurses_LIBS; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" +then - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -l$cf_nculib_root; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break fi - else - break - fi done - done -fi + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" -} +else -echo "$as_me:16276: checking for $cf_ncuhdr_root header in include-path" >&5 -echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 -if test "${cf_cv_ncurses_h+set}" = set; then + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=no' + cf_libdir="" + echo "$as_me:17442: checking for initscr" >&5 +echo $ECHO_N "checking for initscr... $ECHO_C" >&6 +if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + cat >"conftest.$ac_ext" <<_ACEOF +#line 17448 "configure" +#include "confdefs.h" +#define initscr autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef initscr - cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" - ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" - for cf_header in $cf_header_list - do +#ifdef __cplusplus +extern "C" +#endif - cat >conftest.$ac_ext <<_ACEOF -#line 16288 "configure" -#include "confdefs.h" +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (void); -#include <$cf_header> int main (void) { -#ifdef NCURSES_VERSION - -printf("%s\n", NCURSES_VERSION); -#else -#ifdef __NCURSES_H -printf("old\n"); -#else - make an error -#endif +/* The GNU C library defines stubs 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_initscr) || defined (__stub___initscr) +#error found stub for initscr #endif + return initscr (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16312: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17479: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16315: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16318: \"$ac_try\"") >&5 + echo "$as_me:17482: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17485: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16321: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_h=$cf_header - + echo "$as_me:17488: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_cv_ncurses_h=no +cat "conftest.$ac_ext" >&5 +ac_cv_func_initscr=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - - test "$cf_cv_ncurses_h" != no && break - done - +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:16336: result: $cf_cv_ncurses_h" >&5 -echo "${ECHO_T}$cf_cv_ncurses_h" >&6 - -if test "$cf_cv_ncurses_h" != no ; then - cf_cv_ncurses_header=$cf_cv_ncurses_h +echo "$as_me:17498: result: $ac_cv_func_initscr" >&5 +echo "${ECHO_T}$ac_cv_func_initscr" >&6 +if test "$ac_cv_func_initscr" = yes; then + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=yes' else -echo "$as_me:16343: checking for $cf_ncuhdr_root include-path" >&5 -echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 -if test "${cf_cv_ncurses_h2+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + cf_save_LIBS="$LIBS" + echo "$as_me:17505: checking for initscr in -l$cf_nculib_root" >&5 +echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 + LIBS="-l$cf_nculib_root $LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 17509 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17521: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:17524: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17527: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:17530: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + echo "$as_me:17532: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=yes' - test -n "$verbose" && echo +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +echo "$as_me:17539: result: no" >&5 +echo "${ECHO_T}no" >&6 cf_search= - -# collect the current set of include-directories from compiler flags -cf_header_path_list="" -if test -n "${CFLAGS}${CPPFLAGS}" ; then - for cf_header_path in $CPPFLAGS $CFLAGS +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS do - case $cf_header_path in - (-I*) - cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + case "$cf_library_path" in + (-L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -test "x$cf_header_path" != "xNONE" && \ -test -d "$cf_header_path" && \ +test "x$cf_library_path" != "xNONE" && \ +test -d "$cf_library_path" && \ { - test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" - test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" - test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" - test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" - test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" - test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d "$cf_library_path/lib" && cf_search="$cf_search $cf_library_path/lib" + test -d "$cf_library_path/lib/$cf_nculib_root" && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" + test -d "$cf_library_path/lib/$cf_nculib_root/lib" && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" + test -d "$cf_library_path/$cf_nculib_root/lib" && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" + test -d "$cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" } - cf_header_path_list="$cf_header_path_list $cf_search" + cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi -# add the variations for the package we are looking for - cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { - test -n "$verbose" && echo " ... testing for include-directories under $prefix" - test -d $prefix/include && cf_search="$cf_search $prefix/include" - test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" - test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" - test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" - test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib" + test -d "$prefix/lib/$cf_nculib_root" && cf_search="$cf_search $prefix/lib/$cf_nculib_root" + test -d "$prefix/lib/$cf_nculib_root/lib" && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" + test -d "$prefix/$cf_nculib_root/lib" && cf_search="$cf_search $prefix/$cf_nculib_root/lib" + test -d "$prefix/$cf_nculib_root/lib/$cf_nculib_root" && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" - test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" - test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" - test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" - test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib" + test -d "$cf_subdir_prefix/lib/$cf_nculib_root" && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" + test -d "$cf_subdir_prefix/lib/$cf_nculib_root/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" + test -d "$cf_subdir_prefix/$cf_nculib_root/lib" && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" + test -d "$cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" } done -test "$includedir" != NONE && \ -test "$includedir" != "/usr/include" && \ -test -d "$includedir" && { - test -d $includedir && cf_search="$cf_search $includedir" - test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" -} - -test "$oldincludedir" != NONE && \ -test "$oldincludedir" != "/usr/include" && \ -test -d "$oldincludedir" && { - test -d $oldincludedir && cf_search="$cf_search $oldincludedir" - test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" -} - -cf_search="$cf_search $cf_header_path_list" - - test -n "$verbose" && echo search path $cf_search - cf_save2_CPPFLAGS="$CPPFLAGS" - for cf_incdir in $cf_search - do - -if test -n "$cf_incdir" ; then - for cf_add_incdir in $cf_incdir - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi - - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS - - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - - cat >conftest.$ac_ext <<_ACEOF -#line 16464 "configure" -#include "confdefs.h" -#include <stdio.h> -int -main (void) -{ -printf("Hello") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16476: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:16479: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16482: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:16485: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes -fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - -echo "${as_me:-configure}:16502: testing adding $cf_add_incdir to include-path ..." 1>&5 - - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done -fi - - for cf_header in \ - ncurses.h \ - curses.h - do +cf_search="$cf_library_path_list $cf_search" - cat >conftest.$ac_ext <<_ACEOF -#line 16525 "configure" + for cf_libdir in $cf_search + do + echo "$as_me:17607: checking for -l$cf_nculib_root in $cf_libdir" >&5 +echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 + LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 17611 "configure" #include "confdefs.h" - -#include <$cf_header> +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { - -#ifdef NCURSES_VERSION - -printf("%s\n", NCURSES_VERSION); -#else -#ifdef __NCURSES_H -printf("old\n"); -#else - make an error -#endif -#endif - +initscr() ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16549: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17623: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16552: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16555: \"$ac_try\"") >&5 + echo "$as_me:17626: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17629: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16558: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_cv_ncurses_h2=$cf_header - -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_cv_ncurses_h2=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext - - if test "$cf_cv_ncurses_h2" != no ; then - cf_cv_ncurses_h2=$cf_incdir/$cf_header - test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 - break - fi - test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 - done - CPPFLAGS="$cf_save2_CPPFLAGS" - test "$cf_cv_ncurses_h2" != no && break - done - test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:16579: error: not found" >&5 -echo "$as_me: error: not found" >&2;} - { (exit 1); exit 1; }; } + echo "$as_me:17632: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + echo "$as_me:17634: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=yes' + break +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +echo "$as_me:17641: result: no" >&5 +echo "${ECHO_T}no" >&6 + LIBS="$cf_save_LIBS" +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + done fi -echo "$as_me:16584: result: $cf_cv_ncurses_h2" >&5 -echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" - cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` - cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` - if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then - cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header - fi +fi -if test -n "$cf_1st_incdir" ; then - for cf_add_incdir in $cf_1st_incdir - do - while test $cf_add_incdir != /usr/include - do - if test -d $cf_add_incdir - then - cf_have_incdir=no - if test -n "$CFLAGS$CPPFLAGS" ; then - # a loop is needed to ensure we can add subdirs of existing dirs - for cf_test_incdir in $CFLAGS $CPPFLAGS ; do - if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then - cf_have_incdir=yes; break - fi - done - fi +eval 'cf_found_library="$cf_cv_have_lib_'"$cf_nculib_root"\" - if test "$cf_have_incdir" = no ; then - if test "$cf_add_incdir" = /usr/local/include ; then - if test "$GCC" = yes - then - cf_save_CPPFLAGS=$CPPFLAGS +if test "$cf_found_library" = no ; then + { { echo "$as_me:17656: error: Cannot link $cf_nculib_root library" >&5 +echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} + { (exit 1); exit 1; }; } +fi - test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " - CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" +fi - cat >conftest.$ac_ext <<_ACEOF -#line 16620 "configure" +if test -n "$cf_ncurses_LIBS" ; then + echo "$as_me:17664: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 +echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 + cf_ncurses_SAVE="$LIBS" + for p in $cf_ncurses_LIBS ; do + q=`echo "$LIBS" | sed -e "s%$p %%" -e "s%$p$%%"` + if test "$q" != "$LIBS" ; then + LIBS="$q" + fi + done + cat >"conftest.$ac_ext" <<_ACEOF +#line 17674 "configure" #include "confdefs.h" -#include <stdio.h> +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -printf("Hello") +initscr(); mousemask(0,0); tigetstr((char *)0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16632: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17686: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16635: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16638: \"$ac_try\"") >&5 + echo "$as_me:17689: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17692: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16641: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + echo "$as_me:17695: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + echo "$as_me:17697: result: yes" >&5 +echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cf_have_incdir=yes +cat "conftest.$ac_ext" >&5 +echo "$as_me:17702: result: no" >&5 +echo "${ECHO_T}no" >&6 + LIBS="$cf_ncurses_SAVE" +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS=$cf_save_CPPFLAGS - fi - fi - fi - - if test "$cf_have_incdir" = no ; then - test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 -echo "${as_me:-configure}:16658: testing adding $cf_add_incdir to include-path ..." 1>&5 +cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" +cat >>confdefs.h <<EOF +#define $cf_nculib_ROOT 1 +EOF - cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` - test "$cf_top_incdir" = "$cf_add_incdir" && break - cf_add_incdir="$cf_top_incdir" - else - break - fi - else - break - fi - done - done + fi +else + NCURSES_CONFIG=none fi -fi + ;; +(ncurses*) -# Set definitions to allow ifdef'ing for ncurses.h +cf_ncuconfig_root=$cf_cv_screen +cf_have_ncuconfig=no -case $cf_cv_ncurses_header in -(*ncurses.h) +if test "x${PKG_CONFIG:=none}" != xnone; then + echo "$as_me:17727: checking pkg-config for $cf_ncuconfig_root" >&5 +echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 + if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then + echo "$as_me:17730: result: yes" >&5 +echo "${ECHO_T}yes" >&6 -cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_H 1 -EOF + echo "$as_me:17733: checking if the $cf_ncuconfig_root package files work" >&5 +echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 + cf_have_ncuconfig=unknown - ;; -esac + cf_save_CFLAGS="$CFLAGS" + cf_save_CPPFLAGS="$CPPFLAGS" + cf_save_LIBS="$LIBS" -case $cf_cv_ncurses_header in -(ncurses/curses.h|ncurses/ncurses.h) + cf_pkg_cflags="`$PKG_CONFIG --cflags $cf_ncuconfig_root`" + cf_pkg_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" -cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_NCURSES_H 1 -EOF + # while -W for passing linker flags is prevalent, it is not "standard". + # At least one wrapper for c89/c99 (in Apple's xcode) has its own + # incompatible _and_ non-standard -W option which gives an error. Work + # around that pitfall. + case "x${CC}@@${cf_pkg_libs}@${cf_pkg_cflags}" in + (x*c[89]9@@*-W*) - ;; -(ncursesw/curses.h|ncursesw/ncurses.h) +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= -cat >>confdefs.h <<\EOF -#define HAVE_NCURSESW_NCURSES_H 1 -EOF +for cf_add_cflags in $cf_pkg_cflags +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - ;; -esac + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes -echo "$as_me:16706: checking for terminfo header" >&5 -echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 -if test "${cf_cv_term_header+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + if test "$cf_fix_cppflags" = yes ; then -case ${cf_cv_ncurses_header} in -(*/ncurses.h|*/ncursesw.h) - cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + + ;; + esac + ;; + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + + ;; + esac ;; -(*) - cf_term_header=term.h +(yes) + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no ;; esac +done -for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" -do -cat >conftest.$ac_ext <<_ACEOF -#line 16724 "configure" +if test -n "$cf_new_cflags" ; then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + +fi + +if test -n "$cf_new_cppflags" ; then + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + +fi + +if test -n "$cf_new_extra_cppflags" ; then + + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + +fi + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkg_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + + cat >"conftest.$ac_ext" <<_ACEOF +#line 17866 "configure" #include "confdefs.h" -#include <stdio.h> #include <${cf_cv_ncurses_header:-curses.h}> -#include <$cf_test> - int main (void) { -int x = auto_left_margin +initscr(); mousemask(0,0); tigetstr((char *)0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:16739: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:17878: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16742: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:16745: \"$ac_try\"") >&5 + echo "$as_me:17881: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:17884: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16748: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - - cf_cv_term_header="$cf_test" + echo "$as_me:17887: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + if test "$cross_compiling" = yes; then + cf_test_ncuconfig=maybe +else + cat >"conftest.$ac_ext" <<_ACEOF +#line 17893 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> + int main(void) + { char *xx = curses_version(); return (xx == 0); } +_ACEOF +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:17900: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:17903: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:17905: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:17908: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_test_ncuconfig=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_test_ncuconfig=no +fi +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" +fi else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 +cf_test_ncuconfig=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" - cf_cv_term_header=unknown + CFLAGS="$cf_save_CFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + + if test "x$cf_test_ncuconfig" != xyes; then + cf_temp=`echo "x$cf_pkg_cflags" | sed -e s/^x// -e 's/-W[^ ]*//g'` + cf_pkg_cflags="$cf_temp" + cf_temp=`echo "x$cf_pkg_libs" | sed -e s/^x// -e 's/-W[^ ]*//g'` + cf_pkg_libs="$cf_temp" + fi + ;; + esac + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $cf_pkg_cflags +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test "$cf_fix_cppflags" = yes ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -fi -rm -f conftest.$ac_objext conftest.$ac_ext - test "$cf_cv_term_header" != unknown && break -done + continue + elif test "${cf_tst_cflags}" = "\"'" ; then -fi -echo "$as_me:16764: result: $cf_cv_term_header" >&5 -echo "${ECHO_T}$cf_cv_term_header" >&6 + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -# Set definitions to allow ifdef'ing to accommodate subdirectories + continue + fi + ;; + esac + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` -case $cf_cv_term_header in -(*term.h) +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` -cat >>confdefs.h <<\EOF -#define HAVE_TERM_H 1 -EOF + ;; + esac - ;; -esac + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" -case $cf_cv_term_header in -(ncurses/term.h) + ;; + esac + ;; + (*) -cat >>confdefs.h <<\EOF -#define HAVE_NCURSES_TERM_H 1 -EOF + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; + esac ;; -(ncursesw/term.h) +(yes) -cat >>confdefs.h <<\EOF -#define HAVE_NCURSESW_TERM_H 1 -EOF + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no ;; esac +done -# some applications need this, but should check for NCURSES_VERSION +if test -n "$cf_new_cflags" ; then -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" -echo "$as_me:16802: checking for ncurses version" >&5 -echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 -if test "${cf_cv_ncurses_version+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else +fi - cf_cv_ncurses_version=no - cf_tempfile=out$$ - rm -f $cf_tempfile - if test "$cross_compiling" = yes; then +if test -n "$cf_new_cppflags" ; then - # This will not work if the preprocessor splits the line after the - # Autoconf token. The 'unproto' program does that. - cat > conftest.$ac_ext <<EOF -#include <${cf_cv_ncurses_header:-curses.h}> -#undef Autoconf -#ifdef NCURSES_VERSION -Autoconf NCURSES_VERSION -#else -#ifdef __NCURSES_H -Autoconf "old" -#endif -; -#endif -EOF - cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" - { (eval echo "$as_me:16828: \"$cf_try\"") >&5 - (eval $cf_try) 2>&5 - ac_status=$? - echo "$as_me:16831: \$? = $ac_status" >&5 - (exit $ac_status); } - if test -f conftest.out ; then - cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` - test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" - rm -f conftest.out - fi + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" -else - cat >conftest.$ac_ext <<_ACEOF -#line 16841 "configure" -#include "confdefs.h" +fi -#include <${cf_cv_ncurses_header:-curses.h}> -#include <stdio.h> -int main(void) -{ - FILE *fp = fopen("$cf_tempfile", "w"); -#ifdef NCURSES_VERSION -# ifdef NCURSES_VERSION_PATCH - fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); -# else - fprintf(fp, "%s\n", NCURSES_VERSION); -# endif -#else -# ifdef __NCURSES_H - fprintf(fp, "old\n"); -# else - make an error -# endif -#endif - ${cf_cv_main_return:-return}(0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:16866: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:16869: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:16871: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:16874: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if test -n "$cf_new_extra_cppflags" ; then - cf_cv_ncurses_version=`cat $cf_tempfile` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - rm -f $cf_tempfile + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -echo "$as_me:16888: result: $cf_cv_ncurses_version" >&5 -echo "${ECHO_T}$cf_cv_ncurses_version" >&6 -test "$cf_cv_ncurses_version" = no || -cat >>confdefs.h <<\EOF -#define NCURSES 1 -EOF -cf_nculib_root=$cf_cv_screen - # This works, except for the special case where we find gpm, but - # ncurses is in a nonstandard location via $LIBS, and we really want - # to link gpm. -cf_ncurses_LIBS="" -cf_ncurses_SAVE="$LIBS" -echo "$as_me:16901: checking for Gpm_Open in -lgpm" >&5 -echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 -if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgpm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 16909 "configure" -#include "confdefs.h" +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkg_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char Gpm_Open (); + cat >"conftest.$ac_ext" <<_ACEOF +#line 18054 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -Gpm_Open (); +initscr(); mousemask(0,0); tigetstr((char *)0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:16928: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:18066: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16931: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:16934: \"$ac_try\"") >&5 + echo "$as_me:18069: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:18072: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16937: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_gpm_Gpm_Open=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_gpm_Gpm_Open=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:16948: result: $ac_cv_lib_gpm_Gpm_Open" >&5 -echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 -if test $ac_cv_lib_gpm_Gpm_Open = yes; then - echo "$as_me:16951: checking for initscr in -lgpm" >&5 -echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 -if test "${ac_cv_lib_gpm_initscr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + echo "$as_me:18075: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + if test "$cross_compiling" = yes; then + cf_have_ncuconfig=maybe else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgpm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 16959 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 18081 "configure" #include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initscr (); -int -main (void) -{ -initscr (); - ; - return 0; -} +#include <${cf_cv_ncurses_header:-curses.h}> + int main(void) + { char *xx = curses_version(); return (xx == 0); } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:16978: \"$ac_link\"") >&5 +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:18088: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:16981: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:16984: \"$ac_try\"") >&5 + echo "$as_me:18091: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:18093: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:16987: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_gpm_initscr=yes + echo "$as_me:18096: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_have_ncuconfig=yes else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_gpm_initscr=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_ncuconfig=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:16998: result: $ac_cv_lib_gpm_initscr" >&5 -echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 -if test $ac_cv_lib_gpm_initscr = yes; then - LIBS="$cf_ncurses_SAVE" else - cf_ncurses_LIBS="-lgpm" + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_have_ncuconfig=no fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + echo "$as_me:18113: result: $cf_have_ncuconfig" >&5 +echo "${ECHO_T}$cf_have_ncuconfig" >&6 + test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes + if test "$cf_have_ncuconfig" != "yes" + then + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + NCURSES_CONFIG_PKG=none + else -fi +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF -case $host_os in -(freebsd*) - # This is only necessary if you are linking against an obsolete - # version of ncurses (but it should do no harm, since it's static). - if test "$cf_nculib_root" = ncurses ; then - echo "$as_me:17013: checking for tgoto in -lmytinfo" >&5 -echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 -if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then + NCURSES_CONFIG_PKG=$cf_ncuconfig_root + +echo "$as_me:18129: checking for terminfo header" >&5 +echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmytinfo $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 17021 "configure" + +case "${cf_cv_ncurses_header}" in +(*/ncurses.h|*/ncursesw.h) + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + ;; +(*) + cf_term_header=term.h + ;; +esac + +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 18147 "configure" #include "confdefs.h" +#include <stdio.h> +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char tgoto (); int main (void) { -tgoto (); +int x = auto_left_margin; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17040: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18162: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17043: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17046: \"$ac_try\"") >&5 + echo "$as_me:18165: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:18168: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17049: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_mytinfo_tgoto=yes + echo "$as_me:18171: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_mytinfo_tgoto=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +cat "conftest.$ac_ext" >&5 + + cf_cv_term_header=unknown + fi -echo "$as_me:17060: result: $ac_cv_lib_mytinfo_tgoto" >&5 -echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 -if test $ac_cv_lib_mytinfo_tgoto = yes; then - cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + test "$cf_cv_term_header" != unknown && break +done + fi +echo "$as_me:18187: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 + +# Set definitions to allow ifdef'ing to accommodate subdirectories + +case "$cf_cv_term_header" in +(*term.h) + +cat >>confdefs.h <<\EOF +#define HAVE_TERM_H 1 +EOF - fi ;; esac -cf_add_libs="$cf_ncurses_LIBS" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" +case "$cf_cv_term_header" in +(ncurses/term.h) -if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) -then +cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_TERM_H 1 +EOF + + ;; +(ncursesw/term.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_TERM_H 1 +EOF + + ;; +esac -cf_add_libs="-l$cf_nculib_root" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" -done -LIBS="$cf_add_libs" + else + echo "$as_me:18222: result: no" >&5 +echo "${ECHO_T}no" >&6 + NCURSES_CONFIG_PKG=none + fi else + NCURSES_CONFIG_PKG=none +fi - eval 'cf_cv_have_lib_'$cf_nculib_root'=no' - cf_libdir="" - echo "$as_me:17109: checking for initscr" >&5 -echo $ECHO_N "checking for initscr... $ECHO_C" >&6 -if test "${ac_cv_func_initscr+set}" = set; then +if test "x$cf_have_ncuconfig" = "xno"; then + cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}" + +if test -n "$ac_tool_prefix"; then + for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config + 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 +echo "$as_me:18238: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 17115 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char initscr (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initscr (); -char (*f) (); - -int -main (void) -{ -/* 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_initscr) || defined (__stub___initscr) -choke me -#else -f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17146: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:17149: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17152: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:17155: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_initscr=yes + if test -n "$NCURSES_CONFIG"; then + ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_initscr=no + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" +echo "$as_me:18253: found $ac_dir/$ac_word" >&5 +break +done + fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:17165: result: $ac_cv_func_initscr" >&5 -echo "${ECHO_T}$ac_cv_func_initscr" >&6 -if test $ac_cv_func_initscr = yes; then - eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' +NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG +if test -n "$NCURSES_CONFIG"; then + echo "$as_me:18261: result: $NCURSES_CONFIG" >&5 +echo "${ECHO_T}$NCURSES_CONFIG" >&6 else + echo "$as_me:18264: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi - cf_save_LIBS="$LIBS" - echo "$as_me:17172: checking for initscr in -l$cf_nculib_root" >&5 -echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 - LIBS="-l$cf_nculib_root $LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 17176 "configure" -#include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> -int -main (void) -{ -initscr() - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17188: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:17191: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17194: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:17197: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:17199: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' + test -n "$NCURSES_CONFIG" && break + done +fi +if test -z "$NCURSES_CONFIG"; then + ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG + for ac_prog in ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:18277: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_NCURSES_CONFIG"; then + ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" +echo "$as_me:18292: found $ac_dir/$ac_word" >&5 +break +done +fi +fi +ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG +if test -n "$ac_ct_NCURSES_CONFIG"; then + echo "$as_me:18300: result: $ac_ct_NCURSES_CONFIG" >&5 +echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:17206: result: no" >&5 + echo "$as_me:18303: result: no" >&5 echo "${ECHO_T}no" >&6 +fi -cf_search= -cf_library_path_list="" -if test -n "${LDFLAGS}${LIBS}" ; then - for cf_library_path in $LDFLAGS $LIBS - do - case $cf_library_path in - (-L*) - cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + test -n "$ac_ct_NCURSES_CONFIG" && break +done +test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" -test "x$cf_library_path" != "xNONE" && \ -test -d "$cf_library_path" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" - test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" - test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" - test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" - test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" - test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" -} + NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG +fi - cf_library_path_list="$cf_library_path_list $cf_search" + if test "$NCURSES_CONFIG" != none ; then + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in `$NCURSES_CONFIG --cflags` +do +case "$cf_fix_cppflags" in +(no) + case "$cf_add_cflags" in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) + case "$cf_add_cflags" in + (-D*) + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test "$cf_fix_cppflags" = yes ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" + + continue + fi ;; esac - done -fi + case "$CPPFLAGS" in + (*$cf_add_cflags) + ;; + (*) + case "$cf_add_cflags" in + (-D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` -cf_search= +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` -test "x$prefix" != "xNONE" && \ -test -d "$prefix" && \ - { - test -n "$verbose" && echo " ... testing for lib-directories under $prefix" - test -d $prefix/lib && cf_search="$cf_search $prefix/lib" - test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" - test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" - test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" - test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" -} + ;; + esac + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + + ;; + esac + ;; + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + + ;; + esac + ;; +(yes) -for cf_subdir_prefix in \ - /usr \ - /usr/local \ - /usr/pkg \ - /opt \ - /opt/local \ - $HOME -do + test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " + cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" -test "x$cf_subdir_prefix" != "x$prefix" && \ -test -d "$cf_subdir_prefix" && \ -(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" - test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" - test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" - test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" - test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" - test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" -} + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` + test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac done -cf_search="$cf_library_path_list $cf_search" +if test -n "$cf_new_cflags" ; then - for cf_libdir in $cf_search - do - echo "$as_me:17274: checking for -l$cf_nculib_root in $cf_libdir" >&5 -echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 - LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 17278 "configure" -#include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> -int -main (void) -{ -initscr() - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17290: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:17293: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17296: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:17299: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:17301: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' - break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:17308: result: no" >&5 -echo "${ECHO_T}no" >&6 - LIBS="$cf_save_LIBS" -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - done + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi +if test -n "$cf_new_cppflags" ; then -eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" -if test $cf_found_library = no ; then - { { echo "$as_me:17323: error: Cannot link $cf_nculib_root library" >&5 -echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} - { (exit 1); exit 1; }; } fi +if test -n "$cf_new_extra_cppflags" ; then + + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi -if test -n "$cf_ncurses_LIBS" ; then - echo "$as_me:17331: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 -echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 - cf_ncurses_SAVE="$LIBS" - for p in $cf_ncurses_LIBS ; do - q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` - if test "$q" != "$LIBS" ; then - LIBS="$q" +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in `$NCURSES_CONFIG --libs`; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break fi done - cat >conftest.$ac_ext <<_ACEOF -#line 17341 "configure" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + + # even with config script, some packages use no-override for curses.h + +echo "$as_me:18432: checking if we have identified curses headers" >&5 +echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 +if test "${cf_cv_ncurses_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cf_cv_ncurses_header=none +for cf_header in \ + ncurses.h $cf_cv_screen/ncurses.h \ + curses.h $cf_cv_screen/curses.h +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 18444 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> +#include <${cf_header}> int main (void) { -initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); +initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17353: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18456: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17356: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17359: \"$ac_try\"") >&5 + echo "$as_me:18459: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:18462: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17362: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:17364: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + echo "$as_me:18465: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:17369: result: no" >&5 -echo "${ECHO_T}no" >&6 - LIBS="$cf_ncurses_SAVE" +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi - -cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - -cat >>confdefs.h <<EOF -#define $cf_nculib_ROOT 1 -EOF +rm -f "conftest.$ac_objext" "conftest.$ac_ext" +done - fi -else - NCURSES_CONFIG=none fi +echo "$as_me:18476: result: $cf_cv_ncurses_header" >&5 +echo "${ECHO_T}$cf_cv_ncurses_header" >&6 - ;; -(pdcurses) - echo "$as_me:17389: checking for X" >&5 -echo $ECHO_N "checking for X... $ECHO_C" >&6 +if test "$cf_cv_ncurses_header" = none ; then + { { echo "$as_me:18480: error: No curses header-files found" >&5 +echo "$as_me: error: No curses header-files found" >&2;} + { (exit 1); exit 1; }; } +fi -# Check whether --with-x or --without-x was given. -if test "${with_x+set}" = set; then - withval="$with_x" +# cheat, to get the right #define's for HAVE_NCURSES_H, etc. -fi; -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then - # Both variables are already set. - have_x=yes - else - if test "${ac_cv_have_x+set}" = set; then +for ac_header in $cf_cv_ncurses_header +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:18490: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no ac_x_libraries=no -rm -fr conftest.dir -if mkdir conftest.dir; then - cd conftest.dir - # Make sure to not put "make" in the Imakefile rules, since we grep it out. - cat >Imakefile <<'EOF' -acfindx: - @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' -EOF - if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering...", which would confuse us. - eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl dylib dll; do - if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && - test -f $ac_im_libdir/libX11.$ac_extension; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case $ac_im_incroot in - /usr/include) ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in - /usr/lib | /lib) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi - cd .. - rm -fr conftest.dir -fi - -# Standard set of common directories for X headers. -# Check X11 before X11Rn because it is often a symlink to the current release. -ac_x_header_dirs=' -/usr/X11/include -/usr/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/usr/local/include/X11R6 -/usr/local/include/X11R5 -/usr/local/include/X11R4 - -/usr/X386/include -/usr/x386/include -/usr/XFree86/include/X11 - -/usr/include -/usr/local/include -/usr/unsupported/include -/usr/athena/include -/usr/local/x11r5/include -/usr/lpp/Xamples/include - -/usr/openwin/include -/usr/openwin/share/include' - -if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for Intrinsic.h. - # First, try using that file with no special directory specified. - cat >conftest.$ac_ext <<_ACEOF -#line 17486 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 18496 "configure" #include "confdefs.h" -#include <X11/Intrinsic.h> +#include <$ac_header> _ACEOF -if { (eval echo "$as_me:17490: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:18500: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:17496: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:18506: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then - # We can compile using X headers with no special include directory. -ac_x_includes= + eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Intrinsic.h"; then - ac_x_includes=$ac_dir - break - fi -done + cat "conftest.$ac_ext" >&5 + eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_ext -fi # $ac_x_includes = no +rm -f conftest.err "conftest.$ac_ext" +fi +echo "$as_me:18525: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + cat >>confdefs.h <<EOF +#define $cf_nculib_ROOT 1 +EOF + + cf_cv_ncurses_version="`$NCURSES_CONFIG --version`" + + else + +cf_ncuhdr_root=$cf_cv_screen + +test -n "$cf_cv_curses_dir" && \ +test "$cf_cv_curses_dir" != "no" && { \ + +if test -n "$cf_cv_curses_dir/include/$cf_ncuhdr_root" ; then + for cf_add_incdir in $cf_cv_curses_dir/include/$cf_ncuhdr_root + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi -if test "$ac_x_libraries" = no; then - # Check for the libraries. - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS=$LIBS - LIBS="-lXt $LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 17529 "configure" + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + + cat >"conftest.$ac_ext" <<_ACEOF +#line 18581 "configure" #include "confdefs.h" -#include <X11/Intrinsic.h> +#include <stdio.h> int main (void) { -XtMalloc (0) +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17541: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18593: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17544: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17547: \"$ac_try\"") >&5 + echo "$as_me:18596: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:18599: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17550: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= + echo "$as_me:18602: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -LIBS=$ac_save_LIBS -for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` -do - # Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl dylib dll; do - if test -r $ac_dir/libXt.$ac_extension; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -fi # $ac_x_libraries = no +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi -if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then - # Didn't find X anywhere. Cache the known absence of X. - ac_cv_have_x="have_x=no" -else - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes \ - ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" -fi -fi + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - fi - eval "$ac_cv_have_x" -fi # $with_x != no +echo "${as_me:-configure}:18619: testing adding $cf_add_incdir to include-path ..." 1>&5 -if test "$have_x" != yes; then - echo "$as_me:17588: result: $have_x" >&5 -echo "${ECHO_T}$have_x" >&6 - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes \ - ac_x_includes=$x_includes ac_x_libraries=$x_libraries" - echo "$as_me:17598: result: libraries $x_libraries, headers $x_includes" >&5 -echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 -fi + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done +fi -cat >>confdefs.h <<\EOF -#define X_DISPLAY_MISSING 1 -EOF +} - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +echo "$as_me:18638: checking for $cf_ncuhdr_root header in include-path" >&5 +echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 +if test "${cf_cv_ncurses_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - case `(uname -sr) 2>/dev/null` in - "SunOS 5"*) - echo "$as_me:17622: checking whether -R must be followed by a space" >&5 -echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 - ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" - cat >conftest.$ac_ext <<_ACEOF -#line 17626 "configure" + cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" + { test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw; } && cf_header_list="$cf_header_list curses.h ncurses.h" + for cf_header in $cf_header_list + do + + cat >"conftest.$ac_ext" <<_ACEOF +#line 18650 "configure" #include "confdefs.h" +#include <$cf_header> int main (void) { +#ifdef NCURSES_VERSION + +printf("%s\\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\\n"); +#else + make an error +#endif +#endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17638: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18674: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17641: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17644: \"$ac_try\"") >&5 + echo "$as_me:18677: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:18680: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17647: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_R_nospace=yes + echo "$as_me:18683: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_h=$cf_header + else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_R_nospace=no +cat "conftest.$ac_ext" >&5 +cf_cv_ncurses_h=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - if test $ac_R_nospace = yes; then - echo "$as_me:17657: result: no" >&5 -echo "${ECHO_T}no" >&6 - X_LIBS="$X_LIBS -R$x_libraries" - else - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat >conftest.$ac_ext <<_ACEOF -#line 17663 "configure" -#include "confdefs.h" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" -int -main (void) -{ + test "$cf_cv_ncurses_h" != no && break + done - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17675: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:17678: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17681: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:17684: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_R_space=yes +fi +echo "$as_me:18698: result: $cf_cv_ncurses_h" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h" >&6 + +if test "$cf_cv_ncurses_h" != no ; then + cf_cv_ncurses_header=$cf_cv_ncurses_h else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_R_space=no + +echo "$as_me:18705: checking for $cf_ncuhdr_root include-path" >&5 +echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 +if test "${cf_cv_ncurses_h2+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + test -n "$verbose" && echo + +cf_search= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case "$cf_header_path" in + (-I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + +test "x$cf_header_path" != "xNONE" && \ +test -d "$cf_header_path" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" + test -d "$cf_header_path/include" && cf_search="$cf_search $cf_header_path/include" + test -d "$cf_header_path/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" + test -d "$cf_header_path/include/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" + test -d "$cf_header_path/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" + test -d "$cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + + cf_header_path_list="$cf_header_path_list $cf_search" + ;; + esac + done fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - if test $ac_R_space = yes; then - echo "$as_me:17694: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - X_LIBS="$X_LIBS -R $x_libraries" - else - echo "$as_me:17698: result: neither works" >&5 -echo "${ECHO_T}neither works" >&6 - fi - fi - LIBS=$ac_xsave_LIBS - esac - fi - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. +# add the variations for the package we are looking for + +cf_search= + +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d "$prefix/include" && cf_search="$cf_search $prefix/include" + test -d "$prefix/include/$cf_ncuhdr_root" && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" + test -d "$prefix/include/$cf_ncuhdr_root/include" && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" + test -d "$prefix/$cf_ncuhdr_root/include" && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" + test -d "$prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do + +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include" + test -d "$cf_subdir_prefix/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" + test -d "$cf_subdir_prefix/include/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" + test -d "$cf_subdir_prefix/$cf_ncuhdr_root/include" && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" + test -d "$cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +done + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d "$includedir" && cf_search="$cf_search $includedir" + test -d "$includedir/$cf_ncuhdr_root" && cf_search="$cf_search $includedir/$cf_ncuhdr_root" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d "$oldincludedir" && cf_search="$cf_search $oldincludedir" + test -d "$oldincludedir/$cf_ncuhdr_root" && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" +} + +cf_search="$cf_search $cf_header_path_list" + + test -n "$verbose" && echo "search path $cf_search" + cf_save2_CPPFLAGS="$CPPFLAGS" + for cf_incdir in $cf_search + do + +if test -n "$cf_incdir" ; then + for cf_add_incdir in $cf_incdir + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn Johnson says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And Karl Berry says - # the Alpha needs dnet_stub (dnet does not exist). - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" - cat >conftest.$ac_ext <<_ACEOF -#line 17718 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 18826 "configure" #include "confdefs.h" - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char XOpenDisplay (); +#include <stdio.h> int main (void) { -XOpenDisplay (); +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17737: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18838: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17740: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17743: \"$ac_try\"") >&5 + echo "$as_me:18841: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:18844: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17746: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:18847: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:17752: checking for dnet_ntoa in -ldnet" >&5 -echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 -if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 17760 "configure" +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes +fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me:-configure}:18864: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done +fi + + for cf_header in \ + ncurses.h \ + curses.h + do + + cat >"conftest.$ac_ext" <<_ACEOF +#line 18887 "configure" #include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dnet_ntoa (); +#include <$cf_header> int main (void) { -dnet_ntoa (); + +#ifdef NCURSES_VERSION + +printf("%s\\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\\n"); +#else + make an error +#endif +#endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17779: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18911: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17782: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17785: \"$ac_try\"") >&5 + echo "$as_me:18914: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:18917: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17788: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dnet_dnet_ntoa=yes + echo "$as_me:18920: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_cv_ncurses_h2=$cf_header + else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dnet_dnet_ntoa=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +cat "conftest.$ac_ext" >&5 +cf_cv_ncurses_h2=no fi -echo "$as_me:17799: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 -if test $ac_cv_lib_dnet_dnet_ntoa = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + + if test "$cf_cv_ncurses_h2" != no ; then + cf_cv_ncurses_h2=$cf_incdir/$cf_header + test -n "$verbose" && echo $ECHO_N " ... found $ECHO_C" 1>&6 + break + fi + test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 + done + CPPFLAGS="$cf_save2_CPPFLAGS" + test "$cf_cv_ncurses_h2" != no && break + done + test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:18941: error: not found" >&5 +echo "$as_me: error: not found" >&2;} + { (exit 1); exit 1; }; } + fi +echo "$as_me:18946: result: $cf_cv_ncurses_h2" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - echo "$as_me:17806: checking for dnet_ntoa in -ldnet_stub" >&5 -echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 -if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 17814 "configure" -#include "confdefs.h" + cf_1st_incdir=`echo "$cf_cv_ncurses_h2" | sed -e 's%/[^/]*$%%'` + cf_cv_ncurses_header="`basename "$cf_cv_ncurses_h2"`" + if test "`basename "$cf_1st_incdir"`" = "$cf_ncuhdr_root" ; then + cf_cv_ncurses_header="$cf_ncuhdr_root/$cf_cv_ncurses_header" + fi -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dnet_ntoa (); +if test -n "$cf_1st_incdir" ; then + for cf_add_incdir in $cf_1st_incdir + do + while test "$cf_add_incdir" != /usr/include + do + if test -d "$cf_add_incdir" + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + + cat >"conftest.$ac_ext" <<_ACEOF +#line 18982 "configure" +#include "confdefs.h" +#include <stdio.h> int main (void) { -dnet_ntoa (); +printf("Hello") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17833: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:18994: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17836: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17839: \"$ac_try\"") >&5 + echo "$as_me:18997: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:19000: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17842: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dnet_stub_dnet_ntoa=yes + echo "$as_me:19003: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dnet_stub_dnet_ntoa=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:17853: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 -if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +cat "conftest.$ac_ext" >&5 +cf_have_incdir=yes fi +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi - fi -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_xsave_LIBS" + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to T.E. Dickey. - # The functions gethostbyname, getservbyname, and inet_addr are - # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - echo "$as_me:17872: checking for gethostbyname" >&5 -echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 -if test "${ac_cv_func_gethostbyname+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 17878 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostbyname (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gethostbyname (); -char (*f) (); +echo "${as_me:-configure}:19020: testing adding $cf_add_incdir to include-path ..." 1>&5 -int -main (void) -{ -/* 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_gethostbyname) || defined (__stub___gethostbyname) -choke me -#else -f = gethostbyname; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17909: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:17912: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17915: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:17918: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_gethostbyname=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_gethostbyname=no + cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + else + break + fi + done + done fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi -echo "$as_me:17928: result: $ac_cv_func_gethostbyname" >&5 -echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 - if test $ac_cv_func_gethostbyname = no; then - echo "$as_me:17932: checking for gethostbyname in -lnsl" >&5 -echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 -if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then +# Set definitions to allow ifdef'ing for ncurses.h + +case "$cf_cv_ncurses_header" in +(*ncurses.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_H 1 +EOF + + ;; +esac + +case "$cf_cv_ncurses_header" in +(ncurses/curses.h|ncurses/ncurses.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_NCURSES_H 1 +EOF + + ;; +(ncursesw/curses.h|ncursesw/ncurses.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_NCURSES_H 1 +EOF + + ;; +esac + +echo "$as_me:19068: checking for terminfo header" >&5 +echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 17940 "configure" + +case "${cf_cv_ncurses_header}" in +(*/ncurses.h|*/ncursesw.h) + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + ;; +(*) + cf_term_header=term.h + ;; +esac + +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +cat >"conftest.$ac_ext" <<_ACEOF +#line 19086 "configure" #include "confdefs.h" +#include <stdio.h> +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gethostbyname (); int main (void) { -gethostbyname (); +int x = auto_left_margin; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:17959: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:19101: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:17962: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:17965: \"$ac_try\"") >&5 + echo "$as_me:19104: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:19107: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:17968: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_nsl_gethostbyname=yes + echo "$as_me:19110: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_nsl_gethostbyname=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +cat "conftest.$ac_ext" >&5 + + cf_cv_term_header=unknown + fi -echo "$as_me:17979: result: $ac_cv_lib_nsl_gethostbyname" >&5 -echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 -if test $ac_cv_lib_nsl_gethostbyname = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + test "$cf_cv_term_header" != unknown && break +done + fi +echo "$as_me:19126: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 - if test $ac_cv_lib_nsl_gethostbyname = no; then - echo "$as_me:17986: checking for gethostbyname in -lbsd" >&5 -echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 -if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then +# Set definitions to allow ifdef'ing to accommodate subdirectories + +case "$cf_cv_term_header" in +(*term.h) + +cat >>confdefs.h <<\EOF +#define HAVE_TERM_H 1 +EOF + + ;; +esac + +case "$cf_cv_term_header" in +(ncurses/term.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_TERM_H 1 +EOF + + ;; +(ncursesw/term.h) + +cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_TERM_H 1 +EOF + + ;; +esac + +# some applications need this, but should check for NCURSES_VERSION + +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +echo "$as_me:19164: checking for ncurses version" >&5 +echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 +if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 17994 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" + cf_cv_ncurses_version=no + cf_tempfile=out$$ + rm -f "$cf_tempfile" + if test "$cross_compiling" = yes; then + + # This will not work if the preprocessor splits the line after the + # Autoconf token. The 'unproto' program does that. + cat > "conftest.$ac_ext" <<EOF +#include <${cf_cv_ncurses_header:-curses.h}> +#undef Autoconf +#ifdef NCURSES_VERSION +Autoconf NCURSES_VERSION +#else +#ifdef __NCURSES_H +Autoconf "old" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gethostbyname (); -int -main (void) -{ -gethostbyname (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18013: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:18016: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18019: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 +; +#endif +EOF + cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" + { (eval echo "$as_me:19190: \"$cf_try\"") >&5 + (eval $cf_try) 2>&5 ac_status=$? - echo "$as_me:18022: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_bsd_gethostbyname=yes -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_bsd_gethostbyname=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:18033: result: $ac_cv_lib_bsd_gethostbyname" >&5 -echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 -if test $ac_cv_lib_bsd_gethostbyname = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - - fi - fi + echo "$as_me:19193: \$? = $ac_status" >&5 + (exit "$ac_status"); } + if test -f conftest.out ; then + cf_out=`sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%' conftest.out` + test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" + rm -f conftest.out + fi - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the nameserver (or something). -lsocket - # must be given before -lnsl if both are needed. We assume that - # if connect needs -lnsl, so does gethostbyname. - echo "$as_me:18049: checking for connect" >&5 -echo $ECHO_N "checking for connect... $ECHO_C" >&6 -if test "${ac_cv_func_connect+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 18055 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 19203 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char connect (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char connect (); -char (*f) (); -int -main (void) +#include <${cf_cv_ncurses_header:-curses.h}> +#include <stdio.h> +int main(void) { -/* 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_connect) || defined (__stub___connect) -choke me + FILE *fp = fopen("$cf_tempfile", "w"); +#ifdef NCURSES_VERSION +# ifdef NCURSES_VERSION_PATCH + fprintf(fp, "%s.%d\\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); +# else + fprintf(fp, "%s\\n", NCURSES_VERSION); +# endif #else -f = connect; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +# ifdef __NCURSES_H + fprintf(fp, "old\\n"); +# else + make an error +# endif #endif - - ; - return 0; + ${cf_cv_main_return:-return}(0); } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18086: \"$ac_link\"") >&5 +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:19228: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18089: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18092: \"$ac_try\"") >&5 + echo "$as_me:19231: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:19233: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18095: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_connect=yes + echo "$as_me:19236: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + + cf_cv_ncurses_version=`cat $cf_tempfile` else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_connect=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:18105: result: $ac_cv_func_connect" >&5 -echo "${ECHO_T}$ac_cv_func_connect" >&6 + rm -f "$cf_tempfile" - if test $ac_cv_func_connect = no; then - echo "$as_me:18109: checking for connect in -lsocket" >&5 -echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 -if test "${ac_cv_lib_socket_connect+set}" = set; then +fi +echo "$as_me:19250: result: $cf_cv_ncurses_version" >&5 +echo "${ECHO_T}$cf_cv_ncurses_version" >&6 +test "$cf_cv_ncurses_version" = no || +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +cf_nculib_root=$cf_cv_screen + # This works, except for the special case where we find gpm, but + # ncurses is in a nonstandard location via $LIBS, and we really want + # to link gpm. +cf_ncurses_LIBS="" +cf_ncurses_SAVE="$LIBS" +echo "$as_me:19263: checking for Gpm_Open in -lgpm" >&5 +echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 +if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 18117 "configure" +LIBS="-lgpm $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 19271 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char connect (); +char Gpm_Open (); int main (void) { -connect (); +Gpm_Open (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18136: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19290: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18139: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18142: \"$ac_try\"") >&5 + echo "$as_me:19293: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19296: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18145: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_socket_connect=yes + echo "$as_me:19299: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_socket_connect=no +cat "conftest.$ac_ext" >&5 +ac_cv_lib_gpm_Gpm_Open=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:18156: result: $ac_cv_lib_socket_connect" >&5 -echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 -if test $ac_cv_lib_socket_connect = yes; then - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" -fi - - fi - - # Guillermo Gomez says -lposix is necessary on A/UX. - echo "$as_me:18165: checking for remove" >&5 -echo $ECHO_N "checking for remove... $ECHO_C" >&6 -if test "${ac_cv_func_remove+set}" = set; then +echo "$as_me:19310: result: $ac_cv_lib_gpm_Gpm_Open" >&5 +echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 +if test "$ac_cv_lib_gpm_Gpm_Open" = yes; then + echo "$as_me:19313: checking for initscr in -lgpm" >&5 +echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 +if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 18171 "configure" + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgpm $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 19321 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char remove (); below. */ -#include <assert.h> + /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char remove (); -char (*f) (); - +char initscr (); int main (void) { -/* 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_remove) || defined (__stub___remove) -choke me -#else -f = remove; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; -#endif - +initscr (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18202: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19340: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18205: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18208: \"$ac_try\"") >&5 + echo "$as_me:19343: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19346: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18211: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_remove=yes + echo "$as_me:19349: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_remove=no +cat "conftest.$ac_ext" >&5 +ac_cv_lib_gpm_initscr=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:19360: result: $ac_cv_lib_gpm_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 +if test "$ac_cv_lib_gpm_initscr" = yes; then + LIBS="$cf_ncurses_SAVE" +else + cf_ncurses_LIBS="-lgpm" fi -echo "$as_me:18221: result: $ac_cv_func_remove" >&5 -echo "${ECHO_T}$ac_cv_func_remove" >&6 - if test $ac_cv_func_remove = no; then - echo "$as_me:18225: checking for remove in -lposix" >&5 -echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 -if test "${ac_cv_lib_posix_remove+set}" = set; then +fi + +case "$host_os" in +(freebsd*) + # This is only necessary if you are linking against an obsolete + # version of ncurses (but it should do no harm, since it's static). + if test "$cf_nculib_root" = ncurses ; then + echo "$as_me:19375: checking for tgoto in -lmytinfo" >&5 +echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 +if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 18233 "configure" +LIBS="-lmytinfo $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 19383 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char remove (); +char tgoto (); int main (void) { -remove (); +tgoto (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18252: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19402: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18255: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18258: \"$ac_try\"") >&5 + echo "$as_me:19405: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19408: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18261: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_posix_remove=yes + echo "$as_me:19411: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_posix_remove=no +cat "conftest.$ac_ext" >&5 +ac_cv_lib_mytinfo_tgoto=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:18272: result: $ac_cv_lib_posix_remove" >&5 -echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 -if test $ac_cv_lib_posix_remove = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +echo "$as_me:19422: result: $ac_cv_lib_mytinfo_tgoto" >&5 +echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 +if test "$ac_cv_lib_mytinfo_tgoto" = yes; then + cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi - fi + fi + ;; +esac - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - echo "$as_me:18281: checking for shmat" >&5 -echo $ECHO_N "checking for shmat... $ECHO_C" >&6 -if test "${ac_cv_func_shmat+set}" = set; then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_ncurses_LIBS; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + +if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" +then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -l$cf_nculib_root; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + +else + + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=no' + cf_libdir="" + echo "$as_me:19471: checking for initscr" >&5 +echo $ECHO_N "checking for initscr... $ECHO_C" >&6 +if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 18287 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 19477 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shmat (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ +#define initscr autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef initscr + #ifdef __cplusplus extern "C" #endif + /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char shmat (); -char (*f) (); +char initscr (void); int main (void) { -/* The GNU C library defines this for functions which it implements + +/* The GNU C library defines stubs 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_shmat) || defined (__stub___shmat) -choke me -#else -f = shmat; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +#if defined (__stub_initscr) || defined (__stub___initscr) +#error found stub for initscr #endif + return initscr (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18318: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19508: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18321: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18324: \"$ac_try\"") >&5 + echo "$as_me:19511: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19514: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18327: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shmat=yes + echo "$as_me:19517: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_func_shmat=no +cat "conftest.$ac_ext" >&5 +ac_cv_func_initscr=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:18337: result: $ac_cv_func_shmat" >&5 -echo "${ECHO_T}$ac_cv_func_shmat" >&6 - - if test $ac_cv_func_shmat = no; then - echo "$as_me:18341: checking for shmat in -lipc" >&5 -echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 -if test "${ac_cv_lib_ipc_shmat+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +echo "$as_me:19527: result: $ac_cv_func_initscr" >&5 +echo "${ECHO_T}$ac_cv_func_initscr" >&6 +if test "$ac_cv_func_initscr" = yes; then + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=yes' else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 18349 "configure" + + cf_save_LIBS="$LIBS" + echo "$as_me:19534: checking for initscr in -l$cf_nculib_root" >&5 +echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 + LIBS="-l$cf_nculib_root $LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 19538 "configure" #include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19550: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:19553: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19556: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:19559: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + echo "$as_me:19561: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=yes' -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shmat (); +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +echo "$as_me:19568: result: no" >&5 +echo "${ECHO_T}no" >&6 + +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case "$cf_library_path" in + (-L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + +test "x$cf_library_path" != "xNONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d "$cf_library_path/lib" && cf_search="$cf_search $cf_library_path/lib" + test -d "$cf_library_path/lib/$cf_nculib_root" && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" + test -d "$cf_library_path/lib/$cf_nculib_root/lib" && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" + test -d "$cf_library_path/$cf_nculib_root/lib" && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" + test -d "$cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" +} + + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done +fi + +cf_search= + +test "x$prefix" != "xNONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib" + test -d "$prefix/lib/$cf_nculib_root" && cf_search="$cf_search $prefix/lib/$cf_nculib_root" + test -d "$prefix/lib/$cf_nculib_root/lib" && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" + test -d "$prefix/$cf_nculib_root/lib" && cf_search="$cf_search $prefix/$cf_nculib_root/lib" + test -d "$prefix/$cf_nculib_root/lib/$cf_nculib_root" && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" +} + +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do + +test "x$cf_subdir_prefix" != "x$prefix" && \ +test -d "$cf_subdir_prefix" && \ +{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" + test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib" + test -d "$cf_subdir_prefix/lib/$cf_nculib_root" && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" + test -d "$cf_subdir_prefix/lib/$cf_nculib_root/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" + test -d "$cf_subdir_prefix/$cf_nculib_root/lib" && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" + test -d "$cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" +} + +done + +cf_search="$cf_library_path_list $cf_search" + + for cf_libdir in $cf_search + do + echo "$as_me:19636: checking for -l$cf_nculib_root in $cf_libdir" >&5 +echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 + LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" + cat >"conftest.$ac_ext" <<_ACEOF +#line 19640 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -shmat (); +initscr() ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18368: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19652: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18371: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18374: \"$ac_try\"") >&5 + echo "$as_me:19655: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19658: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18377: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_ipc_shmat=yes + echo "$as_me:19661: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + echo "$as_me:19663: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + eval 'cf_cv_have_lib_'"$cf_nculib_root"'=yes' + break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_ipc_shmat=no +cat "conftest.$ac_ext" >&5 +echo "$as_me:19670: result: no" >&5 +echo "${ECHO_T}no" >&6 + LIBS="$cf_save_LIBS" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + done + fi -echo "$as_me:18388: result: $ac_cv_lib_ipc_shmat" >&5 -echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 -if test $ac_cv_lib_ipc_shmat = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + fi - fi - fi +eval 'cf_found_library="$cf_cv_have_lib_'"$cf_nculib_root"\" - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS=$LDFLAGS - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # John Interrante, Karl Berry - echo "$as_me:18406: checking for IceConnectionNumber in -lICE" >&5 -echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 -if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 18414 "configure" -#include "confdefs.h" +if test "$cf_found_library" = no ; then + { { echo "$as_me:19685: error: Cannot link $cf_nculib_root library" >&5 +echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} + { (exit 1); exit 1; }; } +fi -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char IceConnectionNumber (); +fi + +if test -n "$cf_ncurses_LIBS" ; then + echo "$as_me:19693: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 +echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 + cf_ncurses_SAVE="$LIBS" + for p in $cf_ncurses_LIBS ; do + q=`echo "$LIBS" | sed -e "s%$p %%" -e "s%$p$%%"` + if test "$q" != "$LIBS" ; then + LIBS="$q" + fi + done + cat >"conftest.$ac_ext" <<_ACEOF +#line 19703 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -IceConnectionNumber (); +initscr(); mousemask(0,0); tigetstr((char *)0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18433: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:19715: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18436: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18439: \"$ac_try\"") >&5 + echo "$as_me:19718: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:19721: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18442: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_ICE_IceConnectionNumber=yes + echo "$as_me:19724: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + echo "$as_me:19726: result: yes" >&5 +echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_ICE_IceConnectionNumber=no -fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +cat "conftest.$ac_ext" >&5 +echo "$as_me:19731: result: no" >&5 +echo "${ECHO_T}no" >&6 + LIBS="$cf_ncurses_SAVE" fi -echo "$as_me:18453: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 -if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi - LDFLAGS=$ac_save_LDFLAGS +cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + +cat >>confdefs.h <<EOF +#define $cf_nculib_ROOT 1 +EOF + fi +else + NCURSES_CONFIG=none fi + ;; +(pdcurses) + cf_x_athena=${cf_x_athena:-Xaw} -echo "$as_me:18465: checking if you want to link with Xaw 3d library" >&5 +echo "$as_me:19754: checking if you want to link with Xaw 3d library" >&5 echo $ECHO_N "checking if you want to link with Xaw 3d library... $ECHO_C" >&6 withval= # Check whether --with-Xaw3d or --without-Xaw3d was given. if test "${with_Xaw3d+set}" = set; then withval="$with_Xaw3d" fi; if test "$withval" = yes ; then cf_x_athena=Xaw3d - echo "$as_me:18476: result: yes" >&5 + echo "$as_me:19765: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:18479: result: no" >&5 + echo "$as_me:19768: result: no" >&5 echo "${ECHO_T}no" >&6 fi -echo "$as_me:18483: checking if you want to link with Xaw 3d xft library" >&5 +echo "$as_me:19772: checking if you want to link with Xaw 3d xft library" >&5 echo $ECHO_N "checking if you want to link with Xaw 3d xft library... $ECHO_C" >&6 withval= # Check whether --with-Xaw3dxft or --without-Xaw3dxft was given. if test "${with_Xaw3dxft+set}" = set; then withval="$with_Xaw3dxft" fi; if test "$withval" = yes ; then cf_x_athena=Xaw3dxft - echo "$as_me:18494: result: yes" >&5 + echo "$as_me:19783: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:18497: result: no" >&5 + echo "$as_me:19786: result: no" >&5 echo "${ECHO_T}no" >&6 fi -echo "$as_me:18501: checking if you want to link with neXT Athena library" >&5 +echo "$as_me:19790: checking if you want to link with neXT Athena library" >&5 echo $ECHO_N "checking if you want to link with neXT Athena library... $ECHO_C" >&6 withval= # Check whether --with-neXtaw or --without-neXtaw was given. if test "${with_neXtaw+set}" = set; then withval="$with_neXtaw" fi; if test "$withval" = yes ; then cf_x_athena=neXtaw - echo "$as_me:18512: result: yes" >&5 + echo "$as_me:19801: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:18515: result: no" >&5 + echo "$as_me:19804: result: no" >&5 echo "${ECHO_T}no" >&6 fi -echo "$as_me:18519: checking if you want to link with Athena-Plus library" >&5 +echo "$as_me:19808: checking if you want to link with Athena-Plus library" >&5 echo $ECHO_N "checking if you want to link with Athena-Plus library... $ECHO_C" >&6 withval= # Check whether --with-XawPlus or --without-XawPlus was given. if test "${with_XawPlus+set}" = set; then withval="$with_XawPlus" fi; if test "$withval" = yes ; then cf_x_athena=XawPlus - echo "$as_me:18530: result: yes" >&5 + echo "$as_me:19819: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:18533: result: no" >&5 + echo "$as_me:19822: result: no" >&5 echo "${ECHO_T}no" >&6 fi cf_x_athena_lib="" if test "$PKG_CONFIG" != none ; then cf_athena_list= test "$cf_x_athena" = Xaw && cf_athena_list="xaw8 xaw7 xaw6" for cf_athena_pkg in \ $cf_athena_list \ ${cf_x_athena} \ ${cf_x_athena}-devel \ lib${cf_x_athena} \ lib${cf_x_athena}-devel do -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists $cf_athena_pkg; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$cf_athena_pkg"; then test -n "$verbose" && echo " found package $cf_athena_pkg" 1>&6 -echo "${as_me:-configure}:18553: testing found package $cf_athena_pkg ..." 1>&5 +echo "${as_me:-configure}:19842: testing found package $cf_athena_pkg ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags $cf_athena_pkg 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs $cf_athena_pkg 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "$cf_athena_pkg" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "$cf_athena_pkg" 2>/dev/null`" test -n "$verbose" && echo " package $cf_athena_pkg CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:18559: testing package $cf_athena_pkg CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:19848: testing package $cf_athena_pkg CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package $cf_athena_pkg LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:18563: testing package $cf_athena_pkg LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:19852: testing package $cf_athena_pkg LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" cf_x_athena_lib="$cf_pkgconfig_libs" cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <<EOF #define $cf_x_athena_LIBS 1 EOF for cf_trim_lib in Xmu Xt X11 do case "$LIBS" in (*-l$cf_trim_lib\ *-l$cf_trim_lib*) LIBS=`echo "$LIBS " | sed -e 's/ / /g' -e 's%-l'"$cf_trim_lib"' %%' -e 's/ $//'` test -n "$verbose" && echo " ..trimmed $LIBS" 1>&6 -echo "${as_me:-configure}:18694: testing ..trimmed $LIBS ..." 1>&5 +echo "${as_me:-configure}:19983: testing ..trimmed $LIBS ..." 1>&5 ;; esac done -echo "$as_me:18700: checking for usable $cf_x_athena/Xmu package" >&5 +echo "$as_me:19989: checking for usable $cf_x_athena/Xmu package" >&5 echo $ECHO_N "checking for usable $cf_x_athena/Xmu package... $ECHO_C" >&6 if test "${cf_cv_xaw_compat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cat >conftest.$ac_ext <<_ACEOF -#line 18707 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 19996 "configure" #include "confdefs.h" #include <X11/Xmu/CharSet.h> int main (void) { -int check = XmuCompareISOLatin1("big", "small") +int check = XmuCompareISOLatin1("big", "small"); +(void)check; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:18723: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:20013: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:18726: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:18729: \"$ac_try\"") >&5 + echo "$as_me:20016: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:20019: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:18732: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:20022: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xaw_compat=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_xaw_compat=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:18742: result: $cf_cv_xaw_compat" >&5 +echo "$as_me:20032: result: $cf_cv_xaw_compat" >&5 echo "${ECHO_T}$cf_cv_xaw_compat" >&6 if test "$cf_cv_xaw_compat" = no then # workaround for broken ".pc" files... case "$cf_x_athena_lib" in (*-lXmu*) ;; (*) test -n "$verbose" && echo " work around broken package" 1>&6 -echo "${as_me:-configure}:18754: testing work around broken package ..." 1>&5 +echo "${as_me:-configure}:20044: testing work around broken package ..." 1>&5 cf_save_xmu="$LIBS" cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^ *//' -e 's/ .*//'` -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists xmu; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "xmu"; then test -n "$verbose" && echo " found package xmu" 1>&6 -echo "${as_me:-configure}:18762: testing found package xmu ..." 1>&5 +echo "${as_me:-configure}:20052: testing found package xmu ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags xmu 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs xmu 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "xmu" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "xmu" 2>/dev/null`" test -n "$verbose" && echo " package xmu CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:18768: testing package xmu CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:20058: testing package xmu CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package xmu LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:18772: testing package xmu LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:20062: testing package xmu LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" LIBS="$cf_save_xmu" test -n "$verbose" && echo " ...before $LIBS" 1>&6 -echo "${as_me:-configure}:18892: testing ...before $LIBS ..." 1>&5 +echo "${as_me:-configure}:20182: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%$cf_first_lib %$cf_first_lib $cf_pkgconfig_libs %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 -echo "${as_me:-configure}:18897: testing ...after $LIBS ..." 1>&5 +echo "${as_me:-configure}:20187: testing ...after $LIBS ..." 1>&5 else cf_pkgconfig_incs= cf_pkgconfig_libs= test -n "$verbose" && echo " ...before $LIBS" 1>&6 -echo "${as_me:-configure}:18905: testing ...before $LIBS ..." 1>&5 +echo "${as_me:-configure}:20195: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%$cf_first_lib %$cf_first_lib -lXmu %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 -echo "${as_me:-configure}:18910: testing ...after $LIBS ..." 1>&5 +echo "${as_me:-configure}:20200: testing ...after $LIBS ..." 1>&5 fi for cf_trim_lib in Xmu Xt X11 do case "$LIBS" in (*-l$cf_trim_lib\ *-l$cf_trim_lib*) LIBS=`echo "$LIBS " | sed -e 's/ / /g' -e 's%-l'"$cf_trim_lib"' %%' -e 's/ $//'` test -n "$verbose" && echo " ..trimmed $LIBS" 1>&6 -echo "${as_me:-configure}:18921: testing ..trimmed $LIBS ..." 1>&5 +echo "${as_me:-configure}:20211: testing ..trimmed $LIBS ..." 1>&5 ;; esac done ;; esac fi break else cf_pkgconfig_incs= cf_pkgconfig_libs= : fi done fi if test -z "$cf_x_athena_lib" ; then -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists Xext; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "Xext"; then test -n "$verbose" && echo " found package Xext" 1>&6 -echo "${as_me:-configure}:18946: testing found package Xext ..." 1>&5 +echo "${as_me:-configure}:20236: testing found package Xext ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags Xext 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs Xext 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "Xext" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "Xext" 2>/dev/null`" test -n "$verbose" && echo " package Xext CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:18952: testing package Xext CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:20242: testing package Xext CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package Xext LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:18956: testing package Xext LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:20246: testing package Xext LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= - echo "$as_me:19077: checking for XextCreateExtension in -lXext" >&5 + echo "$as_me:20367: checking for XextCreateExtension in -lXext" >&5 echo $ECHO_N "checking for XextCreateExtension in -lXext... $ECHO_C" >&6 if test "${ac_cv_lib_Xext_XextCreateExtension+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 19085 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 20375 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XextCreateExtension (); int main (void) { XextCreateExtension (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:19104: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:20394: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:19107: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:19110: \"$ac_try\"") >&5 + echo "$as_me:20397: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:20400: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:19113: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:20403: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_lib_Xext_XextCreateExtension=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_lib_Xext_XextCreateExtension=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:19124: result: $ac_cv_lib_Xext_XextCreateExtension" >&5 +echo "$as_me:20414: result: $ac_cv_lib_Xext_XextCreateExtension" >&5 echo "${ECHO_T}$ac_cv_lib_Xext_XextCreateExtension" >&6 -if test $ac_cv_lib_Xext_XextCreateExtension = yes; then - -cf_add_libs="-lXext" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +if test "$ac_cv_lib_Xext_XextCreateExtension" = yes; then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lXext; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" fi fi -# OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new), and (and +# OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new) (and # in some cases has installed dummy files in the former, other cases replaced # it with a link to the new location). This complicates the configure script. # Check for that pitfall, and recover using pkg-config # # If none of these are set, the configuration is almost certainly broken. if test -z "${X_CFLAGS}${X_PRE_LIBS}${X_LIBS}${X_EXTRA_LIBS}" then -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists x11; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "x11"; then test -n "$verbose" && echo " found package x11" 1>&6 -echo "${as_me:-configure}:19160: testing found package x11 ..." 1>&5 +echo "${as_me:-configure}:20450: testing found package x11 ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags x11 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs x11 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "x11" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "x11" 2>/dev/null`" test -n "$verbose" && echo " package x11 CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:19166: testing package x11 CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:20456: testing package x11 CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package x11 LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:19170: testing package x11 LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:20460: testing package x11 LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= - { echo "$as_me:19290: WARNING: unable to find X11 library" >&5 + { echo "$as_me:20580: WARNING: unable to find X11 library" >&5 echo "$as_me: WARNING: unable to find X11 library" >&2;} fi -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists ice; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "ice"; then test -n "$verbose" && echo " found package ice" 1>&6 -echo "${as_me:-configure}:19297: testing found package ice ..." 1>&5 +echo "${as_me:-configure}:20587: testing found package ice ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags ice 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs ice 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "ice" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "ice" 2>/dev/null`" test -n "$verbose" && echo " package ice CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:19303: testing package ice CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:20593: testing package ice CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package ice LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:19307: testing package ice LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:20597: testing package ice LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= - { echo "$as_me:19427: WARNING: unable to find ICE library" >&5 + { echo "$as_me:20717: WARNING: unable to find ICE library" >&5 echo "$as_me: WARNING: unable to find ICE library" >&2;} fi -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists sm; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "sm"; then test -n "$verbose" && echo " found package sm" 1>&6 -echo "${as_me:-configure}:19434: testing found package sm ..." 1>&5 +echo "${as_me:-configure}:20724: testing found package sm ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags sm 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs sm 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "sm" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "sm" 2>/dev/null`" test -n "$verbose" && echo " package sm CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:19440: testing package sm CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:20730: testing package sm CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package sm LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:19444: testing package sm LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:20734: testing package sm LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= - { echo "$as_me:19564: WARNING: unable to find SM library" >&5 + { echo "$as_me:20854: WARNING: unable to find SM library" >&5 echo "$as_me: WARNING: unable to find SM library" >&2;} fi -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists xt; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "xt"; then test -n "$verbose" && echo " found package xt" 1>&6 -echo "${as_me:-configure}:19571: testing found package xt ..." 1>&5 +echo "${as_me:-configure}:20861: testing found package xt ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags xt 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs xt 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "xt" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "xt" 2>/dev/null`" test -n "$verbose" && echo " package xt CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:19577: testing package xt CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:20867: testing package xt CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package xt LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:19581: testing package xt LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:20871: testing package xt LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= - { echo "$as_me:19701: WARNING: unable to find Xt library" >&5 + { echo "$as_me:20991: WARNING: unable to find Xt library" >&5 echo "$as_me: WARNING: unable to find Xt library" >&2;} fi +else + LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS" fi cf_have_X_LIBS=no -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists xt; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "xt"; then test -n "$verbose" && echo " found package xt" 1>&6 -echo "${as_me:-configure}:19712: testing found package xt ..." 1>&5 +echo "${as_me:-configure}:21004: testing found package xt ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags xt 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs xt 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "xt" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "xt" 2>/dev/null`" test -n "$verbose" && echo " package xt CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:19718: testing package xt CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:21010: testing package xt CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package xt LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:19722: testing package xt LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:21014: testing package xt LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" case "x$LIBS" in (*-lX11*) ;; (*) # we have an "xt" package, but it may omit Xt's dependency on X11 -echo "$as_me:19843: checking for usable X dependency" >&5 +echo "$as_me:21135: checking for usable X dependency" >&5 echo $ECHO_N "checking for usable X dependency... $ECHO_C" >&6 if test "${cf_cv_xt_x11_compat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cat >conftest.$ac_ext <<_ACEOF -#line 19850 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 21142 "configure" #include "confdefs.h" #include <X11/Xlib.h> int main (void) { int rc1 = XDrawLine((Display*) 0, (Drawable) 0, (GC) 0, 0, 0, 0, 0); int rc2 = XClearWindow((Display*) 0, (Window) 0); int rc3 = XMoveWindow((Display*) 0, (Window) 0, 0, 0); int rc4 = XMoveResizeWindow((Display*)0, (Window)0, 0, 0, 0, 0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:19869: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:21161: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:19872: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:19875: \"$ac_try\"") >&5 + echo "$as_me:21164: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:21167: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:19878: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:21170: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xt_x11_compat=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_xt_x11_compat=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:19888: result: $cf_cv_xt_x11_compat" >&5 +echo "$as_me:21180: result: $cf_cv_xt_x11_compat" >&5 echo "${ECHO_T}$cf_cv_xt_x11_compat" >&6 if test "$cf_cv_xt_x11_compat" = no then test -n "$verbose" && echo " work around broken X11 dependency" 1>&6 -echo "${as_me:-configure}:19894: testing work around broken X11 dependency ..." 1>&5 +echo "${as_me:-configure}:21186: testing work around broken X11 dependency ..." 1>&5 # 2010/11/19 - good enough until a working Xt on Xcb is delivered. -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists x11; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "x11"; then test -n "$verbose" && echo " found package x11" 1>&6 -echo "${as_me:-configure}:19901: testing found package x11 ..." 1>&5 +echo "${as_me:-configure}:21193: testing found package x11 ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags x11 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs x11 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "x11" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "x11" 2>/dev/null`" test -n "$verbose" && echo " package x11 CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:19907: testing package x11 CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:21199: testing package x11 CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package x11 LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:19911: testing package x11 LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:21203: testing package x11 LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= test -n "$verbose" && echo " ...before $LIBS" 1>&6 -echo "${as_me:-configure}:20034: testing ...before $LIBS ..." 1>&5 +echo "${as_me:-configure}:21326: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%-lXt %-lXt -lX11 %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 -echo "${as_me:-configure}:20039: testing ...after $LIBS ..." 1>&5 +echo "${as_me:-configure}:21331: testing ...after $LIBS ..." 1>&5 fi fi ;; esac -echo "$as_me:20047: checking for usable X Toolkit package" >&5 +echo "$as_me:21339: checking for usable X Toolkit package" >&5 echo $ECHO_N "checking for usable X Toolkit package... $ECHO_C" >&6 if test "${cf_cv_xt_ice_compat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cat >conftest.$ac_ext <<_ACEOF -#line 20054 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 21346 "configure" #include "confdefs.h" #include <X11/Shell.h> int main (void) { -int num = IceConnectionNumber(0) +int num = IceConnectionNumber(0); (void) num ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20069: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:21361: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20072: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20075: \"$ac_try\"") >&5 + echo "$as_me:21364: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:21367: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20078: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:21370: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_xt_ice_compat=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_xt_ice_compat=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:20088: result: $cf_cv_xt_ice_compat" >&5 +echo "$as_me:21380: result: $cf_cv_xt_ice_compat" >&5 echo "${ECHO_T}$cf_cv_xt_ice_compat" >&6 if test "$cf_cv_xt_ice_compat" = no then # workaround for broken ".pc" files used for X Toolkit. case "x$X_PRE_LIBS" in (*-lICE*) case "x$LIBS" in (*-lICE*) ;; (*) test -n "$verbose" && echo " work around broken ICE dependency" 1>&6 -echo "${as_me:-configure}:20102: testing work around broken ICE dependency ..." 1>&5 +echo "${as_me:-configure}:21394: testing work around broken ICE dependency ..." 1>&5 -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists ice; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "ice"; then test -n "$verbose" && echo " found package ice" 1>&6 -echo "${as_me:-configure}:20107: testing found package ice ..." 1>&5 +echo "${as_me:-configure}:21399: testing found package ice ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags ice 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs ice 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "ice" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "ice" 2>/dev/null`" test -n "$verbose" && echo " package ice CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:20113: testing package ice CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:21405: testing package ice CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package ice LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:20117: testing package ice LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:21409: testing package ice LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" -if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists sm; then +if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "sm"; then test -n "$verbose" && echo " found package sm" 1>&6 -echo "${as_me:-configure}:20236: testing found package sm ..." 1>&5 +echo "${as_me:-configure}:21528: testing found package sm ..." 1>&5 - cf_pkgconfig_incs="`$PKG_CONFIG --cflags sm 2>/dev/null`" - cf_pkgconfig_libs="`$PKG_CONFIG --libs sm 2>/dev/null`" + cf_pkgconfig_incs="`$PKG_CONFIG --cflags "sm" 2>/dev/null`" + cf_pkgconfig_libs="`$PKG_CONFIG --libs "sm" 2>/dev/null`" test -n "$verbose" && echo " package sm CFLAGS: $cf_pkgconfig_incs" 1>&6 -echo "${as_me:-configure}:20242: testing package sm CFLAGS: $cf_pkgconfig_incs ..." 1>&5 +echo "${as_me:-configure}:21534: testing package sm CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package sm LIBS: $cf_pkgconfig_libs" 1>&6 -echo "${as_me:-configure}:20246: testing package sm LIBS: $cf_pkgconfig_libs ..." 1>&5 +echo "${as_me:-configure}:21538: testing package sm LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" -fi - -cf_add_libs="$cf_pkgconfig_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +fi + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= : fi else cf_pkgconfig_incs= cf_pkgconfig_libs= test -n "$verbose" && echo " ...before $LIBS" 1>&6 -echo "${as_me:-configure}:20375: testing ...before $LIBS ..." 1>&5 +echo "${as_me:-configure}:21667: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%-lXt %-lXt $X_PRE_LIBS %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 -echo "${as_me:-configure}:20380: testing ...after $LIBS ..." 1>&5 +echo "${as_me:-configure}:21672: testing ...after $LIBS ..." 1>&5 fi ;; esac ;; esac fi cf_have_X_LIBS=yes else cf_pkgconfig_incs= cf_pkgconfig_libs= LDFLAGS="$X_LIBS $LDFLAGS" test -n "$verbose" && echo " checking additions to CFLAGS" 1>&6 -echo "${as_me:-configure}:20400: testing checking additions to CFLAGS ..." 1>&5 +echo "${as_me:-configure}:21692: testing checking additions to CFLAGS ..." 1>&5 cf_check_cflags="$CFLAGS" cf_check_cppflags="$CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $X_CFLAGS do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 -echo "${as_me:-configure}:20485: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 +echo "${as_me:-configure}:21777: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 -echo "${as_me:-configure}:20495: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 +echo "${as_me:-configure}:21787: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 -echo "${as_me:-configure}:20505: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 +echo "${as_me:-configure}:21797: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi if test "x$cf_check_cflags" != "x$CFLAGS" ; then -cat >conftest.$ac_ext <<_ACEOF -#line 20514 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 21806 "configure" #include "confdefs.h" #include <stdio.h> int main (void) { printf("Hello world"); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20526: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:21818: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20529: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20532: \"$ac_try\"") >&5 + echo "$as_me:21821: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:21824: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20535: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:21827: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 test -n "$verbose" && echo " test-compile failed. Undoing change to \$CFLAGS" 1>&6 -echo "${as_me:-configure}:20543: testing test-compile failed. Undoing change to \$CFLAGS ..." 1>&5 +echo "${as_me:-configure}:21835: testing test-compile failed. Undoing change to \$CFLAGS ..." 1>&5 if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then test -n "$verbose" && echo " but keeping change to \$CPPFLAGS" 1>&6 -echo "${as_me:-configure}:20548: testing but keeping change to \$CPPFLAGS ..." 1>&5 +echo "${as_me:-configure}:21840: testing but keeping change to \$CPPFLAGS ..." 1>&5 fi - CFLAGS="$cf_check_flags" + CFLAGS="$cf_check_cflags" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi - echo "$as_me:20556: checking for XOpenDisplay" >&5 + echo "$as_me:21848: checking for XOpenDisplay" >&5 echo $ECHO_N "checking for XOpenDisplay... $ECHO_C" >&6 if test "${ac_cv_func_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 20562 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 21854 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char XOpenDisplay (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ +#define XOpenDisplay autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef XOpenDisplay + #ifdef __cplusplus extern "C" #endif + /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XOpenDisplay (); -char (*f) (); +char XOpenDisplay (void); int main (void) { -/* The GNU C library defines this for functions which it implements + +/* The GNU C library defines stubs 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_XOpenDisplay) || defined (__stub___XOpenDisplay) -choke me -#else -f = XOpenDisplay; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +#error found stub for XOpenDisplay #endif + return XOpenDisplay (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20593: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:21885: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20596: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20599: \"$ac_try\"") >&5 + echo "$as_me:21888: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:21891: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20602: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:21894: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_func_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_func_XOpenDisplay=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:20612: result: $ac_cv_func_XOpenDisplay" >&5 +echo "$as_me:21904: result: $ac_cv_func_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_func_XOpenDisplay" >&6 -if test $ac_cv_func_XOpenDisplay = yes; then +if test "$ac_cv_func_XOpenDisplay" = yes; then : else - echo "$as_me:20618: checking for XOpenDisplay in -lX11" >&5 + echo "$as_me:21910: checking for XOpenDisplay in -lX11" >&5 echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6 if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 20626 "configure" +LIBS="-lX11 $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 21918 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main (void) { XOpenDisplay (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20645: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:21937: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20648: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20651: \"$ac_try\"") >&5 + echo "$as_me:21940: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:21943: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20654: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:21946: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_lib_X11_XOpenDisplay=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:20665: result: $ac_cv_lib_X11_XOpenDisplay" >&5 +echo "$as_me:21957: result: $ac_cv_lib_X11_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6 -if test $ac_cv_lib_X11_XOpenDisplay = yes; then - -cf_add_libs="-lX11" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +if test "$ac_cv_lib_X11_XOpenDisplay" = yes; then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lX11; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" fi fi - echo "$as_me:20689: checking for XtAppInitialize" >&5 + echo "$as_me:21981: checking for XtAppInitialize" >&5 echo $ECHO_N "checking for XtAppInitialize... $ECHO_C" >&6 if test "${ac_cv_func_XtAppInitialize+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 20695 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 21987 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char XtAppInitialize (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ +#define XtAppInitialize autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef XtAppInitialize + #ifdef __cplusplus extern "C" #endif + /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XtAppInitialize (); -char (*f) (); +char XtAppInitialize (void); int main (void) { -/* The GNU C library defines this for functions which it implements + +/* The GNU C library defines stubs 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_XtAppInitialize) || defined (__stub___XtAppInitialize) -choke me -#else -f = XtAppInitialize; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +#error found stub for XtAppInitialize #endif + return XtAppInitialize (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20726: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22018: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20729: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20732: \"$ac_try\"") >&5 + echo "$as_me:22021: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22024: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20735: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22027: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_func_XtAppInitialize=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_func_XtAppInitialize=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:20745: result: $ac_cv_func_XtAppInitialize" >&5 +echo "$as_me:22037: result: $ac_cv_func_XtAppInitialize" >&5 echo "${ECHO_T}$ac_cv_func_XtAppInitialize" >&6 -if test $ac_cv_func_XtAppInitialize = yes; then +if test "$ac_cv_func_XtAppInitialize" = yes; then : else - echo "$as_me:20751: checking for XtAppInitialize in -lXt" >&5 + echo "$as_me:22043: checking for XtAppInitialize in -lXt" >&5 echo $ECHO_N "checking for XtAppInitialize in -lXt... $ECHO_C" >&6 if test "${ac_cv_lib_Xt_XtAppInitialize+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 20759 "configure" +LIBS="-lXt $LIBS" +cat >"conftest.$ac_ext" <<_ACEOF +#line 22051 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XtAppInitialize (); int main (void) { XtAppInitialize (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20778: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22070: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20781: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20784: \"$ac_try\"") >&5 + echo "$as_me:22073: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22076: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20787: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22079: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_lib_Xt_XtAppInitialize=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_lib_Xt_XtAppInitialize=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:20798: result: $ac_cv_lib_Xt_XtAppInitialize" >&5 +echo "$as_me:22090: result: $ac_cv_lib_Xt_XtAppInitialize" >&5 echo "${ECHO_T}$ac_cv_lib_Xt_XtAppInitialize" >&6 -if test $ac_cv_lib_Xt_XtAppInitialize = yes; then +if test "$ac_cv_lib_Xt_XtAppInitialize" = yes; then cat >>confdefs.h <<\EOF #define HAVE_LIBXT 1 EOF cf_have_X_LIBS=Xt - LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS" + LIBS="-lXt $LIBS" fi fi fi -if test $cf_have_X_LIBS = no ; then - { echo "$as_me:20815: WARNING: Unable to successfully link X Toolkit library (-lXt) with +if test "$cf_have_X_LIBS" = no ; then + { echo "$as_me:22107: WARNING: Unable to successfully link X Toolkit library (-lXt) with test program. You will have to check and add the proper libraries by hand to makefile." >&5 echo "$as_me: WARNING: Unable to successfully link X Toolkit library (-lXt) with test program. You will have to check and add the proper libraries by hand to makefile." >&2;} fi cf_x_athena_root=$cf_x_athena cf_x_athena_inc="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do if test -z "$cf_x_athena_inc" ; then - cf_save="$CPPFLAGS" + +cf_save_LIBS_CF_X_ATHENA_CPPFLAGS="$LIBS" +cf_save_CFLAGS_CF_X_ATHENA_CPPFLAGS="$CFLAGS" +cf_save_CPPFLAGS_CF_X_ATHENA_CPPFLAGS="$CPPFLAGS" +LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}" +for cf_X_CFLAGS in $X_CFLAGS +do + case "x$cf_X_CFLAGS" in + x-[IUD]*) + CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS" + ;; + *) + CFLAGS="$CFLAGS $cf_X_CFLAGS" + ;; + esac +done + cf_test=X11/$cf_x_athena_root/SimpleMenu.h - if test $cf_path != default ; then - CPPFLAGS="$cf_save" + if test "$cf_path" != default ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-I$cf_path/include" - echo "$as_me:20841: checking for $cf_test in $cf_path" >&5 + echo "$as_me:22148: checking for $cf_test in $cf_path" >&5 echo $ECHO_N "checking for $cf_test in $cf_path... $ECHO_C" >&6 else - echo "$as_me:20844: checking for $cf_test" >&5 + echo "$as_me:22151: checking for $cf_test" >&5 echo $ECHO_N "checking for $cf_test... $ECHO_C" >&6 fi - cat >conftest.$ac_ext <<_ACEOF -#line 20848 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 22155 "configure" #include "confdefs.h" #include <X11/Intrinsic.h> #include <$cf_test> int main (void) { ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:20862: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:22169: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:20865: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:20868: \"$ac_try\"") >&5 + echo "$as_me:22172: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:22175: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20871: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22178: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_result=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - echo "$as_me:20880: result: $cf_result" >&5 +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + echo "$as_me:22187: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 + +LIBS="$cf_save_LIBS_CF_X_ATHENA_CPPFLAGS" +CFLAGS="$cf_save_CFLAGS_CF_X_ATHENA_CPPFLAGS" +CPPFLAGS="$cf_save_CPPFLAGS_CF_X_ATHENA_CPPFLAGS" + if test "$cf_result" = yes ; then - cf_x_athena_inc=$cf_path + test "$cf_path" = default && cf_x_athena_inc=default + test "$cf_path" != default && cf_x_athena_inc="$cf_path/include" break - else - CPPFLAGS="$cf_save" fi fi done if test -z "$cf_x_athena_inc" ; then - { echo "$as_me:20892: WARNING: Unable to successfully find Athena header files with test program" >&5 -echo "$as_me: WARNING: Unable to successfully find Athena header files with test program" >&2;} + { echo "$as_me:22203: WARNING: Unable to find Athena header files" >&5 +echo "$as_me: WARNING: Unable to find Athena header files" >&2;} elif test "$cf_x_athena_inc" != default ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-I$cf_x_athena_inc" fi cf_x_athena_root=$cf_x_athena cf_x_athena_lib="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do for cf_lib in \ ${cf_x_athena_root} \ ${cf_x_athena_root}7 \ ${cf_x_athena_root}6 do for cf_libs in \ "-l$cf_lib -lXmu" \ "-l$cf_lib -lXpm -lXmu" \ "-l${cf_lib}_s -lXmu_s" do - if test -z "$cf_x_athena_lib" ; then - cf_save="$LIBS" - cf_test=XawSimpleMenuAddGlobalActions - if test $cf_path != default ; then - -cf_add_libs="-L$cf_path/lib $cf_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS + test -n "$cf_x_athena_lib" && break + +cf_save_LIBS_CF_X_ATHENA_LIBS="$LIBS" +cf_save_CFLAGS_CF_X_ATHENA_LIBS="$CFLAGS" +cf_save_CPPFLAGS_CF_X_ATHENA_LIBS="$CPPFLAGS" +LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}" +for cf_X_CFLAGS in $X_CFLAGS do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then - cf_add_1lib= - break - fi - done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + case "x$cf_X_CFLAGS" in + x-[IUD]*) + CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS" + ;; + *) + CFLAGS="$CFLAGS $cf_X_CFLAGS" + ;; + esac done -LIBS="$cf_add_libs" - - echo "$as_me:20941: checking for $cf_libs in $cf_path" >&5 -echo $ECHO_N "checking for $cf_libs in $cf_path... $ECHO_C" >&6 - else -cf_add_libs="$cf_libs" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then + cf_test=XawSimpleMenuAddGlobalActions + test "$cf_path" != default && cf_libs="-L$cf_path/lib $cf_libs" + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" - echo "$as_me:20961: checking for $cf_test in $cf_libs" >&5 + echo "$as_me:22268: checking for $cf_test in $cf_libs" >&5 echo $ECHO_N "checking for $cf_test in $cf_libs... $ECHO_C" >&6 - fi - cat >conftest.$ac_ext <<_ACEOF -#line 20965 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 22271 "configure" #include "confdefs.h" #include <X11/Intrinsic.h> #include <X11/$cf_x_athena_root/SimpleMenu.h> int main (void) { $cf_test((XtAppContext) 0) ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:20981: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22287: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:20984: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:20987: \"$ac_try\"") >&5 + echo "$as_me:22290: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22293: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:20990: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22296: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_result=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - echo "$as_me:20999: result: $cf_result" >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + echo "$as_me:22305: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 - if test "$cf_result" = yes ; then - cf_x_athena_lib="$cf_libs" - break - fi - LIBS="$cf_save" + +LIBS="$cf_save_LIBS_CF_X_ATHENA_LIBS" +CFLAGS="$cf_save_CFLAGS_CF_X_ATHENA_LIBS" +CPPFLAGS="$cf_save_CPPFLAGS_CF_X_ATHENA_LIBS" + + if test "$cf_result" = yes ; then + cf_x_athena_lib="$cf_libs" + break fi done # cf_libs test -n "$cf_x_athena_lib" && break done # cf_lib done if test -z "$cf_x_athena_lib" ; then - { { echo "$as_me:21013: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&5 + { { echo "$as_me:22322: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&5 echo "$as_me: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&2;} { (exit 1); exit 1; }; } fi +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in $cf_x_athena_lib; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then + cf_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" +done +LIBS="$cf_add_libs" + cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <<EOF #define $cf_x_athena_LIBS 1 EOF fi if test -n "$ac_tool_prefix"; then for ac_prog in xcurses-config 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 -echo "$as_me:21031: checking for $ac_word" >&5 +echo "$as_me:22356: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_XCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$XCURSES_CONFIG"; then ac_cv_prog_XCURSES_CONFIG="$XCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_XCURSES_CONFIG="$ac_tool_prefix$ac_prog" -echo "$as_me:21046: found $ac_dir/$ac_word" >&5 +echo "$as_me:22371: found $ac_dir/$ac_word" >&5 break done fi fi XCURSES_CONFIG=$ac_cv_prog_XCURSES_CONFIG if test -n "$XCURSES_CONFIG"; then - echo "$as_me:21054: result: $XCURSES_CONFIG" >&5 + echo "$as_me:22379: result: $XCURSES_CONFIG" >&5 echo "${ECHO_T}$XCURSES_CONFIG" >&6 else - echo "$as_me:21057: result: no" >&5 + echo "$as_me:22382: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$XCURSES_CONFIG" && break done fi if test -z "$XCURSES_CONFIG"; then ac_ct_XCURSES_CONFIG=$XCURSES_CONFIG for ac_prog in xcurses-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:21070: checking for $ac_word" >&5 +echo "$as_me:22395: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_XCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_XCURSES_CONFIG"; then ac_cv_prog_ac_ct_XCURSES_CONFIG="$ac_ct_XCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_XCURSES_CONFIG="$ac_prog" -echo "$as_me:21085: found $ac_dir/$ac_word" >&5 +echo "$as_me:22410: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_XCURSES_CONFIG=$ac_cv_prog_ac_ct_XCURSES_CONFIG if test -n "$ac_ct_XCURSES_CONFIG"; then - echo "$as_me:21093: result: $ac_ct_XCURSES_CONFIG" >&5 + echo "$as_me:22418: result: $ac_ct_XCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_XCURSES_CONFIG" >&6 else - echo "$as_me:21096: result: no" >&5 + echo "$as_me:22421: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_XCURSES_CONFIG" && break done test -n "$ac_ct_XCURSES_CONFIG" || ac_ct_XCURSES_CONFIG="none" XCURSES_CONFIG=$ac_ct_XCURSES_CONFIG fi if test "$XCURSES_CONFIG" != none ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in `$XCURSES_CONFIG --cflags` do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi -cf_add_libs="`$XCURSES_CONFIG --libs`" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in `$XCURSES_CONFIG --libs`; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" cf_cv_lib_XCurses=yes else LDFLAGS="$LDFLAGS $X_LIBS" test -n "$verbose" && echo " checking additions to CFLAGS" 1>&6 -echo "${as_me:-configure}:21231: testing checking additions to CFLAGS ..." 1>&5 +echo "${as_me:-configure}:22556: testing checking additions to CFLAGS ..." 1>&5 cf_check_cflags="$CFLAGS" cf_check_cppflags="$CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $X_CFLAGS do -case $cf_fix_cppflags in +case "$cf_fix_cppflags" in (no) - case $cf_add_cflags in + case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes - if test $cf_fix_cppflags = yes ; then + if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) - case $cf_add_cflags in + case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" - cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 -echo "${as_me:-configure}:21316: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 +echo "${as_me:-configure}:22641: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 -echo "${as_me:-configure}:21326: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 +echo "${as_me:-configure}:22651: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 -echo "${as_me:-configure}:21336: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 +echo "${as_me:-configure}:22661: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi if test "x$cf_check_cflags" != "x$CFLAGS" ; then -cat >conftest.$ac_ext <<_ACEOF -#line 21345 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 22670 "configure" #include "confdefs.h" #include <stdio.h> int main (void) { printf("Hello world"); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:21357: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22682: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:21360: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:21363: \"$ac_try\"") >&5 + echo "$as_me:22685: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22688: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21366: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22691: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 test -n "$verbose" && echo " test-compile failed. Undoing change to \$CFLAGS" 1>&6 -echo "${as_me:-configure}:21374: testing test-compile failed. Undoing change to \$CFLAGS ..." 1>&5 +echo "${as_me:-configure}:22699: testing test-compile failed. Undoing change to \$CFLAGS ..." 1>&5 if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then test -n "$verbose" && echo " but keeping change to \$CPPFLAGS" 1>&6 -echo "${as_me:-configure}:21379: testing but keeping change to \$CPPFLAGS ..." 1>&5 +echo "${as_me:-configure}:22704: testing but keeping change to \$CPPFLAGS ..." 1>&5 fi - CFLAGS="$cf_check_flags" + CFLAGS="$cf_check_cflags" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:21387: checking for XOpenDisplay in -lX11" >&5 +echo "$as_me:22712: checking for XOpenDisplay in -lX11" >&5 echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6 if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 21395 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 22720 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main (void) { XOpenDisplay (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:21414: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22739: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:21417: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:21420: \"$ac_try\"") >&5 + echo "$as_me:22742: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22745: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21423: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22748: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_lib_X11_XOpenDisplay=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:21434: result: $ac_cv_lib_X11_XOpenDisplay" >&5 +echo "$as_me:22759: result: $ac_cv_lib_X11_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6 -if test $ac_cv_lib_X11_XOpenDisplay = yes; then - -cf_add_libs="-lX11" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +if test "$ac_cv_lib_X11_XOpenDisplay" = yes; then + +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lX11; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" fi -echo "$as_me:21456: checking for XCurses library" >&5 +echo "$as_me:22781: checking for XCurses library" >&5 echo $ECHO_N "checking for XCurses library... $ECHO_C" >&6 if test "${cf_cv_lib_XCurses+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cf_add_libs="-lXCurses" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lXCurses; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" -cat >conftest.$ac_ext <<_ACEOF -#line 21479 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 22804 "configure" #include "confdefs.h" #include <xcurses.h> char *XCursesProgramName = "test"; int main (void) { XCursesExit(); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:21494: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22819: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:21497: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:21500: \"$ac_try\"") >&5 + echo "$as_me:22822: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22825: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21503: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22828: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_lib_XCurses=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_lib_XCurses=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:21514: result: $cf_cv_lib_XCurses" >&5 +echo "$as_me:22839: result: $cf_cv_lib_XCurses" >&5 echo "${ECHO_T}$cf_cv_lib_XCurses" >&6 fi -if test $cf_cv_lib_XCurses = yes ; then +if test "$cf_cv_lib_XCurses" = yes ; then cat >>confdefs.h <<\EOF #define UNIX 1 EOF cat >>confdefs.h <<\EOF #define XCURSES 1 EOF - echo "$as_me:21529: checking for xcurses.h" >&5 + echo "$as_me:22854: checking for xcurses.h" >&5 echo $ECHO_N "checking for xcurses.h... $ECHO_C" >&6 if test "${ac_cv_header_xcurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 21535 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 22860 "configure" #include "confdefs.h" #include <xcurses.h> _ACEOF -if { (eval echo "$as_me:21539: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:22864: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:21545: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:22870: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_xcurses_h=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 ac_cv_header_xcurses_h=no fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" fi -echo "$as_me:21564: result: $ac_cv_header_xcurses_h" >&5 +echo "$as_me:22889: result: $ac_cv_header_xcurses_h" >&5 echo "${ECHO_T}$ac_cv_header_xcurses_h" >&6 -if test $ac_cv_header_xcurses_h = yes; then +if test "$ac_cv_header_xcurses_h" = yes; then cat >>confdefs.h <<\EOF #define HAVE_XCURSES 1 EOF fi else - { { echo "$as_me:21575: error: Cannot link with XCurses" >&5 + { { echo "$as_me:22900: error: Cannot link with XCurses" >&5 echo "$as_me: error: Cannot link with XCurses" >&2;} { (exit 1); exit 1; }; } fi ;; (*) - { { echo "$as_me:21582: error: unexpected screen-value: $cf_cv_screen" >&5 + { { echo "$as_me:22907: error: unexpected screen-value: $cf_cv_screen" >&5 echo "$as_me: error: unexpected screen-value: $cf_cv_screen" >&2;} { (exit 1); exit 1; }; } ;; esac : ${cf_nculib_root:=$cf_cv_screen} as_ac_Lib=`echo "ac_cv_lib_$cf_nculib_root''__nc_init_pthreads" | $as_tr_sh` -echo "$as_me:21590: checking for _nc_init_pthreads in -l$cf_nculib_root" >&5 +echo "$as_me:22915: checking for _nc_init_pthreads in -l$cf_nculib_root" >&5 echo $ECHO_N "checking for _nc_init_pthreads in -l$cf_nculib_root... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_nculib_root $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 21598 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 22923 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _nc_init_pthreads (); int main (void) { _nc_init_pthreads (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:21617: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:22942: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:21620: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:21623: \"$ac_try\"") >&5 + echo "$as_me:22945: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:22948: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21626: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:22951: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 eval "$as_ac_Lib=no" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:21637: result: `eval echo '${'$as_ac_Lib'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 -if test `eval echo '${'$as_ac_Lib'}'` = yes; then +echo "$as_me:22962: result: `eval echo '${'"$as_ac_Lib"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Lib"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Lib"'}'`" = yes; then cf_cv_ncurses_pthreads=yes else cf_cv_ncurses_pthreads=no fi if test "$cf_cv_ncurses_pthreads" = yes then -cf_add_libs="-lpthread" -# Filter out duplicates - this happens with badly-designed ".pc" files... -for cf_add_1lib in $LIBS -do - for cf_add_2lib in $cf_add_libs - do - if test "x$cf_add_1lib" = "x$cf_add_2lib" - then +cf_add_libs="$LIBS" +# reverse order +cf_add_0lib= +for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done +# filter duplicates +for cf_add_1lib in $cf_add_0lib; do + for cf_add_2lib in $cf_add_libs; do + if test "x$cf_add_1lib" = "x$cf_add_2lib"; then cf_add_1lib= break fi done - test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs" done LIBS="$cf_add_libs" fi -echo "$as_me:21666: checking if curses supports wide characters" >&5 +echo "$as_me:22991: checking if curses supports wide characters" >&5 echo $ECHO_N "checking if curses supports wide characters... $ECHO_C" >&6 if test "${cf_cv_widec_curses+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cat >conftest.$ac_ext <<_ACEOF -#line 21673 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 22998 "configure" #include "confdefs.h" #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { wchar_t temp[2]; wchar_t wch = 'A'; temp[0] = wch; waddnwstr(stdscr, temp, 1); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:21692: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:23017: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:21695: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:21698: \"$ac_try\"") >&5 + echo "$as_me:23020: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:23023: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21701: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23026: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_widec_curses=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_widec_curses=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:21712: result: $cf_cv_widec_curses" >&5 +echo "$as_me:23037: result: $cf_cv_widec_curses" >&5 echo "${ECHO_T}$cf_cv_widec_curses" >&6 if test "$cf_cv_widec_curses" = yes ; then cat >>confdefs.h <<\EOF #define WIDEC_CURSES 1 EOF # This is needed on Tru64 5.0 to declare mbstate_t - echo "$as_me:21722: checking if we must include wchar.h to declare mbstate_t" >&5 + echo "$as_me:23047: checking if we must include wchar.h to declare mbstate_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6 if test "${cf_cv_widec_mbstate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 21729 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23054 "configure" #include "confdefs.h" #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -mbstate_t state +mbstate_t state; (void)state ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:21743: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23068: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:21746: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:21749: \"$ac_try\"") >&5 + echo "$as_me:23071: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23074: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21752: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23077: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_widec_mbstate=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -#line 21759 "configure" +cat "conftest.$ac_ext" >&5 +cat >"conftest.$ac_ext" <<_ACEOF +#line 23084 "configure" #include "confdefs.h" #include <stdlib.h> #include <wchar.h> #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -mbstate_t state +mbstate_t state; (void)state ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:21774: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23099: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:21777: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:21780: \"$ac_try\"") >&5 + echo "$as_me:23102: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23105: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:21783: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23108: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_widec_mbstate=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_widec_mbstate=unknown fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:21795: result: $cf_cv_widec_mbstate" >&5 +echo "$as_me:23120: result: $cf_cv_widec_mbstate" >&5 echo "${ECHO_T}$cf_cv_widec_mbstate" >&6 if test "$cf_cv_widec_mbstate" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF fi if test "$cf_cv_widec_mbstate" != unknown ; then cat >>confdefs.h <<\EOF #define HAVE_MBSTATE_T 1 EOF fi fi cf_all_widgets=yes -echo "$as_me:21818: checking if you want extra dialogs" >&5 +echo "$as_me:23143: checking if you want extra dialogs" >&5 echo $ECHO_N "checking if you want extra dialogs... $ECHO_C" >&6 # Check whether --enable-extras or --disable-extras was given. if test "${enable_extras+set}" = set; then enableval="$enable_extras" else enableval=yes fi; -echo "$as_me:21828: result: $enableval" >&5 +echo "$as_me:23153: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then cf_all_widgets=yes else cf_all_widgets=no fi -echo "$as_me:21836: checking if you want config-file support" >&5 +cf_use_dialogrc=yes + +echo "$as_me:23163: checking if you want config-file support" >&5 echo $ECHO_N "checking if you want config-file support... $ECHO_C" >&6 # Check whether --enable-rc-file or --disable-rc-file was given. if test "${enable_rc_file+set}" = set; then enableval="$enable_rc_file" else enableval=$cf_all_widgets fi; -echo "$as_me:21846: result: $enableval" >&5 +echo "$as_me:23173: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS rc\$o" cat >>confdefs.h <<\EOF #define HAVE_RC_FILE 1 EOF else - : +cf_use_dialogrc=no +fi + +cf_use_dialogrc2=yes +if test "$cf_use_dialogrc" = yes; then + +echo "$as_me:23189: checking if you want extra attributes in config-file" >&5 +echo $ECHO_N "checking if you want extra attributes in config-file... $ECHO_C" >&6 + +# Check whether --enable-rc-file2 or --disable-rc-file2 was given. +if test "${enable_rc_file2+set}" = set; then + enableval="$enable_rc_file2" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:23199: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then + +cat >>confdefs.h <<\EOF +#define HAVE_RC_FILE2 1 +EOF + +else +cf_use_dialogrc2=no +fi + fi -echo "$as_me:21859: checking if you want Xdialog-style dialogs" >&5 +echo "$as_me:23213: checking if you want Xdialog-style dialogs" >&5 echo $ECHO_N "checking if you want Xdialog-style dialogs... $ECHO_C" >&6 # Check whether --enable-Xdialog or --disable-Xdialog was given. if test "${enable_Xdialog+set}" = set; then enableval="$enable_Xdialog" else enableval=$cf_all_widgets fi; -echo "$as_me:21869: result: $enableval" >&5 +echo "$as_me:23223: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS calendar\$o fselect\$o timebox\$o" cat >>confdefs.h <<\EOF #define HAVE_XDIALOG 1 EOF else : fi -echo "$as_me:21882: checking if you want extra Xdialog-style dialogs (1.2)" >&5 +echo "$as_me:23236: checking if you want extra Xdialog-style dialogs (1.2)" >&5 echo $ECHO_N "checking if you want extra Xdialog-style dialogs (1.2)... $ECHO_C" >&6 # Check whether --enable-Xdialog2 or --disable-Xdialog2 was given. if test "${enable_Xdialog2+set}" = set; then enableval="$enable_Xdialog2" else enableval=$cf_all_widgets fi; -echo "$as_me:21892: result: $enableval" >&5 +echo "$as_me:23246: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS buildlist\$o rangebox\$o treeview\$o" cat >>confdefs.h <<\EOF #define HAVE_XDIALOG2 1 EOF else : fi -echo "$as_me:21905: checking if you want compatibility with whiptail options" >&5 +echo "$as_me:23259: checking if you want compatibility with whiptail options" >&5 echo $ECHO_N "checking if you want compatibility with whiptail options... $ECHO_C" >&6 # Check whether --enable-whiptail or --disable-whiptail was given. if test "${enable_whiptail+set}" = set; then enableval="$enable_whiptail" else enableval=$cf_all_widgets fi; -echo "$as_me:21915: result: $enableval" >&5 +echo "$as_me:23269: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then cat >>confdefs.h <<\EOF #define HAVE_WHIPTAIL 1 EOF else : fi -echo "$as_me:21927: checking if you want the form dialog" >&5 +echo "$as_me:23281: checking if you want the form dialog" >&5 echo $ECHO_N "checking if you want the form dialog... $ECHO_C" >&6 # Check whether --enable-form or --disable-form was given. if test "${enable_form+set}" = set; then enableval="$enable_form" else enableval=$cf_all_widgets fi; -echo "$as_me:21937: result: $enableval" >&5 +echo "$as_me:23291: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS formbox\$o" cat >>confdefs.h <<\EOF #define HAVE_DLG_FORMBOX 1 EOF else : fi -echo "$as_me:21950: checking if you want the gauge dialog" >&5 +echo "$as_me:23304: checking if you want the gauge dialog" >&5 echo $ECHO_N "checking if you want the gauge dialog... $ECHO_C" >&6 # Check whether --enable-gauge or --disable-gauge was given. if test "${enable_gauge+set}" = set; then enableval="$enable_gauge" else enableval=$cf_all_widgets fi; -echo "$as_me:21960: result: $enableval" >&5 +echo "$as_me:23314: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS guage\$o pause\$o prgbox\$o progressbox\$o" cat >>confdefs.h <<\EOF #define HAVE_DLG_GAUGE 1 EOF else : fi -echo "$as_me:21973: checking if you want the tailbox dialog" >&5 +echo "$as_me:23327: checking if you want the tailbox dialog" >&5 echo $ECHO_N "checking if you want the tailbox dialog... $ECHO_C" >&6 # Check whether --enable-tailbox or --disable-tailbox was given. if test "${enable_tailbox+set}" = set; then enableval="$enable_tailbox" else enableval=$cf_all_widgets fi; -echo "$as_me:21983: result: $enableval" >&5 +echo "$as_me:23337: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS tailbox\$o" cat >>confdefs.h <<\EOF #define HAVE_DLG_TAILBOX 1 EOF else : fi -echo "$as_me:21996: checking if you want the mixedform dialog" >&5 +echo "$as_me:23350: checking if you want the mixedform dialog" >&5 echo $ECHO_N "checking if you want the mixedform dialog... $ECHO_C" >&6 # Check whether --enable-mixedform or --disable-mixedform was given. if test "${enable_mixedform+set}" = set; then enableval="$enable_mixedform" else enableval=${enable_form:=$cf_all_widgets} fi; -echo "$as_me:22006: result: $enableval" >&5 +echo "$as_me:23360: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS mixedform\$o" cat >>confdefs.h <<\EOF #define HAVE_DLG_MIXEDFORM 1 EOF else : fi -echo "$as_me:22019: checking if you want the mixedgauge dialog" >&5 +echo "$as_me:23373: checking if you want the mixedgauge dialog" >&5 echo $ECHO_N "checking if you want the mixedgauge dialog... $ECHO_C" >&6 # Check whether --enable-mixedgauge or --disable-mixedgauge was given. if test "${enable_mixedgauge+set}" = set; then enableval="$enable_mixedgauge" else enableval=$cf_all_widgets fi; -echo "$as_me:22029: result: $enableval" >&5 +echo "$as_me:23383: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then EXTRAOBJS="$EXTRAOBJS mixedgauge\$o" cat >>confdefs.h <<\EOF #define HAVE_MIXEDGAUGE 1 EOF else : fi -echo "$as_me:22042: checking if you want the wide-curses features" >&5 +echo "$as_me:23396: checking if you want the wide-curses features" >&5 echo $ECHO_N "checking if you want the wide-curses features... $ECHO_C" >&6 # Check whether --enable-widec or --disable-widec was given. if test "${enable_widec+set}" = set; then enableval="$enable_widec" else enableval=$cf_cv_widec_curses fi; -echo "$as_me:22052: result: $enableval" >&5 +echo "$as_me:23406: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "$enableval" != no ; then cat >>confdefs.h <<\EOF #define USE_WIDE_CURSES 1 EOF else : fi -echo "$as_me:22064: checking for ANSI C header files" >&5 +echo "$as_me:23418: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 22070 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23424 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> _ACEOF -if { (eval echo "$as_me:22078: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:23432: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:22084: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:23438: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -#line 22106 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23460 "configure" #include "confdefs.h" #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then + $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -#line 22124 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23478 "configure" #include "confdefs.h" #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then + $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else - cat >conftest.$ac_ext <<_ACEOF -#line 22145 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23499 "configure" #include "confdefs.h" #include <ctype.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main (void) { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:22171: \"$ac_link\"") >&5 +rm -f "conftest$ac_exeext" +if { (eval echo "$as_me:23525: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:22174: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:22176: \"$ac_try\"") >&5 + echo "$as_me:23528: \$? = $ac_status" >&5 + (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' + { (eval echo "$as_me:23530: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22179: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23533: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_header_stdc=no fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" fi fi fi -echo "$as_me:22192: result: $ac_cv_header_stdc" >&5 +echo "$as_me:23546: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi -echo "$as_me:22202: checking whether time.h and sys/time.h may both be included" >&5 +echo "$as_me:23556: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 22208 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23562 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/time.h> #include <time.h> int main (void) { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:22224: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23578: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:22227: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:22230: \"$ac_try\"") >&5 + echo "$as_me:23581: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23584: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22233: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23587: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_header_time=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:22243: result: $ac_cv_header_time" >&5 +echo "$as_me:23597: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:22256: checking for $ac_hdr that defines DIR" >&5 +echo "$as_me:23610: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 22262 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23616 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:22277: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23631: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:22280: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:22283: \"$ac_try\"") >&5 + echo "$as_me:23634: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23637: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22286: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23640: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:22296: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +echo "$as_me:23650: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 EOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - echo "$as_me:22309: checking for opendir in -ldir" >&5 + echo "$as_me:23663: checking for opendir in -ldir" >&5 echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6 if test "${ac_cv_lib_dir_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldir $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 22317 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 23671 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:22336: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:23690: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:22339: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:22342: \"$ac_try\"") >&5 + echo "$as_me:23693: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:23696: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22345: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23699: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_lib_dir_opendir=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_lib_dir_opendir=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:22356: result: $ac_cv_lib_dir_opendir" >&5 +echo "$as_me:23710: result: $ac_cv_lib_dir_opendir" >&5 echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6 -if test $ac_cv_lib_dir_opendir = yes; then +if test "$ac_cv_lib_dir_opendir" = yes; then LIBS="$LIBS -ldir" fi else - echo "$as_me:22363: checking for opendir in -lx" >&5 + echo "$as_me:23717: checking for opendir in -lx" >&5 echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6 if test "${ac_cv_lib_x_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lx $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 22371 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 23725 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:22390: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:23744: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:22393: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:22396: \"$ac_try\"") >&5 + echo "$as_me:23747: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:23750: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22399: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23753: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_lib_x_opendir=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_lib_x_opendir=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:22410: result: $ac_cv_lib_x_opendir" >&5 +echo "$as_me:23764: result: $ac_cv_lib_x_opendir" >&5 echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6 -if test $ac_cv_lib_x_opendir = yes; then +if test "$ac_cv_lib_x_opendir" = yes; then LIBS="$LIBS -lx" fi fi -for ac_header in search.h stdint.h unistd.h +for ac_header in search.h stdint.h sys/param.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:22421: checking for $ac_header" >&5 +echo "$as_me:23775: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 22427 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23781 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:22431: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:23785: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:22437: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:23791: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" fi -echo "$as_me:22456: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +echo "$as_me:23810: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 EOF fi done -echo "$as_me:22466: checking for term.h" >&5 +echo "$as_me:23820: checking for term.h" >&5 echo $ECHO_N "checking for term.h... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # If we found <ncurses/curses.h>, look for <ncurses/term.h>, but always look # for <term.h> if we do not find the variant. cf_header_list="term.h ncurses/term.h ncursesw/term.h" -case ${cf_cv_ncurses_header:-curses.h} in +case "${cf_cv_ncurses_header:-curses.h}" in (*/*) - cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h + cf_header_item=`echo "${cf_cv_ncurses_header:-curses.h}" | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do - cat >conftest.$ac_ext <<_ACEOF -#line 22487 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23841 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}> int main (void) { -WINDOW *x +WINDOW *x; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:22501: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23855: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:22504: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:22507: \"$ac_try\"") >&5 + echo "$as_me:23858: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23861: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22510: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23864: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_term_header=$cf_header break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_term_header=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" done -case $cf_cv_term_header in +case "$cf_cv_term_header" in (no) # If curses is ncurses, some packagers still mess it up by trying to make # us use GNU termcap. This handles the most common case. for cf_header in ncurses/term.h ncursesw/term.h do - cat >conftest.$ac_ext <<_ACEOF -#line 22529 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23883 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #ifdef NCURSES_VERSION #include <${cf_header}> #else make an error #endif int main (void) { -WINDOW *x +WINDOW *x; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:22547: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23901: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:22550: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:22553: \"$ac_try\"") >&5 + echo "$as_me:23904: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23907: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22556: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23910: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_term_header=$cf_header break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_term_header=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" done ;; esac fi -echo "$as_me:22571: result: $cf_cv_term_header" >&5 +echo "$as_me:23925: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 -case $cf_cv_term_header in +case "$cf_cv_term_header" in (term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac -echo "$as_me:22598: checking return type of signal handlers" >&5 +echo "$as_me:23952: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 22604 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 23958 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> #ifdef signal # undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main (void) { int i; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:22626: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:23980: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:22629: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:22632: \"$ac_try\"") >&5 + echo "$as_me:23983: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:23986: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22635: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:23989: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_type_signal=int fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:22645: result: $ac_cv_type_signal" >&5 +echo "$as_me:23999: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<EOF #define RETSIGTYPE $ac_cv_type_signal EOF for ac_func in \ -_nc_free_and_exit \ btowc \ mblen \ mbrlen \ mbrtowc \ mbtowc \ strcasecmp \ strftime \ tsearch \ waitpid \ wcsrtombs \ wcstombs \ wctob \ wctomb \ mktime \ do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:22671: checking for $ac_func" >&5 +echo "$as_me:24024: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 22677 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24030 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ +#define $ac_func autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef $ac_func + #ifdef __cplusplus extern "C" #endif + /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char $ac_func (); -char (*f) (); +char $ac_func (void); int main (void) { -/* The GNU C library defines this for functions which it implements + +/* The GNU C library defines stubs 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_$ac_func) || defined (__stub___$ac_func) -choke me -#else -f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +#error found stub for $ac_func #endif + return $ac_func (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:22708: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24061: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:22711: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:22714: \"$ac_try\"") >&5 + echo "$as_me:24064: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24067: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22717: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24070: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 eval "$as_ac_var=no" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:22727: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +echo "$as_me:24080: result: `eval echo '${'"$as_ac_var"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6 +if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 EOF fi done -echo "$as_me:22737: checking definition to turn on extended curses functions" >&5 +echo "$as_me:24090: checking definition to turn on extended curses functions" >&5 echo $ECHO_N "checking definition to turn on extended curses functions... $ECHO_C" >&6 if test "${cf_cv_need_xopen_extension+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_need_xopen_extension=unknown -cat >conftest.$ac_ext <<_ACEOF -#line 22745 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 24098 "configure" #include "confdefs.h" #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { #if defined(NCURSES_VERSION_PATCH) #if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403) make an error #endif #endif #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; - getbegyx(stdscr, y1, x1) +#ifdef NCURSES_VERSION + (void)check2; +#endif + getbegyx(stdscr, y1, x1); + (void)x; + (void)y1; + (void)x1; + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:22771: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24131: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:22774: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:22777: \"$ac_try\"") >&5 + echo "$as_me:24134: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24137: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22780: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24140: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_need_xopen_extension=none else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 for cf_try_xopen_extension in _XOPEN_SOURCE_EXTENDED NCURSES_WIDECHAR do - cat >conftest.$ac_ext <<_ACEOF -#line 22790 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24150 "configure" #include "confdefs.h" #define $cf_try_xopen_extension 1 #include <stdlib.h> #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; - getbegyx(stdscr, y1, x1) + getbegyx(stdscr, y1, x1); +#ifdef NCURSES_VERSION + (void)check2; +#endif + (void)x; + (void)y1; + (void)x1; + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:22812: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24179: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:22815: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:22818: \"$ac_try\"") >&5 + echo "$as_me:24182: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24185: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22821: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24188: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_need_xopen_extension=$cf_try_xopen_extension; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" done fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:22835: result: $cf_cv_need_xopen_extension" >&5 +echo "$as_me:24202: result: $cf_cv_need_xopen_extension" >&5 echo "${ECHO_T}$cf_cv_need_xopen_extension" >&6 -case $cf_cv_need_xopen_extension in +case "$cf_cv_need_xopen_extension" in (*_*) test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D$cf_cv_need_xopen_extension" ;; esac -echo "$as_me:22847: checking for unctrl.h" >&5 +echo "$as_me:24214: checking for unctrl.h" >&5 echo $ECHO_N "checking for unctrl.h... $ECHO_C" >&6 if test "${cf_cv_unctrl_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # If we found <ncurses/curses.h>, look for <ncurses/unctrl.h>, but always look # for <unctrl.h> if we do not find the variant. cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h" -case ${cf_cv_ncurses_header:-curses.h} in +case "${cf_cv_ncurses_header:-curses.h}" in (*/*) - cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h + cf_header_item=`echo "${cf_cv_ncurses_header:-curses.h}" | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do - cat >conftest.$ac_ext <<_ACEOF -#line 22868 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24235 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}> int main (void) { -WINDOW *x +WINDOW *x; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:22882: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:24249: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:22885: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:22888: \"$ac_try\"") >&5 + echo "$as_me:24252: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:24255: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:22891: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24258: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_unctrl_header=$cf_header break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_unctrl_header=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" done fi -echo "$as_me:22904: result: $cf_cv_unctrl_header" >&5 +echo "$as_me:24271: result: $cf_cv_unctrl_header" >&5 echo "${ECHO_T}$cf_cv_unctrl_header" >&6 -case $cf_cv_unctrl_header in +case "$cf_cv_unctrl_header" in (no) - { echo "$as_me:22909: WARNING: unctrl.h header not found" >&5 + { echo "$as_me:24276: WARNING: unctrl.h header not found" >&5 echo "$as_me: WARNING: unctrl.h header not found" >&2;} ;; esac -case $cf_cv_unctrl_header in +case "$cf_cv_unctrl_header" in (unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_UNCTRL_H 1 EOF ;; (ncurses/unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_UNCTRL_H 1 EOF ;; (ncursesw/unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_UNCTRL_H 1 EOF ;; esac for cf_func in \ flushinp \ getattrs \ getbegx \ getbegy \ getbegyx \ getcurx \ getcury \ getmaxx \ getmaxy \ getmaxyx \ getparx \ getpary \ getparyx \ use_default_colors \ wchgat \ wcursyncup \ wget_wch \ wsyncup \ do cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - echo "$as_me:22962: checking for ${cf_func}" >&5 + echo "$as_me:24329: checking for ${cf_func}" >&5 +echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 + +echo "${as_me:-configure}:24332: testing ${cf_func} ..." 1>&5 + + if eval "test \"\${cf_cv_func_$cf_func+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + eval cf_result='$ac_cv_func_'$cf_func + if test ".$cf_result" != ".no"; then + cat >"conftest.$ac_ext" <<_ACEOF +#line 24341 "configure" +#include "confdefs.h" + +#ifdef HAVE_XCURSES +#include <xcurses.h> +char * XCursesProgramName = "test"; +#else +#include <${cf_cv_ncurses_header:-curses.h}> +#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) +#include <ncursesw/term.h> +#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) +#include <ncurses/term.h> +#elif defined(HAVE_TERM_H) +#include <term.h> +#endif +#endif + +int +main (void) +{ + +#ifndef ${cf_func} +long foo = (long)(&${cf_func}); +fprintf(stderr, "testing linkage of $cf_func:%p\\n", (void *)foo); +if (foo + 1234L > 5678L) + ${cf_cv_main_return:-return}(foo != 0); +#endif + + ; + return 0; +} +_ACEOF +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24374: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:24377: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24380: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:24383: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_result=yes +else + echo "$as_me: failed program was:" >&5 +cat "conftest.$ac_ext" >&5 +cf_result=no +fi +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" + fi + eval 'cf_cv_func_'$cf_func'="$cf_result"' + +fi + + # use the computed/retrieved cache-value: + eval 'cf_result=$cf_cv_func_'$cf_func + echo "$as_me:24399: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + if test "$cf_result" != no; then + cat >>confdefs.h <<EOF +#define HAVE_${cf_tr_func} 1 +EOF + + fi +done + +for cf_func in \ +curses_exit \ +_nc_free_and_exit \ + +do + +cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + echo "$as_me:24417: checking for ${cf_func}" >&5 echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 -echo "${as_me:-configure}:22965: testing ${cf_func} ..." 1>&5 +echo "${as_me:-configure}:24420: testing ${cf_func} ..." 1>&5 if eval "test \"\${cf_cv_func_$cf_func+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval cf_result='$ac_cv_func_'$cf_func if test ".$cf_result" != ".no"; then - cat >conftest.$ac_ext <<_ACEOF -#line 22974 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24429 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include <xcurses.h> char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include <ncursesw/term.h> #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include <ncurses/term.h> #elif defined(HAVE_TERM_H) #include <term.h> #endif #endif int main (void) { #ifndef ${cf_func} long foo = (long)(&${cf_func}); -fprintf(stderr, "testing linkage of $cf_func:%p\n", (void *)foo); +fprintf(stderr, "testing linkage of $cf_func:%p\\n", (void *)foo); if (foo + 1234L > 5678L) ${cf_cv_main_return:-return}(foo != 0); #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23007: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24462: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23010: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23013: \"$ac_try\"") >&5 + echo "$as_me:24465: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24468: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23016: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24471: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_result=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi - eval 'cf_cv_func_'$cf_func'=$cf_result' + eval 'cf_cv_func_'$cf_func'="$cf_result"' fi # use the computed/retrieved cache-value: eval 'cf_result=$cf_cv_func_'$cf_func - echo "$as_me:23032: result: $cf_result" >&5 + echo "$as_me:24487: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 - if test $cf_result != no; then + if test "$cf_result" != no; then cat >>confdefs.h <<EOF #define HAVE_${cf_tr_func} 1 EOF fi done -echo "$as_me:23042: checking for start_color" >&5 +echo "$as_me:24497: checking for start_color" >&5 echo $ECHO_N "checking for start_color... $ECHO_C" >&6 if test "${ac_cv_func_start_color+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23048 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24503 "configure" #include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char start_color (); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ +#define start_color autoconf_temporary +#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */ +#undef start_color + #ifdef __cplusplus extern "C" #endif + /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char start_color (); -char (*f) (); +char start_color (void); int main (void) { -/* The GNU C library defines this for functions which it implements + +/* The GNU C library defines stubs 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_start_color) || defined (__stub___start_color) -choke me -#else -f = start_color; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +#error found stub for start_color #endif + return start_color (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23079: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24534: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23082: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23085: \"$ac_try\"") >&5 + echo "$as_me:24537: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24540: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23088: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24543: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then ac_cv_func_start_color=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 ac_cv_func_start_color=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:23098: result: $ac_cv_func_start_color" >&5 +echo "$as_me:24553: result: $ac_cv_func_start_color" >&5 echo "${ECHO_T}$ac_cv_func_start_color" >&6 -if test $ac_cv_func_start_color = yes; then +if test "$ac_cv_func_start_color" = yes; then cat >>confdefs.h <<\EOF #define HAVE_COLOR 1 EOF fi -echo "$as_me:23108: checking for chtype typedef" >&5 +echo "$as_me:24563: checking for chtype typedef" >&5 echo $ECHO_N "checking for chtype typedef... $ECHO_C" >&6 if test "${cf_cv_chtype_decl+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23115 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24570 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -chtype foo +chtype foo; (void)foo ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23127: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:24582: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23130: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23133: \"$ac_try\"") >&5 + echo "$as_me:24585: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:24588: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23136: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24591: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_chtype_decl=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_chtype_decl=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:23146: result: $cf_cv_chtype_decl" >&5 +echo "$as_me:24601: result: $cf_cv_chtype_decl" >&5 echo "${ECHO_T}$cf_cv_chtype_decl" >&6 -if test $cf_cv_chtype_decl = yes ; then +if test "$cf_cv_chtype_decl" = yes ; then cat >>confdefs.h <<\EOF #define HAVE_TYPE_CHTYPE 1 EOF - echo "$as_me:23154: checking if chtype is scalar or struct" >&5 + echo "$as_me:24609: checking if chtype is scalar or struct" >&5 echo $ECHO_N "checking if chtype is scalar or struct... $ECHO_C" >&6 if test "${cf_cv_chtype_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23161 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24616 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -chtype foo; long x = foo +static chtype foo; long x = foo; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23173: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:24628: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23176: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23179: \"$ac_try\"") >&5 + echo "$as_me:24631: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:24634: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23182: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24637: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_chtype_type=scalar else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_chtype_type=struct fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:23192: result: $cf_cv_chtype_type" >&5 +echo "$as_me:24647: result: $cf_cv_chtype_type" >&5 echo "${ECHO_T}$cf_cv_chtype_type" >&6 - if test $cf_cv_chtype_type = scalar ; then + if test "$cf_cv_chtype_type" = scalar ; then cat >>confdefs.h <<\EOF #define TYPE_CHTYPE_IS_SCALAR 1 EOF fi fi -echo "$as_me:23203: checking for wide alternate character set array" >&5 +echo "$as_me:24658: checking for wide alternate character set array" >&5 echo $ECHO_N "checking for wide alternate character set array... $ECHO_C" >&6 if test "${cf_cv_curses_wacs_map+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_curses_wacs_map=unknown for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char do - cat >conftest.$ac_ext <<_ACEOF -#line 23213 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24668 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -void *foo = &($name['k']) +void *foo = &(${name}['k']); (void)foo ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23229: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24684: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23232: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23235: \"$ac_try\"") >&5 + echo "$as_me:24687: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24690: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23238: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24693: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_curses_wacs_map=$name break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" done fi -echo "$as_me:23249: result: $cf_cv_curses_wacs_map" >&5 +echo "$as_me:24704: result: $cf_cv_curses_wacs_map" >&5 echo "${ECHO_T}$cf_cv_curses_wacs_map" >&6 test "$cf_cv_curses_wacs_map" != unknown && cat >>confdefs.h <<EOF #define CURSES_WACS_ARRAY $cf_cv_curses_wacs_map EOF -echo "$as_me:23257: checking for wide alternate character constants" >&5 +echo "$as_me:24712: checking for wide alternate character constants" >&5 echo $ECHO_N "checking for wide alternate character constants... $ECHO_C" >&6 if test "${cf_cv_curses_wacs_symbols+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_curses_wacs_symbols=no if test "$cf_cv_curses_wacs_map" != unknown then - cat >conftest.$ac_ext <<_ACEOF -#line 23267 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24722 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { cchar_t *foo = WACS_PLUS; - $cf_cv_curses_wacs_map['k'] = *WACS_PLUS + ${cf_cv_curses_wacs_map}['k'] = *WACS_PLUS; (void)foo ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23284: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24739: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23287: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23290: \"$ac_try\"") >&5 + echo "$as_me:24742: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24745: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23293: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24748: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_curses_wacs_symbols=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" else - cat >conftest.$ac_ext <<_ACEOF -#line 23303 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24758 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -cchar_t *foo = WACS_PLUS +cchar_t *foo = WACS_PLUS; (void)foo ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23319: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24774: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23322: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23325: \"$ac_try\"") >&5 + echo "$as_me:24777: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24780: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23328: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24783: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_curses_wacs_symbols=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi fi -echo "$as_me:23339: result: $cf_cv_curses_wacs_symbols" >&5 +echo "$as_me:24794: result: $cf_cv_curses_wacs_symbols" >&5 echo "${ECHO_T}$cf_cv_curses_wacs_symbols" >&6 test "$cf_cv_curses_wacs_symbols" != no && cat >>confdefs.h <<\EOF #define CURSES_WACS_SYMBOLS 1 EOF for cf_func in wgetparent do cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - echo "$as_me:23352: checking for ${cf_func}" >&5 + echo "$as_me:24807: checking for ${cf_func}" >&5 echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 -echo "${as_me:-configure}:23355: testing ${cf_func} ..." 1>&5 +echo "${as_me:-configure}:24810: testing ${cf_func} ..." 1>&5 if eval "test \"\${cf_cv_func_$cf_func+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval cf_result='$ac_cv_func_'$cf_func if test ".$cf_result" != ".no"; then - cat >conftest.$ac_ext <<_ACEOF -#line 23364 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24819 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include <xcurses.h> char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include <ncursesw/term.h> #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include <ncurses/term.h> #elif defined(HAVE_TERM_H) #include <term.h> #endif #endif int main (void) { #ifndef ${cf_func} long foo = (long)(&${cf_func}); -fprintf(stderr, "testing linkage of $cf_func:%p\n", (void *)foo); +fprintf(stderr, "testing linkage of $cf_func:%p\\n", (void *)foo); if (foo + 1234L > 5678L) ${cf_cv_main_return:-return}(foo != 0); #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23397: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:24852: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23400: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23403: \"$ac_try\"") >&5 + echo "$as_me:24855: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:24858: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23406: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24861: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_result=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi - eval 'cf_cv_func_'$cf_func'=$cf_result' + eval 'cf_cv_func_'$cf_func'="$cf_result"' fi # use the computed/retrieved cache-value: eval 'cf_result=$cf_cv_func_'$cf_func - echo "$as_me:23422: result: $cf_result" >&5 + echo "$as_me:24877: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 - if test $cf_result != no; then + if test "$cf_result" != no; then cat >>confdefs.h <<EOF #define HAVE_${cf_tr_func} 1 EOF fi done if test "x$cf_cv_func_wgetparent" != xyes then - echo "$as_me:23434: checking if WINDOW has _parent member" >&5 + echo "$as_me:24889: checking if WINDOW has _parent member" >&5 echo $ECHO_N "checking if WINDOW has _parent member... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -#line 23437 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24892 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main (void) { -WINDOW *p = stdscr->_parent +WINDOW *p = stdscr->_parent; (void)p ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23449: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:24904: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23452: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23455: \"$ac_try\"") >&5 + echo "$as_me:24907: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:24910: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23458: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:24913: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_window__parent=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_window__parent=no fi -rm -f conftest.$ac_objext conftest.$ac_ext - echo "$as_me:23467: result: $cf_window__parent" >&5 +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + echo "$as_me:24922: result: $cf_window__parent" >&5 echo "${ECHO_T}$cf_window__parent" >&6 if test "$cf_window__parent" = yes then cat >>confdefs.h <<\EOF #define HAVE_WINDOW__PARENT 1 EOF fi fi for ac_header in sys/wait.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:23482: checking for $ac_header" >&5 +echo "$as_me:24937: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23488 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24943 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:23492: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:24947: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:23498: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:24953: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" fi -echo "$as_me:23517: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +echo "$as_me:24972: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 EOF fi done cf_wait_headers="#include <sys/types.h> " -if test $ac_cv_header_sys_wait_h = yes; then +if test "$ac_cv_header_sys_wait_h" = yes; then cf_wait_headers="$cf_wait_headers #include <sys/wait.h> " else for ac_header in wait.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:23538: checking for $ac_header" >&5 +echo "$as_me:24993: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23544 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 24999 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:23548: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:25003: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:23554: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:25009: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" fi -echo "$as_me:23573: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +echo "$as_me:25028: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 EOF fi done for ac_header in waitstatus.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:23586: checking for $ac_header" >&5 +echo "$as_me:25041: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23592 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25047 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:23596: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:25051: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:23602: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:25057: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" fi -echo "$as_me:23621: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +echo "$as_me:25076: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 EOF fi done -if test $ac_cv_header_wait_h = yes; then +if test "$ac_cv_header_wait_h" = yes; then cf_wait_headers="$cf_wait_headers #include <wait.h> " fi -if test $ac_cv_header_waitstatus_h = yes; then +if test "$ac_cv_header_waitstatus_h" = yes; then cf_wait_headers="$cf_wait_headers #include <waitstatus.h> " fi fi -echo "$as_me:23643: checking for union wait" >&5 +echo "$as_me:25098: checking for union wait" >&5 echo $ECHO_N "checking for union wait... $ECHO_C" >&6 if test "${cf_cv_type_unionwait+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23650 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25105 "configure" #include "confdefs.h" $cf_wait_headers int main (void) { int x; int y = WEXITSTATUS(x); int z = WTERMSIG(x); wait(&x); + (void)x; + (void)y; + (void)z; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23666: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:25124: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23669: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23672: \"$ac_try\"") >&5 + echo "$as_me:25127: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:25130: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23675: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25133: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_type_unionwait=no echo compiles ok w/o union wait 1>&5 else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 - cat >conftest.$ac_ext <<_ACEOF -#line 23685 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25143 "configure" #include "confdefs.h" $cf_wait_headers int main (void) { union wait x; #ifdef WEXITSTATUS int y = WEXITSTATUS(x); #endif #ifdef WTERMSIG int z = WTERMSIG(x); #endif wait(&x); + (void)x; +#ifdef WEXITSTATUS + (void)y; +#endif +#ifdef WTERMSIG + (void)z; +#endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:23705: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:25170: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:23708: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:23711: \"$ac_try\"") >&5 + echo "$as_me:25173: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:25176: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23714: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25179: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_type_unionwait=yes echo compiles ok with union wait and possibly macros too 1>&5 else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_type_unionwait=no fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi -echo "$as_me:23729: result: $cf_cv_type_unionwait" >&5 +echo "$as_me:25194: result: $cf_cv_type_unionwait" >&5 echo "${ECHO_T}$cf_cv_type_unionwait" >&6 -test $cf_cv_type_unionwait = yes && +test "$cf_cv_type_unionwait" = yes && cat >>confdefs.h <<\EOF #define HAVE_TYPE_UNIONWAIT 1 EOF -if test $cf_cv_type_unionwait = yes; then +if test "$cf_cv_type_unionwait" = yes; then - echo "$as_me:23738: checking if union wait can be used as wait-arg" >&5 + echo "$as_me:25203: checking if union wait can be used as wait-arg" >&5 echo $ECHO_N "checking if union wait can be used as wait-arg... $ECHO_C" >&6 if test "${cf_cv_arg_union_wait+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23745 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25210 "configure" #include "confdefs.h" $cf_wait_headers int main (void) { union wait x; wait(&x) ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23757: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25222: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23760: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23763: \"$ac_try\"") >&5 + echo "$as_me:25225: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25228: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23766: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25231: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_arg_union_wait=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_arg_union_wait=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi - echo "$as_me:23778: result: $cf_cv_arg_union_wait" >&5 + echo "$as_me:25243: result: $cf_cv_arg_union_wait" >&5 echo "${ECHO_T}$cf_cv_arg_union_wait" >&6 - test $cf_cv_arg_union_wait = yes && + test "$cf_cv_arg_union_wait" = yes && cat >>confdefs.h <<\EOF #define WAIT_USES_UNION 1 EOF - echo "$as_me:23785: checking if union wait can be used as waitpid-arg" >&5 + echo "$as_me:25250: checking if union wait can be used as waitpid-arg" >&5 echo $ECHO_N "checking if union wait can be used as waitpid-arg... $ECHO_C" >&6 if test "${cf_cv_arg_union_waitpid+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23792 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25257 "configure" #include "confdefs.h" $cf_wait_headers int main (void) { union wait x; waitpid(0, &x, 0) ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23804: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25269: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23807: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23810: \"$ac_try\"") >&5 + echo "$as_me:25272: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25275: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23813: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25278: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_arg_union_waitpid=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_arg_union_waitpid=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi - echo "$as_me:23825: result: $cf_cv_arg_union_waitpid" >&5 + echo "$as_me:25290: result: $cf_cv_arg_union_waitpid" >&5 echo "${ECHO_T}$cf_cv_arg_union_waitpid" >&6 - test $cf_cv_arg_union_waitpid = yes && + test "$cf_cv_arg_union_waitpid" = yes && cat >>confdefs.h <<\EOF #define WAITPID_USES_UNION 1 EOF fi -echo "$as_me:23834: checking if we must include wchar.h to declare mbstate_t" >&5 +echo "$as_me:25299: checking if we must include wchar.h to declare mbstate_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6 if test "${cf_cv_mbstate_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -cat >conftest.$ac_ext <<_ACEOF -#line 23841 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 25306 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdio.h> #ifdef HAVE_LIBUTF8_H #include <libutf8.h> #endif int main (void) { -mbstate_t state +mbstate_t state; (void)state ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23858: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25323: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23861: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23864: \"$ac_try\"") >&5 + echo "$as_me:25326: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25329: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23867: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25332: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_mbstate_t=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -#line 23874 "configure" +cat "conftest.$ac_ext" >&5 +cat >"conftest.$ac_ext" <<_ACEOF +#line 25339 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdio.h> #include <wchar.h> #ifdef HAVE_LIBUTF8_H #include <libutf8.h> #endif int main (void) { -mbstate_t value +mbstate_t value; (void)value ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:23892: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25357: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:23895: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:23898: \"$ac_try\"") >&5 + echo "$as_me:25360: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25363: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:23901: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25366: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_mbstate_t=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_mbstate_t=unknown fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:23913: result: $cf_cv_mbstate_t" >&5 +echo "$as_me:25378: result: $cf_cv_mbstate_t" >&5 echo "${ECHO_T}$cf_cv_mbstate_t" >&6 if test "$cf_cv_mbstate_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF fi if test "$cf_cv_mbstate_t" != unknown ; then cat >>confdefs.h <<\EOF #define HAVE_MBSTATE_T 1 EOF fi for ac_header in \ termio.h \ termios.h \ unistd.h \ sys/ioctl.h \ sys/termio.h \ do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:23941: checking for $ac_header" >&5 +echo "$as_me:25406: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 23947 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25412 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:23951: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +if { (eval echo "$as_me:25416: \"$ac_cpp "conftest.$ac_ext"\"") >&5 + (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:23957: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then + echo "$as_me:25422: \$? = $ac_status" >&5 + (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 + cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err "conftest.$ac_ext" fi -echo "$as_me:23976: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +echo "$as_me:25441: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 +echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 +if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <<EOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 EOF fi done if test "$ac_cv_header_termios_h" = yes ; then case "$CFLAGS $CPPFLAGS" in (*-D_POSIX_SOURCE*) termios_bad=dunno ;; (*) termios_bad=maybe ;; esac if test "$termios_bad" = maybe ; then - echo "$as_me:23993: checking whether termios.h needs _POSIX_SOURCE" >&5 + echo "$as_me:25458: checking whether termios.h needs _POSIX_SOURCE" >&5 echo $ECHO_N "checking whether termios.h needs _POSIX_SOURCE... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -#line 23996 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25461 "configure" #include "confdefs.h" #include <termios.h> int main (void) { -struct termios foo; int x = foo.c_iflag +struct termios foo; int x = foo.c_iflag = 1; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:24008: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25473: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:24011: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:24014: \"$ac_try\"") >&5 + echo "$as_me:25476: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25479: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:24017: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25482: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then termios_bad=no else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 - cat >conftest.$ac_ext <<_ACEOF -#line 24025 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25490 "configure" #include "confdefs.h" #define _POSIX_SOURCE #include <termios.h> int main (void) { -struct termios foo; int x = foo.c_iflag +struct termios foo; int x = foo.c_iflag = 2; (void)x ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:24039: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25504: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:24042: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:24045: \"$ac_try\"") >&5 + echo "$as_me:25507: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25510: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:24048: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25513: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then termios_bad=unknown else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 termios_bad=yes cat >>confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -rm -f conftest.$ac_objext conftest.$ac_ext - echo "$as_me:24064: result: $termios_bad" >&5 +rm -f "conftest.$ac_objext" "conftest.$ac_ext" + echo "$as_me:25529: result: $termios_bad" >&5 echo "${ECHO_T}$termios_bad" >&6 fi fi -echo "$as_me:24069: checking declaration of size-change" >&5 +echo "$as_me:25534: checking declaration of size-change" >&5 echo $ECHO_N "checking declaration of size-change... $ECHO_C" >&6 if test "${cf_cv_sizechange+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_sizechange=unknown cf_save_CPPFLAGS="$CPPFLAGS" for cf_opts in "" "NEED_PTEM_H" do CPPFLAGS="$cf_save_CPPFLAGS" if test -n "$cf_opts" then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D$cf_opts" fi - cat >conftest.$ac_ext <<_ACEOF -#line 24090 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25555 "configure" #include "confdefs.h" #include <sys/types.h> #ifdef HAVE_TERMIOS_H #include <termios.h> #else #ifdef HAVE_TERMIO_H #include <termio.h> #endif #endif #ifdef NEED_PTEM_H /* This is a workaround for SCO: they neglected to define struct winsize in * termios.h -- it's only in termio.h and ptem.h */ #include <sys/stream.h> #include <sys/ptem.h> #endif #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif int main (void) { #ifdef TIOCGSIZE struct ttysize win; /* SunOS 3.0... */ - int y = win.ts_lines; - int x = win.ts_cols; + int y = win.ts_lines = 2; + int x = win.ts_cols = 1; + (void)y; + (void)x; #else #ifdef TIOCGWINSZ struct winsize win; /* everything else */ - int y = win.ws_row; - int x = win.ws_col; + int y = win.ws_row = 2; + int x = win.ws_col = 1; + (void)y; + (void)x; #else no TIOCGSIZE or TIOCGWINSZ #endif /* TIOCGWINSZ */ #endif /* TIOCGSIZE */ ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:24136: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25605: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:24139: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:24142: \"$ac_try\"") >&5 + echo "$as_me:25608: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25611: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:24145: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25614: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_cv_sizechange=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_cv_sizechange=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save_CPPFLAGS" if test "$cf_cv_sizechange" = yes ; then echo "size-change succeeded ($cf_opts)" >&5 test -n "$cf_opts" && cf_cv_sizechange="$cf_opts" break fi done fi -echo "$as_me:24164: result: $cf_cv_sizechange" >&5 +echo "$as_me:25633: result: $cf_cv_sizechange" >&5 echo "${ECHO_T}$cf_cv_sizechange" >&6 if test "$cf_cv_sizechange" != no ; then cat >>confdefs.h <<\EOF #define HAVE_SIZECHANGE 1 EOF - case $cf_cv_sizechange in + case "$cf_cv_sizechange" in (NEED*) cat >>confdefs.h <<EOF #define $cf_cv_sizechange 1 EOF ;; esac fi PACKAGE_PREFIX=DLG PACKAGE_CONFIG=dlg_config.h EXTRA_OUTPUT="$EXTRA_OUTPUT headers-sh:$srcdir/headers-sh.in" -cat >conftest.$ac_ext <<_ACEOF -#line 24188 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 25657 "configure" #include "confdefs.h" #include <locale.h> int main (void) { setlocale(LC_ALL, "") ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:24200: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:25669: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:24203: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:24206: \"$ac_try\"") >&5 + echo "$as_me:25672: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:25675: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:24209: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25678: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cat >>confdefs.h <<\EOF #define HAVE_SETLOCALE 1 EOF else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" -echo "$as_me:24222: checking if runtime has nl_langinfo support for first weekday" >&5 +echo "$as_me:25691: checking if runtime has nl_langinfo support for first weekday" >&5 echo $ECHO_N "checking if runtime has nl_langinfo support for first weekday... $ECHO_C" >&6 if test "${cf_nl_langinfo_1stday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -#line 24229 "configure" + cat >"conftest.$ac_ext" <<_ACEOF +#line 25698 "configure" #include "confdefs.h" #include <langinfo.h> #include <locale.h> int main (void) { int first_weekday = nl_langinfo (_NL_TIME_FIRST_WEEKDAY)[0]; long week_1stday_l = (long) nl_langinfo (_NL_TIME_WEEK_1STDAY); + (void) first_weekday; + (void) week_1stday_l; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:24247: \"$ac_compile\"") >&5 +rm -f "conftest.$ac_objext" +if { (eval echo "$as_me:25718: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:24250: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:24253: \"$ac_try\"") >&5 + echo "$as_me:25721: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest.$ac_objext"' + { (eval echo "$as_me:25724: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:24256: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + echo "$as_me:25727: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then cf_nl_langinfo_1stday=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 cf_nl_langinfo_1stday=no fi -rm -f conftest.$ac_objext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi -echo "$as_me:24269: result: $cf_nl_langinfo_1stday" >&5 +echo "$as_me:25740: result: $cf_nl_langinfo_1stday" >&5 echo "${ECHO_T}$cf_nl_langinfo_1stday" >&6 -test "x$cf_nl_langinfo_1stday" = xyes && cat >>confdefs.h <<\EOF +test "x$cf_nl_langinfo_1stday" = xyes && +cat >>confdefs.h <<\EOF #define HAVE_NL_LANGINFO_1STDAY 1 EOF -echo "$as_me:24275: checking if rpath-hack should be disabled" >&5 +if test "$GCC" = yes || test "$GXX" = yes +then + + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$EXTRA_CFLAGS" + + EXTRA_CFLAGS= +fi + +echo "$as_me:25756: checking if rpath-hack should be disabled" >&5 echo $ECHO_N "checking if rpath-hack should be disabled... $ECHO_C" >&6 # Check whether --enable-rpath-hack or --disable-rpath-hack was given. if test "${enable_rpath_hack+set}" = set; then enableval="$enable_rpath_hack" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then - cf_disable_rpath_hack=yes + enable_rpath_hack=no else - cf_disable_rpath_hack=no + enable_rpath_hack=yes fi else enableval=yes - cf_disable_rpath_hack=no + enable_rpath_hack=yes fi; -echo "$as_me:24292: result: $cf_disable_rpath_hack" >&5 +if test "x$enable_rpath_hack" = xno; then cf_disable_rpath_hack=yes; else cf_disable_rpath_hack=no; fi +echo "$as_me:25774: result: $cf_disable_rpath_hack" >&5 echo "${ECHO_T}$cf_disable_rpath_hack" >&6 -if test "$cf_disable_rpath_hack" = no ; then -echo "$as_me:24296: checking for updated LDFLAGS" >&5 +if test "$enable_rpath_hack" = yes ; then + +echo "$as_me:25779: checking for updated LDFLAGS" >&5 echo $ECHO_N "checking for updated LDFLAGS... $ECHO_C" >&6 if test -n "$LD_RPATH_OPT" ; then - echo "$as_me:24299: result: maybe" >&5 + echo "$as_me:25782: result: maybe" >&5 echo "${ECHO_T}maybe" >&6 for ac_prog in ldd do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:24306: checking for $ac_word" >&5 +echo "$as_me:25789: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_cf_ldd_prog+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$cf_ldd_prog"; then ac_cv_prog_cf_ldd_prog="$cf_ldd_prog" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_cf_ldd_prog="$ac_prog" -echo "$as_me:24321: found $ac_dir/$ac_word" >&5 +echo "$as_me:25804: found $ac_dir/$ac_word" >&5 break done fi fi cf_ldd_prog=$ac_cv_prog_cf_ldd_prog if test -n "$cf_ldd_prog"; then - echo "$as_me:24329: result: $cf_ldd_prog" >&5 + echo "$as_me:25812: result: $cf_ldd_prog" >&5 echo "${ECHO_T}$cf_ldd_prog" >&6 else - echo "$as_me:24332: result: no" >&5 + echo "$as_me:25815: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$cf_ldd_prog" && break done test -n "$cf_ldd_prog" || cf_ldd_prog="no" cf_rpath_list="/usr/lib /lib" if test "$cf_ldd_prog" != no then cf_rpath_oops= -cat >conftest.$ac_ext <<_ACEOF -#line 24346 "configure" +cat >"conftest.$ac_ext" <<_ACEOF +#line 25829 "configure" #include "confdefs.h" #include <stdio.h> int main (void) { printf("Hello"); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:24358: \"$ac_link\"") >&5 +rm -f "conftest.$ac_objext" "conftest$ac_exeext" +if { (eval echo "$as_me:25841: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:24361: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:24364: \"$ac_try\"") >&5 + echo "$as_me:25844: \$? = $ac_status" >&5 + (exit "$ac_status"); } && + { ac_try='test -s "conftest$ac_exeext"' + { (eval echo "$as_me:25847: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:24367: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq` - cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq` + echo "$as_me:25850: \$? = $ac_status" >&5 + (exit "$ac_status"); }; }; then + cf_rpath_oops=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} ' not found' | sed -e 's% =>.*$%%' |sort | uniq` + cf_rpath_list=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq` else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +cat "conftest.$ac_ext" >&5 fi -rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" # If we passed the link-test, but get a "not found" on a given library, # this could be due to inept reconfiguration of gcc to make it only # partly honor /usr/local/lib (or whatever). Sometimes this behavior # is intentional, e.g., installing gcc in /usr/bin and suppressing the # /usr/local libraries. if test -n "$cf_rpath_oops" then for cf_rpath_src in $cf_rpath_oops do for cf_rpath_dir in \ /usr/local \ /usr/pkg \ /opt/sfw do - if test -f $cf_rpath_dir/lib/$cf_rpath_src + if test -f "$cf_rpath_dir/lib/$cf_rpath_src" then test -n "$verbose" && echo " ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6 -echo "${as_me:-configure}:24395: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5 +echo "${as_me:-configure}:25878: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5 LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib" break fi done done fi fi test -n "$verbose" && echo " ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 -echo "${as_me:-configure}:24407: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:25890: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6 -echo "${as_me:-configure}:24411: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:25894: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LDFLAGS do - case $cf_rpath_src in + case "$cf_rpath_src" in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 -echo "${as_me:-configure}:24448: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 +echo "${as_me:-configure}:25931: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done LDFLAGS=$cf_rpath_dst test -n "$verbose" && echo " ...checked LDFLAGS $LDFLAGS" 1>&6 -echo "${as_me:-configure}:24461: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:25944: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6 -echo "${as_me:-configure}:24465: testing ...checking LIBS $LIBS ..." 1>&5 +echo "${as_me:-configure}:25948: testing ...checking LIBS $LIBS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LIBS do - case $cf_rpath_src in + case "$cf_rpath_src" in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 -echo "${as_me:-configure}:24502: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 +echo "${as_me:-configure}:25985: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done LIBS=$cf_rpath_dst test -n "$verbose" && echo " ...checked LIBS $LIBS" 1>&6 -echo "${as_me:-configure}:24515: testing ...checked LIBS $LIBS ..." 1>&5 +echo "${as_me:-configure}:25998: testing ...checked LIBS $LIBS ..." 1>&5 test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 -echo "${as_me:-configure}:24519: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:26002: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 else - echo "$as_me:24522: result: no" >&5 + echo "$as_me:26005: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi cf_libname=\${LIB_BASENAME} cf_liblink=$cf_libname cf_libroot=$cf_libname if test "x$cf_cv_do_symlinks" = xyes then case "x$cf_cv_shlib_version" in (xrel) cf_liblink="\${LIB_ABI_NAME}" cf_libname="\${LIB_REL_NAME}" ;; (xabi) cf_liblink="\${LIB_REL_NAME}" cf_libname="\${LIB_ABI_NAME}" ;; esac fi LIB_TARGET=$cf_libname SET_SHLIB_VARS="# begin CF__DEFINE_SHLIB_VARS\\ LIB_BASENAME = \${LIB_PREFIX}\${LIB_ROOTNAME}\${LIB_SUFFIX}\\ LIB_REL_NAME = \${LIB_BASENAME}.\${REL_VERSION}\\ LIB_ABI_NAME = \${LIB_BASENAME}.\${ABI_VERSION}\\ LIB_TARGET = $LIB_TARGET\\ RM_SHARED_OPTS = $RM_SHARED_OPTS\\ # end CF__DEFINE_SHLIB_VARS" +echo "$as_me:26038: checking for linker search path" >&5 +echo $ECHO_N "checking for linker search path... $ECHO_C" >&6 +if test "${cf_cv_ld_searchpath+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +if test "$cross_compiling" != yes ; then + +# GNU binutils' ld does not involve permissions which may stop ldconfig. +cf_pathlist=`ld --verbose 2>/dev/null | grep SEARCH_DIR | sed -e 's,SEARCH_DIR[("=][("=]*,,g' -e 's/"[)];//gp' | sort -u` + +# The -NX options tell newer versions of Linux ldconfig to not attempt to +# update the cache, which makes it run faster. +test -z "$cf_pathlist" && \ + cf_pathlist=`ldconfig -NX -v 2>/dev/null | sed -e '/^[ ]/d' -e 's/:$//' | sort -u` + +test -z "$cf_pathlist" && + cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e '/^[ ]/d' -e 's/:$//p' | sort -u` + +# This works with OpenBSD 6.5, which lists only filenames +test -z "$cf_pathlist" && + cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e 's,^Adding \(.*\)/.*$,\1,p' | sort -u` + +if test -z "$cf_pathlist" +then + # dyld default path with MacOS + if test -f /usr/bin/otool && test "x`uname -s`" = xDarwin + then + # do this to bypass check + cf_cv_ld_searchpath='$HOME/lib' + cf_pathlist="/usr/local/lib /lib /usr/lib" + fi +fi + +if test -z "$cf_pathlist" +then + # Solaris is hardcoded + if test -d /opt/SUNWspro/lib + then + cf_pathlist="/opt/SUNWspro/lib /usr/ccs/lib /usr/lib" + elif test -d /usr/ccs/lib + then + cf_pathlist="/usr/ccs/lib /usr/lib" + fi +fi + +fi + +# If nothing else, assume it is conventional +test -z "$cf_pathlist" && cf_pathlist="/usr/lib /lib" + +# Finally, check that this is only directories +for cf_path in $0 $cf_pathlist +do + if test -d "$cf_path"; then + test -n "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath="${cf_cv_ld_searchpath} " + cf_cv_ld_searchpath="${cf_cv_ld_searchpath}${cf_path}" + fi +done + +# Ensure that it is nonempty +test -z "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath=/usr/lib + +fi +echo "$as_me:26102: result: $cf_cv_ld_searchpath" >&5 +echo "${ECHO_T}$cf_cv_ld_searchpath" >&6 + +LD_SEARCHPATH=`echo "$cf_cv_ld_searchpath"|sed -e 's/ /|/g'` + ac_config_files="$ac_config_files dialog-config makefile $EXTRA_OUTPUT $SUB_MAKEFILE" ac_config_commands="$ac_config_commands default" 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 overriden 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:24636: creating $CONFIG_STATUS" >&5 +{ echo "$as_me:26188: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +cat >"$CONFIG_STATUS" <<_ACEOF #! $SHELL # Generated automatically by configure. # 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 SHELL=\${CONFIG_SHELL-$SHELL} ac_cs_invocation="\$0 \$@" +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>"$CONFIG_STATUS" <<\_ACEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset + as_unset="unset" else - as_unset=false + as_unset="false" fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } exec 6>&1 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS + echo "config_files=\"$ac_config_files\"" >>"$CONFIG_STATUS" fi if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS + echo "config_headers=\"$ac_config_headers\"" >>"$CONFIG_STATUS" fi if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS + echo "config_links=\"$ac_config_links\"" >>"$CONFIG_STATUS" fi if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS + echo "config_commands=\"$ac_config_commands\"" >>"$CONFIG_STATUS" fi -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -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 <dickey@invisible-island.net>." EOF -cat >>$CONFIG_STATUS <<EOF +cat >>"$CONFIG_STATUS" <<EOF ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.52.20170501, +configured by $0, generated by GNU Autoconf 2.52.20210105, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +Copyright 2003-2020,2021 Thomas E. Dickey Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir +srcdir="$srcdir" INSTALL="$INSTALL" EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. EOF -cat >>$CONFIG_STATUS <<EOF +cat >>"$CONFIG_STATUS" <<EOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header - { { echo "$as_me:24812: error: ambiguous option: $1 + { { echo "$as_me:26367: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. - -*) { { echo "$as_me:24831: error: unrecognized option: $1 + -*) { { echo "$as_me:26386: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done exec 5>>config.log cat >&5 << _ACEOF ## ----------------------- ## ## Running config.status. ## ## ----------------------- ## -This file was extended by $as_me 2.52.20170501, executed with +This file was extended by $as_me 2.52.20210105, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS - > $ac_cs_invocation + > "$ac_cs_invocation" on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF -cat >>$CONFIG_STATUS <<EOF +cat >>"$CONFIG_STATUS" <<EOF # # INIT-COMMANDS section. # ABI_VERSION="$ABI_VERSION" REL_VERSION="$REL_VERSION" LIB_MODEL="$LIB_MODEL" LIB_PREFIX="$LIB_PREFIX" LIB_ROOTNAME="$LIB_ROOTNAME" DFT_DEP_SUFFIX="$DFT_DEP_SUFFIX" RM_SHARED_OPTS="$RM_SHARED_OPTS" cf_cv_do_symlinks="$cf_cv_do_symlinks" cf_cv_shlib_version="$cf_cv_shlib_version" EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "dialog-config" ) CONFIG_FILES="$CONFIG_FILES dialog-config" ;; "makefile" ) CONFIG_FILES="$CONFIG_FILES makefile" ;; "$EXTRA_OUTPUT" ) CONFIG_FILES="$CONFIG_FILES $EXTRA_OUTPUT" ;; "$SUB_MAKEFILE" ) CONFIG_FILES="$CONFIG_FILES $SUB_MAKEFILE" ;; "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; "dlg_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS dlg_config.h:config.hin" ;; - *) { { echo "$as_me:24890: error: invalid argument: $ac_config_target" >&5 + *) { { echo "$as_me:26445: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 +if "$ac_need_defaults"; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : ${TMPDIR=/tmp} { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } EOF -cat >>$CONFIG_STATUS <<EOF +cat >>"$CONFIG_STATUS" <<EOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datarootdir@,$datarootdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t +s,@runstatedir@,$runstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@DESTDIR@,$DESTDIR,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t s,@CPP@,$CPP,;t t +s,@GREP@,$GREP,;t t +s,@EGREP@,$EGREP,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@LN_S@,$LN_S,;t t s,@LINT@,$LINT,;t t s,@LINT_OPTS@,$LINT_OPTS,;t t s,@GROFF_PATH@,$GROFF_PATH,;t t s,@NROFF_PATH@,$NROFF_PATH,;t t s,@TBL_PATH@,$TBL_PATH,;t t s,@GROFF_NOTE@,$GROFF_NOTE,;t t s,@NROFF_NOTE@,$NROFF_NOTE,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@ARFLAGS@,$ARFLAGS,;t t +s,@FGREP@,$FGREP,;t t s,@cf_cv_makeflags@,$cf_cv_makeflags,;t t s,@CTAGS@,$CTAGS,;t t s,@ETAGS@,$ETAGS,;t t s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t s,@ECHO_LT@,$ECHO_LT,;t t s,@ECHO_LD@,$ECHO_LD,;t t s,@RULE_CC@,$RULE_CC,;t t s,@SHOW_CC@,$SHOW_CC,;t t s,@ECHO_CC@,$ECHO_CC,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t s,@PROG_EXT@,$PROG_EXT,;t t s,@LIB_PREFIX@,$LIB_PREFIX,;t t +s,@X_CFLAGS@,$X_CFLAGS,;t t +s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t +s,@X_LIBS@,$X_LIBS,;t t +s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t s,@VERSION@,$VERSION,;t t s,@VERSION_MAJOR@,$VERSION_MAJOR,;t t s,@VERSION_MINOR@,$VERSION_MINOR,;t t s,@VERSION_PATCH@,$VERSION_PATCH,;t t s,@PACKAGE@,$PACKAGE,;t t s,@CFG_ROOTNAME@,$CFG_ROOTNAME,;t t s,@HDR_ROOTNAME@,$HDR_ROOTNAME,;t t s,@LIB_ROOTNAME@,$LIB_ROOTNAME,;t t s,@SUB_INC@,$SUB_INC,;t t s,@cf_man2html@,$cf_man2html,;t t s,@MAN2HTML_NOTE@,$MAN2HTML_NOTE,;t t s,@MAN2HTML_PATH@,$MAN2HTML_PATH,;t t s,@MAN2HTML_TEMP@,$MAN2HTML_TEMP,;t t s,@CONFIG_H@,$CONFIG_H,;t t s,@ALLOCA@,$ALLOCA,;t t s,@GLIBC21@,$GLIBC21,;t t s,@LIBICONV@,$LIBICONV,;t t s,@USE_NLS@,$USE_NLS,;t t s,@MSGFMT@,$MSGFMT,;t t s,@GMSGFMT@,$GMSGFMT,;t t s,@XGETTEXT@,$XGETTEXT,;t t s,@INTLBISON@,$INTLBISON,;t t s,@BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t s,@CATALOGS@,$CATALOGS,;t t s,@CATOBJEXT@,$CATOBJEXT,;t t s,@GMOFILES@,$GMOFILES,;t t s,@INTLLIBS@,$INTLLIBS,;t t s,@INTLOBJS@,$INTLOBJS,;t t s,@POFILES@,$POFILES,;t t s,@POSUB@,$POSUB,;t t s,@DATADIRNAME@,$DATADIRNAME,;t t s,@INSTOBJEXT@,$INSTOBJEXT,;t t s,@GENCAT@,$GENCAT,;t t s,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t s,@NLS_TEXTDOMAIN@,$NLS_TEXTDOMAIN,;t t s,@MSG_DIR_MAKE@,$MSG_DIR_MAKE,;t t s,@SUB_MAKEFILE@,$SUB_MAKEFILE,;t t s,@INTLDIR_MAKE@,$INTLDIR_MAKE,;t t s,@GT_YES@,$GT_YES,;t t s,@GT_NO@,$GT_NO,;t t s,@LINK_PREFIX@,$LINK_PREFIX,;t t s,@ABI_VERSION@,$ABI_VERSION,;t t s,@REL_VERSION@,$REL_VERSION,;t t s,@shlibdir@,$shlibdir,;t t s,@LIBTOOL_VERSION@,$LIBTOOL_VERSION,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_ct_LIBTOOL@,$ac_ct_LIBTOOL,;t t s,@LT_UNDEF@,$LT_UNDEF,;t t s,@LIBTOOL_CXX@,$LIBTOOL_CXX,;t t s,@LIBTOOL_OPTS@,$LIBTOOL_OPTS,;t t s,@LIB_CREATE@,$LIB_CREATE,;t t s,@LIB_OBJECT@,$LIB_OBJECT,;t t s,@LIB_SUFFIX@,$LIB_SUFFIX,;t t s,@LIB_PREP@,$LIB_PREP,;t t s,@LIB_CLEAN@,$LIB_CLEAN,;t t s,@LIB_COMPILE@,$LIB_COMPILE,;t t s,@LIB_LINK@,$LIB_LINK,;t t s,@LIB_INSTALL@,$LIB_INSTALL,;t t s,@LIB_UNINSTALL@,$LIB_UNINSTALL,;t t s,@EXPORT_SYMS@,$EXPORT_SYMS,;t t s,@MAKE_DLLS@,$MAKE_DLLS,;t t s,@CC_SHARED_OPTS@,$CC_SHARED_OPTS,;t t s,@LD_RPATH_OPT@,$LD_RPATH_OPT,;t t s,@LD_SHARED_OPTS@,$LD_SHARED_OPTS,;t t s,@MK_SHARED_LIB@,$MK_SHARED_LIB,;t t s,@RM_SHARED_OPTS@,$RM_SHARED_OPTS,;t t s,@LINK_PROGS@,$LINK_PROGS,;t t s,@LINK_TESTS@,$LINK_TESTS,;t t s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t s,@LOCAL_LDFLAGS2@,$LOCAL_LDFLAGS2,;t t s,@INSTALL_LIB@,$INSTALL_LIB,;t t s,@RPATH_LIST@,$RPATH_LIST,;t t s,@RESULTING_SYMS@,$RESULTING_SYMS,;t t s,@VERSIONED_SYMS@,$VERSIONED_SYMS,;t t s,@WILDCARD_SYMS@,$WILDCARD_SYMS,;t t s,@DFT_LWR_MODEL@,$DFT_LWR_MODEL,;t t s,@DFT_LIB_SUFFIX@,$DFT_LIB_SUFFIX,;t t s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t s,@LIB_MODEL@,$LIB_MODEL,;t t s,@LIBTOOL_MAKE@,$LIBTOOL_MAKE,;t t s,@MAKE_NORMAL@,$MAKE_NORMAL,;t t s,@MAKE_SHARED@,$MAKE_SHARED,;t t s,@MAKE_STATIC@,$MAKE_STATIC,;t t s,@NCURSES_CONFIG@,$NCURSES_CONFIG,;t t s,@ac_ct_NCURSES_CONFIG@,$ac_ct_NCURSES_CONFIG,;t t -s,@X_CFLAGS@,$X_CFLAGS,;t t -s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t -s,@X_LIBS@,$X_LIBS,;t t -s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@XCURSES_CONFIG@,$XCURSES_CONFIG,;t t s,@ac_ct_XCURSES_CONFIG@,$ac_ct_XCURSES_CONFIG,;t t s,@EXTRAOBJS@,$EXTRAOBJS,;t t s,@PACKAGE_PREFIX@,$PACKAGE_PREFIX,;t t s,@PACKAGE_CONFIG@,$PACKAGE_CONFIG,;t t s,@cf_ldd_prog@,$cf_ldd_prog,;t t s,@SET_SHLIB_VARS@,$SET_SHLIB_VARS,;t t s,@LIB_TARGET@,$LIB_TARGET,;t t +s,@LD_SEARCHPATH@,$LD_SEARCHPATH,;t t CEOF EOF - cat >>$CONFIG_STATUS <<\EOF + cat >>"$CONFIG_STATUS" <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then + while "$ac_more_lines"; do + if test "$ac_beg" -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed # It is possible to make a multiline substitution using escaped newlines. # Ensure that we do not split the substitution between script fragments. ac_BEG=$ac_end - ac_END=`expr $ac_end + $ac_max_sed_lines` + ac_END=`expr "$ac_end" + "$ac_max_sed_lines"` sed "1,${ac_BEG}d; ${ac_END}p; q" $tmp/subs.sed >$tmp/subs.next if test -s $tmp/subs.next; then grep '^s,@[^@,][^@,]*@,.*\\$' $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then grep "^s,@[^@,][^@,]*@,.*,;t t$" $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then - if test $ac_beg -gt 1; then - ac_end=`expr $ac_end - 1` + if test "$ac_beg" -gt 1; then + ac_end=`expr "$ac_end" - 1` continue fi fi fi fi if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi - ac_sed_frag=`expr $ac_sed_frag + 1` + ac_sed_frag=`expr "$ac_sed_frag" + 1` ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` + ac_end=`expr "$ac_end" + "$ac_max_sed_lines"` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in + case "$ac_file" in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` else ac_dir_suffix= ac_dots= fi - case $srcdir in + case "$srcdir" in .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else - ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` + ac_top_srcdir=`echo "$ac_dots" | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; + ac_srcdir="$srcdir$ac_dir_suffix"; + ac_top_srcdir="$srcdir" ;; *) # Relative path. - ac_srcdir=$ac_dots$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_dots$srcdir ;; + ac_srcdir="$ac_dots$srcdir$ac_dir_suffix" + ac_top_srcdir="$ac_dots$srcdir" ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then - { echo "$as_me:25254: creating $ac_file" >&5 + { echo "$as_me:26814: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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 automatically by config.status. */ configure_input="Generated automatically from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:25272: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:26832: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree - echo $srcdir/$f + echo "$srcdir/$f" else # /dev/null tree - { { echo "$as_me:25285: error: cannot find input file: $f" >&5 + { { echo "$as_me:26845: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF ac_warn_datarootdir=no if test x"$ac_file" != x-; then for ac_item in $ac_file_inputs do - ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item` + ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' "$ac_item"` if test -n "$ac_seen"; then - ac_used=`grep '@datarootdir@' $ac_item` + ac_used=`grep '@datarootdir@' "$ac_item"` if test -z "$ac_used"; then - { echo "$as_me:25301: WARNING: datarootdir was used implicitly but not set: + { echo "$as_me:26861: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi fi - ac_seen=`grep '${datarootdir}' $ac_item` + ac_seen=`grep '${datarootdir}' "$ac_item"` if test -n "$ac_seen"; then - { echo "$as_me:25310: WARNING: datarootdir was used explicitly but not set: + { echo "$as_me:26870: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi done fi if test "x$ac_warn_datarootdir" = xyes; then ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'" fi EOF -cat >>$CONFIG_STATUS <<EOF +cat >>"$CONFIG_STATUS" <<EOF sed "$ac_vpsub $extrasub EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then - cp $tmp/out $ac_file + cp "$tmp/out" "$ac_file" for ac_name in prefix exec_prefix datarootdir do - ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file` + ac_seen=`${FGREP-fgrep} -n '${'$ac_name'[:=].*}' "$ac_file"` if test -n "$ac_seen"; then - ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file` + ac_init=`${EGREP-egrep} '[ ]*'$ac_name'[ ]*=' "$ac_file"` if test -z "$ac_init"; then ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'` - { echo "$as_me:25347: WARNING: Variable $ac_name is used but was not set: + { echo "$as_me:26907: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&5 echo "$as_me: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&2;} fi fi done - egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out - egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out + ${EGREP-egrep} -n '@[a-z_][a-z_0-9]+@' "$ac_file" >$tmp/out + ${EGREP-egrep} -n '@[A-Z_][A-Z_0-9]+@' "$ac_file" >>$tmp/out if test -s $tmp/out; then ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out` - { echo "$as_me:25358: WARNING: Some variables may not be substituted: + { echo "$as_me:26918: WARNING: Some variables may not be substituted: $ac_seen" >&5 echo "$as_me: WARNING: Some variables may not be substituted: $ac_seen" >&2;} fi else cat $tmp/out fi rm -f $tmp/out done EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_iB='\([ ]\),\1#\2define\3' ac_iC=' ' ac_iD='\4,;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in + case "$ac_file" in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac - test x"$ac_file" != x- && { echo "$as_me:25407: creating $ac_file" >&5 + test x"$ac_file" != x- && { echo "$as_me:26967: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:25418: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:26978: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree - echo $srcdir/$f + echo "$srcdir/$f" else # /dev/null tree - { { echo "$as_me:25431: error: cannot find input file: $f" >&5 + { { echo "$as_me:26991: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in EOF # Transform confdefs.h into a list of #define's. We won't use it as a sed # script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to # be either 'cat' or 'sort'. sort -u confdefs.h | uniq >conftest.vals # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail -echo ' rm -f conftest.frag' >> $CONFIG_STATUS +echo ' rm -f conftest.frag' >> "$CONFIG_STATUS" while grep . conftest.vals >/dev/null do # Write chunks of a limited-size here document to conftest.frag. - echo ' cat >> conftest.frag <<CEOF' >> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS - echo 'CEOF' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + echo ' cat >> conftest.frag <<CEOF' >> "$CONFIG_STATUS" + sed "${ac_max_here_lines}q" conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> "$CONFIG_STATUS" + echo 'CEOF' >> "$CONFIG_STATUS" + sed "1,${ac_max_here_lines}d" conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals # Run sed to substitute the contents of conftest.frag into $tmp/in at the # marker @DEFS@. echo ' cat >> conftest.edit <<CEOF /@DEFS@/r conftest.frag /@DEFS@/d CEOF sed -f conftest.edit $tmp/in > $tmp/out rm -f $tmp/in mv $tmp/out $tmp/in rm -f conftest.edit conftest.frag -' >> $CONFIG_STATUS +' >> "$CONFIG_STATUS" -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF # 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 automatically by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated automatically by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then - if cmp -s $ac_file $tmp/config.h 2>/dev/null; then - { echo "$as_me:25489: $ac_file is unchanged" >&5 + if cmp -s "$ac_file" "$tmp/config.h" 2>/dev/null; then + { echo "$as_me:27049: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } fi - rm -f $ac_file - mv $tmp/config.h $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" fi else cat $tmp/config.h rm -f $tmp/config.h fi done EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - case $ac_dest in + case "$ac_dest" in default-1 ) 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.inn. case "$ac_file" in (*/[Mm]akefile.in) # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir="`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`" ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - ac_base=`basename $ac_file .in` + ac_dots="`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`" + ac_base="`basename $ac_file .in`" # 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 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" sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/$ac_base" || echo "creating $ac_dir/$ac_base" sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/$ac_base.in" > "$ac_dir/$ac_base" fi ;; esac done ;; default ) cf_libname=\${LIB_BASENAME} cf_liblink=$cf_libname cf_libroot=$cf_libname if test "x$cf_cv_do_symlinks" = xyes then case "x$cf_cv_shlib_version" in (xrel) cf_liblink="\${LIB_ABI_NAME}" cf_libname="\${LIB_REL_NAME}" ;; (xabi) cf_liblink="\${LIB_REL_NAME}" cf_libname="\${LIB_ABI_NAME}" ;; esac fi LIB_TARGET=$cf_libname case x$LIB_MODEL in (xlibtool|xshared) cf_libdeps="\${LIBS} \${LDFLAGS}" ;; (x*) cf_libdeps= ;; esac cat >>makefile <<CF_EOF # generated by CF__ADD_SHLIB_RULES # libmodel: $LIB_MODEL # symlinks: $cf_cv_do_symlinks # shlibver: $cf_cv_shlib_version CF_EOF cat >>makefile <<CF_EOF $cf_libname :: \\ CF_EOF cat >>makefile <<CF_EOF \${LIB_OBJECT} @echo linking \$@ \$(LIBTOOL_CREATE) \${LIB_OBJECT} $cf_libdeps CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>makefile <<CF_EOF \$(LN_S) $cf_libname $cf_liblink \$(LN_S) $cf_liblink $cf_libroot CF_EOF fi cat >>makefile <<CF_EOF install \\ install.libs :: \$(DESTDIR)\$(libdir)/$cf_libname \$(DESTDIR)\$(libdir)/$cf_libname :: \\ \$(DESTDIR)\$(libdir) \\ \${LIB_OBJECT} @echo linking \$@ \$(LIBTOOL_CREATE) \${LIB_OBJECT} $cf_libdeps CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>makefile <<CF_EOF cd \$(DESTDIR)\$(libdir) && (\$(LN_S) $cf_libname $cf_liblink; \$(LN_S) $cf_liblink $cf_libroot; ) CF_EOF fi if test x$LIB_MODEL = xshared then cat >>makefile <<CF_EOF - \$(SHELL) -c "if test -z "\$(DESTDIR)" ; then /sbin/ldconfig; fi" CF_EOF fi cat >>makefile <<CF_EOF uninstall \\ uninstall.libs :: @echo uninstalling \$(DESTDIR)\$(libdir)/$cf_libname CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>makefile <<CF_EOF -rm -f \$(DESTDIR)\$(libdir)/$cf_libroot -rm -f \$(DESTDIR)\$(libdir)/$cf_liblink CF_EOF fi cat >>makefile <<CF_EOF -rm -f \$(DESTDIR)\$(libdir)/$cf_libname clean \\ clean.libs :: CF_EOF if test "x$cf_cv_do_symlinks" = xyes then cat >>makefile <<CF_EOF -rm -f $cf_libroot -rm -f $cf_liblink CF_EOF fi cat >>makefile <<CF_EOF -rm -f $cf_libname mostlyclean:: -rm -f \${LIB_OBJECT} # end generated by CF__ADD_SHLIB_RULES CF_EOF ;; esac done EOF -cat >>$CONFIG_STATUS <<\EOF +cat >>"$CONFIG_STATUS" <<\EOF { (exit 0); exit 0; } EOF -chmod +x $CONFIG_STATUS +chmod +x "$CONFIG_STATUS" ac_clean_files=$ac_clean_files_save # 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=: exec 5>/dev/null - $SHELL $CONFIG_STATUS || ac_cs_success=false + $SHELL "$CONFIG_STATUS" || 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 || { (exit 1); exit 1; } + "$ac_cs_success" || { (exit 1); exit 1; } fi diff --git a/configure.in b/configure.in index fb6633c1a11f..f81a47e8e376 100644 --- a/configure.in +++ b/configure.in @@ -1,273 +1,285 @@ -dnl $Id: configure.in,v 1.92 2018/06/18 08:59:49 tom Exp $ +dnl $Id: configure.in,v 1.101 2020/11/26 16:21:27 tom Exp $ dnl Process this file with autoconf to produce a configure script. dnl --------------------------------------------------------------------------- -dnl Copyright 1999-2016,2018 -- Thomas E. Dickey +dnl Copyright 1999-2019,2020 -- Thomas E. Dickey dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the dnl "Software"), to deal in the Software without restriction, including dnl without limitation the rights to use, copy, modify, merge, publish, dnl distribute, distribute with modifications, sublicense, and/or sell dnl copies of the Software, and to permit persons to whom the Software is dnl furnished to do so, subject to the following conditions: dnl dnl The above copyright notice and this permission notice shall be included dnl in all copies or portions of the Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. dnl dnl Except as contained in this notice, the name(s) of the above copyright dnl holders shall not be used in advertising or otherwise to promote the dnl sale, use or other dealings in this Software without prior written dnl authorization. dnl --------------------------------------------------------------------------- -AC_PREREQ(2.52.20170501) +AC_PREREQ(2.52.20200802) AC_INIT(dialog.h) AC_CONFIG_HEADER(dlg_config.h:config.hin) AC_ARG_PROGRAM DESTDIR= AC_SUBST(DESTDIR) dnl dnl Checks for programs. dnl CF_PROG_CC AC_PROG_CPP AC_PROG_MAKE_SET AC_PROG_RANLIB AC_PROG_INSTALL CF_PROG_LN_S CF_PROG_LINT CF_PROG_GROFF test -z "$GROFF_NOTE" && NROFF_NOTE= dnl needed for CF_WITH_LIBTOOL CF_AR_FLAGS CF_MAKEFLAGS CF_MAKE_TAGS CF_DISABLE_ECHO CF_PROG_EXT CF_PATHSEP CF_LIB_PREFIX CF_XOPEN_SOURCE CF_LARGEFILE CF_WITH_INSTALL_PREFIX -CF_WITH_WARNINGS +CF_WITH_SCREEN_PDCURSES +CF_ENABLE_WARNINGS(,yes) CF_PKG_CONFIG dnl dnl Allow dialog program and library to be renamed. AC_MSG_CHECKING(for this package's name) AC_ARG_WITH(package, [ --with-package=XXX rename dialog to XXX, library to libXXX.a, etc], [PACKAGE=$withval], [PACKAGE=dialog]) AC_MSG_RESULT($PACKAGE) CF_VERSION_INFO(dialog,$PACKAGE) CFG_ROOTNAME=$PACKAGE HDR_ROOTNAME=$PACKAGE LIB_ROOTNAME=$PACKAGE AC_SUBST(CFG_ROOTNAME) AC_SUBST(HDR_ROOTNAME) AC_SUBST(LIB_ROOTNAME) dnl dnl If package is renamed, it is useful to have the dlg_XXX headers in a dnl subdirectory (using the package name) so that multiple versions of the dnl headers can coexist. AC_MSG_CHECKING(if we should install dlg_XXX headers to subdirectory) AC_ARG_ENABLE(header-subdir, [ --enable-header-subdir install dlg_XXX headers to subdirectory], [SUB_INC=$enableval], [SUB_INC=no]) AC_MSG_RESULT($SUB_INC) AC_SUBST(SUB_INC) CF_WITH_MAN2HTML dnl dnl Checks for libraries. dnl EXTRAOBJS="" CF_BUNDLED_INTL(makefile,enable) CF_MATH_LIB(,sqrt(x)) CF_WITH_NO_LEAKS CF_ARG_MSG_ENABLE([if you want --trace option], trace, [ --disable-trace do not support --trace option], [EXTRAOBJS="$EXTRAOBJS trace\$o" AC_DEFINE(HAVE_DLG_TRACE,1,[Define to 1 to support --trace option])],,yes) +CF_ENABLE_RPATH CF_LD_RPATH_OPT CF_WITH_SHARED_OR_LIBTOOL(DIALOG,${VERSION_MAJOR}.${VERSION_MINOR},`echo "$VERSION" |sed -e 's/:/./g'`) CF_WITH_CURSES_DIR -CF_ENABLE_RPATH - CF_WITH_NCURSES_ETC CF_WIDEC_CURSES cf_all_widgets=yes CF_ARG_MSG_ENABLE([if you want extra dialogs], extras, [ --disable-extras do not include extra dialogs], [cf_all_widgets=yes],[cf_all_widgets=no],yes) +cf_use_dialogrc=yes CF_ARG_MSG_ENABLE([if you want config-file support], rc-file, [ --disable-rc-file do not include config-file support], [EXTRAOBJS="$EXTRAOBJS rc\$o" - AC_DEFINE(HAVE_RC_FILE,1,[Define to 1 to include config-file support])],,$cf_all_widgets) + AC_DEFINE(HAVE_RC_FILE,1,[Define to 1 to include config-file support])],cf_use_dialogrc=no,$cf_all_widgets) + +cf_use_dialogrc2=yes +if test "$cf_use_dialogrc" = yes; then +CF_ARG_MSG_ENABLE([if you want extra attributes in config-file], + rc-file2, + [ --disable-rc-file2 do not use extra attributes in config-file], + [AC_DEFINE(HAVE_RC_FILE2,1,[Define to 1 to use extra attributes in config-file])],cf_use_dialogrc2=no,$cf_all_widgets) +fi CF_ARG_MSG_ENABLE([if you want Xdialog-style dialogs], Xdialog, [ --disable-Xdialog do not include Xdialog-style dialogs (1.1)], [EXTRAOBJS="$EXTRAOBJS calendar\$o fselect\$o timebox\$o" AC_DEFINE(HAVE_XDIALOG,1,[Define to 1 to include Xdialog-style dialogs])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want extra Xdialog-style dialogs (1.2)], Xdialog2, [ --disable-Xdialog2 do not include extra Xdialog-style dialogs (1.2)], [EXTRAOBJS="$EXTRAOBJS buildlist\$o rangebox\$o treeview\$o" AC_DEFINE(HAVE_XDIALOG2,1,[Define to 1 to include extra Xdialog-style dialogs])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want compatibility with whiptail options], whiptail, [ --disable-whiptail do not map extra whiptail options], [AC_DEFINE(HAVE_WHIPTAIL,1,[Define to 1 to include extra whiptail options])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want the form dialog], form, [ --disable-form do not include the form dialog], [EXTRAOBJS="$EXTRAOBJS formbox\$o" AC_DEFINE(HAVE_DLG_FORMBOX,1,[Define to 1 to include the form dialog])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want the gauge dialog], gauge, [ --disable-gauge do not include the gauge dialogs], [EXTRAOBJS="$EXTRAOBJS guage\$o pause\$o prgbox\$o progressbox\$o" AC_DEFINE(HAVE_DLG_GAUGE,1,[Define to 1 to include the gauge dialogs])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want the tailbox dialog], tailbox, [ --disable-tailbox do not include the tailbox dialog], [EXTRAOBJS="$EXTRAOBJS tailbox\$o" AC_DEFINE(HAVE_DLG_TAILBOX,1,[Define to 1 to include the tailbox dialog])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want the mixedform dialog], mixedform, [ --disable-mixedform do not include the mixedform dialog], [EXTRAOBJS="$EXTRAOBJS mixedform\$o" AC_DEFINE(HAVE_DLG_MIXEDFORM,1,[Define to 1 to include the mixedform dialog])],,${enable_form:=$cf_all_widgets}) CF_ARG_MSG_ENABLE([if you want the mixedgauge dialog], mixedgauge, [ --disable-mixedgauge do not include the mixedgauge dialog], [EXTRAOBJS="$EXTRAOBJS mixedgauge\$o" AC_DEFINE(HAVE_MIXEDGAUGE,1,[Define to 1 to include the mixedgauge dialog])],,$cf_all_widgets) CF_ARG_MSG_ENABLE([if you want the wide-curses features], widec, [ --enable-widec enable wide-curses features], [AC_DEFINE(USE_WIDE_CURSES,1,[Define to 1 to enable wide-curses features])],,$cf_cv_widec_curses) AC_SUBST(EXTRAOBJS) dnl dnl Checks for header files. dnl AC_HEADER_STDC AC_HEADER_TIME AC_HEADER_DIRENT -AC_CHECK_HEADERS(search.h stdint.h unistd.h) +AC_CHECK_HEADERS(search.h stdint.h sys/param.h unistd.h) CF_CURSES_TERM_H dnl dnl Checks for library functions. dnl AC_TYPE_SIGNAL AC_CHECK_FUNCS(\ -_nc_free_and_exit \ btowc \ mblen \ mbrlen \ mbrtowc \ mbtowc \ strcasecmp \ strftime \ tsearch \ waitpid \ wcsrtombs \ wcstombs \ wctob \ wctomb \ mktime \ ) CF_CURSES_FUNCS(\ flushinp \ getattrs \ getbegx \ getbegy \ getbegyx \ getcurx \ getcury \ getmaxx \ getmaxy \ getmaxyx \ getparx \ getpary \ getparyx \ use_default_colors \ wchgat \ wcursyncup \ wget_wch \ wsyncup \ ) +CF_CURSES_EXIT + AC_CHECK_FUNC(start_color,[AC_DEFINE(HAVE_COLOR,1,[Define to 1 if (n)curses has start_color function])]) CF_CURSES_CHTYPE CF_CURSES_WACS_SYMBOLS CF_CURSES_WGETPARENT CF_FUNC_WAIT CF_MBSTATE_T CF_SIZECHANGE CF_HEADERS_SH(DLG,dlg_config.h) AC_TRY_LINK([#include <locale.h>],[setlocale(LC_ALL, "")],[AC_DEFINE(HAVE_SETLOCALE,1,[Define to 1 if locale feature can be enabled])]) CF_NL_LANGINFO_1STDAY +CF_MERGE_EXTRA_CFLAGS CF_DISABLE_RPATH_HACK CF__DEFINE_SHLIB_VARS +CF_LD_SEARCHPATH AC_OUTPUT( dialog-config makefile $EXTRA_OUTPUT $SUB_MAKEFILE,[ CF__ADD_SHLIB_RULES( makefile, $LIB_MODEL, [\${LIB_OBJECT}], [\${LIBS} \${LDFLAGS}]) ],[ CF__INIT_SHLIB_RULES ],[sort -u]) diff --git a/dialog-config.in b/dialog-config.in index 530551ba1e57..8bf1a591b451 100644 --- a/dialog-config.in +++ b/dialog-config.in @@ -1,136 +1,254 @@ #!@SHELL@ -# $Id: dialog-config.in,v 1.6 2012/10/06 14:29:45 tom Exp $ +# $Id: dialog-config.in,v 1.13 2019/09/26 00:50:46 tom Exp $ ############################################################################## -# Copyright (c) 2007-2011,2012 Thomas E. Dickey # +# Copyright (c) 2007-2012,2019 Thomas E. Dickey # # # # 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, distribute # # with modifications, 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 ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## prefix="@prefix@" exec_prefix="@exec_prefix@" datarootdir="@datarootdir@" -bindir="@bindir@" -libdir="@libdir@" -datadir="@datadir@" -mandir="@mandir@" +same_prefix=yes +same_exec_prefix=yes THIS="@PACKAGE@" -test $# = 0 && exec @SHELL@ $0 --error +test $# = 0 && exec @SHELL@ "$0" --error while test $# -gt 0; do + + # (re)evaluate symbols that may depend upon $prefix + if [ "x$same_prefix" != "xyes" ] + then + eval exec_prefix='@exec_prefix@' + eval datarootdir='@datarootdir@' + elif [ "x$same_exec_prefix" != "xyes" ] + then + eval datarootdir='@datarootdir@' + fi + + eval bindir='"@bindir@"' + eval includedir='"@includedir@"' + eval libdir='"@libdir@"' + eval datadir='"@datadir@"' + eval mandir='"@mandir@"' + + [ -z "$includedir" ] && includedir="${prefix}/include" + + eval LDFLAGS='"@LDFLAGS@"' + eval LIBS='"@LIBS@"' + LIBS="-l${THIS} $LIBS" + + # If the directory given by --libdir is not in the LDFLAGS+LIBS set, + # prepend it to LDFLAGS to help link this application's library. + found=no + for opt in $LDFLAGS $LIBS + do + if [ "x$-L${libdir}" = "x$opt" ] + then + found=yes + break + fi + done + if [ $found = no ] + then + [ -n "$LFLAGS" ] && LDFLAGS=" $LFDLAGS" + LDFLAGS="-L${libdir}$LDFLAGS" + fi + [ -z "$LDFLAGS" ] && LDFLAGS="-L${exec_prefix}/lib" + + # Ignore -L options which do not correspond to an actual directory, + # or which are standard library directories (i.e., the linker is + # supposed to search those directories). + # + # There is no portable way to find the list of standard library + # directories. Require a POSIX shell anyway, to keep this simple. + lib_flags= + for opt in $LDFLAGS $LIBS + do + case $opt in + -L*) + [ -d ${opt##-L} ] || continue + case ${opt##-L} in + @LD_SEARCHPATH@) # skip standard libdir + continue + ;; + *) + ;; + esac + ;; + esac + lib_flags="$lib_flags $opt" + done + case "$1" in -*=*) ARG=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ARG= ;; esac case "$1" in # basic configuration --prefix=*) prefix="$ARG" test -z "$exec_prefix" && exec_prefix="$ARG" + same_prefix=no ;; --prefix) echo "$prefix" ;; --exec-prefix=*) exec_prefix="$ARG" + same_exec_prefix=no ;; --exec-prefix) echo "$exec_prefix" ;; # compile/link - --cflags) + --cflags|--cflags-only-I) INCS= - if test "${prefix}/include" != /usr/include ; then - INCS="-I${prefix}/include" + if test "$includedir" != /usr/include ; then + INCS="-I$includedir" fi sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO $INCS ENDECHO ;; + --cflags-only-other) + # no -D/-U options should be needed + echo + ;; --libs) - sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO - -L${exec_prefix}/lib -l${THIS} @LIBS@ -ENDECHO + OPTS= + for opt in $lib_flags + do + [ -n "$OPTS" ] && OPTS="$OPTS " + OPTS="${OPTS}${opt}" + done + printf "%s\n" "$OPTS" + ;; + --libs-only-L) + OPTS= + for opt in $lib_flags + do + case "x$opt" in + x-L*) + [ -n "$OPTS" ] && OPTS="$OPTS " + OPTS="${OPTS}${opt}" + ;; + esac + done + printf "%s\n" "$OPTS" + ;; + --libs-only-l) + OPTS= + for opt in $lib_flags + do + case "x$opt" in + x-l*) + [ -n "$OPTS" ] && OPTS="$OPTS " + OPTS="${OPTS}${opt}" + ;; + esac + done + printf "%s\n" "$OPTS" + ;; + --libs-only-other) + OPTS= + for opt in $lib_flags + do + case "x$opt" in + x-[lL]*) + ;; + *) + [ -n "$OPTS" ] && OPTS="$OPTS " + OPTS="${OPTS}${opt}" + ;; + esac + done + printf "%s\n" "$OPTS" ;; # identification --version) echo "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@" ;; --abi-version) echo "@VERSION@" | sed -e 's/:/./g' ;; # locations --bindir) echo "${bindir}" ;; --datadir) echo "${datadir}" ;; --libdir) echo "${libdir}" ;; --mandir) echo "${mandir}" ;; # general info --help) cat <<ENDHELP Usage: ${THIS}-config [options] Options: --prefix echos the package-prefix of ${THIS} --prefix=ARG sets the package-prefix of ${THIS} --exec-prefix echos the executable-prefix of ${THIS} --exec-prefix=ARG sets the executable-prefix of ${THIS} --cflags echos the C compiler flags needed to compile with ${THIS} --libs echos the libraries needed to link with ${THIS} + --libs-only-L echos -L linker options (search path) for ${THIS} + --libs-only-l echos -l linker options (libraries) for ${THIS} + --libs-only-other echos linker options other than -L/-l + --version echos the release+patchdate version of ${THIS} --abi-version echos the ABI version of ${THIS} --bindir echos the directory containing ${THIS} programs --datadir echos the directory containing ${THIS} data --libdir echos the directory containing ${THIS} libraries - --mandir echos the directory containing ${THIS} manpages + --mandir echos the directory containing ${THIS} manual pages --help prints this message ENDHELP ;; --error|*) - @SHELL@ $0 --help 1>&2 + @SHELL@ "$0" --help 1>&2 exit 1 ;; esac shift done # vile:shmode diff --git a/dialog.1 b/dialog.1 index 49f304ba2131..6ff9293b8574 100644 --- a/dialog.1 +++ b/dialog.1 @@ -1,1916 +1,2041 @@ '\" t -.\" $Id: dialog.1,v 1.205 2018/06/19 00:26:13 tom Exp $ -.\" Copyright 2005-2017,2018 Thomas E. Dickey +.\" $Id: dialog.1,v 1.226 2021/01/17 17:25:01 tom Exp $ +.\" Copyright 2005-2020,2021 Thomas E. Dickey .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU Lesser General Public License, version 2.1 .\" as published by the Free Software Foundation. .\" .\" 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, write to .\" Free Software Foundation, Inc. .\" 51 Franklin St., Fifth Floor .\" Boston, MA 02110, USA. .\" .\" definitions for renaming .ds p dialog .ds l dialog .ds L Dialog .ds D DIALOG .\" .de ES .ne 8 .IP .. .de Ex .RS +7 .PP .nf .ft CW .. .de Ee .fi .ft R .RE .. .\" Bulleted paragraph .de bP .ie n .IP \(bu 4 .el .IP \(bu 2 .. .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' . -.TH \*D 1 "" "$Date: 2018/06/19 00:26:13 $" +.TH \*D 1 "" "$Date: 2021/01/17 17:25:01 $" .SH NAME dialog \- display dialog boxes from shell scripts .SH SYNOPSIS -\fB\*p --clear\fP +\fB\*p \-\-clear\fP .br -.BI "\*p --create-rc " file +.BI "\*p \-\-create\-rc " file .br -\fB\*p --print-maxsize\fP +\fB\*p \-\-print\-maxsize\fP .br \fB\*p\fP \fIcommon-options\fP \fIbox-options\fP .SH DESCRIPTION \fB\*L\fP is a program that will let you present a variety of questions or display messages using dialog boxes from a shell script. These types of dialog boxes are implemented (though not all are necessarily compiled into \fB\*p\fR): .RS .LP .nh .na .BR buildlist ", " .BR calendar ", " .BR checklist ", " .BR dselect ", " .BR editbox ", " .BR form ", " .BR fselect ", " .BR gauge ", " .BR infobox ", " .BR inputbox ", " .BR inputmenu ", " .BR menu ", " .BR mixedform ", " .BR mixedgauge ", " .BR msgbox " (message), " .BR passwordbox ", " .BR passwordform ", " .BR pause ", " .BR prgbox ", " .BR programbox ", " .BR progressbox ", " .BR radiolist ", " .BR rangebox ", " .BR tailbox ", " .BR tailboxbg ", " .BR textbox ", " .BR timebox ", " .BR treeview ", and " .BR yesno " (yes/no)." .ad -.hy .RE .PP You can put more than one dialog box into a script: .bP -Use the "\fB--and-widget\fP" token to force \fB\*p\fP to proceed to the next +Use the "\fB\-\-and\-widget\fP" token to force \fB\*p\fP to proceed to the next dialog unless you have pressed ESC to cancel, or .bP Simply add the tokens for the next dialog box, making a chain. \*L stops chaining when the return code from a dialog is nonzero, e.g., Cancel or No (see DIAGNOSTICS). .PP Some widgets, e.g., checklist, will write text to \fB\*p\fP's output. Normally that is the standard error, but there are options for -changing this: "\fB--output-fd\fP", "\fB--stderr\fP" and "\fB--stdout\fP". +changing this: +\*(``\fB\-\-output\-fd\fP\*('', +\*(``\fB\-\-stderr\fP\*('' and +\*(``\fB\-\-stdout\fP\*(''. No text is written if the Cancel button (or ESC) is pressed; \fB\*p\fP exits immediately in that case. . .\" ************************************************************************ .SH OPTIONS -All options begin with "\fB--\fP" +All options begin with \*(``\fB--\fP\*('' (two ASCII hyphens, for the benefit of those using systems with deranged locale support). .PP -A "\fB--\fP" by itself is used as an escape, +A \*(``\fB--\fP\*('' by itself is used as an escape, i.e., the next token on the command-line is not treated as an option. .RS .B \*p --title -- --Not an option .RE .PP -The "\fB--args\fP" option tells \fB\*p\fP to list the command-line +When a common (e.g., non-widget) option is repeated, +the last found is the one that is used. +Boolean options are handled specially so they can be cancelled, +by adding (or omitting) a \*(``no\*('' modifier +after the leading \*(``\fB--\fP\*(''. +For instance, \fB\-\-no-shadow\fP is documented here, +but \fB\-\-shadow\fP also is accepted. +.PP +The \*(``\fB\-\-args\fP\*('' option tells \fB\*p\fP to list the command-line parameters to the standard error. This is useful when debugging complex scripts using -the "\fB--\fP" and "\fB--file\fP", +the \*(``\fB--\fP\*('' and \*(``\fB\-\-file\fP\*('', since the command-line may be rewritten as these are expanded. .PP -The "\fB--file\fP" option tells \fB\*p\fP to read parameters from +The \*(``\fB\-\-file\fP\*('' option tells \fB\*p\fP to read parameters from the file named as its value. .RS .B \*p --file \fIparameterfile .RE .PP Blanks not within double-quotes are discarded (use backslashes to quote single characters). The result is inserted into the command-line, -replacing "\fB--file\fP" and its option value. +replacing \*(``\fB\-\-file\fP\*('' and its option value. Interpretation of the command-line resumes from that point. -If \fIparameterfile\fP begins with "&", \fB\*p\fP +If \fIparameterfile\fP begins with \*(``&\*('', \fB\*p\fP interprets the following text as a file descriptor number rather than a filename. .PP Most widgets accept \fIheight\fP and \fIwidth\fP parameters, which can be used to automatically size the widget to accommodate multi-line message \fIprompt\fP values: .bP -If the parameter is negative, +If the parameter is negative, \fB\*l\fP uses the screen's size. .bP If the parameter is zero, \fB\*l\fP uses minimum size for the widget to display the \fIprompt\fP and data. .bP Otherwise, \fB\*l\fP uses the given size for the widget. . .SS \fBCommon Options\fP Most of the common options are reset before processing each widget. . .IP "\fB--ascii-lines Rather than draw graphics lines around boxes, -draw ASCII "+" and "-" in the same place. -See also "\fB--no-lines\fR". +draw ASCII \*(``+\*('' and \*(``-\*('' in the same place. +See also \*(``\fB\-\-no\-lines\fR\*(''. . .IP "\fB--aspect \fIratio" This gives you some control over the box dimensions when using auto sizing (specifying 0 for height and width). It represents width / height. The default is 9, which means 9 characters wide to every 1 line high. . .IP "\fB--backtitle \fIbacktitle" Specifies a \fIbacktitle\fP string to be displayed on the backdrop, at the top of the screen. . .IP "\fB--begin \fIy x" Specify the position of the upper left corner of a dialog box on the screen. . .IP "\fB--cancel-label \fIstring" Override the label used for \*(``Cancel\*('' buttons. . .IP "\fB--clear" Clears the widget screen, keeping only the screen_color background. -Use this when you combine widgets with "\fB--and-widget\fR" to erase the +Use this when you combine widgets +with \*(``\fB\-\-and\-widget\fR\*('' to erase the contents of a previous widget on the screen, so it won't be seen under the contents of a following widget. -Understand this as the complement of "\fB--keep-window\fR". +Understand this as the complement of \*(``\fB\-\-keep\-window\fR\*(''. To compare the effects, use these: . .ES All three widgets visible, staircase effect, ordered 1,2,3: .Ex \*p \e --begin 2 2 --yesno "" 0 0 \e --and-widget --begin 4 4 --yesno "" 0 0 \e --and-widget --begin 6 6 --yesno "" 0 0 .Ee . .ES Only the last widget is left visible: .Ex \*p \e --clear --begin 2 2 --yesno "" 0 0 \e --and-widget --clear --begin 4 4 --yesno "" 0 0 \e --and-widget --begin 6 6 --yesno "" 0 0 .Ee . .ES All three widgets visible, staircase effect, ordered 3,2,1: .Ex \*p \e --keep-window --begin 2 2 --yesno "" 0 0 \e --and-widget --keep-window --begin 4 4 --yesno "" 0 0 \e --and-widget --begin 6 6 --yesno "" 0 0 .Ee . .ES First and third widget visible, staircase effect, ordered 3,1: .Ex \*p \e --keep-window --begin 2 2 --yesno "" 0 0 \e --and-widget --clear --begin 4 4 --yesno "" 0 0 \e --and-widget --begin 6 6 --yesno "" 0 0 .Ee .IP Note, if you want to restore original console colors and send your cursor home after the dialog program has exited, use the \fBclear\fR\ (1) command. +Conversely, if you want to clear the screen and send your cursor to +the lower left after the \fB\*p\fP program has exited, use the +\fB\-\-erase\-on\-exit\fR\ option. . .IP "\fB--colors" -Interpret embedded "\eZ" sequences in the dialog text +Interpret embedded \*(``\eZ\*('' sequences in the dialog text by the following character, which tells \fB\*p\fP to set colors or video attributes: .RS .bP 0 through 7 are the ANSI color numbers used in curses: black, red, green, yellow, blue, magenta, cyan and white respectively. .bP Bold is set by 'b', reset by 'B'. .bP Reverse is set by 'r', reset by 'R'. .bP Underline is set by 'u', reset by 'U'. .bP -The settings are cumulative, e.g., "\eZb\eZ1" makes the following text +The settings are cumulative, e.g., \*(``\eZb\eZ1\*('' makes the following text bold (perhaps bright) red. .bP -Restore normal settings with "\eZn". +Restore normal settings with \*(``\eZn\*(''. .RE . .IP "\fB--column-separator \fIstring" Tell \fB\*p\fP to split data for radio/checkboxes and menus on the occurrences of the given string, and to align the split data into columns. . .IP "\fB--cr-wrap" Interpret embedded newlines in the dialog text as a newline on the screen. Otherwise, \fB\*p\fR will only wrap lines where needed to fit inside the text box. .IP Even though you can control line breaks with this, \fB\*L\fR will still wrap any lines that are too long for the width of the box. Without cr-wrap, the layout of your text may be formatted to look nice in the source code of your script without affecting the way it will look in the dialog. .IP -The \fIcr-wrap\fP feature is implemented subject to these conditions: +The \fIcr\-wrap\fP feature is implemented subject to these conditions: .RS .bP -the string contains \*(``\en\*('' and the \fB--no-nl-expand\fP option is +the string contains \*(``\en\*('' and the \fB\-\-no\-nl\-expand\fP option is not used, or .bP -the \fB--trim\fP option is used. +the \fB\-\-trim\fP option is used. .RE .IP For more information, see \fBWhitespace Options\fP. . .IP "\fB--create-rc \fIfile" When \fB\*p\fP supports run-time configuration, this can be used to dump a sample configuration file to the file specified by .IR file "." . +.IP "\fB--cursor-off-label" +Place the terminal cursor at the end of a button instead of on the +first character of the button label. +This is useful to reduce visual confusion when the cursor coloration +interacts poorly with the button-label text colors. +. .IP "\fB--date-format \fIformat" If the host provides \fBstrftime\fP, this option allows you to specify the format of the date printed for -the \fB--calendar\fP widget. +the \fB\-\-calendar\fP widget. The time of day (hour, minute, second) are the current local time. . .IP "\fB--defaultno" Make the default value of the \fByes/no\fP box a .BR No . Likewise, treat the default button of widgets that provide \*(``OK\*('' and \*(``Cancel\*('' as a \fICancel\fP. -If "\fB--nocancel\fP" or "\fB--visit-items\fP" are given +If \*(``\fB\-\-no\-cancel\fP\*('' or \*(``\fB\-\-visit\-items\fP\*('' are given those options overrides this, making the default button always \*(``Yes\*('' (internally the same as \*(``OK\*(''). . .IP "\fB--default-button \fIstring" Set the default (preselected) button in a widget. By preselecting a button, a script makes it possible for the user to simply press \fIEnter\fP to proceed through a dialog with minimum interaction. .IP The option's value is the name of the button: .IR ok , .IR yes , .IR cancel , .IR no , .IR help "\ or" .IR extra . .IP Normally the first button in each widget is the default. The first button shown is determined by the widget -together with the "\fB--nook\fP" and "\fB--nocancel\fP options. +together with the \*(``\fB\-\-no\-ok\fP\*('' +and \*(``\fB\-\-no\-cancel\fP\*('' options. If this option is not given, there is no default button assigned. . .IP "\fB--default-item \fIstring" Set the default item in a checklist, form or menu box. Normally the first item in the box is the default. . +.IP "\fB--erase-on-exit" +When \fB\*p\fP exits, remove the dialog widget, erasing the entire +screen to its native background color, and place the terminal cursor +at the lower left corner. +. .IP "\fB--exit-label \fIstring" Override the label used for \*(``EXIT\*('' buttons. . .IP "\fB--extra-button" Show an extra button, between \*(``OK\*('' and \*(``Cancel\*('' buttons. . .IP "\fB--extra-label \fIstring" Override the label used for \*(``Extra\*('' buttons. Note: for inputmenu widgets, this defaults to \*(``Rename\*(''. . .IP "\fB--help" Prints the help message to the standard output and exits. The help message is also printed if no options are given, or if an unrecognized option is given. . .IP "\fB--help-button" -Show a help-button after \*(``OK\*('' and \*(``Cancel\*('' buttons, -e.g., in checklist, radiolist and menu boxes, -and other widgets which have an \*(``OK\*('' button, -whether or not the \*(``Cancel\*('' button is used. +Show a help-button after \*(``OK\*('' and \*(``Cancel\*('' buttons +in boxes which have a list of tagged items +(i.e., checklist, radiolist, menu, and treeview boxes). .IP -On exit, the return status will indicate that the Help button was pressed. -\fB\*L\fP will also write a message to its output +On exit, the return status indicates that the Help button was pressed. +\fB\*L\fP also writes a message to its output after the token \*(``HELP\*('': .RS .bP -If "\fB--item-help\fR" is also given, the item-help text will be written. +If "\fB\-\-item\-help\fR" is also given, the item-help text is written. .bP -Otherwise, the item's tag (the first field) will be written. +Otherwise, the item's tag (the first field) is written. .RE .IP .IP -You can use the \fB--help-tags\fP option and/or set the DIALOG_ITEM_HELP +You can use the \fB\-\-help\-tags\fP option and/or set the DIALOG_ITEM_HELP environment variable to modify these messages and exit-status. +.IP +This option can be applied to other widgets, +which have an \*(``OK\*('' button, +whether or not the \*(``Cancel\*('' button is used. +The return status and output are not treated specially for the other widgets; +the help-button is just an extra button. . .IP "\fB--help-label \fIstring" Override the label used for \*(``Help\*('' buttons. . .IP "\fB--help-status" If the help-button is selected, writes the checklist, radiolist or form information after the item-help \*(``HELP\*('' information. This can be used to reconstruct the state of a checklist after processing the help request. . .IP "\fB--help-tags" -Modify the messages written on exit for \fB--help-button\fP +Modify the messages written on exit for \fB\-\-help\-button\fP by making them always just the item's tag. This does not affect the exit status code. . .IP "\fB--hfile \fIfilename" Display the given file using a textbox when the user presses F1. . .IP "\fB--hline \fIstring" Display the given string centered at the bottom of the widget. . .IP "\fB--ignore" Ignore options that \fB\*p\fP does not recognize. -Some well-known ones such as "\fB--icon\fP" are ignored anyway, +Some well-known ones such as \*(``\fB\-\-icon\fP\*('' are ignored anyway, but this is a better choice for compatibility with other implementations. . .IP "\fB--input-fd \fIfd" Read keyboard input from the given file descriptor. Most \fB\*p\fR scripts read from the standard input, but the gauge widget reads a pipe (which is always standard input). Some configurations do not work properly when \fB\*p\fP tries to reopen the terminal. Use this option (with appropriate juggling of file-descriptors) if your script must work in that type of environment. . .IP "\fB--insecure" Makes the password widget friendlier but less secure, by echoing asterisks for each character. . .IP "\fB--iso-week" Set the starting point for the week-number -shown in the "\fB--calendar\fP" option +shown in the \*(``\fB\-\-calendar\fP\*('' option according to ISO-8601, which starts numbering with the first week which includes a Thursday in January. . .IP "\fB--item-help" Interpret the tags data for checklist, radiolist and menu boxes adding a column which is displayed in the bottom line of the screen, for the currently selected item. . .IP "\fB--keep-tite" When built with \fBncurses\fP, \fB\*p\fP normally checks to see if it is running in an \fBxterm\fP, and in that case tries to suppress the initialization strings that would make it switch to the alternate screen. Switching between the normal and alternate screens is visually distracting in a script which runs \fB\*p\fP several times. Use this option to allow \fB\*p\fP to use those initialization strings. . .IP "\fB--keep-window" Normally when \fB\*p\fR performs several \fBtailboxbg\fR widgets -connected by "\fB--and-widget\fR", +connected by \*(``\fB\-\-and\-widget\fR\*('', it clears the old widget from the screen by painting over it. Use this option to suppress that repainting. .IP At exit, \fB\*p\fR repaints all of the widgets which have been -marked with "\fB--keep-window\fR", even if they are not \fBtailboxbg\fR widgets. +marked with \*(``\fB\-\-keep\-window\fR\*('', +even if they are not \fBtailboxbg\fR widgets. That causes them to be repainted in reverse order. -See the discussion of the "\fB--clear\fR" option for examples. +See the discussion of the \*(``\fB\-\-clear\fR\*('' option for examples. . .IP "\fB--last-key" At exit, report the last key which the user entered. -This is the curses key code rather than a symbol or literal character. +This is the curses key code rather than a symbol or literal character, +and is only reported for keys which are bound to an action. It can be used by scripts to distinguish between two keys which are bound to the same action. . .IP "\fB--max-input \fIsize" Limit input strings to the given size. If not specified, the limit is 2048. . .IP "\fB--no-cancel" -.IP "\fB--nocancel" Suppress the \*(``Cancel\*('' button in checklist, inputbox and menu box modes. A script can still test if the user pressed the ESC key to cancel to quit. . .IP "\fB--no-collapse" Normally \fB\*p\fR converts tabs to spaces and reduces multiple spaces to a single space for text which is displayed in a message boxes, etc. Use this option to disable that feature. Note that \fB\*p\fR will still wrap text, -subject to the "\fB--cr-wrap\fR" and "\fB--trim\fR" options. +subject to the \*(``\fB\-\-cr\-wrap\fR\*('' +and \*(``\fB\-\-trim\fR\*('' options. .IP -The \fIno-collapse\fP feature is implemented subject to these conditions: +The \fIno\-collapse\fP feature is implemented subject to these conditions: .RS .bP -the string contains \*(``\en\*('' and the \fB--no-nl-expand\fP option is +the string contains \*(``\en\*('' and the \fB\-\-no\-nl\-expand\fP option is not used, or .bP -the \fB--trim\fP option is not used. +the \fB\-\-trim\fP option is not used. .RE .IP For more information, see \fBWhitespace Options\fP. . +.IP "\fB\-\-no\-hot\-list" +Tells +\fB\*p\fP +to suppress the hotkey feature for lists, e.g., the checkbox, menus. +.IP +Normally, the first uppercase character of a list entry will be highlighted, +and typing that character will move the focus to that entry. +This option suppresses both the highlighting and the movement. +.IP +Hotkeys for buttons (\*(``OK\*('' , \*(``Cancel\*('', etc.) are unaffected. +. .IP "\fB--no-items" Some widgets (checklist, inputmenu, radiolist, menu) display a list with two columns (a \*(``tag\*('' and \*(``item\*('', i.e., \*(``description\*(''). This option tells \fB\*p\fP to read shorter rows, omitting the \*(``item\*('' part of the list. This is occasionally useful, e.g., if the tags provide enough information. .IP -See also \fB--no-tags\fP. +See also \fB\-\-no\-tags\fP. If both options are given, this one is ignored. . .IP "\fB--no-kill" Tells \fB\*p\fP to put the \fBtailboxbg\fP box in the background, printing its process id to \fB\*p\fP's output. SIGHUP is disabled for the background process. . .IP "\fB--no-label \fIstring" Override the label used for \*(``No\*('' buttons. . .IP "\fB--no-lines Rather than draw lines around boxes, draw spaces in the same place. -See also "\fB--ascii-lines\fR". +See also \*(``\fB\-\-ascii\-lines\fR\*(''. . .IP "\fB--no-mouse Do not enable the mouse. . .IP "\fB--no-nl-expand -Do not convert "\en" substrings of the message/prompt text into +Do not convert \*(``\en\*('' substrings of the message/prompt text into literal newlines. .IP -The \fIno-nl-expand\fP feature is used only if +The \fIno\-nl\-expand\fP feature is used only if the string contains \*(``\en\*('' so that there is something to convert. .IP For more information, see \fBWhitespace Options\fP. . .IP "\fB--no-ok" -.IP "\fB--nook" -Suppress the \*(``OK\*('' button in checklist, inputbox and menu box modes. +Suppress the \*(``OK\*('' button, so that it is not displayed. A script can still test if the user pressed -the \*(``Enter\*('' key to accept the data. +the \*(``Enter\*('' key to accept the data: +.RS +.bP +The \*(``Enter\*('' key is always handled as the \*(``OK\*('' button +when the \fB\-\-no\-ok\fP option is used. +That is, by default it is bound to the \fILEAVE\fP virtual key. +.IP +When \fB\-\-no\-ok\fP is not used, +you can use the the \fITab\fP key to move the cursor through the +fields and buttons on the widget. +In that case, the \*(``Enter\*('' key activates the current button +if the cursor is positioned on a button. +.bP +To provide for the case where you want to activate a button +when using \fB\-\-no\-ok\fP, +there is another virtual key \fILEAVE\fP, +which activates the current button. +By default, \fB^D\fP (EOF) is bound to that key. +.RE . .IP "\fB--no-shadow" Suppress shadows that would be drawn to the right and bottom of each dialog box. . .IP "\fB--no-tags" Some widgets (checklist, inputmenu, radiolist, menu) display a list with two columns (a \*(``tag\*('' and \*(``description\*(''). The tag is useful for scripting, but may not help the user. -The \fB--no-tags\fP option (from Xdialog) may be used to suppress the +The \fB\-\-no\-tags\fP option (from Xdialog) may be used to suppress the column of tags from the display. -Unlike the \fB--no-items\fP option, +Unlike the \fB\-\-no\-items\fP option, this does not affect the data which is read from the script. .IP Xdialog does not display the tag column for the analogous buildlist and treeview widgets; \fB\*p\fP does the same. .IP Normally \fB\*p\fP allows you to quickly move to entries on the displayed list, by matching a single character to the first character of the tag. -When the \fB--no-tags\fP option is given, \fB\*p\fP matches against +When the \fB\-\-no\-tags\fP option is given, \fB\*p\fP matches against the first character of the description. In either case, the matchable character is highlighted. . .IP "\fB--ok-label \fIstring" Override the label used for \*(``OK\*('' buttons. . .IP "\fB--output-fd \fIfd" Direct output to the given file descriptor. Most \fB\*p\fR scripts write to the standard error, but error messages may also be written there, depending on your script. . .IP "\fB--separator \fIstring" .IP "\fB--output-separator \fIstring" Specify a string that will separate the output on \fB\*p\fP's output from -checklists, rather than a newline (for \fB--separate-output\fP) or a space. +checklists, rather than a newline (for \fB\-\-separate\-output\fP) or a space. This applies to other widgets such as forms and editboxes which normally use a newline. . .IP "\fB--print-maxsize" Print the maximum size of dialog boxes, i.e., the screen size, to \fB\*p\fP's output. This may be used alone, without other options. . .IP "\fB--print-size" Prints the size of each dialog box to \fB\*p\fP's output when the box is initialized. . .IP "\fB--print-text-only \fIstring [ height [ width ] ]" Prints the string as it would be wrapped in a message box to \fB\*p\fP's output. .IP Because the optional \fIheight\fP and \fIwidth\fP default to zero, if they are omitted, \fB\*p\fP autosizes according to the screen dimensions. . .IP "\fB--print-text-size \fIstring [ height [ width ] ]" Prints the size of the string as it would be wrapped in a message box, to \fB\*p\fP's output, as .Ex height width .Ee .IP Because the optional \fIheight\fP and \fIwidth\fP parameters default to zero, if they are omitted, \fB\*p\fP autosizes according to the screen dimensions. . .IP "\fB--print-version" Prints \fB\*p\fR's version to \fB\*p\fP's output. This may be used alone, without other options. -It does not cause \fBdialog\fP to exit by itself. +It does not cause \fB\*l\fP to exit by itself. . .IP "\fB--quoted" Normally \fB\*p\fP quotes the strings returned by checklist's as well as the item-help text. -Use this option to quote all string results. +Use this option to quote all string results as needed +(i.e., if the string contains whitespace or a single or double-quote character). +. .IP "\fB--reorder" By default, the buildlist widget uses the same order for the output (right) list as for the input (left). Use this option to tell \fB\*p\fP to use the order in which a user adds selections to the output list. . .IP "\fB--scrollbar" For widgets holding a scrollable set of data, draw a scrollbar on its right-margin. This does not respond to the mouse. . .IP "\fB--separate-output" For certain widgets (buildlist, checklist, treeview), output result one line at a time, with no quoting. This facilitates parsing by another program. . .IP "\fB--separate-widget \fIstring" Specify a string that will separate the output on \fB\*p\fP's output from each widget. This is used to simplify parsing the result of a dialog with several widgets. If this option is not given, the default separator string is a tab character. . -.IP "\fB--shadow" -Draw a shadow to the right and bottom of each dialog box. -. .IP "\fB--single-quoted" Use single-quoting as needed (and no quotes if unneeded) for the output of checklist's as well as the item-help text. -If this option is not set, \fB\*p\fP uses double quotes around each item. +.IP +If this option is not set, \fB\*p\fP may use double quotes around each item. In either case, \fB\*p\fP adds backslashes to make the output useful in shell scripts. +.IP +Single quotes would be needed if +the string contains whitespace or a single or double-quote character. . .IP "\fB--size-err" Check the resulting size of a dialog box before trying to use it, printing the resulting size if it is larger than the screen. (This option is obsolete, since all new-window calls are checked). . .IP "\fB--sleep \fIsecs" Sleep (delay) for the given number of seconds after processing a dialog box. . .IP "\fB--stderr" Direct output to the standard error. This is the default, since curses normally writes screen updates to the standard output. . .IP "\fB--stdout" Direct output to the standard output. This option is provided for compatibility with Xdialog, however using it in portable scripts is not recommended, since curses normally writes its screen updates to the standard output. If you use this option, \fB\*p\fR attempts to reopen the terminal so it can write to the display. Depending on the platform and your environment, that may fail. . .IP "\fB--tab-correct" Convert each tab character to one or more spaces (for the \fBtextbox\fP widget; otherwise to a single space). Otherwise, tabs are rendered according to the curses library's interpretation. -The \fB--no-collapse\fP option disables tab expansion. +The \fB\-\-no\-collapse\fP option disables tab expansion. . .IP "\fB--tab-len \fIn" Specify the number of spaces that a tab character occupies if the -"\fB--tab-correct\fP" option is given. +\*(``\fB\-\-tab\-correct\fP\*('' option is given. The default is 8. This option is only effective for the \fBtextbox\fP widget. . .IP "\fB--time-format \fIformat" If the host provides \fBstrftime\fP, this option allows you to specify the format of the time printed for -the \fB--timebox\fP widget. +the \fB\-\-timebox\fP widget. The day, month, year values in this case are for the current local time. . .IP "\fB--timeout \fIsecs" -Timeout (exit with error code) -if no user response within the given number of seconds. +Timeout if no user response within the given number of seconds. A timeout of zero seconds is ignored. .IP -This option is ignored by the "\fB--pause\fP" widget. -It is also overridden if the background "\fB--tailboxbg\fP" option is used +Normally a timeout causes an ESC character to be entered in the current widget, +cancelling it. +Other widgets may still be on the screen; +these are not cancelled. +Set the \fBDIALOG_TIMEOUT\fP environment variable to tell \fB\*l\fP to +directly exit instead, i.e., cancelling all widgets on the screen. +.IP +This option is ignored by the \*(``\fB\-\-pause\fP\*('' widget. +It is also overridden +if the background \*(``\fB\-\-tailboxbg\fP\*('' option is used to set up multiple concurrent widgets. . .IP "\fB--title \fItitle" Specifies a \fItitle\fP string to be displayed at the top of the dialog box. . .IP "\fB--trace \fIfilename" logs the command-line parameters, keystrokes and other information to the given file. -If \fBdialog\fP reads a configure file, it is logged as well. +If \fB\*l\fP reads a configure file, it is logged as well. Piped input to the \fIgauge\fP widget is logged. Use control/T to log a picture of the current dialog window. .IP The \fB\*p\fR program handles some command-line parameters specially, and removes them from the parameter list as they are processed. -For example, if the first option is \fB--trace\fP, +For example, if the first option is \fB\-\-trace\fP, then that is processed (and removed) before \fB\*p\fR initializes the display. . .IP "\fB--week-start \fIday" -sets the starting day for the week, used in the "\fB--calendar\fP" option. +sets the starting day for the week, +used in the \*(``\fB\-\-calendar\fP\*('' option. The \fIday\fP parameter can be .RS .bP a number (0 to 6, Sunday through Saturday using POSIX) or .bP the special value \*(``locale\*('' (this works with systems using glibc, providing an extension to the \fBlocale\fP command, the \fBfirst_weekday\fP value). .bP a string matching one of the abbreviations for the day of the week shown in the \fBcalendar\fP widget, e.g., \*(``Mo\*('' for \*(``Monday\*(''. .RE . .IP "\fB--trim" eliminate leading blanks, trim literal newlines and repeated blanks from message text. .IP The \fItrim\fP feature is implemented subject to these conditions: .RS .bP the string does not contain \*(``\en\*('' or .bP -the \fB--no-nl-expand\fP option is used. +the \fB\-\-no\-nl\-expand\fP option is used. .RE .IP For more information, see \fBWhitespace Options\fP. . .IP -See also the "\fB--cr-wrap\fR" and "\fB--no-collapse\fR" options. +See also the \*(``\fB\-\-cr\-wrap\fR\*('' +and \*(``\fB\-\-no\-collapse\fR\*('' options. . .IP "\fB--version" Prints \fB\*p\fR's version to the standard output, and exits. -See also "\fB--print-version\fP". +See also \*(``\fB\-\-print\-version\fP\*(''. . .IP "\fB--visit-items" Modify the tab-traversal of checklist, radiolist, menubox and inputmenu to include the list of items as one of the states. This is useful as a visual aid, i.e., the cursor position helps some users. .IP When this option is given, the cursor is initially placed on the list. Abbreviations (the first letter of the tag) apply to the list items. If you tab to the button row, abbreviations apply to the buttons. . .IP "\fB--yes-label \fIstring" Override the label used for \*(``Yes\*('' buttons. . .\" ************************************************************************ .SS Box Options All dialog boxes have at least three parameters: .TP 7 \fItext\fP the caption or contents of the box. .TP 7 \fIheight\fP the height of the dialog box. .TP 7 \fIwidth\fP the width of the dialog box. .PP Other parameters depend on the box type. . . -.IP "\fB--buildlist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." +.IP "\fB\-\-buildlist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." A \fBbuildlist\fP dialog displays two lists, side-by-side. The list on the left shows unselected items. The list on the right shows selected items. As items are selected or unselected, they move between the lists. .IP Use a carriage return or the \*(``OK\*('' button to accept the current value in the selected-window and exit. The results are written using the order displayed in the selected-window. .IP The initial on/off state of each entry is specified by .IR status "." .IP -The dialog behaves like a \fBmenu\fP, using the \fB--visit-items\fP +The dialog behaves like a \fBmenu\fP, using the \fB\-\-visit\-items\fP to control whether the cursor is allowed to visit the lists directly. .RS .bP -If \fB--visit-items\fP is not given, +If \fB\-\-visit\-items\fP is not given, tab-traversal uses two states (OK/Cancel). .bP -If \fB--visit-items\fP is given, +If \fB\-\-visit\-items\fP is given, tab-traversal uses four states (Left/Right/OK/Cancel). .RE .IP -Whether or not \fB--visit-items\fP is given, +Whether or not \fB\-\-visit\-items\fP is given, it is possible to move the highlight between the two lists using -the default "^" (left-column) and "$" (right-column) keys. +the default \*(``^\*('' (left-column) and \*(``$\*('' (right-column) keys. .IP On exit, a list of the \fItag\fP strings of those entries that are turned on will be printed on \fB\*p\fP's output. .IP -If the "\fB--separate-output\fP" option is not given, +If the "\fB\-\-separate\-output\fP" option is not given, the strings will be quoted as needed to make it simple for scripts to separate them. -By default, this uses double-quotes. -See the "\fB--single-quoted\fP" option, which modifies the quoting behavior. -. +By default, this uses double-quotes, as needed. +See the \*(``\fB\-\-single\-quoted\fP\*('' option, +which modifies the quoting behavior. . .IP "\fB--calendar \fItext height width day month year" A \fBcalendar\fP box displays month, day and year in separately adjustable windows. If the values for day, month or year are missing or negative, the current date's corresponding values are used. You can increment or decrement any of those using the left-, up-, right-, and down-arrows. Use vi-style h, j, k and l for moving around the array of days in a month. Use tab or backtab to move between windows. If the year is given as zero, the current date is used as an initial value. .IP On exit, the date is printed in the form day/month/year. -The format can be overridden using the \fB--date-format\fP option. -. +The format can be overridden using the \fB\-\-date\-format\fP option. . -.IP "\fB--checklist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." +.IP "\fB\-\-checklist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." A \fBchecklist\fP box is similar to a \fBmenu\fP box; there are multiple entries presented in the form of a menu. Another difference is that you can indicate which entry is currently selected, by setting its .IR status " to " on "." Instead of choosing one entry among the entries, each entry can be turned on or off by the user. The initial on/off state of each entry is specified by .IR status "." .IP On exit, a list of the \fItag\fP strings of those entries that are turned on will be printed on \fB\*p\fP's output. .IP -If the "\fB--separate-output\fP" option is not given, +If the \*(``\fB\-\-separate\-output\fP\*('' option is not given, the strings will be quoted as needed to make it simple for scripts to separate them. -By default, this uses double-quotes. -See the "\fB--single-quoted\fP" option, which modifies the quoting behavior. +By default, this uses double-quotes (as needed). +See the \*(``\fB\-\-single\-quoted\fP\*('' option, +which modifies the quoting behavior. . -. -.IP "\fB--dselect \fIfilepath height width\fR" +.IP "\fB\-\-dselect \fIfilepath height width\fR" The directory-selection dialog displays a text-entry window in which you can type a directory, and above that a windows with directory names. .IP Here \fBfilepath\fP can be a filepath in which case the directory window will display the contents of the path and the text-entry window will contain the preselected directory. .IP Use tab or arrow keys to move between the windows. Within the directory window, use the up/down arrow keys to scroll the current selection. Use the space-bar to copy the current selection into the text-entry window. .IP Typing any printable characters switches focus to the text-entry window, entering that character as well as scrolling the directory window to the closest match. .IP Use a carriage return or the \*(``OK\*('' button to accept the current value in the text-entry window and exit. .IP On exit, the contents of the text-entry window are written to \fB\*p\fP's output. . -.IP "\fB--editbox \fIfilepath height width\fR" +.IP "\fB\-\-editbox \fIfilepath height width\fR" The edit-box dialog displays a copy of the file. You may edit it using the \fIbackspace\fP, \fIdelete\fP and cursor keys to correct typing errors. It also recognizes pageup/pagedown. -Unlike the \fB--inputbox\fP, +Unlike the \fB\-\-inputbox\fP, you must tab to the \*(``OK\*('' or \*(``Cancel\*('' buttons to close the dialog. Pressing the \*(``Enter\*('' key within the box will split the corresponding line. .IP On exit, the contents of the edit window are written to \fB\*p\fP's output. . .nf -.IP "\fB--form \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen \fR] \fI..." +.IP "\fB\-\-form \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen \fR] \fI..." .fi The \fBform\fP dialog displays a form consisting of labels and fields, which are positioned on a scrollable window by coordinates given in the script. The field length \fIflen\fR and input-length \fIilen\fR tell how long the field can be. The former defines the length shown for a selected field, while the latter defines the permissible length of the data entered in the field. .RS .bP If \fIflen\fR is zero, the corresponding field cannot be altered. and the contents of the field determine the displayed-length. .bP If \fIflen\fR is negative, the corresponding field cannot be altered, and the negated value of \fIflen\fR is used as the displayed-length. .bP If \fIilen\fR is zero, it is set to \fIflen\fR. .RE .IP Use up/down arrows (or control/N, control/P) to move between fields. Use tab to move between windows. .IP On exit, the contents of the form-fields are written to \fB\*p\fP's output, each field separated by a newline. The text used to fill non-editable fields (\fIflen\fR is zero or negative) is not written out. . . -.IP "\fB--fselect \fIfilepath height width\fR" +.IP "\fB\-\-fselect \fIfilepath height width\fR" The \fBfselect\fP (file-selection) dialog displays a text-entry window in which you can type a filename (or directory), and above that two windows with directory names and filenames. .IP Here \fBfilepath\fP can be a filepath in which case the file and directory windows will display the contents of the path and the text-entry window will contain the preselected filename. .IP Use tab or arrow keys to move between the windows. Within the directory or filename windows, use the up/down arrow keys to scroll the current selection. Use the space-bar to copy the current selection into the text-entry window. .IP Typing any printable characters switches focus to the text-entry window, entering that character as well as scrolling the directory and filename windows to the closest match. .IP Typing the space character forces \fB\*p\fP to complete the current name (up to the point where there may be a match against more than one entry). .IP Use a carriage return or the \*(``OK\*('' button to accept the current value in the text-entry window and exit. .IP On exit, the contents of the text-entry window are written to \fB\*p\fP's output. . . -.IP "\fB--gauge \fItext height width [percent]\fR" +.IP "\fB\-\-gauge \fItext height width [percent]\fR" A \fBgauge\fP box displays a meter along the bottom of the box. The meter indicates the percentage. New percentages are read from standard input, one integer per line. The meter is updated to reflect each new percentage. If the standard input reads the string \*(``XXX\*('', then the first line following is taken as an integer percentage, then subsequent lines up to another \*(``XXX\*('' are used for a new prompt. The gauge exits when EOF is reached on the standard input. .IP The \fIpercent\fR value denotes the initial percentage shown in the meter. If not specified, it is zero. .IP On exit, no text is written to \fB\*p\fP's output. The widget accepts no input, so the exit status is always OK. . . .IP "\fB--infobox \fItext height width" An \fBinfo\fP box is basically a \fBmessage\fP box. However, in this case, \fB\*p\fP will exit immediately after displaying the message to the user. The screen is not cleared when \fB\*p\fP exits, so that the message will remain on the screen until the calling shell script clears it later. This is useful when you want to inform the user that some operations are carrying on that may require some time to finish. .IP On exit, no text is written to \fB\*p\fP's output. An OK exit status is returned. . . .IP "\fB--inputbox \fItext height width [init]" An \fBinput\fP box is useful when you want to ask questions that require the user to input a string as the answer. If init is supplied it is used to initialize the input string. When entering the string, the \fIbackspace\fP, \fIdelete\fP and cursor keys can be used to correct typing errors. If the input string is longer than can fit in the dialog box, the input field will be scrolled. .IP On exit, the input string will be printed on \fB\*p\fP's output. . . -.IP "\fB--inputmenu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." +.IP "\fB\-\-inputmenu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." An \fBinputmenu\fP box is very similar to an ordinary \fBmenu\fP box. There are only a few differences between them: .RS .TP 4 1. The entries are not automatically centered but left adjusted. .TP 2. An extra button (called \fIRename\/\fP) is implied to rename the current item when it is pressed. .TP 3. It is possible to rename the current entry by pressing the \fIRename\fP button. Then \fB\*p\fP will write the following on \fB\*p\fP's output. .IP RENAMED <tag> <item> .RE . . -.IP "\fB--menu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." +.IP "\fB\-\-menu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." As its name suggests, a \fBmenu\fP box is a dialog box that can be used to present a list of choices in the form of a menu for the user to choose. Choices are displayed in the order given. Each menu entry consists of a \fItag\fP string and an \fIitem\fP string. The \fItag\fP gives the entry a name to distinguish it from the other entries in the menu. The \fIitem\fP is a short description of the option that the entry represents. The user can move between the menu entries by pressing the cursor keys, the first letter of the \fItag\fP as a hot-key, or the number keys \fI1\fP through \fI9\fP. There are \fImenu-height\fP entries displayed in the menu at one time, but the menu will be scrolled if there are more entries than that. .IP On exit the \fItag\fP of the chosen menu entry will be printed on \fB\*p\fP's output. -If the "\fB--help-button\fR" option is given, the corresponding help +If the \*(``\fB\-\-help\-button\fR\*('' option is given, the corresponding help text will be printed if the user selects the help button. . .nf -.IP "\fB--mixedform \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen itype \fR] \fI..." +.IP "\fB\-\-mixedform \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen itype \fR] \fI..." .fi The \fBmixedform\fP dialog displays a form consisting of labels and fields, -much like the \fB--form\fP dialog. +much like the \fB\-\-form\fP dialog. It differs by adding a field-type parameter to each field's description. Each bit in the type denotes an attribute of the field: .RS .TP 5 1 hidden, e.g., a password field. .TP 5 2 readonly, e.g., a label. .RE . -.IP "\fB--mixedgauge \fItext height width percent \fR[ \fItag1 item1 \fR] \fI..." +.IP "\fB\-\-mixedgauge \fItext height width percent \fR[ \fItag1 item1 \fR] \fI..." A \fBmixedgauge\fP box displays a meter along the bottom of the box. The meter indicates the percentage. .IP It also displays a list of the \fItag\/\fP- and \fIitem\/\fP-values at the top of the box. See \*l(3) for the tag values. .IP The \fItext\fP is shown as a caption between the list and meter. The \fIpercent\fR value denotes the initial percentage shown in the meter. .IP -No provision is made for reading data from the standard input as \fB--gauge\fP +No provision is made for reading data from the standard input as \fB\-\-gauge\fP does. .IP On exit, no text is written to \fB\*p\fP's output. The widget accepts no input, so the exit status is always OK. . .IP "\fB--msgbox \fItext height width" A \fBmessage\fP box is very similar to a \fByes/no\fP box. The only difference between a \fBmessage\fP box and a \fByes/no\fP box is that a \fBmessage\fP box has only a single \fBOK\fP button. You can use this dialog box to display any message you like. After reading the message, the user can press the \fIENTER\fP key so that \fB\*p\fP will exit and the calling shell script can continue its operation. .IP If the message is too large for the space, \fB\*p\fP may allow you to scroll it, provided that the underlying curses implementation is capable enough. In this case, a percentage is shown in the base of the widget. .IP On exit, no text is written to \fB\*p\fP's output. Only an \*(``OK\*('' button is provided for input, but an ESC exit status may be returned. . -.IP "\fB--pause \fItext height width seconds\fR" +.IP "\fB\-\-pause \fItext height width seconds\fR" A \fBpause\fP box displays a meter along the bottom of the box. The meter indicates how many seconds remain until the end of the pause. The pause exits when timeout is reached or the user presses the OK button (status OK) or the user presses the CANCEL button or Esc key. .IP "\fB--passwordbox \fItext height width [init]" A \fBpassword\fP box is similar to an input box, except that the text the user enters is not displayed. This is useful when prompting for passwords or other sensitive information. Be aware that if anything is passed in \*(``init\*('', it will be visible in the system's process table to casual snoopers. Also, it is very confusing to the user to provide them with a default password they cannot see. For these reasons, using \*(``init\*('' is highly discouraged. -See "\fB--insecure\fP" if you do not care about your password. +See \*(``\fB\-\-insecure\fP\*('' if you do not care about your password. .IP On exit, the input string will be printed on \fB\*p\fP's output. . . .nf -.IP "\fB--passwordform \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen \fR] \fI..." +.IP "\fB\-\-passwordform \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen \fR] \fI..." .fi -This is identical to \fB--form\fP except that all text fields are +This is identical to \fB\-\-form\fP except that all text fields are treated as \fBpassword\fP widgets rather than \fBinputbox\fP widgets. . . .IP "\fB--prgbox \fItext command height width" .IP "\fB--prgbox \fIcommand height width" A \fBprgbox\fP is very similar to a \fBprogrambox\fP. .IP This dialog box is used to display the output of a command that is specified as an argument to \fBprgbox\fP. .IP After the command completes, the user can press the \fIENTER\fP key so that -\fBdialog\fP will exit and the calling shell script can continue its operation. +\fB\*l\fP will exit and the calling shell script can continue its operation. .IP -If three parameters are given, it displays the text under the title, +If four parameters are given, it displays the text under the title, delineated from the scrolling file's contents. -If only two parameters are given, this text is omitted. +If only three parameters are given, this text is omitted. . . .IP "\fB--programbox \fItext height width" .IP "\fB--programbox \fIheight width" A \fBprogrambox\fP is very similar to a \fBprogressbox\fP. The only difference between a \fBprogram\fP box and a \fBprogress\fP box is that a \fBprogram\fP box displays an \fBOK\fP button (but only after the command completes). .IP This dialog box is used to display the piped output of a command. After the command completes, the user can press the \fIENTER\fP key so that -\fBdialog\fP will exit and the calling shell script can continue its operation. +\fB\*l\fP will exit and the calling shell script can continue its operation. .IP If three parameters are given, it displays the text under the title, delineated from the scrolling file's contents. If only two parameters are given, this text is omitted. . . .IP "\fB--progressbox \fItext height width" .IP "\fB--progressbox \fIheight width" A \fBprogressbox\fP is similar to an \fBtailbox\fP, except that .RS .TP 3 a) rather than displaying the contents of a file, it displays the piped output of a command and .TP 3 b) it will exit when it reaches the end of the file (there is no \*(``OK\*('' button). .RE .IP If three parameters are given, it displays the text under the title, delineated from the scrolling file's contents. If only two parameters are given, this text is omitted. . . -.IP "\fB--radiolist \fItext height width list-height \fR [ \fItag item status \fR] \fI..." +.IP "\fB\-\-radiolist \fItext height width list-height \fR [ \fItag item status \fR] \fI..." A \fBradiolist\fP box is similar to a \fBmenu\fP box. The only difference is that you can indicate which entry is currently selected, by setting its .IR status " to " on "." .IP On exit, the tag of the selected item is written to \fB\*p\fP's output. . . -.IP "\fB--tailbox \fIfile height width" -Display text from a file in a dialog box, as in a "tail -f" command. -Scroll left/right using vi-style 'h' and 'l', or arrow-keys. -A '0' resets the scrolling. -.IP -On exit, no text is written to \fB\*p\fP's output. -Only an \*(``OK\*('' button is provided for input, -but an ESC exit status may be returned. -. -. .nf .IP "\fB--rangebox \fItext height width min-value max-value default-value" .fi Allow the user to select from a range of values, e.g., using a slider. The dialog shows the current value as a bar (like the gauge dialog). Tabs or arrow keys move the cursor between the buttons and the value. When the cursor is on the value, you can edit it by: .RS .TP 5 left/right cursor movement to select a digit to modify .TP 5 +/- characters to increment/decrement the digit by one .TP 5 0 through 9 to set the digit to the given value .RE .IP Some keys are also recognized in all cursor positions: .RS .TP 5 home/end set the value to its maximum or minimum .TP 5 pageup/pagedown increment the value so that the slider moves by one column .RE . . +.IP "\fB--tailbox \fIfile height width" +Display text from a file in a dialog box, +as in a \*(``tail -f\*('' command. +Scroll left/right using vi-style 'h' and 'l', or arrow-keys. +A '0' resets the scrolling. +.IP +On exit, no text is written to \fB\*p\fP's output. +Only an \*(``OK\*('' button is provided for input, +but an ESC exit status may be returned. +. +. .IP "\fB--tailboxbg \fIfile height width" Display text from a file in a dialog box as a background task, -as in a "tail -f &" command. +as in a \*(``tail -f &\*('' command. Scroll left/right using vi-style 'h' and 'l', or arrow-keys. A '0' resets the scrolling. .IP \*L treats the background task specially if there are other -widgets (\fB--and-widget\fP) on the screen concurrently. +widgets (\fB\-\-and\-widget\fP) on the screen concurrently. Until those widgets are closed (e.g., an \*(``OK\*(''), \fB\*p\fP will perform all of the tailboxbg widgets in the same process, polling for updates. You may use a tab to traverse between the widgets on the screen, and close them individually, e.g., by pressing \fIENTER\fP. -Once the non-tailboxbg widgets are closed, \fB\*p\fP forks a copy of itself -into the background, and prints its process id if the "\fB--no-kill\fP" option +Once the non-tailboxbg widgets are closed, +\fB\*p\fP forks a copy of itself into the background, +and prints its process id if the \*(``\fB\-\-no\-kill\fP\*('' option is given. .IP On exit, no text is written to \fB\*p\fP's output. Only an \*(``EXIT\*('' button is provided for input, but an ESC exit status may be returned. .IP NOTE: Older versions of \fB\*p\fP forked immediately and attempted to update the screen individually. Besides being bad for performance, it was unworkable. Some older scripts may not work properly with the polled scheme. . . .IP "\fB--textbox \fIfile height width" A \fBtext\fP box lets you display the contents of a text file in a dialog box. It is like a simple text file viewer. The user can move through the file by using the cursor, page-up, page-down and \fIHOME/END\fR keys available on most keyboards. If the lines are too long to be displayed in the box, the \fILEFT/RIGHT\fP keys can be used to scroll the text region horizontally. You may also use vi-style keys h, j, k, and l in place of the cursor keys, and B or N in place of the page-up and page-down keys. Scroll up/down using vi-style 'k' and 'j', or arrow-keys. Scroll left/right using vi-style 'h' and 'l', or arrow-keys. A '0' resets the left/right scrolling. For more convenience, vi-style forward and backward searching functions are also provided. .IP On exit, no text is written to \fB\*p\fP's output. Only an \*(``EXIT\*('' button is provided for input, but an ESC exit status may be returned. . . .IP "\fB--timebox \fItext height [width hour minute second]" A dialog is displayed which allows you to select hour, minute and second. If the values for hour, minute or second are missing or negative, the current date's corresponding values are used. You can increment or decrement any of those using the left-, up-, right- and down-arrows. Use tab or backtab to move between windows. .IP On exit, the result is printed in the form hour:minute:second. -The format can be overridden using the \fB--time-format\fP option. +The format can be overridden using the \fB\-\-time\-format\fP option. . . -.IP "\fB--treeview \fItext height width list-height \fR[ \fItag item status depth \fR] \fI..." +.IP "\fB\-\-treeview \fItext height width list-height \fR[ \fItag item status depth \fR] \fI..." Display data organized as a tree. Each group of data contains a tag, the text to display for the item, its status (\*(``on\*('' or \*(``off\*('') and the depth of the item in the tree. .IP Only one item can be selected (like the \fBradiolist\fP). The tag is not displayed. .IP On exit, the tag of the selected item is written to \fB\*p\fP's output. . . .IP "\fB--yesno \fItext height width" A \fByes/no\fP dialog box of size \fIheight\fP rows by \fIwidth\fP columns will be displayed. The string specified by \fItext\fP is displayed inside the dialog box. If this string is too long to fit in one line, it will be automatically divided into multiple lines at appropriate places. The \fItext\fP string can also contain the sub-string .RI """" \en """" or newline characters .RI ` \en ' to control line breaking explicitly. This dialog box is useful for asking questions that require the user to answer either yes or no. The dialog box has a \fBYes\fP button and a \fBNo\fP button, in which the user can switch between by pressing the .IR TAB " key." .IP On exit, no text is written to \fB\*p\fP's output. In addition to the \*(``Yes\*('' and \*(``No\*('' exit codes (see DIAGNOSTICS) an ESC exit status may be returned. .IP The codes used for \*(``Yes\*('' and \*(``No\*('' match those used for \*(``OK\*('' and \*(``Cancel\*('', internally no distinction is made. . .\" ************************************************************************ .SS "Obsolete Options" .\" from cdialog 0.9a (Pako) .IP "\fB--beep" This was used to tell the original cdialog that it should make a beep when the separate processes of the tailboxbg widget would repaint the screen. . .\" from cdialog 0.9a (Pako) .IP "\fB--beep-after" Beep after a user has completed a widget by pressing one of the buttons. . .\" ************************************************************************ .SS "Whitespace Options" .PP These options can be used to transform whitespace (space, tab, newline) as dialog reads the script: .RS .BR --cr-wrap , .BR --no-collapse , .BR --no-nl-expand ", and" .B --trim .RE .PP The options are not independent: .bP \fB\*L\fP checks if the script contains at least one \*(``\en\*('' -and (unless \fB--no-nl-expand\fP is set) will ignore the -\fB--no-collapse\fP and \fB--trim\fP options. +and (unless \fB\-\-no\-nl\-expand\fP is set) will ignore the +\fB\-\-no\-collapse\fP and \fB\-\-trim\fP options. .bP -After checking for \*(``\en\*('' and the \fB--no-nl-expand\fP option, -\fB\*l\fP handles the \fB--trim\fP option. +After checking for \*(``\en\*('' and the \fB\-\-no\-nl\-expand\fP option, +\fB\*l\fP handles the \fB\-\-trim\fP option. .IP -If the \fB--trim\fP option takes effect, -then \fB\*l\fP ignores \fB--no-collapse\fP. +If the \fB\-\-trim\fP option takes effect, +then \fB\*l\fP ignores \fB\-\-no\-collapse\fP. It changes sequences of tabs, spaces -(and newlines unless \fB-cr-wrap\fP is set) to a single space. +(and newlines unless \fB\-cr\-wrap\fP is set) to a single space. .bP -If neither the \*(``\en\*('' or \fB--trim\fP cases apply, -\fB\*l\fP checks \fB--no-collapse\fP to decide whether to reduce +If neither the \*(``\en\*('' or \fB\-\-trim\fP cases apply, +\fB\*l\fP checks \fB\-\-no\-collapse\fP to decide whether to reduce sequences of tabs and spaces to a single space. .IP -In this case, \fB\*l\fP ignores \fB-cr-wrap\fP and does not modify newlines. +In this case, \fB\*l\fP ignores \fB\-\-cr\-wrap\fP and does not modify newlines. .PP Taking those dependencies into account, here is a table summarizing the behavior for the various combinations of options. The table assumes that the script contains at least one \*(``\en\*('' -when the \fB--no-nl-expand\fP option is not set. +when the \fB\-\-no\-nl\-expand\fP option is not set. .na +.RS 5 .TS -center tab(/) ; +tab(/) ; lB lB lB lB lB lB lB lB lB lB _ _ _ _ _ -lw5 lw5 lw5 lw5 lw30. +lw4 lw4 lw4 lw4 lw29. cr-/no-/no-/trim/Result wrap/collapse/nl-expand no/no/no/no/T{ Convert tab to space. Convert newline to space. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} no/no/no/yes/T{ Convert tab to space. Convert newline to space. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} no/no/yes/no/T{ Convert tab to space. Do not convert newline to space. Convert multiple-space to single. Show \*(``\en\*('' literally. T} no/no/yes/yes/T{ Convert tab to space. Convert multiple-space to single. Convert newline to space. Show \*(``\en\*('' literally. T} no/yes/no/no/T{ Convert newline to space. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} no/yes/no/yes/T{ Convert newline to space. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} no/yes/yes/no/T{ Do not convert newline to space. Do not reduce multiple blanks. Show \*(``\en\*('' literally. T} no/yes/yes/yes/T{ Convert multiple-space to single. Convert newline to space. Show \*(``\en\*('' literally. T} yes/no/no/no/T{ Convert tab to space. Wrap on newline. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} yes/no/no/yes/T{ Convert tab to space. Wrap on newline. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} yes/no/yes/no/T{ Convert tab to space. Do not convert newline to space. Convert multiple-space to single. Show \*(``\en\*('' literally. T} yes/no/yes/yes/T{ Convert tab to space. Convert multiple-space to single. Wrap on newline. Show \*(``\en\*('' literally. T} yes/yes/no/no/T{ Wrap on newline. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} yes/yes/no/yes/T{ Wrap on newline. -Convert \*(``\en\*('' to newline. +Convert \*(``\en\*('' to newline. T} yes/yes/yes/no/T{ Do not convert newline to space. Do not reduce multiple blanks. Show \*(``\en\*('' literally. T} yes/yes/yes/yes/T{ Convert multiple-space to single. Wrap on newline. Show \*(``\en\*('' literally. T} .TE +.RE .ad . .\" ************************************************************************ .SH "RUN-TIME CONFIGURATION" .TP 4 1. Create a sample configuration file by typing: .LP .Ex -\*p --create-rc \fIfile\fP +\*p \-\-create\-rc \fIfile\fP .Ee .TP 4 2. At start, \fB\*p\fP determines the settings to use as follows: .RS .TP 4 a) if environment variable \fBDIALOGRC\fP is set, its value determines the name of the configuration file. .TP 4 b) if the file in (a) is not found, use the file \fI$HOME/.dialogrc\fP as the configuration file. .TP 4 c) if the file in (b) is not found, try using the GLOBALRC file determined at compile-time, i.e., \fI/etc/dialogrc\fP. .TP 4 d) if the file in (c) is not found, use compiled in defaults. .RE .TP 4 3. Edit the sample configuration file and copy it to some place that \fB\*p\fP can find, as stated in step 2 above. . .\" ************************************************************************ .SH "KEY BINDINGS" You can override or add to key bindings in \fB\*p\fP by adding to the configuration file. \fB\*L\fP's \fBbindkey\fP command maps single keys to its internal coding. .Ex bindkey \fIwidget\fP \fIcurses_key\fP \fIdialog_key\fP .Ee .PP -The \fIwidget\fP name can be "*" (all widgets), or +The \fIwidget\fP name can be \*(``*\*('' (all widgets), or specific widgets such as \fBtextbox\fP. -Specific widget bindings override the "*" bindings. +Specific widget bindings override the \*(``*\*('' bindings. User-defined bindings override the built-in bindings. .PP -The \fIcurses_key\fP can be any of the names derived from +The \fIcurses_key\fP can be expressed in different forms: +.bP +It may be any of the names derived from \fBcurses.h\fP, e.g., \*(``HELP\*('' from \*(``KEY_HELP\*(''. -\fB\*L\fP also recognizes ANSI control characters such as "^A", "^?", -as well as C1-controls such as "~A" and "~?". -Finally, it allows any single character to be escaped with a backslash. +.bP +\fB\*L\fP also recognizes ANSI control characters +such as \*(``^A\*('', \*(``^?\*('', +as well as C1-controls such as \*(``~A\*('' and \*(``~?\*(''. +.bP +Finally, \fB\*l\fP allows backslash escapes as in C. +Those can be octal character values such as \*(``\\033\*('' +(the ASCII escape character), +or the characters listed in this table: +.RS 10 +.TS +tab(/) ; +lI lI +_ _ +l l . +Escaped/Actual +\\b/backspace +\\f/form feed +\\n/new line (line feed) +\\r/carriage return +\\s/space +\\t/tab +\\^/\*(``^\*('' (caret) +\\?/\*(``?\*('' (question mark) +\\\\/\*(``\\\*('' (backslash) +_ +.TE +.RE .PP \fB\*L\fP's internal keycode names correspond to the \fBDLG_KEYS_ENUM\fP type in \fBdlg_keys.h\fP, e.g., \*(``HELP\*('' from \*(``DLGK_HELP\*(''. .SS Widget Names .PP Some widgets (such as the formbox) have an area where fields can be edited. Those are managed in a subwindow of the widget, and may have separate keybindings from the main widget because the subwindows are registered using a different name. +.RS 5 .TS -center tab(/) ; +tab(/) ; lI lI lI _ _ _ l l l . Widget/Window name/Subwindow Name calendar/calendar checklist/checklist editbox/editbox/editbox2 form/formbox/formfield fselect/fselect/fselect2 inputbox/inputbox/inputbox2 menu/menubox/menu msgbox/msgbox pause/pause progressbox/progressbox radiolist/radiolist tailbox/tailbox textbox/textbox/searchbox timebox/timebox yesno/yesno _ .TE +.RE .PP Some widgets are actually other widgets, using internal settings to modify the behavior. Those use the same widget name as the actual widget: +.RS 5 .TS -center tab(/) ; +tab(/) ; lI lI _ _ l l . Widget/Actual Widget dselect/fselect infobox/msgbox inputmenu/menu mixedform/form passwordbox/inputbox passwordform/form prgbox/progressbox programbox/progressbox tailboxbg/tailbox _ .TE +.RE .SS Built-in Bindings This manual page does not list the key bindings for each widget, because that detailed information can be obtained by running \fB\*p\fP. -If you have set the \fB--trace\fP option, +If you have set the \fB\-\-trace\fP option, \fB\*p\fP writes the key-binding information for each widget as it is registered. .SS Example Normally \fB\*p\fP uses different keys for navigating between the buttons and editing part of a dialog versus navigating within the editing part. That is, tab (and back-tab) traverse buttons (or between buttons and the editing part), while arrow keys traverse fields within the editing part. Tabs are also recognized as a special case for traversing between widgets, e.g., when using multiple tailboxbg widgets. .PP Some users may wish to use the same key for traversing within the editing part as for traversing between buttons. The form widget is written to support this sort of redefinition of the keys, by adding a special group in \fBdlgk_keys.h\fP for \*(``form\*('' (left/right/next/prev). Here is an example binding demonstrating how to do this: .Ex bindkey formfield TAB form_NEXT bindkey formbox TAB form_NEXT bindkey formfield BTAB form_prev bindkey formbox BTAB form_prev .Ee .PP That type of redefinition would not be useful in other widgets, e.g., calendar, due to the potentially large number of fields to traverse. . .\" ************************************************************************ .SH ENVIRONMENT .TP 15 \fBDIALOGOPTS\fP Define this variable to apply any of the common options to each widget. Most of the common options are reset before processing each widget. If you set the options in this environment variable, they are applied to \fB\*p\fP's state after the reset. -As in the "\fB--file\fP" option, +As in the \*(``\fB\-\-file\fP\*('' option, double-quotes and backslashes are interpreted. .IP -The "\fB--file\fP" option is not considered a common option +The \*(``\fB\-\-file\fP\*('' option is not considered a common option (so you cannot embed it within this environment variable). .TP 15 \fBDIALOGRC\fP Define this variable if you want to specify the name of the configuration file to use. .TP 15 \fBDIALOG_CANCEL\fP .TP 15 \fBDIALOG_ERROR\fP .TP 15 \fBDIALOG_ESC\fP .TP 15 \fBDIALOG_EXTRA\fP .TP 15 \fBDIALOG_HELP\fP .TP 15 \fBDIALOG_ITEM_HELP\fP .TP 15 +\fBDIALOG_TIMEOUT\fP +.TP 15 \fBDIALOG_OK\fP Define any of these variables to change the exit code on +.RS +.bP Cancel (1), +.bP error (\-1), +.bP ESC (255), +.bP Extra (3), +.bP Help (2), -Help with \fB--item-help\fP (2), -or OK (0). +.bP +Help with \fB\-\-item\-help\fP (2), +.bP +Timeout (5), or +.bP +OK (0). +.RE +.IP Normally shell scripts cannot distinguish between \-1 and 255. .TP 15 \fBDIALOG_TTY\fP Set this variable to \*(``1\*('' to provide compatibility with older versions of \fB\*p\fP which assumed that if the script redirects the standard output, -that the "\fB--stdout\fP" option was given. +that the \*(``\fB\-\-stdout\fP\*('' option was given. .SH FILES .TP 20 \fI$HOME/.dialogrc\fP default configuration file .SH EXAMPLES The \fB\*p\fP sources contain several samples of how to use the different box options and how they look. Just take a look into the directory \fBsamples/\fP of the source. .SH DIAGNOSTICS Exit status is subject to being overridden by environment variables. The default values and corresponding environment variables that can override them are: .TP 5 0 if the \fBYES\fP or \fBOK\fP button is pressed (DIALOG_OK). .TP 5 1 if the .BR No " or " Cancel button is pressed (DIALOG_CANCEL). .TP 5 2 if the .B Help button is pressed (DIALOG_HELP), .br except as noted below about DIALOG_ITEM_HELP. .TP 5 3 if the .B Extra button is pressed (DIALOG_EXTRA). .TP 5 4 if the .B Help button is pressed, .br -and the \fB--item-help\fP option is set +and the \fB\-\-item\-help\fP option is set .br and the DIALOG_ITEM_HELP environment variable is set to 4. .IP While any of the exit-codes can be overridden using environment variables, this special case was introduced in 2004 to simplify compatibility. \fB\*L\fP uses DIALOG_ITEM_HELP(4) internally, but unless the environment variable is also set, it changes that to DIALOG_HELP(2) on exit. .TP 5 +5 +if a timeout expires and the \fBDIALOG_TIMEOUT\fP variable is set to 5. +.TP 5 \-1 if errors occur inside \fB\*p\fP (DIALOG_ERROR) or \fB\*p\fP exits because the \fIESC\fP key (DIALOG_ESC) was pressed. . .\" ************************************************************************ .SH PORTABILITY \fB\*L\fP works with X/Open curses. However, some implementations have deficiencies: .RS 3 .bP HPUX curses (and perhaps others) do not open the terminal properly for the \fInewterm\fP function. -This interferes with \fB\*p\fP's \fB--input-fd\fP option, +This interferes with \fB\*p\fP's \fB\-\-input\-fd\fP option, by preventing cursor-keys and similar escape sequences from being recognized. .bP NetBSD 5.1 curses has incomplete support for wide-characters. \fB\*p\fP will build, but not all examples display properly. .RE .\" ************************************************************************ .SH COMPATIBILITY You may want to write scripts which run with -other \fBdialog\fP \*(``clones\*(''. +other \fB\*l\fP \*(``clones\*(''. .SS Original Dialog -First, there is the \*(``original\*('' \fBdialog\fP program to consider +First, there is the \*(``original\*('' \fB\*p\fP program to consider (versions 0.3 to 0.9). It had some misspelled (or inconsistent) options. The \fB\*p\fP program maps those deprecated options to the preferred ones. They include: .RS .TS tab(/) ; lI lI _ _ l l. Option/Treatment -\fB--beep-after\fP/ignored -\fB--guage\fP/mapped to \fB--gauge\fP +\fB\-\-beep\-after\fP/ignored +\fB\-\-guage\fP/mapped to \fB\-\-gauge\fP _ .TE .RE .SS Xdialog This is an X application, rather than a terminal program. With some care, it is possible to write useful scripts that work -with both \fBXdialog\fP and \fBdialog\fP. +with both \fBXdialog\fP and \fB\*p\fP. .PP The \fB\*p\fP program ignores these options which are recognized by \fBXdialog\fP: .RS .TS tab(/) ; lI lI _ _ l l. Option/Treatment -\fB--allow-close\fP/ignored -\fB--auto-placement\fP/ignored -\fB--fixed-font\fP/ignored -\fB--icon\fP/ignored -\fB--keep-colors\fP/ignored -\fB--no-close\fP/ignored -\fB--no-cr-wrap\fP/ignored -\fB--screen-center\fP/ignored -\fB--separator\fP/mapped to \fB--separate-output\fP -\fB--smooth\fP/ignored -\fB--under-mouse\fP/ignored -\fB--wmclass\fP/ignored +\fB\-\-allow\-close\fP/ignored +\fB\-\-auto\-placement\fP/ignored +\fB\-\-fixed\-font\fP/ignored +\fB\-\-icon\fP/ignored +\fB\-\-keep\-colors\fP/ignored +\fB\-\-no\-close\fP/ignored +\fB\-\-no\-cr\-wrap\fP/ignored +\fB\-\-screen\-center\fP/ignored +\fB\-\-separator\fP/mapped to \fB\-\-separate\-output\fP +\fB\-\-smooth\fP/ignored +\fB\-\-under\-mouse\fP/ignored +\fB\-\-wmclass\fP/ignored _ .TE .RE .PP \fBXdialog\fP's manpage has a section discussing its compatibility with \fB\*p\fP. There are some differences not shown in the manpage. For example, the html documentation states .RS .PP -Note: former Xdialog releases used the "\en" (line feed) as a +Note: former Xdialog releases used the \*(``\en\*('' (line feed) as a results separator for the checklist widget; -this has been changed to "/" in Xdialog v1.5.0 +this has been changed to \*(``/\*('' in Xdialog v1.5.0 to make it compatible with (c)dialog. In your old scripts using the Xdialog checklist, you -will then have to add the \fB--separate-output\fP option before the -\fB--checklist\fP one. +will then have to add the \fB\-\-separate\-output\fP option before the +\fB\-\-checklist\fP one. .RE .PP \fB\*L\fP has not used a different separator; the difference was likely due to confusion regarding some script. .SS Whiptail Then there is \fBwhiptail\fP. For practical purposes, it is maintained by Debian (very little work is done by its upstream developers). Its documentation (README.whiptail) claims .Ex whiptail(1) is a lightweight replacement for \*p(1), to provide dialog boxes for shell scripts. It is built on the newt windowing library rather than the ncurses library, allowing it to be smaller in embedded environments such as installers, rescue disks, etc. whiptail is designed to be drop-in compatible with \*p, but has less features: some dialog boxes are not implemented, such as tailbox, timebox, calendarbox, etc. .Ee .PP Comparing actual sizes (Debian testing, 2007/1/10): The total of sizes for \fBwhiptail\fP, the newt, popt and slang libraries is 757\ KB. The comparable number for \fB\*p\fP (counting ncurses) is 520\ KB. Disregard the first paragraph. .PP The second paragraph is misleading, since \fBwhiptail\fP also does not work for common options of \fB\*p\fP, such as the gauge box. \fBwhiptail\fP is less compatible with \fB\*p\fP than the original mid-1990s dialog 0.4 program. .PP \fBwhiptail\fP's manpage borrows features from \fB\*p\fP, e.g., but oddly cites only \fB\*p\fP versions up to 0.4 (1994) as a source. That is, its manpage refers to features which were borrowed from more recent versions of \fB\*p\fP, e.g., .bP -\fB--gauge\fP (from 0.5) +\fB\-\-gauge\fP (from 0.5) .bP -\fB--passwordbox\fP (from Debian changes in 1999), +\fB\-\-passwordbox\fP (from Debian changes in 1999), .bP -\fB--default-item\fP (from \fB\*p\fP 2000/02/22), +\fB\-\-default\-item\fP (from \fB\*p\fP 2000/02/22), .bP -\fB--output-fd\fP (from \fB\*p\fP 2002/08/14). +\fB\-\-output\-fd\fP (from \fB\*p\fP 2002/08/14). .PP Somewhat humorously, one may note that the \fBpopt\fP feature (undocumented in its manpage) -of using a "--" as an escape was documented in \fB\*p\fP's manpage about +of using a \*(``--\*('' as an escape was documented in \fB\*p\fP's manpage about a year before it was mentioned in \fBwhiptail\fP's manpage. \fBwhiptail\fP's manpage incorrectly attributes that to \fBgetopt\fP (and is inaccurate anyway). .PP Debian uses \fBwhiptail\fP for the official \fB\*p\fP variation. .PP The \fB\*p\fP program ignores or maps these options which are recognized by \fBwhiptail\fP: .RS .TS tab(/) ; lI lI _ _ l l. Option/Treatment -\fB--cancel-button\fP/mapped to \fB--cancel-label\fP -\fB--fb\fP/ignored -\fB--fullbutton\fP/ignored -\fB--no-button\fP/mapped to \fB--no-label\fP -\fB--nocancel\fP/mapped to \fB--no-cancel\fP -\fB--noitem\fP/mapped to \fB--no-items\fP -\fB--notags\fP/mapped to \fB--no-tags\fP -\fB--ok-button\fP/mapped to \fB--ok-label\fP -\fB--scrolltext\fP/mapped to \fB--scrollbar\fP -\fB--topleft\fP/mapped to \fB--begin 0 0\fP -\fB--yes-button\fP/mapped to \fB--yes-label\fP +\fB\-\-cancel\-button\fP/mapped to \fB\-\-cancel\-label\fP +\fB\-\-fb\fP/ignored +\fB\-\-fullbutton\fP/ignored +\fB\-\-no\-button\fP/mapped to \fB\-\-no\-label\fP +\fB\-\-nocancel\fP/mapped to \fB\-\-no\-cancel\fP +\fB\-\-noitem\fP/mapped to \fB\-\-no\-items\fP +\fB\-\-notags\fP/mapped to \fB\-\-no\-tags\fP +\fB\-\-ok\-button\fP/mapped to \fB\-\-ok\-label\fP +\fB\-\-scrolltext\fP/mapped to \fB\-\-scrollbar\fP +\fB\-\-topleft\fP/mapped to \fB\-\-begin 0 0\fP +\fB\-\-yes\-button\fP/mapped to \fB\-\-yes\-label\fP _ .TE .RE .LP There are visual differences which are not addressed by command-line options: .bP \fB\*p\fP centers lists within the window. \fBwhiptail\fP typically puts lists against the left margin. .bP -\fBwhiptail\fP uses angle brackets ("<" and ">") for marking buttons. +\fBwhiptail\fP uses angle brackets (\*(``<\*('' and \*(``>\*('') +for marking buttons. \fB\*p\fP uses square brackets. .bP \fBwhiptail\fP marks the limits of subtitles with vertical bars. \fB\*p\fP does not mark the limits. .bP \fBwhiptail\fP attempts to mark the top/bottom cells of a scrollbar with up/down arrows. When it cannot do this, it fills those cells with the background color of the scrollbar and confusing the user. \fB\*p\fP uses the entire scrollbar space, thereby getting better resolution. .\" ************************************************************************ .SH BUGS Perhaps. .SH AUTHOR .LP Thomas E.\& Dickey (updates for 0.9b and beyond) .SH CONTRIBUTORS Kiran Cherupally \(en the mixed form and mixed gauge widgets. .LP Tobias C.\& Rittweiler .LP Valery Reznic \(en the form and progressbox widgets. .LP Yura Kalinichenko adapted the gauge widget as \*(``pause\*(''. .PP This is a rewrite (except as needed to provide compatibility) of the earlier version of \fB\*p 0.9a\fP, which lists as authors: .bP Savio Lam \(en version 0.3, \*(``dialog\*('' .bP Stuart Herbert \(en patch for version 0.4 .bP Marc Ewing \(en the gauge widget. .bP Pasquale De Marco \*(``Pako\*('' \(en version 0.9a, \*(``cdialog\*('' diff --git a/dialog.3 b/dialog.3 index 80c0dd0c8f3b..efa45d0a9456 100644 --- a/dialog.3 +++ b/dialog.3 @@ -1,3638 +1,3823 @@ '\" t -.\" $Id: dialog.3,v 1.121 2018/06/20 01:21:53 tom Exp $ -.\" Copyright 2005-2017,2018 Thomas E. Dickey +.\" $Id: dialog.3,v 1.138 2021/01/17 18:02:44 tom Exp $ +.\" Copyright 2005-2020,2021 Thomas E. Dickey .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU Lesser General Public License, version 2.1 .\" as published by the Free Software Foundation. .\" .\" 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, write to .\" Free Software Foundation, Inc. .\" 51 Franklin St., Fifth Floor .\" Boston, MA 02110, USA. .\" .\" definitions for renaming .ds p dialog .ds l dialog .ds L Dialog .ds D DIALOG . .de ES .ne 8 .IP .. .de Ex .RS +7 .PP .nf .ft CW .. .de Ee .fi .ft R .RE .. .\" Bulleted paragraph .de bP .ie n .IP \(bu 4 .el .IP \(bu 2 .. .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' -.TH \*D 3 "" "$Date: 2018/06/20 01:21:53 $" +.TH \*D 3 "" "$Date: 2021/01/17 18:02:44 $" .SH NAME dialog \- widgets and utilities for the \*p program .SH SYNOPSIS -.B cc [ flag ... ] file ... -l\*l [ library ... ] +.B cc [ flag ... ] file ... \-l\*l [ library ... ] .br \ \ \ or .br -.B cc $(\*p-config --cflags) file ... $(\*p-config --libs) ] +.B cc $(\*p\-config \-\-cflags) file ... $(\*p\-config \-\-libs) ] .sp .B #include <\*l.h> .PP \fB\*L\fP is a program that will let you present a variety of questions or display messages using dialog boxes from a shell script. It is built from the \fB\*l\fP library, which consists of several widgets as well as utility functions that are used by the widgets or the main program. . .SH DESCRIPTION This manpage documents the features from \fI<\*l.h>\fP which are likely to be important to developers using the widgets directly. Some hints are also given for developing new widgets. .PP Here is a \fB\*l\fP version of \fIHello World\/\fP: .RS .nf int main(void) { int status; init_dialog(stdin, stdout); status = dialog_yesno( - "Hello, in dialog-format", + "Hello, in dialog\-format", "Hello World!", 0, 0); end_dialog(); return status; } .fi .RE . .\" ************************************************************************ .SH DEFINITIONS Exit codes (passed back to the main program for its use) are defined with a "\fIDLG_EXIT_\fP prefix. The efined constants can be mapped using environment variables as described in \fB\*p\fP(1), e.g., \fIDLG_EXIT_OK\fP corresponds to \fI$DIALOG_OK\fP. .PP Useful character constants which correspond to user input are named with the "\fICHR_\fP" prefix, e.g., \fICHR_BACKSPACE\fP. .PP Colors and video attributes are categorized and associated with settings in the configuration file (see the discussion of \fI$DIALOGRC\fP in \fB\*p\/\fP(1)). The \fIDIALOG_ATR(n)\fP macro is used for defining the references to the combined color and attribute table \fBdlg_color_table[]\fP. .PP The \fB\*p\fP application passes its command-line parameters to the widget functions. Some of those parameters are single values, but some of the widgets accept data as an array of values. Those include checklist/radiobox, menubox and formbox. -When the \fB--item-help\fP option is given, an extra column +When the \fB\-\-item\-help\fP option is given, an extra column of data is expected. The USE_ITEM_HELP(), CHECKBOX_TAGS, MENUBOX_TAGS and FORMBOX_TAGS macros are used to hide this difference from the calling application. .PP Most of the other definitions found in \fI<\*l.h>\fP are used for convenience in building the library or main program. These include definitions based on the generated \fI<dlg_config.h>\fP header. . .\" ************************************************************************ .SH DATA STRUCTURES All of the global data for the \fB\*l\fP library is stored in a few structures: \fIDIALOG_STATE\fP, \fIDIALOG_VARS\fP and \fIDIALOG_COLORS\fP. The corresponding \fBdialog_state\fP, \fBdialog_vars\fP and \fBdlg_color_table\fP global variables should be initialized to zeros, and then populated with the data to use. A few of these must be nonzero for the corresponding widgets to function. As as the case with function names, variables beginning with "\fIdialog_\fP" are designed for use by the calling application while variables beginning with "\fIdlg_\fP" are intended for lower levels, e.g., by the \fB\*l\fP library. .\" --------------------------------------------------------------------------- .SH DIALOG_STATE The \fIstate\fP variables are \fB\*l\fP's working variables. It initializes those, uses them to manage the widgets. .\" --------------------------------------------------------------------------- .SS .all_subwindows This is a linked list of all subwindows created by the library. The \fBdlg_del_window\fP function uses this to free storage for subwindows when deleting a window. .\" --------------------------------------------------------------------------- .SS .all_windows This is a linked list of all windows created by the library. The \fBdlg_del_window\fP function uses this to locate windows which may be redrawn after deleting a window. .\" --------------------------------------------------------------------------- .SS .aspect_ratio -This corresponds to the command-line option "\fB--aspect-ratio\fP". +This corresponds to the command-line option "\fB\-\-aspect\-ratio\fP". The value gives the application some control over the box dimensions when using auto sizing (specifying 0 for height and width). It represents width / height. The default is 9, which means 9 characters wide to every 1 line high. .\" --------------------------------------------------------------------------- .SS .finish_string When set to true, this allows calls to \fBdlg_finish_string\fP to discard the corresponding data which is created to speed up layout computations for the given string parameter. The \fBgauge\fP widget uses this feature. .\" --------------------------------------------------------------------------- .SS .getc_callbacks This is set up in \fIui_getc.c\fP to record windows which must be polled for input, e.g., to handle the background tailbox widget. One window is designated as the foreground or control window. .\" --------------------------------------------------------------------------- .SS .getc_redirect If the control window for \fIDIALOG_STATE.getc_callbacks\fP is closed, the list is transferred to this variable. Closing all windows causes the application to exit. .\" --------------------------------------------------------------------------- +.SS .had_resize +This is set to TRUE +in \fBdlg_will_resize\fP or \fBdlg_result_key\fP +when \fBKEY_RESIZE\fP is read, +to tell \fB\*p\fP to ignore subsequent \fBERR\fPs. +.\" --------------------------------------------------------------------------- .SS .no_mouse -This corresponds to the command-line option "\fB--no-mouse\fP". +This corresponds to the command-line option "\fB\-\-no\-mouse\fP". If true, \fB\*p\fP will not initialize (and enable) the mouse in \fIinit_dialog\fP. .\" --------------------------------------------------------------------------- .SS .output This is set in the \fB\*p\fP application to the stream on which the application and library functions may write text results. Normally that is the standard error, since the curses library prefers to write its data to the standard output. Some scripts, trading portability for convenience, prefer to write results to the standard output, -e.g., by using the "\fB--stdout\fP" option. +e.g., by using the "\fB\-\-stdout\fP" option. .\" --------------------------------------------------------------------------- .SS .output_count This is incremented by \fBdlg_does_output\fP, which is called by each widget that writes text to the output. The \fB\*p\fP application uses that to decide if it should also write a separator, i.e., \fIDIALOG_STATE.separate_str\fP, between calls to each widget. .\" --------------------------------------------------------------------------- .SS .pipe_input This is set in \fIinit_dialog\fP to a stream which can be used by the \fBgauge\fP widget, which must be the application's standard input. The \fB\*p\fP application calls \fIinit_dialog\fP normally with \fIinput\fP set to the standard input, but optionally based on the -"\fB--input-fd\fP" option. +"\fB\-\-input\-fd\fP" option. Since the application cannot read from a pipe (standard input) and at the same time read the curses input from the standard input, it must allow for reopening the latter from either a specific file descriptor, or directly from the terminal. The adjusted pipe stream value is stored in this variable. .\" --------------------------------------------------------------------------- +.SS .screen_height +The text-formatting functions use this for the number of rows used for +formatting a string. +.LP +It is used by \fB\*l\fP for the command-line options +"\fB\-\-print\-text\-size\fP" and +"\fB\-\-print\-text\-only\fP". +.\" --------------------------------------------------------------------------- .SS .screen_initialized This is set in \fIinit_dialog\fP and reset in \fIend_dialog\fP. It is used to check if curses has been initialized, and if the \fIendwin\fP function must be called on exit. .\" --------------------------------------------------------------------------- .SS .screen_output This is set in \fIinit_dialog\fP to the output stream used by the curses library. Normally that is the standard output, unless that happens to not be a terminal (and if \fIinit_dialog\fP can successfully open the terminal directly). .\" --------------------------------------------------------------------------- +.SS .screen_width +The text-formatting functions use this for the number of columns used for +formatting a string. +.LP +It is used by \fB\*l\fP for the command-line options +"\fB\-\-print\-text\-size\fP" and +"\fB\-\-print\-text\-only\fP". +.\" --------------------------------------------------------------------------- .SS .separate_str -This corresponds to the command-line option "\fB--separate-widget\fP". +This corresponds to the command-line option "\fB\-\-separate\-widget\fP". The given string specifies a string that will separate the output on \fB\*p\fP's output from each widget. This is used to simplify parsing the result of a dialog with several widgets. If this option is not given, the default separator string is a tab character. .\" --------------------------------------------------------------------------- .SS .tab_len -This corresponds to the command-line option "\fB--tab-len\fP \fInumber\/\fP". +This corresponds to the command-line option "\fB\-\-tab\-len\fP \fInumber\/\fP". Specify the number of spaces that a tab character occupies if the -"\fB--tab-correct\fP" +"\fB\-\-tab\-correct\fP" option is given. The default is 8. .\" --------------------------------------------------------------------------- .SS .text_height -This text-formatting functions set this to the number of lines used for +The text-formatting functions set this to the number of lines used for formatting a string. .LP It is used by \fB\*l\fP for the command-line options -"\fB--print-text-size\fP" and -"\fB--print-text-only\fP". +"\fB\-\-print\-text\-size\fP" and +"\fB\-\-print\-text\-only\fP". .\" --------------------------------------------------------------------------- .SS .text_only -\fB\*L\fP uses this in the command-line option "\fB--print-text-only\fP". +\fB\*L\fP uses this in the command-line option "\fB\-\-print\-text\-only\fP". .LP The text-formatting functions (\fBdlg_print_text\fP, \fBdlg_print_line\fP, and \fBdlg_print_autowrap\fP) check this to decide whether to print the formatted text to \fB\*p\fP's output or to the curses-display. .LP Also, \fBdlg_auto_size\fP checks the flag, allowing it to be used before \fBinit_dialog\fP is called. .\" --------------------------------------------------------------------------- .SS .text_width -This text-formatting functions set this to the number of columns used for +The text-formatting functions set this to the number of columns used for formatting a string. .LP It is used by \fB\*l\fP for the command-line options -"\fB--print-text-size\fP" and -"\fB--print-text-only\fP". +"\fB\-\-print\-text\-size\fP" and +"\fB\-\-print\-text\-only\fP". .\" --------------------------------------------------------------------------- .SS .trace_output -This corresponds to the command-line option "\fB--trace\fP \fIfile\fP". +This corresponds to the command-line option "\fB\-\-trace\fP \fIfile\fP". It is the file pointer to which trace messages are written. .\" --------------------------------------------------------------------------- .SS .use_colors This is set in \fIinit_dialog\fP if the curses implementation supports color. .\" --------------------------------------------------------------------------- .SS .use_scrollbar -This corresponds to the command-line option "\fB--scrollbar\fP". +This corresponds to the command-line option "\fB\-\-scrollbar\fP". If true, draw a scrollbar to make windows holding scrolled data more readable. .\" --------------------------------------------------------------------------- .SS .use_shadow -This corresponds to the command-line option "\fB--no-shadow\fP". +This corresponds to the command-line option "\fB\-\-no\-shadow\fP". This is set in \fIinit_dialog\fP if the curses implementation supports color. If true, suppress shadows that would be drawn to the right and bottom of each dialog box. .\" --------------------------------------------------------------------------- .SS .visit_items -This corresponds to the command-line option "\fB--visit-items\fP". +This corresponds to the command-line option "\fB\-\-visit\-items\fP". Modify the tab-traversal of the list-oriented widgets (buildlist, checklist, radiobox, menubox, inputmenu, and treeview) to include the list of items as one of the states. This is useful as a visual aid, i.e., the cursor position helps some users. .\" --------------------------------------------------------------------------- .PP The \fB\*p\fP application resets the \fBdialog_vars\fP data before accepting options to invoke each widget. Most of the \fIDIALOG_VARS\fP members are set directly from \fB\*p\fP's command-line options: .\" --------------------------------------------------------------------------- .SH DIALOG_VARS .PP In contrast to \fBDIALOG_STATE\fP, the members of \fBDIALOG_VARS\fP are set by command-line options in \fB\*p\fP. .\" --------------------------------------------------------------------------- .SS .ascii_lines -This corresponds to the command-line option "\fB--ascii-lines\fP. -It causes line-drawing to be done with ASCII characters, e.g., "+" and "-". +This corresponds to the command-line option "\fB\-\-ascii\-lines\fP. +It causes line-drawing to be done with ASCII characters, e.g., "+" and "\-". See \fIDIALOG_VARS.no_lines\fP. .\" --------------------------------------------------------------------------- .SS .backtitle This corresponds to the command-line option -"\fB--backtitle\fP \fIbacktitle\/\fP". +"\fB\-\-backtitle\fP \fIbacktitle\/\fP". It specifies a \fIbacktitle\fP string to be displayed on the backdrop, at the top of the screen. .\" --------------------------------------------------------------------------- .SS .beep_after_signal -This corresponds to the command-line option "\fB--beep-after\fP". +This corresponds to the command-line option "\fB\-\-beep\-after\fP". If true, beep after a user has completed a widget by pressing one of the buttons. .\" --------------------------------------------------------------------------- .SS .beep_signal -This corresponds to the command-line option "\fB--beep\fP". +This corresponds to the command-line option "\fB\-\-beep\fP". It is obsolete. .\" --------------------------------------------------------------------------- .SS .begin_set -This is true if the command-line option "\fB--begin\fP \fIy x\/\fP" was used. +This is true if the command-line option "\fB\-\-begin\fP \fIy x\/\fP" was used. It specifies the position of the upper left corner of a dialog box on the screen. .\" --------------------------------------------------------------------------- .SS .begin_x This corresponds to the \fIx\fP value from -the command-line option "\fB--begin\fP \fIy x\/\fP" (second value). +the command-line option "\fB\-\-begin\fP \fIy x\/\fP" (second value). .\" --------------------------------------------------------------------------- .SS .begin_y This corresponds to the \fIy\fP value from -the command-line option "\fB--begin\fP \fIy x\/\fP" (first value). +the command-line option "\fB\-\-begin\fP \fIy x\/\fP" (first value). .\" --------------------------------------------------------------------------- .SS .cancel_label This corresponds to the command-line option "\fB--cancel-label\fP \fIstring\/\fP". The given \fIstring\fP overrides the label used for \*(``Cancel\*('' buttons. .\" --------------------------------------------------------------------------- .SS .cant_kill -This corresponds to the command-line option "\fB--no-kill\fP". +This corresponds to the command-line option "\fB\-\-no\-kill\fP". If true, this tells \fB\*p\fP to put the \fBtailboxbg\fP box in the background, printing its process id to \fB\*p\fP's output. SIGHUP is disabled for the background process. .\" --------------------------------------------------------------------------- .SS .colors -This corresponds to the command-line option "\fB--colors\fP". +This corresponds to the command-line option "\fB\-\-colors\fP". If true, interpret embedded "\eZ" sequences in the dialog text by the following character, which tells \fB\*p\fP to set colors or video attributes: 0 through 7 are the ANSI codes used in curses: black, red, green, yellow, blue, magenta, cyan and white respectively. Bold is set by 'b', reset by 'B'. Reverse is set by 'r', reset by 'R'. Underline is set by 'u', reset by 'U'. The settings are cumulative, e.g., "\eZb\eZ1" makes the following text bright red. Restore normal settings with "\eZn". .\" --------------------------------------------------------------------------- .SS .column_separator -This corresponds to the command-line option "\fB--column-separator\fP". +This corresponds to the command-line option "\fB\-\-column\-separator\fP". \fB\*L\fP splits data for radio/checkboxes and menus on the occurrences of the given string, and aligns the split data into columns. .\" --------------------------------------------------------------------------- .SS .cr_wrap -This corresponds to the command-line option "\fB--cr-wrap\fP". +This corresponds to the command-line option "\fB\-\-cr\-wrap\fP". If true, interpret embedded newlines in the dialog text as a newline on the screen. Otherwise, \fB\*p\fR will only wrap lines where needed to fit inside the text box. Even though you can control line breaks with this, \fB\*p\fR will still wrap any lines that are too long for the width of the box. Without cr-wrap, the layout of your text may be formatted to look nice in the source code of your script without affecting the way it will look in the dialog. .\" --------------------------------------------------------------------------- +.SS .cursor_off_label +This corresponds to the command-line option "\fB\-\-cursor\-off\-label\fP". +If true, place the terminal cursor at the end of a button instead of +on the first character of the button label. +This is useful to reduce visual confusion when the cursor coloration +interacts poorly with the button-label text colors. +.\" --------------------------------------------------------------------------- .SS .date_format This corresponds to the command-line option -"\fB--date-format\fP \fIstring\/\fP". +"\fB\-\-date\-format\fP \fIstring\/\fP". If the host provides \fBstrftime\fP, and the value is nonnull, the calendar widget uses this to format its output. .\" --------------------------------------------------------------------------- .SS .default_button -This is set by the command-line option "\fB--default-button\fP. +This is set by the command-line option "\fB\-\-default\-button\fP. It is used by \fBdlg_default_button\fP. .\" --------------------------------------------------------------------------- .SS .default_item This corresponds to the command-line option -"\fB--default-item\fP \fIstring\/\fP". +"\fB\-\-default\-item\fP \fIstring\/\fP". The given string is used as the default item in a checklist, form or menu box. Normally the first item in the box is the default. .\" --------------------------------------------------------------------------- .SS .defaultno -This corresponds to the command-line option "\fB--defaultno\fP". +This corresponds to the command-line option "\fB\-\-defaultno\fP". If true, make the default value of the \fByes/no\fP box a .BR No . Likewise, treat the default button of widgets that provide \*(``OK\*('' and \*(``Cancel\*('' as a \fICancel\fP. -If \fB--nocancel\fP was given that option overrides this, +If \fB\-\-no\-cancel\fP was given that option overrides this, making the default button always \*(``Yes\*('' (internally the same as \*(``OK\*(''). .\" --------------------------------------------------------------------------- .SS .dlg_clear_screen -This corresponds to the command-line option "\fB--clear\fP". +This corresponds to the command-line option "\fB\-\-clear\fP". This option is implemented in the main program, not the library. If true, the screen will be cleared on exit. This may be used alone, without other options. .\" --------------------------------------------------------------------------- +.SS .erase_on_exit +This corresponds to the command-line option "\fB\-\-erase\-on\-exit\fP". +If true, remove the dialog widget on program exit, erasing the entire +screen to its native background color, and place the terminal cursor +at the lower left corner of the screen. +This is useful for making the window contents invisible at the end of +a series of dialog boxes. +But it can also be used at earlier stages of a series of invocations +of \fB\*p\fP, if the series may be aborted before it is fully completed. +.\" --------------------------------------------------------------------------- .SS .exit_label -This corresponds to the command-line option "\fB--exit-label string\fP". +This corresponds to the command-line option "\fB\-\-exit\-label string\fP". The given string overrides the label used for \*(``EXIT\*('' buttons. .\" --------------------------------------------------------------------------- .SS .extra_button -This corresponds to the command-line option "\fB--extra-button\fP". +This corresponds to the command-line option "\fB\-\-extra\-button\fP". If true, some widgets show an extra button, between \*(``OK\*('' and \*(``Cancel\*('' buttons. .\" --------------------------------------------------------------------------- .SS .extra_label This corresponds to the command-line option -"\fB--extra-label\fP \fIstring\/\fP". +"\fB\-\-extra\-label\fP \fIstring\/\fP". The given string overrides the label used for \*(``Extra\*('' buttons. Note: for inputmenu widgets, this defaults to \*(``Rename\*(''. .\" --------------------------------------------------------------------------- .SS .formitem_type -This is set by the command-line option "\fB--passwordform\fP" +This is set by the command-line option "\fB\-\-passwordform\fP" to tell the form widget that its text fields should be treated like password widgets. .\" --------------------------------------------------------------------------- .SS .help_button -This corresponds to the command-line option "\fB--help-button\fP". +This corresponds to the command-line option "\fB\-\-help\-button\fP". If true, some widgets show a help-button after \*(``OK\*('' and \*(``Cancel\*('' buttons, i.e., in checklist, radiolist and menu boxes. -If \fB--item-help\fR is also given, on exit +If \fB\-\-item\-help\fR is also given, on exit the return status will be the same as for the \*(``OK\*('' button, and the item-help text will be written to \fB\*p\fP's output after the token \*(``HELP\*(''. Otherwise, the return status will indicate that the Help button was pressed, and no message printed. .\" --------------------------------------------------------------------------- .SS .help_file -This corresponds to the command-line option "\fB--hfile\fP \fIstring\/\fP". +This corresponds to the command-line option "\fB\-\-hfile\fP \fIstring\/\fP". The given filename is passed to \fBdialog_helpfile\fP when the user presses F1. .\" --------------------------------------------------------------------------- .SS .help_label -This corresponds to the command-line option "\fB--help-label\fP \fIstring\/\fP". +This corresponds to the +command-line option "\fB\-\-help\-label\fP \fIstring\/\fP". The given string overrides the label used for \*(``Help\*('' buttons. .\" --------------------------------------------------------------------------- .SS .help_line -This corresponds to the command-line option "\fB--hline\fP \fIstring\/\fP". +This corresponds to the command-line option "\fB\-\-hline\fP \fIstring\/\fP". The given string is displayed in the bottom of dialog windows, like a subtitle. .\" --------------------------------------------------------------------------- .SS .help_status -This corresponds to the command-line option "\fB--help-status\fP". +This corresponds to the command-line option "\fB\-\-help\-status\fP". If true, and the the help-button is selected, writes the checklist or radiolist information after the item-help \*(``HELP\*('' information. This can be used to reconstruct the state of a checklist after processing the help request. .\" --------------------------------------------------------------------------- .SS .help_tags -This corresponds to the command-line option "\fB--help-tags\fP". +This corresponds to the command-line option "\fB\-\-help\-tags\fP". If true, \fBdlg_add_help_formitem\fP and \fBdlg_add_help_listitem\fP use the item's tag value consistently rather than using the tag's help-text value when \fIDIALOG_VARS.item_help\fP is set. .\" --------------------------------------------------------------------------- .SS .input_length This is nonzero if \fIDIALOG_VARS.input_result\fP is allocated, versus being a pointer to the user's local variables. .\" --------------------------------------------------------------------------- .SS .input_menu This flag is set to denote whether the menubox widget implements a menu versus a inputmenu widget. .\" --------------------------------------------------------------------------- .SS .input_result This may be either a user-supplied buffer, or a buffer dynamically allocated by the library, depending on \fIDIALOG_VARS.input_length\fP: .bP If \fIDIALOG_VARS.input_length\fP is zero, this is a pointer to user buffer (on the stack, or static). The buffer size is assumed to be \fBMAX_LEN\fP, which is defined in \fI<\*l.h>\fP. .bP When \fIDIALOG_VARS.input_length\fP is nonzero, this is a dynamically-allocated buffer used by the widgets to return printable results to the calling application. .LP Certain widgets copy a result to this buffer. If the pointer is NULL, or if the length is insufficient for the result, then the \fB\*l\fP library allocates a buffer which is large enough, and sets \fIDIALOG_VARS.input_length\fP. Callers should check for this case if they have supplied their own buffer. .\" --------------------------------------------------------------------------- .SS .insecure -This corresponds to the command-line option "\fB--insecure\fP". +This corresponds to the command-line option "\fB\-\-insecure\fP". If true, make the password widget friendlier but less secure, by echoing asterisks for each character. .\" --------------------------------------------------------------------------- .SS .in_helpfile This variable is used to prevent \fBdialog_helpfile\fP from showing anything, e.g., if F1 were pressed within a help-file display. .\" --------------------------------------------------------------------------- .SS .iso_week -This corresponds to the command-line option "\fB--iso-week\fP". +This corresponds to the command-line option "\fB\-\-iso\-week\fP". It is used in the calendar widget to tell how to compute the starting week for the year: .bP by default, the calendar treats January 1 as the first week of the year. .bP If this variable is true, the calendar uses ISO 8601's convention. ISO 8601 numbers weeks starting with the first week in January with a Thursday in the current year. January 1 may be in the \fIprevious\fP year. .\" --------------------------------------------------------------------------- .SS .item_help -This corresponds to the command-line option "\fB--item-help\fP". +This corresponds to the command-line option "\fB\-\-item\-help\fP". If true, interpret the tags data for checklist, radiolist and menu boxes adding a column whose text is displayed in the bottom line of the screen, for the currently selected item. .\" --------------------------------------------------------------------------- .SS .keep_tite -This is set by the command-line option "\fB--keep-tite\fP" +This is set by the command-line option "\fB\-\-keep\-tite\fP" to tell \fB\*p\fP to not attempt to cancel the terminal initialization (termcap \fIti\/\fP/\,\fIte\/\fP) sequences which correspond to xterm's alternate-screen switching. Normally \fB\*p\fP does this to avoid flickering when run several times in a script. .\" --------------------------------------------------------------------------- .SS .keep_window -This corresponds to the command-line option "\fB--keep-window\fP". +This corresponds to the command-line option "\fB\-\-keep\-window\fP". If true, do not remove/repaint the window on exit. This is useful for keeping the window contents visible when several widgets are run in the same process. Note that curses will clear the screen when starting a new process. .\" --------------------------------------------------------------------------- .SS .last_key -This corresponds to the command-line option "\fB--last-key\fP". +This corresponds to the command-line option "\fB\-\-last\-key\fP". .\" --------------------------------------------------------------------------- .SS .max_input -This corresponds to the command-line option "\fB--max-input\fP \fIsize\/\fP". +This corresponds to the command-line option "\fB\-\-max\-input\fP \fIsize\/\fP". Limit input strings to the given size. If not specified, the limit is 2048. .\" --------------------------------------------------------------------------- +.SS .no_hot_key +This corresponds to the command-line option "\fB\-\-no\-hot\-list\fP". +.LP +Some widgets +(buildlist, +checklist, +inputmenu, +menu, +radiolist, +treeview) +display a list +for which the leading capital letter in each entry is accepted as a hot-key, +to quickly move the focus to that entry. +.LP +Setting this variable to TRUE disables the feature. +.\" --------------------------------------------------------------------------- .SS .no_items -This corresponds to the command-line option "\fB--no-items\fP". +This corresponds to the command-line option "\fB\-\-no\-items\fP". Some widgets (checklist, inputmenu, radiolist, menu) display a list with two columns (a \*(``tag\*('' and \*(``item\*('', i.e., \*(``description\*(''). This tells \fB\*p\fP to read shorter rows from data, omitting the \*(``list\*(''. .\" --------------------------------------------------------------------------- .SS .no_label -This corresponds to the command-line option "\fB--no-label\fP \fIstring\/\fP". +This corresponds to the command-line +option "\fB\-\-no\-label\fP \fIstring\/\fP". The given string overrides the label used for \*(``No\*('' buttons. .\" --------------------------------------------------------------------------- .SS .no_lines -This corresponds to the command-line option "\fB--no-lines\fP. +This corresponds to the command-line option "\fB\-\-no\-lines\fP. It suppresses line-drawing. See \fIDIALOG_VARS.ascii_lines\fP. .\" --------------------------------------------------------------------------- .SS .no_nl_expand -This corresponds to the command-line option "\fB--no-nl-expand\fP". +This corresponds to the command-line option "\fB\-\-no\-nl\-expand\fP". If false, \fBdlg_trim_string\fP converts literal "\en" substrings in a message into newlines. .\" --------------------------------------------------------------------------- .SS .no_tags -This corresponds to the command-line option "\fB--no-tags\fP". +This corresponds to the command-line option "\fB\-\-no\-tags\fP". Some widgets (checklist, inputmenu, radiolist, menu) display a list with two columns (a \*(``tag\*('' and \*(``item\*('', also known as \*(``description\*(''). The tag is useful for scripting, but may not help the user. -The \fB--no-tags\fP option (from Xdialog) may be used to suppress the +The \fB\-\-no\-tags\fP option (from Xdialog) may be used to suppress the column of tags from the display. .LP Normally \fB\*p\fP allows you to quickly move to entries on the displayed list, by matching a single character to the first character of the tag. -When the \fB--no-tags\fP option is given, \fB\*p\fP matches against +When the \fB\-\-no\-tags\fP option is given, \fB\*p\fP matches against the first character of the description. In either case, the matchable character is highlighted. .LP Here is a table showing how the no_tags and no_items values interact: .TS tab(/); l l l l l l l l n n. Widget/Fields Shown/Fields Read/.no_items/.no_tags _ buildlist/item/tag,item/0/0* buildlist/item/tag,item/0/1 buildlist/tag/tag/1/0* buildlist/tag/tag/1/1 checklist/tag,item/tag,item/0/0 checklist/item/tag,item/0/1 checklist/tag/tag/1/0 checklist/tag/tag/1/1 inputmenu/tag,item/tag,item/0/0 inputmenu/item/tag,item/0/1 inputmenu/tag/tag/1/0 inputmenu/tag/tag/1/1 menu/tag,item/tag,item/0/0 menu/item/tag,item/0/1 menu/tag/tag/1/0 menu/tag/tag/1/1 radiolist/tag,item/tag,item/0/0 radiolist/item/tag,item/0/1 radiolist/tag/tag/1/0 radiolist/tag/tag/1/1 treeview/item/tag,item/0/0* treeview/item/tag,item/0/1 treeview/tag/tag/1/0* treeview/tag/tag/1/1 _ .TE .TP 2 * Xdialog does not display the tag column for the analogous buildlist and treeview widgets. \fB\*L\fP does the same on the command-line. However the library interface defaults to displaying the tag column. Your application can enable or disable the tag column as needed for each widget. .\" --------------------------------------------------------------------------- .SS .nocancel -This corresponds to the command-line option "\fB--no-cancel\fP". +This corresponds to the command-line option "\fB\-\-no\-cancel\fP". If true, suppress the \*(``Cancel\*('' button in checklist, inputbox and menu box modes. A script can still test if the user pressed the ESC key to cancel to quit. .\" --------------------------------------------------------------------------- .SS .nocollapse -This corresponds to the command-line option "\fB--no-collapse\fP". +This corresponds to the command-line option "\fB\-\-no\-collapse\fP". Normally \fB\*p\fR converts tabs to spaces and reduces multiple spaces to a single space for text which is displayed in a message boxes, etc. It true, that feature is disabled. -Note that \fB\*p\fR will still wrap text, subject to the \fB--cr-wrap\fR +Note that \fB\*p\fR will still wrap text, subject to the \fB\-\-cr\-wrap\fR option. .\" --------------------------------------------------------------------------- .SS .nook -This corresponds to the command-line option "\fB--nook\fP. +This corresponds to the command-line option "\fB\-\-no\-ok\fP. \fB\*L\fP will suppress the \*(``ok\*('' (or \*(``yes\*('') button from the widget. .\" --------------------------------------------------------------------------- .SS .ok_label -This corresponds to the command-line option "\fB--ok-label\fP \fIstring\/\fP". +This corresponds to the command-line +option "\fB\-\-ok\-label\fP \fIstring\/\fP". The given string overrides the label used for \*(``OK\*('' buttons. .\" --------------------------------------------------------------------------- +.SS .pause_secs +When set, force \fBdlg_set_timeout\fP to use 10 milliseconds +rather than using the \fIDIALOG_VARS.timeout_secs\fP value. +.\" --------------------------------------------------------------------------- .SS .print_siz -This corresponds to the command-line option "\fB--print-size\fP". +This corresponds to the command-line option "\fB\-\-print\-size\fP". If true, each widget prints its size to \fB\*p\fP's output when it is invoked. .\" --------------------------------------------------------------------------- .SS .quoted -This corresponds to the command-line option "\fB--quoted\fP. +This corresponds to the command-line option "\fB\-\-quoted\fP. Normally \fB\*p\fP quotes the strings returned by checklist's as well as the item-help text. If true, \fB\*p\fP will quote all string results. .\" --------------------------------------------------------------------------- .SS .reorder -This corresponds to the command-line option "\fB--reorder\fP. +This corresponds to the command-line option "\fB\-\-reorder\fP. By default, the buildlist widget uses the same order for the output (right) list as for the input (left). If true, \fB\*p\fP will use the order in which a user adds selections to the output list. .\" --------------------------------------------------------------------------- .SS .separate_output -This corresponds to the command-line option "\fB--separate-output\fP". +This corresponds to the command-line option "\fB\-\-separate\-output\fP". If true, checklist widgets output result one line at a time, with no quoting. This facilitates parsing by another program. .\" --------------------------------------------------------------------------- .SS .single_quoted -This corresponds to the command-line option "\fB--single-quoted\fP". +This corresponds to the command-line option "\fB\-\-single\-quoted\fP". If true, use single-quoting as needed (and no quotes if unneeded) for the output of checklist's as well as the item-help text. If this option is not set, \fB\*p\fP uses double quotes around each item. The latter requires occasional use of backslashes to make the output useful in shell scripts. .\" --------------------------------------------------------------------------- .SS .size_err -This corresponds to the command-line option "\fB--size-err\fP". +This corresponds to the command-line option "\fB\-\-size\-err\fP". If true, check the resulting size of a dialog box before trying to use it, printing the resulting size if it is larger than the screen. (This option is obsolete, since all new-window calls are checked). .\" --------------------------------------------------------------------------- .SS .sleep_secs -This corresponds to the command-line option "\fB--sleep\fP \fIsecs\/\fP". +This corresponds to the command-line option "\fB\-\-sleep\fP \fIsecs\/\fP". This option is implemented in the main program, not the library. If nonzero, this is the number of seconds after to delay after processing a dialog box. .\" --------------------------------------------------------------------------- .SS .tab_correct -This corresponds to the command-line option "\fB--tab-correct\fP". +This corresponds to the command-line option "\fB\-\-tab-correct\fP". If true, convert each tab character of the text to one or more spaces. Otherwise, tabs are rendered according to the curses library's interpretation. .\" --------------------------------------------------------------------------- .SS .time_format This corresponds to the command-line option -"\fB--time-format\fP \fIstring\/\fP". +"\fB\-\-time\-format\fP \fIstring\/\fP". If the host provides \fBstrftime\fP, and the value is nonnull, the timebox widget uses this to format its output. .\" --------------------------------------------------------------------------- .SS .timeout_secs -This corresponds to the command-line option "\fB--timeout\fP \fIsecs\/\fP". +This corresponds to the command-line option "\fB\-\-timeout\fP \fIsecs\/\fP". If nonzero, timeout input requests (exit with error code) if no user response within the given number of seconds. .\" --------------------------------------------------------------------------- .SS .title -This corresponds to the command-line option "\fB--title\fP \fItitle\/\fP". +This corresponds to the command-line option "\fB\-\-title\fP \fItitle\/\fP". Specifies a \fItitle\fP string to be displayed at the top of the dialog box. .\" --------------------------------------------------------------------------- .SS .trim_whitespace -This corresponds to the command-line option "\fB--trim\fP". +This corresponds to the command-line option "\fB\-\-trim\fP". If true, eliminate leading blanks, trim literal newlines and repeated blanks from message text. .\" --------------------------------------------------------------------------- .SS .week_start -This corresponds to the command-line option "\fB--week-start\fP". +This corresponds to the command-line option "\fB\-\-week\-start\fP". It is used in the calendar widget to set the starting day for the week. The string value can be .bP a number (0 to 6, Sunday through Saturday using POSIX) or .bP the special value \*(``locale\*('' (this works with systems using glibc, providing an extension to the \fBlocale\fP command, the \fBfirst_weekday\fP value). .bP a string matching one of the abbreviations for the day of the week shown in the \fBcalendar\fP widget, e.g., \*(``Mo\*('' for \*(``Monday\*(''. .\" --------------------------------------------------------------------------- .SS .yes_label -This corresponds to the command-line option "\fB--yes-label\fP \fIstring\/\fP". +This corresponds to the command-line +option "\fB\-\-yes\-label\fP \fIstring\/\fP". The given string overrides the label used for \*(``Yes\*('' buttons. . .\" ************************************************************************ .\" ************************************************************************ .SH WIDGETS Functions that implement major functionality for the command-line \fB\*p\fP program, e.g., widgets, have names beginning "\fIdialog_\fP". .PP All dialog boxes have at least three parameters: .RS 3 .TP 5 \fItitle\fP the caption for the box, shown on its top border. .TP 5 \fIheight\fP the height of the dialog box. .TP 5 \fIwidth\fP the width of the dialog box. .RE .PP Other parameters depend on the box type. . .\" ************************************************************************ .SS dialog_buildlist -implements the "\fB--buildlist\fP" option. +implements the "\fB\-\-buildlist\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIlist_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B char ** \fIitems is an array of strings which is viewed either as a list of rows .RS \fItag item status\fR .RE .IP or .RS \fItag item status help\fR .RE .IP depending on whether \fBdialog_vars.item_help\fP is set. .TP 5 .B int \fIorder_mode is reserved for future enhancements . .\" ************************************************************************ .SS dialog_calendar -implements the "\fB--calendar\fP" option. +implements the "\fB\-\-calendar\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIsubtitle is the prompt text shown within the widget. .TP 5 .B int \fIheight is the height excluding the fixed-height calendar grid. .TP 5 .B int \fIwidth is the overall width of the box, which is adjusted up to the calendar grid's minimum width if needed. .TP 5 .B int \fIday is the initial day of the week shown, counting zero as Sunday. If the value is negative, the current day of the week is used. .TP 5 .B int \fImonth is the initial month of the year shown, counting one as January. If the value is negative, the current month of the year is used. .TP 5 .B int \fIyear is the initial year shown. If the value is negative, the current year is used. .\" ************************************************************************ .SS dialog_checklist -implements the "\fB--checklist\fP" and "\fB--radiolist\fP" options +implements the "\fB\-\-checklist\fP" and "\fB\-\-radiolist\fP" options depending on the \fIflag\fP parameter. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIlist_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B int \fIitems is an array of strings which is viewed either as a list of rows .RS \fItag item status\fR .RE .IP or .RS \fItag item status help\fR .RE .IP depending on whether \fBdialog_vars.item_help\fP is set. .IP flag is either \fIFLAG_CHECK\fP, for checklists, or \fIFLAG_RADIO\fP for radiolists. .\" ************************************************************************ .SS dialog_dselect -implements the "\fB--dselect\fP" option. +implements the "\fB\-\-dselect\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIpath is the preselected value to show in the input-box, which is used also to set the directory- and file-windows. .TP 5 .B int \fIheight is the height excluding the minimum needed to show the dialog box framework. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .\" ************************************************************************ .SS dialog_editbox -implements the "\fB--editbox\fP" option. +implements the "\fB\-\-editbox\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIfile is the name of the file from which to read. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .\" ************************************************************************ .SS dialog_form -implements the "\fB--form\fP" option. +implements the "\fB\-\-form\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIform_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B int \fIitems is an array of strings which is viewed either as a list of rows .RS \fIName NameY NameX Text TextY TextX FLen ILen\fR .RE .IP or .RS \fIName NameY NameX Text TextY TextX FLen ILen Help\fR .RE .IP depending on whether \fBdialog_vars.item_help\fP is set. .\" ************************************************************************ .SS dialog_fselect -implements the "\fB--fselect\fP" option. +implements the "\fB\-\-fselect\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIpath is the preselected value to show in the input-box, which is used also to set the directory- and file-windows. .TP 5 .B int \fIheight is the height excluding the minimum needed to show the dialog box framework. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .\" ************************************************************************ .SS dialog_gauge -implements the "\fB--gauge\fP" option. +implements the "\fB\-\-gauge\fP" option. Alternatively, a simpler or customized gauge widget can be set up using \fBdlg_allocate_gauge\fP, \fBdlg_reallocate_gauge\fP, \fBdlg_update_gauge\fP and \fBdlg_free_gauge\fP. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIpercent is the percentage to show in the progress bar. .\" ************************************************************************ .SS dialog_inputbox -implements the "\fB--inputbox\fP" or -"\fB--password\fP" option, depending on the value of \fIpassword\fP. +implements the "\fB\-\-inputbox\fP" or +"\fB\-\-password\fP" option, depending on the value of \fIpassword\fP. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B const char * \fIinit is the initial value of the input box, whose length is taken into account when auto-sizing the width of the dialog box. .TP 5 .B int \fIpassword if true, causes typed input to be echoed as asterisks. .\" ************************************************************************ .SS dialog_helpfile -implements the "\fB--hfile\fP" option. +implements the "\fB\-\-hfile\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIfile is the name of a file containing the text to display. This function is internally bound to F1 (function key \*(``1\*(''), passing \fBdialog_vars.help_file\fP as a parameter. -The \fBdialog\fP program sets that variable when the \fB--hfile\fP option +The \fB\*p\fP program sets that variable when the \fB\-\-hfile\fP option is given. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .\" ************************************************************************ .SS dialog_menu -implements the "\fB--menu\fP" or "\fB--inputmenu\fP" option +implements the "\fB\-\-menu\fP" or "\fB\-\-inputmenu\fP" option depending on whether \fBdialog_vars.input_menu\fP is set. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fImenu_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B int \fIitems is an array of strings which is viewed either as a list of rows .RS \fItag item\fR .RE .IP or .RS \fItag item help\fR .RE .IP depending on whether \fBdialog_vars.item_help\fP is set. .\" ************************************************************************ .SS dialog_mixedform -implements the "\fB--mixedform\fP" option. +implements the "\fB\-\-mixedform\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIform_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B int \fIitems is an array of strings which is viewed either as a list of rows .RS \fIName NameY NameX Text TextY TextX FLen ILen Ityp\fR .RE .IP or .RS \fIName NameY NameX Text TextY TextX FLen ILen Ityp Help\fR .RE .IP depending on whether \fBdialog_vars.item_help\fP is set. .\" ************************************************************************ .SS dialog_mixedgauge -implements the "\fB--mixedgauge\fP" option +implements the "\fB\-\-mixedgauge\fP" option .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the caption text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIpercent is the percentage to show in the progress bar. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B int \fIitems is an array of strings which is viewed as a list of \fItag\fP and \fIitem\fP values. The \fItag\fP values are listed, one per row, in the list at the top of the widget. .IP The \fIitem\fP values are decoded: digits 0 through 9 are the following strings .RS .IP 0 Succeeded .IP 1 Failed .IP 2 Passed .IP 3 Completed .IP 4 Checked .IP 5 Done .IP 6 Skipped .IP 7 In Progress .IP 8 (blank) .IP 9 N/A .RE .IP A string with a leading "-" character is centered, marked with "%". For example, "-75" is displayed as "75%". Other strings are displayed as is. .\" ************************************************************************ .SS dialog_msgbox -implements the "\fB--msgbox\fP" or "\fB--infobox\fP" option +implements the "\fB\-\-msgbox\fP" or "\fB\-\-infobox\fP" option depending on whether \fIpauseopt\fP is set. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIpauseopt if true, an \*(``OK\*('' button will be shown, and the dialog will wait for it to complete. With an \*(``OK\*('' button, it is denoted a \*(``msgbox\*('', without an \*(``OK\*('' button, it is denoted an \*(``infobox\*(''. .\" ************************************************************************ .SS dialog_pause -implements the "\fB--pause\fP" option. +implements the "\fB\-\-pause\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIseconds is the timeout to use for the progress bar. .\" ************************************************************************ .SS dialog_prgbox -implements the "\fB--prgbox\fP" option. +implements the "\fB\-\-prgbox\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. If empty or null, no prompt is shown. .TP 5 .B const char * \fIcommand is the name of the command to execute. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIpauseopt if true, an \*(``OK\*('' button will be shown, and the dialog will wait for it to complete. .\" ************************************************************************ .SS dialog_progressbox -implements the "\fB--progressbox\fP" option. +implements the "\fB\-\-progressbox\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. If empty or null, no prompt is shown. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .\" ************************************************************************ .SS dialog_rangebox -implements the "\fB--rangebox\fP" option. +implements the "\fB\-\-rangebox\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. If empty or null, no prompt is shown. .TP 5 .B int \fIheight is the desired height of the widget. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the widget. If zero, the height is based on the screen size. .TP 5 .B int \fImin_value is the minimum value to allow. .TP 5 .B int \fImax_value is the maximum value to allow. .TP 5 .B int \fIdefault_value is the default value, if no change is made. .\" ************************************************************************ .SS dialog_tailbox -implements the "\fB--tailbox\fP" or "\fB--tailboxbg\fP" option +implements the "\fB\-\-tailbox\fP" or "\fB\-\-tailboxbg\fP" option depending on whether \fIbg_task\fP is set. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIfile is the name of the file to display in the dialog. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIbg_task if true, the window is added to the callback list in \fBdialog_state\fP, and the application will poll for the window to be updated. Otherwise an \*(``OK\*('' button is added to the window, and it will be closed when the button is activated. .\" ************************************************************************ .SS dialog_textbox -implements the "\fB--textbox\fP" option. +implements the "\fB\-\-textbox\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIfile is the name of the file to display in the dialog. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .\" ************************************************************************ .SS dialog_timebox -implements the "\fB--timebox\fP" option. +implements the "\fB\-\-timebox\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIsubtitle is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIhour is the initial hour shown. If the value is negative, the current hour is used. Returns DLG_EXIT_ERROR if the value specified is greater than or equal to 24. .TP 5 .B int \fIminute is the initial minute shown. If the value is negative, the current minute is used. Returns DLG_EXIT_ERROR if the value specified is greater than or equal to 60. .TP 5 .B int \fIsecond is the initial second shown. If the value is negative, the current second is used. Returns DLG_EXIT_ERROR if the value specified is greater than or equal to 60. .\" ************************************************************************ .SS dialog_treeview -implements the "\fB--treeview\fP" option. +implements the "\fB\-\-treeview\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIlist_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B char ** \fIitems is the list of items, contain tag, name, and optionally help strings (if \fBdialog_vars.item_help\fP is set). The initial selection state for each item is also in this list. .TP 5 .B int \fIflag .IP flag is either \fIFLAG_CHECK\fP, for checklists (multiple selections), or \fIFLAG_RADIO\fP for radiolists (a single selection). .\" ************************************************************************ .SS dialog_yesno -implements the "\fB--yesno\fP" option. +implements the "\fB\-\-yesno\fP" option. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. . .\" ************************************************************************ .SH UTILITY FUNCTIONS Most functions that implement lower-level functionality for the command-line \fB\*p\fP program or widgets, have names beginning "\fIdlg_\fP". Bowing to longstanding usage, the functions that initialize the display and end it are named \fIinit_dialog\fP and \fIend_dialog\fP. .PP The only non-widget function whose name begins with "\fIdialog_\fP" is \fBdialog_version\fP, which returns the version number of the library as a string. +.PP +A few functions are prefixed "\fI_dlg_\fP", +because they are required for internal use, +but not intended as part of the library application programming interface. . .PP Here is a brief summary of the utility functions and their parameters: .\" --------------------------------------------------------------------------- .SS dlg_add_callback Add a callback, used to allow polling input from multiple tailbox widgets. .TP 5 .B DIALOG_CALLBACK *\fIp\fP contains the callback information. .\" --------------------------------------------------------------------------- .SS dlg_add_callback_ref Like \fBdlg_add_callback\fP, but passes a reference to the \fBDIALOG_CALLBACK\fP as well as a pointer to a cleanup function which will be called when the associated input ends. .TP 5 .B DIALOG_CALLBACK **\fIp\fP points to the callback information. This is a reference to the pointer so that the caller's pointer can be zeroed when input ends. .TP 5 .B DIALOG_FREEBACK \fIfunc\fP function to call when input ends, e.g., to free caller's additional data. .\" --------------------------------------------------------------------------- .SS dlg_add_help_formitem This is a utility function used enforce consistent behavior for the \fIDIALOG_VARS.help_tags\fP and \fIDIALOG_VARS.item_help\fP variables. .TP 5 .B int *\fIresult\fP this is updated to DLG_EXIT_ITEM_HELP if \fIDIALOG_VARS.item_help\fP is set. .TP 5 .B char **\fItag\fP the tag- or help-text is stored here. .TP 5 .B DIALOG_FORMITEM *\fIitem\fP contains the list item to use for tag- or help-text. .\" --------------------------------------------------------------------------- .SS dlg_add_help_listitem This is a utility function used enforce consistent behavior for the \fIDIALOG_VARS.help_tags\fP and \fIDIALOG_VARS.item_help\fP variables. .TP 5 .B int *\fIresult\fP this is updated to DLG_EXIT_ITEM_HELP if \fIDIALOG_VARS.item_help\fP is set. .TP 5 .B char **\fItag\fP the tag- or help-text is stored here. .TP 5 .B DIALOG_LISTITEM *\fIitem\fP contains the list item to use for tag- or help-text. .\" --------------------------------------------------------------------------- .SS dlg_add_last_key Report the last key entered by the user. -This implements the \fB--last-key\fP command-line option, +This implements the \fB\-\-last\-key\fP command-line option, using \fBdialog_vars.last_key\fP. .TP 5 .B int \fImode controls the way the last key report is separated from other results: .RS .TP 5 -2 (no separator) .TP 5 -1 (separator after the key name) .TP 5 0 (separator is optionally before the key name) .TP 5 1 (same as -1) .RE .\" --------------------------------------------------------------------------- .SS dlg_add_quoted Add a quoted string to the result buffer (see \fBdlg_add_result\fP). If no quotes are necessary, none are used. If \fBdialog_vars.single_quoted\fR is set, single-quotes are used. Otherwise, double-quotes are used. .TP 5 .B char * \fIstring is the string to add. .\" --------------------------------------------------------------------------- .SS dlg_add_result Add a string to the result buffer \fBdialog_vars.input_result\fP. .TP 5 .B char * \fIstring is the string to add. .\" --------------------------------------------------------------------------- .SS dlg_add_separator Add an output-separator to the result buffer \fBdialog_vars.input_result\fP. If \fBdialog_vars.output_separator\fP is set, use that. Otherwise, if \fBdialog_vars.separate_output\fP is set, use newline. If neither is set, use a space. .\" --------------------------------------------------------------------------- .SS dlg_add_string Add a quoted or unquoted string to the result buffer (see \fBdlg_add_quoted\fP) and \fBdlg_add_result\fP), according to whether \fBdialog_vars.quoted\fP is true. .TP 5 .B char * \fIstring is the string to add. .\" --------------------------------------------------------------------------- .SS dlg_align_columns Copy and reformat an array of pointers to strings, aligning according to the column separator \fBdialog_vars.column_separator\fP. If no column separator is set, the array will be unmodified; otherwise it is copied and reformatted. .IP Caveat: This function is only implemented for 8-bit characters. .TP 5 .B char **\fItarget This is the array to reformat. It points to the first string to modify. .TP 5 .B int \fIper_row This is the size of the struct for each row of the array. .TP 5 .B int \fInum_rows This is the number of rows in the array. .\" --------------------------------------------------------------------------- .SS dlg_allocate_gauge Allocates a gauge widget. Use \fBdlg_update_gauge\fP to display the result. .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIpercent is the percentage to show in the progress bar. .\" --------------------------------------------------------------------------- .SS dlg_asciibox returns its parameter transformed to the corresponding "+" or "-", etc., for the line-drawing characters used in \fB\*p\fP. If the parameter is not a line-drawing or other special character such as ACS_DARROW, it returns 0. .TP 5 .B chtype \fIch is the parameter, usually one of the \fBACS_\fP\fIxxx\fP constants. .\" --------------------------------------------------------------------------- .SS dlg_attr_clear Set window to the given attribute. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B int \fIheight is the number of rows to update. .TP 5 .B int \fIwidth is the number of columns to update. .TP 5 .B chtype \fIattr is the attribute, e.g., \fBA_BOLD\fP. .\" --------------------------------------------------------------------------- .SS dlg_auto_size Compute window size based on the size of the formatted \fIprompt\fP and minimum dimensions for a given widget. .PP \fB\*L\fP sets \fBdialog_state.text_height\fP and \fBdialog_state.text_width\fP for the formatted \fIprompt\fP as a side-effect. .PP Normally \fB\*l\fP writes the formatted \fIprompt\fP to the curses window, but it will write the formatted \fIprompt\fP to the output stream if \fBdialog_state.text_only\fP is set. .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIprompt is the message text which will be displayed in the widget, used here to determine how large the widget should be. .IP If the value is \fINULL\fP, \fB\*l\fP allows the widget to use the whole screen, i.e., if the values referenced by \fIheight\fP and/or \fIwidth\fP are zero. .TP 5 .B int * \fIheight is the nominal height. \fB\*L\fP checks the referenced value and may update it: .RS .bP if the value is negative, \fB\*l\fP updates it to the available height of the screen, after reserving rows for the window border and shadow, as well as taking into account \fBdialog_vars.begin_y\fP and \fBdialog_vars.begin_set\fP. .bP if the value is zero, \fB\*l\fP updates it to the required height of the window, taking into account a (possibly) multi-line \fIprompt\fP. .bP -if the value is greater than zero, +if the value is greater than zero, \fB\*l\fP uses it internally, but restores the value on return. .RE .TP 5 .B int * \fIwidth is the nominal width. \fB\*L\fP checks the referenced value and may update it: .RS .bP if the value is negative, \fB\*l\fP updates it to the available width of the screen, after reserving rows for the window border and shadow, as well as taking into account \fBdialog_vars.begin_x\fP and \fBdialog_vars.begin_set\fP. .bP if the value is zero, \fB\*l\fP updates it to the required width of the window, taking into account a (possibly) multi-line \fIprompt\fP. .bP -if the value is greater than zero, +if the value is greater than zero, \fB\*l\fP uses it internally, but restores the value on return. .RE .TP 5 .B int \fIboxlines is the number of lines to reserve in the vertical direction. .TP 5 .B int \fImincols is the minimum number of columns to use. .\" --------------------------------------------------------------------------- .SS dlg_auto_sizefile Like \fBdlg_auto_size\fP, but use a file contents to decide how large the widget should be. .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIfile is the name of the file. .TP 5 .B int * \fIheight is the nominal height. .IP If it is -1, use the screen's height (after subtracting \fBdialog_vars.begin_y\fP if \fBdialog_vars.begin_set\fP is true). .IP If it is greater than zero, limit the referenced value to the screen-height after verifying that the file exists. .TP 5 .B int * \fIwidth is the nominal width. .IP If it is -1, use the screen's width (after subtracting \fBdialog_vars.begin_x\fP if \fBdialog_vars.begin_set\fP is true). .IP If it is greater than zero, limit the referenced value to the screen-width after verifying that the file exists. .TP 5 .B int \fIboxlines is the number of lines to reserve on the screen for drawing boxes. .TP 5 .B int \fImincols is the number of columns to reserve on the screen for drawing boxes. .\" --------------------------------------------------------------------------- .SS dlg_beeping If \fBdialog_vars.beep_signal\fP is nonzero, this calls \fBbeep\fP once and sets \fBdialog_vars.beep_signal\fP to zero. .\" --------------------------------------------------------------------------- .SS dlg_boxchar returns its \fBchtype\fP parameter transformed as follows: .bP if neither \fBdialog_vars.ascii_lines\fP nor \fBdialog_vars.no_lines\fP is set. .bP if \fBdialog_vars.ascii_lines\fP is set, returns the corresponding "+" or "-", etc., for the line-drawing characters used in \fB\*p\fP. .bP otherwise, if \fBdialog_vars.no_lines\fP is set, returns a space for the line-drawing characters. .bP if the parameter is not a line-drawing or other special character such as ACS_DARROW, it returns the parameter unchanged. .\" --------------------------------------------------------------------------- .SS dlg_box_x_ordinate returns a suitable x-ordinate (column) for a new widget. If \fBdialog_vars.begin_set\fP is 1, use \fBdialog_vars.begin_x\fP; otherwise center the widget on the screen (using the \fIwidth\fP parameter). .TP 5 .B int \fIwidth is the width of the widget. .\" --------------------------------------------------------------------------- .SS dlg_box_y_ordinate returns a suitable y-ordinate (row) for a new widget. If \fBdialog_vars.begin_set\fP is 1, use \fBdialog_vars.begin_y\fP; otherwise center the widget on the screen (using the \fIheight\fP parameter). .TP 5 .B int \fIheight is the height of the widget. .\" --------------------------------------------------------------------------- .SS dlg_buildlist This is an alternate interface to the \fBbuildlist\fP widget which allows the application to read the list item states back directly without putting them in the output buffer. .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIlist_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems is the list of items, contain tag, name, and optionally help strings (if \fBdialog_vars.item_help\fP is set). The initial selection state for each item is also in this list. .TP 5 .B const char * \fIstates This is a list of characters to display for the given states. Normally a buildlist provides true (1) and false (0) values, which the widget displays as "*" and space, respectively. An application may set this parameter to an arbitrary null-terminated string. The widget determines the number of states from the length of this string, and will cycle through the corresponding display characters as the user presses the space-bar. .TP 5 .B int \fIorder_mode is reserved for future enhancements .TP 5 .B int * \fIcurrent_item The widget sets the referenced location to the index of the current display item (cursor) when it returns. .\" --------------------------------------------------------------------------- .SS dlg_button_count Count the buttons in the list. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .\" --------------------------------------------------------------------------- +.SS dlg_button_key +If a key was bound to one of the button-codes in \fBdlg_result_key\fP, fake +a button-value and an \*(``Cancel\*('' key +to cause the calling widget to return the corresponding status. +.PP +See \fBdlg_ok_buttoncode\fP, which maps settings for ok/extra/help and button +number into exit-code. +.\" --------------------------------------------------------------------------- .SS dlg_button_layout Make sure there is enough space for the buttons by computing the width required for their labels, adding margins and limiting based on the screen size. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .TP 5 .B int * \fIlimit the function sets the referenced \fIlimit\fP to the width required for the buttons (limited by the screen size) if that is wider than the passed-in limit. .\" --------------------------------------------------------------------------- .SS dlg_button_sizes Compute the size of the button array in columns. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .TP 5 .B int \fIvertical is true if the buttons are arranged in a column rather than a row. .TP 5 .B int * \fIlongest Return the total number of columns in the referenced location. .TP 5 .B int * \fIlength Return the longest button's columns in the referenced location. .\" --------------------------------------------------------------------------- .SS dlg_button_to_char Find the first uppercase character in the label, which we may use for an abbreviation. If the label is empty, return -1. If no uppercase character is found, return 0. Otherwise return the uppercase character. .LP Normally .B dlg_draw_buttons and .B dlg_char_to_button use the first uppercase character. However, they keep track of all of the labels and if the first has already been used in another label, they will continue looking for another uppercase character. This function does not have enough information to make that check. .TP 5 .B const char * \fIlabel is the label to test. .\" --------------------------------------------------------------------------- .SS dlg_button_x_step Compute the step-size needed between elements of the button array. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .TP 5 .B int \fIlimit is the maximum number of columns to allow for the buttons. .TP 5 .B int * \fIgap store the nominal gap between buttons in the referenced location. This is constrained to be at least one. .TP 5 .B int * \fImargin store the left+right total margins (for the list of buttons) in the referenced location. .TP 5 .B int * \fIstep store the step-size in the referenced location. .\" --------------------------------------------------------------------------- .SS dlg_calc_list_width Calculate the minimum width for the list, assuming none of the items are truncated. .TP 5 .B int \fIitem_no is the number of \fIitems\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems contains a \fIname\fP and \fItext\fP field, e.g., for checklists or radiobox lists. The function returns the sum of the widest columns needed for of each of these fields. .IP If \fBdialog_vars.no_items\fP is set, the \fItext\fP fields in the list are ignored. .\" --------------------------------------------------------------------------- .SS dlg_calc_listh Calculate new height and list_height values. .TP 5 .B int * \fIheight on input, is the height without adding the list-height. On return, this contains the total list-height and is the actual widget's height. .TP 5 .B int * \fIlist_height on input, is the requested list-height. On return, this contains the number of rows available for displaying the list after taking into account the screen size and the \fBdialog_vars.begin_set\fP and \fBdialog_vars.begin_y\fP variables. .TP 5 .B int \fIitem_no is the number of \fIitems\fP in the list. .\" --------------------------------------------------------------------------- .SS dlg_calc_listw This function is obsolete, provided for library-compatibility. It is replaced by \fBdlg_calc_list_width\fP. .TP 5 .B int \fIitem_no is the number of \fIitems\fP. .TP 5 .B char ** \fIitems is a list of character pointers. .TP 5 .B int \fIgroup is the number of items in each group, e.g., the second array index. .\" --------------------------------------------------------------------------- .SS dlg_char_to_button Given a list of button labels, and a character which may be the abbreviation for one, find it, if it exists. An abbreviation will be the first character which happens to be capitalized in the label. If the character is found, return its index within the list of \fIlabels\fP. Otherwise, return \fBDLG_EXIT_UNKNOWN\fP. .TP 5 .B int \fIch is the character to find. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .\" --------------------------------------------------------------------------- .SS dlg_checklist -This entrypoint provides the \fB--checklist\fP or \fB--radiolist\fP +This entrypoint provides the \fB\-\-checklist\fP or \fB\-\-radiolist\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_checklist\fP). .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIlist_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of \fIitems\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems This is a list of the items to display in the checklist. .TP 5 .B const char * \fIstates This is a list of characters to display for the given states. Normally a checklist provides true (1) and false (0) values, which the widget displays as "*" and space, respectively. An application may set this parameter to an arbitrary null-terminated string. The widget determines the number of states from the length of this string, and will cycle through the corresponding display characters as the user presses the space-bar. .TP 5 .B int \fIflag This is should be one of \fBFLAG_CHECK\fP or \fPFLAG_RADIO\fP, depending on whether the widget should act as a checklist or radiobox. .TP 5 .B int * \fIcurrent_item The widget sets the referenced location to the index of the current display item (cursor) when it returns. .\" --------------------------------------------------------------------------- .SS dlg_check_scrolled given a function key (or other key that was mapped to a function key), check if it is one of the up/down scrolling functions: .sp .RS DLGK_PAGE_FIRST, .br DLGK_PAGE_LAST, .br DLGK_GRID_UP, .br DLGK_GRID_DOWN, .br DLGK_PAGE_PREV or .br DLGK_PAGE_NEXT. .RE .fi .LP Some widgets use these key bindings for scrolling the prompt-text up and down, to allow for display in very small windows. .LP The function returns 0 (zero) if it finds one of these keys, and -1 if not. .TP 5 .B int \fIkey is the function-key to check .TP 5 .B int \fIlast is the number of lines which would be used to display the scrolled prompt in an arbitrarily tall window. It is used here to check limits for the \fIoffset\fP value. .TP 5 .B int \fIpage this is the available height for writing scrolled text, which is smaller than the window if it contains buttons. .TP 5 .B bool * \fIshow on return, holds TRUE if \fBdlg_print_scrolled\fP should be used to redisplay the prompt text. .TP 5 .B int * \fIoffset on entry, holds the starting line number (counting from zero) last used for \fBdlg_print_scrolled\fP. On return, holds the updated starting line number. .\" --------------------------------------------------------------------------- .SS dlg_clear Set window to the default \fB\*p\fP screen attribute. This is set in the rc-file with \fBscreen_color\fP. .\" --------------------------------------------------------------------------- .SS dlg_clr_result Free storage used for the result buffer (\fBdialog_vars.input_result\fP). The corresponding pointer is set to NULL. .\" --------------------------------------------------------------------------- .SS dlg_color_count Return the number of colors that can be configured in \fB\*p\fP. .\" --------------------------------------------------------------------------- .SS dlg_color_setup Initialize the color pairs used in \fB\*p\fP. .\" --------------------------------------------------------------------------- .SS dlg_count_argv Count the entries in an argument vector. .TP 5 .B argv Points to the argument vector. .\" --------------------------------------------------------------------------- .SS dlg_count_columns Returns the number of columns used for a string. This is not necessarily the number of bytes in a string. .TP 5 .B const char * \fIstring is the string to measure. .\" --------------------------------------------------------------------------- .SS dlg_count_real_columns Returns the number of columns used for a string, accounting for "\eZ" sequences which can be used for coloring the text if \fBdialog_vars.colors\fP is set. This is not necessarily the number of bytes in a string. .TP 5 .B const char * \fIstring is the string to measure. .\" --------------------------------------------------------------------------- .SS dlg_count_wchars Returns the number of wide-characters in the string. .TP 5 .B const char * \fIstring is the string to measure. .\" --------------------------------------------------------------------------- .SS dlg_create_rc Create a configuration file, i.e., write internal tables to a file which can be read back by \fB\*p\fP as an rc-file. .TP 5 .B const char * \fIfilename is the name of the file to write to. .\" --------------------------------------------------------------------------- .SS dlg_ctl_size If \fBdialog_vars.size_err\fP is true, check if the given window size is too large to fit on the screen. If so, exit with an error reporting the size of the window. .TP 5 .B int \fIheight is the window's height .TP 5 .B int \fIwidth is the window's width .\" --------------------------------------------------------------------------- .SS dlg_default_button If \fBdialog_vars.default_button\fP is positive, return the button-index for that button code, using \fBdlg_ok_buttoncode\fP to test indices starting with zero. Otherwise (or if no match was found for the button code), return zero. .\" --------------------------------------------------------------------------- .SS dlg_default_formitem If \fBdialog_vars.default_item\fP is not null, find that name by matching the \fIname\fP field in the list of form \fIitems\fP. If found, return the index of that item in the list. Otherwise, return zero. .TP 5 .B DIALOG_FORMITEM * \fIitems is the list of items to search. It is terminated by an entry with a null \fIname\fP field. .\" --------------------------------------------------------------------------- .SS dlg_default_item This function is obsolete, provided for library-compatibility. It is replaced by \fBdlg_default_formitem\fP and \fBdlg_default_listitem\fP. .TP 5 .B char ** \fIitems is the list of items to search. .TP 5 .B int \fIllen is the number of items in each group, e.g., the second array index. .\" --------------------------------------------------------------------------- .SS dlg_defaultno_button If \fBdialog_vars.defaultno\fP is true, and \fBdialog_vars.nocancel\fP is not, find the button-index for the \*(``Cancel\*('' button. Otherwise, return the index for \*(``OK\*('' (always zero). .\" --------------------------------------------------------------------------- .SS dlg_del_window Remove a window, repainting everything else. .TP 5 .B WINDOW * \fIwin is the window to remove. .\" --------------------------------------------------------------------------- +.SS dlg_der_window +create a derived window, e.g., for an input area of a widget +.TP 5 +.B WINDOW * \fIwin +is the parent window +.TP 5 +.B int \fIheight +is the subwindow's height +.TP 5 +.B int \fIwidth +is the subwindow's width +.TP 5 +.B int \fIy +is the subwindow's top-row +.TP 5 +.B int \fIx +is the subwindow's left-column +.\" --------------------------------------------------------------------------- .SS dlg_does_output This is called each time a widget is invoked which may do output. It increments \fBdialog_state.output_count\fP, so the output function in \fB\*p\fP can test this and add a separator. .\" --------------------------------------------------------------------------- .SS dlg_draw_arrows Draw up/down arrows on a window, e.g., for scrollable lists. It calls \fBdlg_draw_arrows2\fP using the \fImenubox_color\fP and \fImenubox_border_color\fP attributes. .TP 5 .B WINDOW * \fIdialog is the window on which to draw an arrow. .TP 5 .B int \fItop_arrow is true if an up-arrow should be drawn at the top of the window. .TP 5 .B int \fIbottom_arrow is true if an down-arrow should be drawn at the bottom of the window. .TP 5 .B int \fIx is the zero-based column within the window on which to draw arrows. .TP 5 .B int \fItop is the zero-based row within the window on which to draw up-arrows as well as a horizontal line to show the window's top. .TP 5 .B int \fIbottom is the zero-based row within the window on which to draw down-arrows as well as a horizontal line to show the window's bottom. .\" --------------------------------------------------------------------------- .SS dlg_draw_arrows2 Draw up/down arrows on a window, e.g., for scrollable lists. .TP 5 .B WINDOW * \fIdialog is the window on which to draw an arrow. .TP 5 .B int \fItop_arrow is true if an up-arrow should be drawn at the top of the window. .TP 5 .B int \fIbottom_arrow is true if an down-arrow should be drawn at the bottom of the window. .TP 5 .B int \fIx is the zero-based column within the window on which to draw arrows. .TP 5 .B int \fItop is the zero-based row within the window on which to draw up-arrows as well as a horizontal line to show the window's top. .TP 5 .B int \fIbottom is the zero-based row within the window on which to draw down-arrows as well as a horizontal line to show the window's bottom. .TP 5 .B chtype \fIattr is the window's background attribute. .TP 5 .B chtype \fIborderattr is the window's border attribute. .\" --------------------------------------------------------------------------- .SS dlg_draw_bottom_box Draw a partial box at the bottom of a window, e.g., to surround a row of buttons. It is designed to merge with an existing box around the whole window (see \fBdlg_draw_box\fP), so it uses tee-elements rather than corner-elements on the top corners of this box. .TP 5 .B WINDOW * \fIwin is the window to update. .\" --------------------------------------------------------------------------- .SS dlg_draw_bottom_box2 Draw a partial box at the bottom of a window, e.g., to surround a row of buttons. It is designed to merge with an existing box around the whole window (see \fBdlg_draw_box2\fP), so it uses tee-elements rather than corner-elements on the top corners of this box. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B chtype \fIon_left is used to color the upper/left edges of the box, i.e., the tee-element and horizontal line .TP 5 .B chtype \fIon_right is used to color the right edge of the box, i.e., the tee-element .TP 5 .B chtype \fIon_inside is used to fill-color the inside of the box .\" --------------------------------------------------------------------------- .SS dlg_draw_box Draw a rectangular box with line drawing characters. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B int \fIy is the top row of the box. .TP 5 .B int \fIx is the left column of the box. .TP 5 .B int \fIheight is the height of the box. .TP 5 .B int \fIwidth is the width of the box. .TP 5 .B chtype \fIboxchar is used to color the right/lower edges. It also is fill-color used for the box contents. .TP 5 .B chtype \fIborderchar is used to color the upper/left edges. .\" --------------------------------------------------------------------------- .SS dlg_draw_box2 Draw a rectangular box with line drawing characters. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B int \fIy is the top row of the box. .TP 5 .B int \fIx is the left column of the box. .TP 5 .B int \fIheight is the height of the box. .TP 5 .B int \fIwidth is the width of the box. .TP 5 .B chtype \fIboxchar is used to fill-color for the box contents. .TP 5 .B chtype \fIborderchar is used to color the upper/left edges. .TP 5 .B chtype \fIborderchar2 is used to color the right/lower edges. .\" --------------------------------------------------------------------------- .SS dlg_draw_buttons Print a list of buttons at the given position. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B int \fIy is the starting row. .TP 5 .B int \fIx is the starting column. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .TP 5 .B int \fIselected is the index within the list of the selected button. .TP 5 .B int \fIvertical is true if the buttons are arranged in a column rather than a row. .TP 5 .B int \fIlimit is the number of columns (or rows if \fIvertical\/\fP) allowed for the display. .\" --------------------------------------------------------------------------- .SS dlg_draw_helpline draw the text in \fBdialog_vars.help_line\fP at the bottom of the given window. .TP 5 .B WINDOW * \fIdialog is the window to modify. .TP 5 .B bool \fIdecorations if true, allow room for the scrolling arrows. .\" --------------------------------------------------------------------------- .SS dlg_draw_scrollbar If \fBdialog_state.use_scrollbar\fP is set, draw a scrollbar on the right margin of windows holding scrollable data. Also (whether or not the scrollbar is drawn), annotate the bottom margin of the window with the percentage of data by the bottom of that window, and call \fBdlg_draw_arrows2\fP to put markers on the window showing when more data is available. .TP 5 .B WINDOW * \fIwin is the window in which the data is scrolled. Because \fIleft\fP, \fIright\fP, \fItop\fP, \fIbottom\fP are passed as parameters, this window can contain additional data. .TP 5 .B long \fIfirst_data is the zero-based index to the first row of data in the current window. .TP 5 .B long \fIthis_data is the zero-based index to the current row of data. .TP 5 .B long \fInext_data is the zero-based index to the next data after the current row. .TP 5 .B long \fItotal_data is the total number of rows of data. .TP 5 .B int \fIleft is the zero-based left margin/column of the window. The up/down arrows are draw inset by 5 columns from this point. .TP 5 .B int \fIright is the zero-based right margin/column of the window. The scrollbar is drawn flush against this column. .TP 5 .B int \fItop is the zero-based row within the window on which to draw up-arrows as well as a horizontal line to show the window's top. .TP 5 .B int \fIbottom is the zero-based row within the window on which to draw down-arrows as well as a horizontal line to show the window's bottom. .TP 5 .B chtype \fIattr is the window's background attribute. .TP 5 .B chtype \fIborderattr is the window's border attribute. .\" --------------------------------------------------------------------------- .SS dlg_draw_shadow Draw shadows along the right and bottom edge of a window to give it a 3-dimensional look. (The height, etc., may not be the same as the window's actual values). .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B int \fIheight is the height of the window. .TP 5 .B int \fIwidth is the width of the window. .TP 5 .B int \fIy is the top row of the window. .TP 5 .B int \fIx is the left column of the window. .\" --------------------------------------------------------------------------- .SS dlg_draw_title Draw a title centered at the top of the window. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .\" --------------------------------------------------------------------------- .SS dlg_dummy_menutext -This is a utility function which supports the \fB--inputmenu\fP option of +This is a utility function which supports the \fB\-\-inputmenu\fP option of the \fB\*p\fP program. If \fBdialog_vars.input_menu\fP is set, \fBdialog_menu\fP passes this pointer to \fBdlg_menu\fP as the \fIrename_menutext\fP parameter. Otherwise, it passes \fBdlg_dummy_menutext\fP. .LP The function should only return \fBDLG_EXIT_ERROR\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems is the list of menu items .TP 5 .B int \fIcurrent is the index of the currently-selected item .TP 5 .B char * \fInewtext is the updated text for the menu item .\" --------------------------------------------------------------------------- .SS dlg_dump_keys Write all user-defined key-bindings to the given stream, e.g., as part of \fBdlg_create_rc\fP. .TP 5 .B FILE * \fIfp is the stream on which to write the bindings. .\" --------------------------------------------------------------------------- .SS dlg_dump_window_keys Write all user-defined key-bindings to the given stream, e.g., as part of \fBdlg_create_rc\fP. .TP 5 .B FILE * \fIfp is the stream on which to write the bindings. .TP 5 .B WINDOW * \fIwin is the window for which bindings should be dumped. If it is null, then only built-in bindings are dumped. .\" --------------------------------------------------------------------------- .SS dlg_eat_argv Remove one or more items from an argument vector. .TP 5 .B int * \fIargcp in/out parameter giving the length of the argument vector. .B char *** \fIargvp in/out parameter pointing to the argument vector. .B int \fIstart starting index. .B int \fIcount number of arguments to remove. .\" --------------------------------------------------------------------------- .SS dlg_edit_offset Given the character-offset in the string, returns the display-offset where \fB\*p\fP should position the cursor. In this context, \*(``characters\*('' may be multicolumn, since the string can be a multibyte character string. .TP 5 .B char * \fIstring is the string to analyze .TP 5 .B int \fIoffset is the character-offset .TP 5 .B int \fIx_last is a limit on the column positions that can be used, e.g., the window's size. .\" --------------------------------------------------------------------------- .SS dlg_edit_string Updates the string and character-offset, given various editing characters or literal characters which are inserted at the character-offset. Returns true if an editing change was made (and the display should -be updated), and false if the key was something like KEY_ENTER, +be updated), and false if the key was something like \fBKEY_ENTER\fP, which is a non-editing action outside this function. .TP 5 .B char * \fIstring is the (multibyte) string to update .TP 5 .B int * \fIoffset is the character-offset .TP 5 .B int \fIkey is the editing key .TP 5 .B int \fIfkey is true if the editing key is a function-key .TP 5 .B bool \fIforce is used in a special loop case by calling code to force the return value of this function when a function-key code 0 is passed in. .\" --------------------------------------------------------------------------- .SS dlg_exit Given an internal exit code, check if the corresponding environment variable is set. If so, remap the exit code to match the environment variable. Finally call \fBexit\fP with the resulting exit code. .TP 5 .B int \fIcode is the internal exit code, e.g., \fBDLG_EXIT_OK\fP, which may be remapped. .LP The \fB\*p\fP program uses this function to allow shell scripts to remap the exit codes so they can distinguish ESC from ERROR. .\" --------------------------------------------------------------------------- +.SS dlg_exitcode2s +Returns the name of an exit-code, e.g., +\*(``OK\*('' for \fBDLG_EXIT_OK\fP. +.TP 5 +.B int \fIcode +is an exit-code for \fB\*p\fP as defined in \fB<\*p.h>\fP. +.\" --------------------------------------------------------------------------- +.SS dlg_exitname2n +Returns an exit-code as the reverse of \fBdlg_exitcode2n\fP, e.g., +0 (\fBDLG_EXIT_OK\fP) for the \*(``OK\*('' string. +.TP 5 +.B const char * \fIname +is the name of an exit-code for \fB\*p\fP as defined in \fB<\*p.h>\fP +but omitting the \*(``DLG_EXIT_\*('' prefix. +.\" --------------------------------------------------------------------------- .SS dlg_exit_buttoncode Map the given button index for \fBdlg_exit_label\fP into \fB\*p\fP's exit-code. .TP 5 .B int \fIbutton is the button index .\" --------------------------------------------------------------------------- .SS dlg_exit_label Return a list of button labels. If \fBdialog_vars.extra_button\fP is true, return the result of \fBdlg_ok_labels\fP. Otherwise, return a list with the \*(``Exit\*('' label and (if \fBdialog_vars.help_button\fP is set) the \*(``Help\*('' button as well. .\" --------------------------------------------------------------------------- .SS dlg_exiterr Quit program killing all \fBtailboxbg\fP widgets. .TP 5 .B const char * \fIfmt is the format of the \fBprintf\fP-like message to write. .TP 5 .B ... .br are the variables to apply to the \fIfmt\fP format. .\" --------------------------------------------------------------------------- .SS dlg_find_index Given the character-offset to find in the list, return the corresponding array index. .TP 5 .B const int *\fIlist contains a list of character-offsets, i.e., indices into a string that denote the beginning of multibyte characters. .TP 5 .B int \fIlimit is the last index into \fBlist\fP to search. .TP 5 .B int \fIto_find is the character-offset to find. .\" --------------------------------------------------------------------------- .SS dlg_finish_string If \fIDIALOG_STATE.finish_string\fP is true, this function discards data used to speed up layout computations. .TP 5 .B const char * \fIstring is the address of the string whose data should be discarded. The address rather than contents is used as the unique identifier because some of the caching is used for editable input-fields. .\" --------------------------------------------------------------------------- .SS dlg_flush_getc Cancel the local data saved by \fBdlg_last_getc\fP. .\" --------------------------------------------------------------------------- .SS dlg_editbox -This entrypoint provides the \fB--editbox\fP +This entrypoint provides the \fB\-\-editbox\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_editbox\fP). .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B char *** \fIlist is a pointer to an array of \fBchar\ *\fP pointers. The array is allocated by the caller, and so are the strings to which it points. The \fBdlg_editbox\fP function may reallocate the array and the strings. .TP 5 .B int * \fIrows points to the nominal length of \fIlist\fP. The referenced value is updated if\fIlist\fP is reallocated. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .\" --------------------------------------------------------------------------- .SS dlg_form -This entrypoint provides the \fB--form\fP +This entrypoint provides the \fB\-\-form\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_form\fP). .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIform_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of \fIitems\fP. .TP 5 .B DIALOG_FORMITEM * \fIitems This is a list of the items to display in the form. .TP 5 .B int * \fIcurrent_item The widget sets the referenced location to the index of the current display item (cursor) when it returns. .\" --------------------------------------------------------------------------- .SS dlg_free_columns Free data allocated by \fBdlg_align_columns\fP. .TP 5 .B char **\fItarget This is the array which was reformatted. It points to the first string to free. .TP 5 .B int \fIper_row This is the size of the struct for each row of the array. .TP 5 .B int \fInum_rows This is the number of rows in the array. .\" --------------------------------------------------------------------------- .SS dlg_free_formitems Free memory owned by a list of DIALOG_FORMITEM's. .TP 5 .B DIALOG_FORMITEM * \fIitems is the list to free. .\" --------------------------------------------------------------------------- .SS dlg_free_gauge Remove the gauge widget from the screen and free its associated memory. .TP 5 .B void *\fIobjptr points to the gauge widget. .\" --------------------------------------------------------------------------- .SS dlg_getc Read a character from the given window. Handle repainting here (to simplify things in the calling application). Also, if input-callback(s) are set up, poll the corresponding files and handle the updates, e.g., for displaying a tailbox. Returns the key-code. .TP 5 .B WINDOW * \fIwin is the window within which to read. .TP 5 .B int * \fIfkey as a side-effect, set this to true if the key-code is really a function-key. .\" --------------------------------------------------------------------------- +.SS dlg_getenv_num +Get a number from the environment: +.bP +If the caller provides a pointer in the second parameter, return +success/failure for the function return, and the actual value via the pointer. +Use this for decoding arbitrary numbers, e.g., negative or zero. +.bP +If the caller does not provide a pointer, return the decoded value for +the function-return. +Use this when only values greater than zero are useful. +.TP 5 +.B char * \fIname +is the name of the environment-variable to retrieve. +.TP 5 +.B int * \fIvalue +is the optional pointer to a return-value. +.\" --------------------------------------------------------------------------- +.SS dlg_getenv_str +Get a string from the environment, rejecting those which are entirely blank. +.TP 5 +.B char * \fIname +is the name of the environment-variable to retrieve. +.\" --------------------------------------------------------------------------- .SS dlg_get_attrs extract the video attributes from the given window. .TP 5 .B WINDOW * \fIwin is the window from which to get attributes. .\" --------------------------------------------------------------------------- .SS dlg_getc_callbacks passes the given key-code \fIch\fP to the current window that has established a callback. If the callback returns zero, remove it and try the next window. If no more callbacks remain, return. If any callbacks were found, return true, otherwise false. .TP 5 .B int \fIch is the key-code .TP 5 .B int \fIfkey is true if the key is a function-key .TP 5 .B int * \fIresult is used to pass an exit-code to the caller, which should pass that via \fBdlg_exit\fP. .\" --------------------------------------------------------------------------- .SS dlg_index_columns Build a list of the display-columns for the given multibyte string's characters. .TP 5 .B const char * \fIstring is the string to analyze .\" --------------------------------------------------------------------------- .SS dlg_index_wchars Build an index of the wide-characters in the string, so the caller can easily tell which byte-offset begins a given wide-character. .TP 5 .B const char * \fIstring is the string to analyze .\" --------------------------------------------------------------------------- .SS dlg_item_help Draw the string for the \fBdialog_vars.item_help\fP feature. .TP 5 .B const char * \fItxt is the help-message .\" --------------------------------------------------------------------------- +.SS dlg_keep_tite +This performs the check and modifications +for the command-line option "\fB\-\-keep\-tite\fP", +used in \fBinit_dialog\fP as well as for +the command-line option \fB\-\-erase\-on\-exit\fP. +.TP 5 +.B FILE * \fIoutput +is the output stream used for displaying widgets. +It is either \fIstdout\fP or \fIstderr\fP, +depending on the \fB\-\-stdout\fP option. +.\" --------------------------------------------------------------------------- .SS dlg_killall_bg If \fB\*p\fP has callbacks active, purge the list of all that are not marked to keep in the background. If any remain, run those in a background process. .TP 5 .B int * \fIretval stores the exit-code to pass back to the caller. .\" --------------------------------------------------------------------------- .SS dlg_last_getc returns the most recent character that was read via \fBdlg_getc\fP. .\" --------------------------------------------------------------------------- .SS dlg_limit_columns Given a column limit, count the number of wide characters that can fit into that limit. The offset is used to skip over a leading character that was already written. .TP 5 .B const char * \fIstring is the string to analyze .TP 5 .B int \fIlimit is the column limit .TP 5 .B int \fIoffset is the starting offset from which analysis should continue .\" --------------------------------------------------------------------------- .SS dlg_lookup_key Check for a key-binding. If there is no binding associated with the widget, it simply returns the given curses-key. Otherwise, it returns the result of the binding .TP 5 .B WINDOW * \fIwin is the window on which the binding is checked .TP 5 .B int \fIcurses_key is the curses key-code .TP 5 .B int * \fIdialog_key is the corresponding \fB\*p\fP internal code (see \fBDLG_KEYS_ENUM\fP in dlg_key.h). .\" --------------------------------------------------------------------------- .SS dlg_max_input Limit the parameter according to \fBdialog_vars.max_input\fP .TP 5 .B int \fImax_len is the value to limit .\" --------------------------------------------------------------------------- .SS dlg_match_char Match a given character against the beginning of the string, ignoring case of the given character. The matching string must begin with an uppercase character. .TP 5 .B int \fIch is the character to check .TP 5 .B const char * \fIstring is the string to search .\" --------------------------------------------------------------------------- .SS dlg_menu -This entrypoint provides the \fB--menu\fP +This entrypoint provides the \fB\-\-menu\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_menu\fP). .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fImenu_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of \fIitems\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems This is a list of the items to display in the form. .TP 5 .B int * \fIcurrent_item The widget sets the referenced location to the index of the current display item (cursor) when it returns. .TP 5 .B DIALOG_INPUTMENU \fIrename_menutext If this is not \fBdlg_dummy_menutext\fP, the widget acts like an \fIinputmenu\fP widget, providing an extra \*(``Rename\*('' button, which activates an edit feature on the selected menu item. .\" --------------------------------------------------------------------------- .SS dlg_move_window Moves/resizes the given window to the given position and size. .TP 5 .B WINDOW *\fIwin is the window to move/resize. .TP 5 .B WINDOW *\fIheight is the height of the resized window. .TP 5 .B WINDOW *\fIwidth is the width of the resized window. .TP 5 .B WINDOW *\fIy y-ordinate to use for the repositioned window. .TP 5 .B WINDOW *\fIx x-ordinate to use for the repositioned window. .\" --------------------------------------------------------------------------- .SS dlg_mouse_bigregion Retrieve the big-region under the pointer. .TP 5 .B int \fIy is the row on which the mouse click occurred .TP 5 .B int \fIx is the column on which the mouse click occurred .\" --------------------------------------------------------------------------- .SS dlg_mouse_free_regions Free the memory associated with mouse regions. .\" --------------------------------------------------------------------------- .SS dlg_mouse_mkbigregion Creates a region on which the mouse-clicks will return a specified code. .TP 5 .B int \fIy is the top-row of the region. .TP 5 .B int \fIx is the left-column of the region. .TP 5 .B int \fIheight is the height of the region. .TP 5 .B int \fIwidth is the width of the region. .TP 5 .B int \fIcode is a code used to make the region unique within a widget .TP 5 .B int \fIstep_x is used in modes 2 (columns) and 3 (cells) to determine the width of a column/cell. .TP 5 .B int \fIstep_y is currently unused .TP 5 .B int \fImode is used to determine how the mouse position is translated into a code (like a function-key): .RS 5 .TP 3 1 index by lines .TP 2 index by columns .TP 3 index by cells .RE .\" --------------------------------------------------------------------------- .SS dlg_mouse_mkregion .TP 5 .B int \fIy is the top-row of the region. .TP 5 .B int \fIx is the left-column of the region. .TP 5 .B int \fIheight is the height of the region. .TP 5 .B int \fIwidth is the width of the region. .TP 5 .B int \fIcode is a code used to make the region unique within a widget .\" --------------------------------------------------------------------------- .SS dlg_mouse_region Retrieve the frame under the mouse pointer .TP 5 .B int \fIy is the row of the mouse-click .TP 5 .B int \fIx is the column of the mouse-click .\" --------------------------------------------------------------------------- .SS dlg_mouse_setbase Sets a base for subsequent calls to \fBdlg_mouse_mkregion\fP, so they can make regions relative to the start of a given window. .TP 5 .B int \fIx is the left-column for the base .TP 5 .B int \fIy is the top-row for the base .\" --------------------------------------------------------------------------- .SS dlg_mouse_setcode Sets a value used internally by \fBdlg_mouse_mkregion\fP which is added to the \fIcode\fP parameter. By providing different values, e.g., multiples of \fBKEY_MAX\fP, it is possible to support multiple \*(``big\*('' regions in a widget. The \fIbuildlist\fP widget uses this feature to recognize mouse-clicks in the left/right panes. .TP 5 .B int \fIcode is the value to add to \fBdlg_mouse_mkregion\fP's \fIcode\fP parameter. .\" --------------------------------------------------------------------------- .SS dlg_mouse_wgetch is a wrapper for \fBdlg_getc\fP which additionally maps mouse-clicks (if the curses library supports those) into extended function-keys which encode the position according to the \fImode\fP in \fBdlg_mouse_mkbigregion\fP. Returns the corresponding key-code. .TP 5 .B WINDOW * \fIwin is the window on which to perform the input .TP 5 .B int * \fIfkey the referenced location is set to true if the key-code is an actual or extended (mouse) function-key. .\" --------------------------------------------------------------------------- .SS dlg_mouse_wgetch_nowait This is a non-blocking variant of \fBdlg_mouse_wgetch\fP. .TP 5 .B WINDOW * \fIwin is the window on which to perform the input .TP 5 .B int * \fIfkey the referenced location is set to true if the key-code is an actual or extended (mouse) function-key. .\" --------------------------------------------------------------------------- .SS dlg_need_separator Check if an output-separator is needed. If \fBdialog_vars.output_separator\fP is set, return true. Otherwise, if \fBdialog_vars.input_result\fP is nonempty, return true. If neither, return false. .\" --------------------------------------------------------------------------- .SS dlg_new_modal_window Create a modal window, optionally with a shadow. The shadow is created if \fBdialog_state.use_shadow\fP is true. .TP 5 .B WINDOW * \fIparent is the parent window (usually the top-level window of a widget) .TP 5 .B int \fIheight is the window's height .TP 5 .B int \fIwidth is the window's width .TP 5 .B int \fIy is the window's top-row .TP 5 .B int \fIx is the window's left-column .\" --------------------------------------------------------------------------- .SS dlg_new_window Create a window, optionally with a shadow. The shadow is created if \fBdialog_state.use_shadow\fP is true. .TP 5 .B int \fIheight is the window's height .TP 5 .B int \fIwidth is the window's width .TP 5 .B int \fIy is the window's top-row .TP 5 .B int \fIx is the window's left-column .\" --------------------------------------------------------------------------- .SS dlg_next_button Return the next index in the list of labels. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .TP 5 .B int \fIbutton is the current button-index. .\" --------------------------------------------------------------------------- .SS dlg_next_ok_buttonindex Assuming that the caller is using \fBdlg_ok_labels\fP to list buttons, find the next index in the list of buttons. .TP 5 .B int \fIcurrent is the current index in the list of buttons .TP 5 .B int \fIextra if negative, provides a way to enumerate extra active areas on the widget. .\" --------------------------------------------------------------------------- .SS dlg_ok_buttoncode Map the given button index for \fBdlg_ok_labels\fP into \fB\*p\fP's exit-code. .TP 5 .B int \fIbutton is the button-index (which is not necessarily the same as the index in the list of labels). .\" --------------------------------------------------------------------------- +.SS dlg_ok_button_key +Calls \fBdlg_button_key\fP with the \*(``Cancel\*('' button disabled, +e.g., for the textbox widget. +.\" --------------------------------------------------------------------------- .SS dlg_ok_label Returns a list with the \*(``Ok\*('' label, and if \fBdialog_vars.help_button\fP is true, the \*(``Help\*('' label as well. .\" --------------------------------------------------------------------------- .SS dlg_ok_labels Return a list of button labels for the OK/Cancel group of widgets. .\" --------------------------------------------------------------------------- .SS dlg_ordinate Decode the string as an integer, decrement if greater than zero to make a curses-ordinate from a dialog-ordinate. .\" --------------------------------------------------------------------------- .SS dlg_parse_bindkey Parse the parameters of the \*(``bindkeys\*('' configuration-file entry. This expects widget name which may be "*", followed by curses key definition and then \fB\*p\fP key definition. .TP 5 .B char * \fIparams is the parameter string to parse. .\" --------------------------------------------------------------------------- .SS dlg_parse_rc Parse the configuration file and set up variables. .\" --------------------------------------------------------------------------- .SS dlg_popen Open a pipe which ties the standard error and output together. The \fBpopen\fP function captures only the standard output of a command. .TP 5 .B const char *\fIcommand The shell command to run. .TP 5 .B const char *\fItype Like \fBpopen\fP, "r" is used to read, and "w" is used to write. .\" --------------------------------------------------------------------------- .SS dlg_prev_button Return the previous index in the list of labels. .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. .TP 5 .B int \fIbutton is the current button index .\" --------------------------------------------------------------------------- .SS dlg_print_listitem This is a helper function used for the various \*(``list\*('' widgets, e.g., checklist, menu, buildlist, treeview. Each list-widget has \*(``tag\*('' and \*(``description\*('' values for each item which can be displayed. If \fBdialog_vars.no_tags\fP is true, the \*(``tag\*('' value is not shown. The first character of the first value shown (tag or description) is highlighted to indicate that the widget will match it for quick navigation. .TP 5 .B WINDOW *\fIwin the window in which to display the text .TP 5 .B const char *\fItext the value to display .TP 5 .B int \fIclimit the number of columns available for printing the text .TP 5 .B bool \fIfirst true if this is the first call (for \*(``tag\*('' and \*(``description\*(''), and the first character of the value should be highlighted. .TP 5 .B int \fIselected nonzero if the text should be displayed using the \*(``selected\*('' colors .\" --------------------------------------------------------------------------- .SS dlg_print_scrolled This is a wrapper for \fBdlg_print_autowrap\fP which allows the user to scroll too-long prompt text up/down. .LP See \fBdlg_check_scrolled\fP for a function which updates the \fIoffset\fP variable used as a parameter here. It complements this function; you need both. If \fIpauseopt\fP is set, this function returns an updated \fIlast\fP parameter, needed for \fBdlg_check_scrolled\fP calls. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B const char * \fIprompt is the string to print .TP 5 .B int \fIoffset is the starting line-number to write wrapped text. .TP 5 .B int \fIheight is the available height for writing the wrapped text .TP 5 .B int \fIwidth is the width that the wrapping should occur in .TP 5 .B int \fIpauseopt is true if the extra functionality for scrolling should be enabled. If false, this calls \fBdlg_print_autowrap\fP without doing any scrolling. .\" --------------------------------------------------------------------------- .SS dlg_print_line Print one line of the prompt in the window within the limits of the specified right margin. The line will end on a word boundary and a pointer to the start of the next line is returned, or a NULL pointer if the end of *prompt is reached. .TP 5 .B WINDOW *\fIwin is the window to update. .TP 5 .B chtype *\fIattr holds the starting attributes, and is updated to reflect the final attributes applied to the string. .TP 5 .B const char *\fIprompt is the string to print .TP 5 .B int \fIlm is the left margin. .TP 5 .B int \fIrm is the right margin .TP 5 .B int *\fIx returns the ending x-ordinate. .\" --------------------------------------------------------------------------- .SS dlg_prev_ok_buttonindex Find the previous button index in the list from \fBdlg_ok_labels\fP. .TP 5 .B int \fIcurrent is the current index .TP 5 .B int \fIextra if negative provides a way to enumerate extra active areas on the widget. .\" --------------------------------------------------------------------------- .SS dlg_print_autowrap Print a string of text in a window, automatically wrap around to the next line if the string is too long to fit on one line. Note that the string may contain embedded newlines. The text is written starting at the top of the window. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B const char * \fIprompt is the string to print .TP 5 .B int \fIheight is the nominal height the wrapped string is limited to .TP 5 .B int \fIwidth is the width that the wrapping should occur in .\" --------------------------------------------------------------------------- .SS dlg_print_size If \fBdialog_vars.print_siz\fP is true, print the given height/width (from a widget) to \fBdialog_state.output\fP, e.g., \fBSize: height, width\fP. .TP 5 .B int \fIheight is the window's height .TP 5 .B int \fIwidth is the window's width .\" --------------------------------------------------------------------------- .SS dlg_print_text Print up to \fIcols\fP columns from \fBtext\fP, optionally rendering \fB\*p\fP's escape sequences for attributes and color. .TP 5 .B WINDOW * \fIwin is the window to update. .TP 5 .B const char * \fItxt is the string to print .TP 5 .B int \fIcol is the column limit .TP 5 .B chtype * \fIattr holds the starting attributes, and is updated to reflect the final attributes applied to the string. .\" --------------------------------------------------------------------------- .SS dlg_progressbox -implements the "\fB--prgbox\fP" and "\fB--progressbox\fP" options. +implements the "\fB\-\-prgbox\fP" and "\fB\-\-progressbox\fP" options. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. If empty or null, no prompt is shown. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIpauseopt if true, an \*(``OK\*('' button will be shown, and the dialog will wait for it to complete. With an \*(``OK\*('' button, it is denoted a \*(``programbox\*('', without an \*(``OK\*('' button, it is denoted a \*(``progressbox\*(''. .TP 5 .B FILE * \fIfp is the file pointer, which may be a pipe or a regular file. .\" --------------------------------------------------------------------------- .SS dlg_put_backtitle Display the background title if \fBdialog_vars.backtitle\fP is non-null. The background title is shown at the top of the screen. .\" --------------------------------------------------------------------------- .SS dlg_reallocate_gauge Allocates or reallocates a gauge widget (see \fBdlg_allocate_gauge\fP). Use \fBdlg_update_gauge\fP to display the result. .TP 5 .B void ** \fIobjptr If the pointer referenced by this parameter is null, the function creates a new gauge widget using \fBdlg_allocate_gauge\fP. Otherwise, it updates the title and cprompt values, reusing the window from the previous call on this function. As a side-effect, the function stores the updated object-pointer via the \fIobjptr\fP parameter. .TP 5 .B const char * \fItitle is the title string to display at the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is adjusted to use the available screen size. .TP 5 .B int \fIpercent is the percentage to show in the progress bar. .\" --------------------------------------------------------------------------- .SS dlg_register_buttons The widget developer should call this function after \fBdlg_register_window\fP, for the list of button labels associated with the widget. One may bind a key to a button, e.g., \*(``OK\*('' for \fBDLGK_OK\fP, .TP 5 .B WINDOW * \fIwin is the window with which to associate the buttons .TP 5 .B const char * \fIname is the widget's binding name (usually the name of the widget). .TP 5 .B const char ** \fIbuttons is the list of buttons .\" --------------------------------------------------------------------------- .SS dlg_register_window For a given named widget's window, associate a binding table. .TP 5 .B WINDOW * \fIwin is the window with which to associate the buttons .TP 5 .B const char * \fIname is the widget's binding name (usually the name of the widget). .TP 5 .B DLG_KEYS_BINDING * \fIbinding is the binding table .\" --------------------------------------------------------------------------- .SS dlg_remove_callback Remove a callback. .TP 5 .B DIALOG_CALLBACK * \fIp contains the callback information. .\" --------------------------------------------------------------------------- .SS dlg_renamed_menutext -This is a utility function which supports the \fB--inputmenu\fP option of +This is a utility function which supports the \fB\-\-inputmenu\fP option of the \fB\*p\fP program. If \fBdialog_vars.input_menu\fP is set, \fBdialog_menu\fP passes this pointer to \fBdlg_menu\fP as the \fIrename_menutext\fP parameter. Otherwise, it passes \fBdlg_dummy_menutext\fP. .LP The function should add \*(``RENAMED\*('' to \fBdialog_vars.input_result\fP , followed by the menu item's name and the \fInewtext\fP value (with a space separating the three items), and return \fBDLG_EXIT_EXTRA\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems is the list of menu items .TP 5 .B int \fIcurrent is the index of the currently-selected item .TP 5 .B char * \fInewtext is the updated text for the menu item .\" --------------------------------------------------------------------------- +.SS dlg_reset_timeout +Calls \fBwtimeout\fP with the value saved for a window in the +last call to \fBdlg_set_timeout\fP. +.\" --------------------------------------------------------------------------- .SS dlg_restore_vars Restore \fB\*p\fP's variables from the given variable (see \fBdialog_save_vars\fP). .TP 5 .B DIALOG_VARS * \fIsave is the variable from which to restore. .LP The \fIDIALOG_VARS.input_length\fP and \fIDIALOG_VARS.input_result\fP members are treated specially, since these are used by a widget to pass data to the caller. They are not modified by this function. .\" --------------------------------------------------------------------------- .SS dlg_result_key Test a \fB\*p\fP internal keycode to see if it corresponds to one of the push buttons on the widget such as \*(``OK\*(''. This is only useful if there are user-defined key bindings, since there are no built-in bindings that map directly to \fBDLGK_OK\fP, etc. Return true if a mapping was done. .TP 5 .B int \fIdialog_key is the \fB\*p\fP key to test .TP 5 .B int \fIfkey is true if this is a function key .TP 5 .B int * \fIresultp store the result of the mapping in the referenced location. .\" --------------------------------------------------------------------------- .SS dlg_save_vars Save \fB\*p\fP's variables into the given variable (see \fBdlg_restore_vars\fP). .TP 5 .B DIALOG_VARS * \fIsave is the variable into which to save. .\" --------------------------------------------------------------------------- .SS dlg_set_focus Set focus on the given window, making it display above other windows on the screen. .TP 5 .B WINDOW * \fIparent is the parent window (usually the top-level window of a widget) .TP 5 .B WINDOW * \fIwin is the window on which to place focus (usually a subwindow of a widget) .\" --------------------------------------------------------------------------- .SS dlg_set_result Setup a fixed-buffer for the result in \fBdialog_vars.input_result\fP .TP 5 .B const char * \fIstring is the new contents for the result .\" --------------------------------------------------------------------------- +.SS dlg_set_timeout +Calls \fBwtimeout\fP to establish a preferred timeout for nonblocking +reads, e.g., to allow the gauge widget to handle window-resizing events. +The \fBdlg_may_resize\fP function temporarily overrides this value, +to allow it to skip over the error codes returned while the ncurses +library processes window-resizing events. +It restores the value established in this call +by calling \fBdlg_restore_timeout\fP. +.TP 5 +.B WINDOW * \fIwin +is the window whose input-timeout should be set +.TP 5 +.B bool \fIwill_getc +is true if the widget is expected to read keyboard characters. +Some (such as the gauge widget) do not. +.\" --------------------------------------------------------------------------- .SS dlg_show_string Displays the string, shifted as necessary, to fit within the box and show the current character-offset. .TP 5 .B WINDOW * \fIwin is the window within which to display .TP 5 .B const char * \fIstring is the string to display .TP 5 .B int \fIoffset is the starting (character, not bytes) offset .TP 5 .B chtype \fIattr is the window attribute to use for the string .TP 5 .B int \fIy_base beginning row on screen .TP 5 .B int \fIx_base beginning column on screen .TP 5 .B int \fIx_last number of columns on screen .TP 5 .B bool \fIhidden if true, do not echo input .TP 5 .B bool \fIforce if true, force repaint .\" --------------------------------------------------------------------------- .SS dlg_strclone duplicate the string, like \fBstrdup\fP. .TP 5 .B const char * \fIcprompt is the string to duplicate .\" --------------------------------------------------------------------------- .SS dlg_strcmp compare two strings, ignoring case. .TP 5 .B const char * \fIa is one string .TP 5 .B const char * \fIb is the other string .\" --------------------------------------------------------------------------- .SS dlg_string_to_argv Convert a string to an argument vector returning an index (which must be freed by the caller). The string is modified: .bP Blanks between arguments are replaced by nulls. .bP Normally arguments are separated by blanks; however you can double-quote an argument to enclose blanks. The surrounding double-quotes are removed from the string. .bP A backslash preceding a double-quote within double-quotes is removed. .bP A backslash preceding a newline outside double-quotes is removed. .bP Except for special cases, backslashes are preserved in the strings, since other \fB\*l\fP functions interpret backslashes, e.g., for colors. .TP 5 .B char *\fIblob is the string to convert. .\" --------------------------------------------------------------------------- .SS dlg_sub_window create a subwindow, e.g., for an input area of a widget .TP 5 .B WINDOW * \fIwin is the parent window .TP 5 .B int \fIheight is the subwindow's height .TP 5 .B int \fIwidth is the subwindow's width .TP 5 .B int \fIy is the subwindow's top-row .TP 5 .B int \fIx is the subwindow's left-column .\" --------------------------------------------------------------------------- .SS dlg_tab_correct_str If the \fBdialog_vars.tab_correct\fP is true, convert tabs to single spaces. Return the converted result. The caller is responsible for freeing the string. .TP 5 .B char * \fIprompt is the string to convert .\" --------------------------------------------------------------------------- .SS dlg_trace If the parameter is non-null, opens a trace file with that name and stores the file pointer in \fBdialog_state.trace\fP. .\" --------------------------------------------------------------------------- .SS dlg_trace_2n logs a numeric value as a comment. .TP 5 .B char * \fIname is the name to log in the comment. .TP 5 .B int \fIvalue is the value to log in the comment. .\" --------------------------------------------------------------------------- -.SS dlg_trace_2n +.SS dlg_trace_2s logs a string value as a comment. If the value contains embedded newlines, the comment is continued with \*(``#+\*('' markers. .TP 5 .B char * \fIname is the name to log in the comment. .TP 5 .B int \fIvalue is the value to log in the comment. .\" --------------------------------------------------------------------------- .SS dlg_trace_chr If \fBdialog_state.trace\fP is set, translate the parameters into a printable representation, log it on a \*(``chr\*('' line. .TP 5 .B int \fIch is the nominal keycode value. .TP 5 .B int \fIfkey is nonzero if the value is really a function key. Some of these may be values declared in the DLG_KEYS_ENUM. .\" --------------------------------------------------------------------------- .SS dlg_trace_msg Write a formatted message to the trace file. .TP 5 .B const char * \fIfmt is the format of the \fBprintf\fP-like message to write. .TP 5 .B ... .br are the variables to apply to the \fIfmt\fP format. .LP Use the DLG_TRACE macro for portability, in case the trace feature is not compiled into the library. It uses an extra level of parentheses to work with a variable number of parameters, e.g., .Ex DLG_TRACE(("this is dialog version %s\en", dialog_version())); .Ee .\" --------------------------------------------------------------------------- +.SS dlg_trace_va_msg +Write a formatted message to the trace file. +.TP 5 +.B const char *\fIfmt +is the format of the \fBprintf\fP-like message to write. +.TP 5 +.B va_list \fIap +are the variables to apply to the \fIfmt\fP format. +.LP +This is used in \fBdlg_exiterr\fP to capture error messages in the trace file: +.Ex +va_start(ap, fmt); +dlg_trace_msg("## Error: "); +dlg_trace_va_msg(fmt, ap); +va_end(ap); +.Ee +.LP +Unlike \fBdlg_trace_msg\fP, an extra macro is not needed. +.\" --------------------------------------------------------------------------- .SS dlg_ttysize Returns the screensize without using curses. That allows the function to be used before initializing the screen. .\" --------------------------------------------------------------------------- .SS dlg_trace_win If \fBdialog_state.trace\fP is set, log a printable picture of the given window. .\" --------------------------------------------------------------------------- .SS dlg_treeview This is an alternate interface to 'treeview' which allows the application to read the list item states back directly without putting them in the output buffer. .TP 5 .B const char * \fItitle is the title on the top of the widget. .TP 5 .B const char * \fIcprompt is the prompt text shown within the widget. .TP 5 .B int \fIheight is the desired height of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIwidth is the desired width of the box. If zero, the height is based on the screen size. .TP 5 .B int \fIlist_height is the minimum height to reserve for displaying the list. If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. .TP 5 .B int \fIitem_no is the number of rows in \fIitems\fP. .TP 5 .B DIALOG_LISTITEM * \fIitems is the list of items, contain tag, name, and optionally help strings (if \fBdialog_vars.item_help\fP is set). The initial selection state for each item is also in this list. .TP 5 .B const char * \fIstates This is a list of characters to display for the given states. Normally a buildlist provides true (1) and false (0) values, which the widget displays as "*" and space, respectively. An application may set this parameter to an arbitrary null-terminated string. The widget determines the number of states from the length of this string, and will cycle through the corresponding display characters as the user presses the space-bar. .TP 5 .B int * \fIdepths This is a list of depths of each item in the tree. It is a separate parameter from \fIitems\fP to allow reuse of the existing functions. .TP 5 .B int \fIflag is either \fIFLAG_CHECK\fP, for checklists (multiple selections), or \fIFLAG_RADIO\fP for radiolists (a single selection). .TP 5 .B int * \fIcurrent_item The widget sets the referenced location to the index of the current display item (cursor) when it returns. .\" --------------------------------------------------------------------------- .SS dlg_trim_string -The \fBdialog\fP program uses this in each widget to adjust the +The \fB\*p\fP program uses this in each widget to adjust the message string, which may contain the newline character (referred to as '\en') and/or the special substring "\en" (which can be translated into a newline character). .LP There are several optional features: .bP Unless \fBdialog_vars.nocollapse\fP is set, each tab is converted to a space before other processing. .bP If \fBdialog_vars.no_nl_expand\fP is not set, and the string has "\en" substrings: .RS .bP The function changes embedded "\en" substrings to '\en' characters. .IP The function preserves extra spaces after these substitutions. For instance, spaces following a newline (substring or character) are preserved to use as an indentation. .bP If \fBdialog_vars.cr_wrap\fP is set, the function preserves '\en' newline characters. Otherwise, each '\en' newline character is converted to a space. .RE .bP Otherwise, if \fBdialog_vars.trim_whitespace\fP is set: .RS .bP This function strips all extra spaces to simplify justification. .bP If \fBdialog_vars.cr_wrap\fP is set, the function preserves '\en' newline characters. Otherwise, each '\en' newline character is converted to a space. .RE .bP Finally (if \fBdialog_vars.no_nl_expand\fP is set, or the string does not contain "\en" substrings, and \fBdialog_vars.trim_whitespace\fP is not set): .RS .bP Unless \fBdialog_vars.nocollapse\fP is set, sequences of spaces are reduced to a single space. .RE .TP 5 .B char * \fIsrc is the string to trim .\" --------------------------------------------------------------------------- .SS dlg_unregister_window Remove the bindings for a given window. .TP 5 .B WINDOW * \fIwin is the window from which to remove bindings .\" --------------------------------------------------------------------------- .SS dlg_update_gauge Update a gauge widget to show a different percentage value. .TP 5 .B void *\fIobjptr points to the gauge object to update. .TP 5 .B int \fIpercent is the new percentage value to display. .\" --------------------------------------------------------------------------- .SS dlg_will_resize This filters out bursts of \fBKEY_RESIZE\fP values. Call this after \fBdlg_getc\fP returns \fBKEY_RESIZE\fP, to improve performance. .\" --------------------------------------------------------------------------- .SS dlg_yes_buttoncode Map the given button index for \fBdlg_yes_labels\fP into \fB\*p\fP's exit-code. .TP 5 .B int \fIbutton is the button index .\" --------------------------------------------------------------------------- .SS dlg_yes_labels Return a list of buttons for Yes/No labels. .\" --------------------------------------------------------------------------- .SS end_dialog End use of \fB\*p\fP functions. .\" --------------------------------------------------------------------------- .SS init_dialog Do some initialization for \fB\*p\fP. .TP 5 .B FILE *\fIinput is the real tty input of \fB\*p\fP. Usually it is the standard input, but if -\fB--input-fd\fP option is used, it may be anything. +\fB\-\-input\-fd\fP option is used, it may be anything. .TP 5 .B FILE *\fIoutput is where \fB\*p\fP will send its result. Usually it is the standard error, but -if \fB--stdout\fP or \fB--output-fd\fP is used, it may be anything. +if \fB\-\-stdout\fP or \fB\-\-output\-fd\fP is used, it may be anything. . .\" ************************************************************************ .SH SEE ALSO \fB\*p\fP (1). . .\" ************************************************************************ .SH AUTHOR Thomas E.\& Dickey diff --git a/dialog.c b/dialog.c index bab78a8a018e..510baeb97add 100644 --- a/dialog.c +++ b/dialog.c @@ -1,2180 +1,2143 @@ /* - * $Id: dialog.c,v 1.268 2018/06/21 09:16:05 tom Exp $ + * $Id: dialog.c,v 1.281 2021/01/17 16:52:18 tom Exp $ * * cdialog - Display simple dialog boxes from shell scripts * - * Copyright 2000-2017,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> + #include <string.h> #include <sys/types.h> #include <sys/stat.h> #ifdef HAVE_SETLOCALE #include <locale.h> #endif +#include <dlg_internals.h> + #define PASSARGS t, av, offset_add #define CALLARGS const char *t, char *av[], int *offset_add typedef int (callerFn) (CALLARGS); typedef enum { o_unknown = 0 ,o_allow_close ,o_and_widget ,o_ascii_lines - ,o_aspect + ,o_aspect_ratio ,o_auto_placement ,o_backtitle - ,o_beep - ,o_beep_after - ,o_begin + ,o_beep_signal + ,o_beep_after_signal + ,o_begin_set ,o_cancel_label ,o_checklist - ,o_clear + ,o_dlg_clear_screen ,o_colors ,o_column_separator ,o_cr_wrap ,o_create_rc + ,o_cursor_off_label ,o_date_format ,o_default_button ,o_default_item ,o_defaultno + ,o_erase_on_exit ,o_exit_label ,o_extra_button ,o_extra_label ,o_fixed_font ,o_form ,o_gauge ,o_help ,o_help_button ,o_help_file ,o_help_label ,o_help_line ,o_help_status ,o_help_tags ,o_icon ,o_ignore ,o_infobox ,o_input_fd ,o_inputbox ,o_inputmenu ,o_insecure ,o_item_help ,o_keep_colors ,o_keep_tite ,o_keep_window ,o_last_key ,o_max_input ,o_menu ,o_mixedform ,o_mixedgauge ,o_msgbox ,o_no_close - ,o_no_collapse + ,o_nocollapse ,o_no_cr_wrap - ,o_no_kill + ,o_cant_kill + ,o_no_hot_list ,o_no_label ,o_no_lines ,o_no_mouse ,o_no_nl_expand - ,o_no_shadow + ,o_use_shadow ,o_nocancel ,o_nook ,o_ok_label ,o_output_fd ,o_output_separator ,o_passwordbox ,o_passwordform ,o_pause ,o_prgbox ,o_print_maxsize - ,o_print_size - ,o_print_text_only + ,o_print_siz + ,o_text_only ,o_print_text_size ,o_print_version ,o_programbox ,o_progressbox ,o_quoted ,o_radiolist ,o_screen_center - ,o_scrollbar + ,o_use_scrollbar ,o_separate_output - ,o_separate_widget - ,o_separator - ,o_shadow + ,o_separate_str ,o_single_quoted ,o_size_err - ,o_sleep + ,o_sleep_secs ,o_smooth - ,o_stderr - ,o_stdout + ,o_output_stderr + ,o_output_stdout ,o_tab_correct ,o_tab_len ,o_tailbox ,o_tailboxbg ,o_textbox ,o_time_format - ,o_timeout + ,o_timeout_secs ,o_title - ,o_trim + ,o_trim_whitespace ,o_under_mouse ,o_version ,o_visit_items ,o_wmclass ,o_yes_label ,o_yesno #ifdef HAVE_WHIPTAIL ,o_fullbutton ,o_topleft #endif #ifdef HAVE_XDIALOG ,o_calendar ,o_dselect ,o_editbox ,o_fselect ,o_timebox ,o_week_start #endif #ifdef HAVE_XDIALOG2 ,o_buildlist ,o_rangebox ,o_reorder ,o_treeview #endif #if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL) ,o_no_items ,o_no_tags #endif #ifdef HAVE_DLG_TRACE ,o_trace #endif ,o_iso_week } eOptions; +typedef enum { + tUnknown + ,tFalse + ,tTrue + ,tNumber + ,tString +} tOptions; + /* * The bits in 'pass' are used to decide which options are applicable at * different stages in the program: * 1 flags before widgets * 2 widgets * 4 non-widget options */ typedef struct { const char *name; eOptions code; + int vars; /* 0=none, 1=state, 2=vars */ + tOptions type; /* type for bool(true/false), number, string */ + unsigned offset; int pass; /* 1,2,4 or combination */ const char *help; /* NULL to suppress, non-empty to display params */ } Options; typedef struct { eOptions code; int argmin, argmax; callerFn *jumper; } Mode; +/* use these macros for simple options in DIALOG_STATE */ +#define ssF(name) o_##name, 1, tFalse, offsetof(DIALOG_STATE,name) +#define ssT(name) o_##name, 1, tTrue, offsetof(DIALOG_STATE,name) +#define ssN(name) o_##name, 1, tNumber, offsetof(DIALOG_STATE,name) +#define ssS(name) o_##name, 1, tString, offsetof(DIALOG_STATE,name) + +/* use these macros for simple options in DIALOG_VARS */ +#define svF(name) o_##name, 2, tFalse, offsetof(DIALOG_VARS,name) +#define svT(name) o_##name, 2, tTrue, offsetof(DIALOG_VARS,name) +#define svN(name) o_##name, 2, tNumber, offsetof(DIALOG_VARS,name) +#define svS(name) o_##name, 2, tString, offsetof(DIALOG_VARS,name) + +/* use these macros for ignored options */ +#define xxF(name) o_##name, 0, tFalse, 0 +#define xxT(name) o_##name, 0, tTrue, 0 +#define xxN(name) o_##name, 0, tNumber, 0 +#define xxS(name) o_##name, 0, tString, 0 + +/* use this macro for widget options */ +#define opW(name) o_##name, 0, 0, 0 + +/* use this macro for other options */ +#define opO(name) o_##name, 0, 0, 0 + static int known_opts = 0; static const char **dialog_opts; static char **dialog_argv; static char **special_argv = 0; static int special_argc = 0; static bool ignore_unknown = FALSE; static const char *program = "dialog"; #ifdef NO_LEAKS typedef struct _all_blobs { struct _all_blobs *next; void *blob; } AllBlobs; static AllBlobs *all_blobs; #endif /* * The options[] table is organized this way to make it simple to maintain * a sorted list of options for the help-message. + * + * Because Boolean options correspond to "true", --shadow is listed here while + * --no-shadow is not. The findOption and optionBool functions handle the + * cases where "no" is added or removed from the option name to derive an + * opposite setting. */ /* *INDENT-OFF* */ static const Options options[] = { - { "allow-close", o_allow_close, 1, NULL }, - { "and-widget", o_and_widget, 4, NULL }, - { "ascii-lines", o_ascii_lines, 1, "" }, - { "aspect", o_aspect, 1, "<ratio>" }, - { "auto-placement", o_auto_placement, 1, NULL }, - { "backtitle", o_backtitle, 1, "<backtitle>" }, - { "beep", o_beep, 1, "" }, - { "beep-after", o_beep_after, 1, "" }, - { "begin", o_begin, 1, "<y> <x>" }, - { "cancel-label", o_cancel_label, 1, "<str>" }, - { "checklist", o_checklist, 2, "<text> <height> <width> <list height> <tag1> <item1> <status1>..." }, - { "clear", o_clear, 1, "" }, - { "colors", o_colors, 1, "" }, - { "column-separator",o_column_separator, 1, "<str>" }, - { "cr-wrap", o_cr_wrap, 1, "" }, - { "create-rc", o_create_rc, 1, NULL }, - { "date-format", o_date_format, 1, "<str>" }, - { "default-button", o_default_button, 1, "<str>" }, - { "default-item", o_default_item, 1, "<str>" }, - { "defaultno", o_defaultno, 1, "" }, - { "exit-label", o_exit_label, 1, "<str>" }, - { "extra-button", o_extra_button, 1, "" }, - { "extra-label", o_extra_label, 1, "<str>" }, - { "fixed-font", o_fixed_font, 1, NULL }, - { "form", o_form, 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>..." }, - { "gauge", o_gauge, 2, "<text> <height> <width> [<percent>]" }, - { "guage", o_gauge, 2, NULL }, - { "help", o_help, 4, "" }, - { "help-button", o_help_button, 1, "" }, - { "help-label", o_help_label, 1, "<str>" }, - { "help-status", o_help_status, 1, "" }, - { "help-tags", o_help_tags, 1, "" }, - { "hfile", o_help_file, 1, "<str>" }, - { "hline", o_help_line, 1, "<str>" }, - { "icon", o_icon, 1, NULL }, - { "ignore", o_ignore, 1, "" }, - { "infobox", o_infobox, 2, "<text> <height> <width>" }, - { "input-fd", o_input_fd, 1, "<fd>" }, - { "inputbox", o_inputbox, 2, "<text> <height> <width> [<init>]" }, - { "inputmenu", o_inputmenu, 2, "<text> <height> <width> <menu height> <tag1> <item1>..." }, - { "insecure", o_insecure, 1, "" }, - { "item-help", o_item_help, 1, "" }, - { "keep-colors", o_keep_colors, 1, NULL }, - { "keep-tite", o_keep_tite, 1, "" }, - { "keep-window", o_keep_window, 1, "" }, - { "last-key", o_last_key, 1, "" }, - { "max-input", o_max_input, 1, "<n>" }, - { "menu", o_menu, 2, "<text> <height> <width> <menu height> <tag1> <item1>..." }, - { "mixedform", o_mixedform, 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>..." }, - { "mixedgauge", o_mixedgauge, 2, "<text> <height> <width> <percent> <tag1> <item1>..." }, - { "msgbox", o_msgbox, 2, "<text> <height> <width>" }, - { "no-cancel", o_nocancel, 1, "" }, - { "no-close", o_no_close, 1, NULL }, - { "no-collapse", o_no_collapse, 1, "" }, - { "no-cr-wrap", o_no_cr_wrap, 1, "" }, - { "no-kill", o_no_kill, 1, "" }, - { "no-label", o_no_label, 1, "<str>" }, - { "no-lines", o_no_lines, 1, "" }, - { "no-mouse", o_no_mouse, 1, "" }, - { "no-nl-expand", o_no_nl_expand, 1, "" }, - { "no-ok", o_nook, 1, "" }, - { "no-shadow", o_no_shadow, 1, "" }, - { "nocancel", o_nocancel, 1, NULL }, /* see --no-cancel */ - { "nook", o_nook, 1, "" }, /* See no-ok */ - { "ok-label", o_ok_label, 1, "<str>" }, - { "output-fd", o_output_fd, 1, "<fd>" }, - { "output-separator",o_output_separator, 1, "<str>" }, - { "passwordbox", o_passwordbox, 2, "<text> <height> <width> [<init>]" }, - { "passwordform", o_passwordform, 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>..." }, - { "pause", o_pause, 2, "<text> <height> <width> <seconds>" }, - { "prgbox", o_prgbox, 2, "<text> <command> <height> <width>" }, - { "print-maxsize", o_print_maxsize, 1, "" }, - { "print-size", o_print_size, 1, "" }, - { "print-text-only",o_print_text_only, 5, "<text> <height> <width>" }, - { "print-text-size",o_print_text_size, 5, "<text> <height> <width>" }, - { "print-version", o_print_version, 5, "" }, - { "programbox", o_programbox, 2, "<text> <height> <width>" }, - { "progressbox", o_progressbox, 2, "<text> <height> <width>" }, - { "quoted", o_quoted, 1, "" }, - { "radiolist", o_radiolist, 2, "<text> <height> <width> <list height> <tag1> <item1> <status1>..." }, - { "screen-center", o_screen_center, 1, NULL }, - { "scrollbar", o_scrollbar, 1, "" }, - { "separate-output",o_separate_output, 1, "" }, - { "separate-widget",o_separate_widget, 1, "<str>" }, - { "separator", o_separator, 1, NULL }, - { "shadow", o_shadow, 1, "" }, - { "single-quoted", o_single_quoted, 1, "" }, - { "size-err", o_size_err, 1, "" }, - { "sleep", o_sleep, 1, "<secs>" }, - { "smooth", o_smooth, 1, NULL }, - { "stderr", o_stderr, 1, "" }, - { "stdout", o_stdout, 1, "" }, - { "tab-correct", o_tab_correct, 1, "" }, - { "tab-len", o_tab_len, 1, "<n>" }, - { "tailbox", o_tailbox, 2, "<file> <height> <width>" }, - { "tailboxbg", o_tailboxbg, 2, "<file> <height> <width>" }, - { "textbox", o_textbox, 2, "<file> <height> <width>" }, - { "time-format", o_time_format, 1, "<str>" }, - { "timeout", o_timeout, 1, "<secs>" }, - { "title", o_title, 1, "<title>" }, - { "trim", o_trim, 1, "" }, - { "under-mouse", o_under_mouse, 1, NULL }, - { "version", o_version, 5, "" }, - { "visit-items", o_visit_items, 1, "" }, - { "wmclass", o_wmclass, 1, NULL }, - { "yes-label", o_yes_label, 1, "<str>" }, - { "yesno", o_yesno, 2, "<text> <height> <width>" }, + { "allow-close", xxT(allow_close), 1, NULL }, + { "and-widget", opO(and_widget), 4, NULL }, + { "ascii-lines", svT(ascii_lines), 1, "" }, + { "aspect", ssN(aspect_ratio), 1, "<ratio>" }, + { "auto-placement", xxT(auto_placement), 1, NULL }, + { "backtitle", svS(backtitle), 1, "<backtitle>" }, + { "beep", svT(beep_signal), 1, "" }, + { "beep-after", svT(beep_after_signal), 1, "" }, + { "begin", svT(begin_set), 1, "<y> <x>" }, + { "cancel-label", svS(cancel_label), 1, "<str>" }, + { "checklist", opW(checklist), 2, "<text> <height> <width> <list height> <tag1> <item1> <status1>..." }, + { "clear", svT(dlg_clear_screen), 1, "" }, + { "colors", svT(colors), 1, "" }, + { "column-separator",svS(column_separator), 1, "<str>" }, + { "cr-wrap", svT(cr_wrap), 1, "" }, + { "create-rc", opO(create_rc), 1, NULL }, + { "cursor-off-label",svT(cursor_off_label), 1, "" }, + { "date-format", svS(date_format), 1, "<str>" }, + { "default-button", xxS(default_button), 1, "<str>" }, + { "default-item", svS(default_item), 1, "<str>" }, + { "defaultno", svT(defaultno), 1, "" }, + { "erase-on-exit", svT(erase_on_exit), 1, "" }, + { "exit-label", svS(exit_label), 1, "<str>" }, + { "extra-button", svT(extra_button), 1, "" }, + { "extra-label", svS(extra_label), 1, "<str>" }, + { "fixed-font", xxT(fixed_font), 1, NULL }, + { "form", opW(form), 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>..." }, + { "gauge", opW(gauge), 2, "<text> <height> <width> [<percent>]" }, + { "guage", opW(gauge), 2, NULL }, + { "help", opO(help), 4, "" }, + { "help-button", svT(help_button), 1, "" }, + { "help-label", svS(help_label), 1, "<str>" }, + { "help-status", svT(help_status), 1, "" }, + { "help-tags", svT(help_tags), 1, "" }, + { "hfile", svS(help_file), 1, "<str>" }, + { "hline", svS(help_line), 1, "<str>" }, + { "icon", xxS(icon), 1, NULL }, + { "ignore", opO(ignore), 1, "" }, + { "infobox", opW(infobox), 2, "<text> <height> <width>" }, + { "input-fd", opO(input_fd), 1, "<fd>" }, + { "inputbox", opW(inputbox), 2, "<text> <height> <width> [<init>]" }, + { "inputmenu", opW(inputmenu), 2, "<text> <height> <width> <menu height> <tag1> <item1>..." }, + { "insecure", svT(insecure), 1, "" }, + { "item-help", svT(item_help), 1, "" }, + { "keep-colors", xxT(keep_colors), 1, NULL }, + { "keep-tite", svT(keep_tite), 1, "" }, + { "keep-window", svT(keep_window), 1, "" }, + { "last-key", svT(last_key), 1, "" }, + { "max-input", svN(max_input), 1, "<n>" }, + { "menu", opW(menu), 2, "<text> <height> <width> <menu height> <tag1> <item1>..." }, + { "mixedform", opW(mixedform), 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>..." }, + { "mixedgauge", opW(mixedgauge), 2, "<text> <height> <width> <percent> <tag1> <item1>..." }, + { "msgbox", opW(msgbox), 2, "<text> <height> <width>" }, + { "no-cancel", svT(nocancel), 1, "" }, + { "no-close", xxT(no_close), 1, NULL }, + { "no-collapse", svT(nocollapse), 1, "" }, + { "no-hot-list", svT(no_hot_list), 1, "" }, + { "no-kill", svT(cant_kill), 1, "" }, + { "no-label", svS(no_label), 1, "<str>" }, + { "no-lines", svT(no_lines), 1, "" }, + { "no-mouse", ssT(no_mouse), 1, "" }, + { "no-nl-expand", svT(no_nl_expand), 1, "" }, + { "no-ok", svT(nook), 1, "" }, + { "no-shadow", ssF(use_shadow), 1, "" }, + { "ok-label", svS(ok_label), 1, "<str>" }, + { "output-fd", opO(output_fd), 1, "<fd>" }, + { "output-separator",svS(output_separator), 1, "<str>" }, + { "passwordbox", opW(passwordbox), 2, "<text> <height> <width> [<init>]" }, + { "passwordform", opW(passwordform), 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>..." }, + { "pause", opW(pause), 2, "<text> <height> <width> <seconds>" }, + { "prgbox", opW(prgbox), 2, "<text> <command> <height> <width>" }, + { "print-maxsize", opO(print_maxsize), 1, "" }, + { "print-size", svT(print_siz), 1, "" }, + { "print-text-only",ssT(text_only), 5, "<text> <height> <width>" }, + { "print-text-size",opO(print_text_size), 5, "<text> <height> <width>" }, + { "print-version", opO(print_version), 5, "" }, + { "programbox", opW(programbox), 2, "<text> <height> <width>" }, + { "progressbox", opW(progressbox), 2, "<text> <height> <width>" }, + { "quoted", svT(quoted), 1, "" }, + { "radiolist", opW(radiolist), 2, "<text> <height> <width> <list height> <tag1> <item1> <status1>..." }, + { "screen-center", xxT(screen_center), 1, NULL }, + { "scrollbar", ssT(use_scrollbar), 1, "" }, + { "separate-output",svT(separate_output), 1, "" }, + { "separate-widget",ssS(separate_str), 1, "<str>" }, + { "separator", svS(output_separator), 1, NULL }, + { "single-quoted", svT(single_quoted), 1, "" }, + { "size-err", svT(size_err), 1, "" }, + { "sleep", svN(sleep_secs), 1, "<secs>" }, + { "smooth", xxT(smooth), 1, NULL }, + { "stderr", opO(output_stderr), 1, "" }, + { "stdout", opO(output_stdout), 1, "" }, + { "tab-correct", svT(tab_correct), 1, "" }, + { "tab-len", ssN(tab_len), 1, "<n>" }, + { "tailbox", opW(tailbox), 2, "<file> <height> <width>" }, + { "tailboxbg", opW(tailboxbg), 2, "<file> <height> <width>" }, + { "textbox", opW(textbox), 2, "<file> <height> <width>" }, + { "time-format", svS(time_format), 1, "<str>" }, + { "timeout", svN(timeout_secs), 1, "<secs>" }, + { "title", svS(title), 1, "<title>" }, + { "trim", svT(trim_whitespace), 1, "" }, + { "under-mouse", xxT(under_mouse), 1, NULL }, + { "version", opO(version), 5, "" }, + { "visit-items", ssT(visit_items), 1, "" }, + { "wmclass", xxS(wmclass), 1, NULL }, + { "yes-label", svS(yes_label), 1, "<str>" }, + { "yesno", opW(yesno), 2, "<text> <height> <width>" }, #ifdef HAVE_WHIPTAIL - { "cancel-button", o_cancel_label, 1, NULL }, - { "fb", o_fullbutton, 1, NULL }, - { "fullbutton", o_fullbutton, 1, NULL }, - { "no-button", o_no_label, 1, NULL }, - { "ok-button", o_ok_label, 1, NULL }, - { "scrolltext", o_scrollbar, 1, NULL }, - { "topleft", o_topleft, 1, NULL }, - { "yes-button", o_yes_label, 1, NULL }, + { "cancel-button", svS(cancel_label), 1, NULL }, + { "fb", xxT(fullbutton), 1, NULL }, + { "fullbutton", xxT(fullbutton), 1, NULL }, + { "no-button", svS(no_label), 1, NULL }, + { "ok-button", svS(ok_label), 1, NULL }, + { "scrolltext", ssT(use_scrollbar), 1, NULL }, + { "topleft", svT(begin_set), 1, NULL }, + { "yes-button", svS(yes_label), 1, NULL }, #endif #ifdef HAVE_XDIALOG - { "calendar", o_calendar, 2, "<text> <height> <width> <day> <month> <year>" }, - { "dselect", o_dselect, 2, "<directory> <height> <width>" }, - { "editbox", o_editbox, 2, "<file> <height> <width>" }, - { "fselect", o_fselect, 2, "<filepath> <height> <width>" }, - { "timebox", o_timebox, 2, "<text> <height> <width> <hour> <minute> <second>" }, - { "week-start", o_week_start, 1, "<str>" }, - { "iso-week", o_iso_week, 1, NULL }, + { "calendar", opW(calendar), 2, "<text> <height> <width> <day> <month> <year>" }, + { "dselect", opW(dselect), 2, "<directory> <height> <width>" }, + { "editbox", opW(editbox), 2, "<file> <height> <width>" }, + { "fselect", opW(fselect), 2, "<filepath> <height> <width>" }, + { "timebox", opW(timebox), 2, "<text> <height> <width> <hour> <minute> <second>" }, + { "week-start", svS(week_start), 1, "<str>" }, + { "iso-week", svT(iso_week), 1, NULL }, #endif #ifdef HAVE_XDIALOG2 - { "buildlist", o_buildlist, 2, "<text> <height> <width> <list-height> <tag1> <item1> <status1>..." }, - { "no-items", o_no_items, 1, "" }, - { "no-tags", o_no_tags, 1, "" }, - { "rangebox", o_rangebox, 2, "<text> <height> <width> <min-value> <max-value> <default-value>" }, - { "reorder", o_reorder, 1, "" }, - { "treeview", o_treeview, 2, "<text> <height> <width> <list-height> <tag1> <item1> <status1> <depth1>..." }, + { "buildlist", opW(buildlist), 2, "<text> <height> <width> <list-height> <tag1> <item1> <status1>..." }, + { "no-items", svT(no_items), 1, "" }, + { "no-tags", svT(no_tags), 1, "" }, + { "rangebox", opW(rangebox), 2, "<text> <height> <width> <min-value> <max-value> <default-value>" }, + { "reorder", svT(reorder), 1, "" }, + { "treeview", opW(treeview), 2, "<text> <height> <width> <list-height> <tag1> <item1> <status1> <depth1>..." }, #endif #if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL) - { "noitem", o_no_items, 1, NULL }, - { "notags", o_no_tags, 1, NULL }, + { "noitem", svT(no_items), 1, NULL }, + { "notags", svT(no_tags), 1, NULL }, #endif #ifdef HAVE_DLG_TRACE - { "trace", o_trace, 1, "<file>" }, + { "trace", opO(trace), 1, "<file>" }, #endif }; /* *INDENT-ON* */ #ifdef NO_LEAKS static void ignore_leak(void *value) { AllBlobs *next = dlg_calloc(AllBlobs, (size_t) 1); if (next != 0) { next->blob = value; next->next = all_blobs; all_blobs = next; } } static void handle_leaks(void) { while (all_blobs != 0) { char *blob = all_blobs->blob; AllBlobs *next = all_blobs->next; free(blob); free(all_blobs); all_blobs = next; } free(dialog_opts); if (special_argv != 0) { free(special_argv[0]); free(special_argv); special_argv = 0; special_argc = 0; } } #else #define handle_leaks() /* nothing */ #define ignore_leak(n) /* nothing */ #endif #define OptionChars "\ 0123456789\ -\ abcdefghijklmnopqrstuvwxyz\ " /* * Check if the given string from main's argv is an option. */ static bool isOption(const char *arg) { bool result = FALSE; if (arg != 0) { if (dialog_opts != 0) { int n; for (n = 0; dialog_opts[n] != 0; ++n) { if (dialog_opts[n] == arg) { result = TRUE; break; } } } else if (!strncmp(arg, "--", (size_t) 2) && isalpha(UCH(arg[2]))) { if (strlen(arg) == (strspn) (arg, OptionChars)) { result = TRUE; } else { handle_leaks(); dlg_exiterr("Invalid option \"%s\"", arg); } } } return result; } /* * Make an array showing which argv[] entries are options. Use "--" as a * special token to escape the next argument, allowing it to begin with "--". * When we find a "--" argument, also remove it from argv[] and adjust argc. * That appears to be an undocumented feature of the popt library. * * Also, if we see a "--file", expand it into the parameter list by reading the * text from the given file and stripping quotes, treating whitespace outside * quotes as a parameter delimiter. * * Finally, if we see a "--args", dump the current list of arguments to the * standard error. This is used for debugging complex --file combinations. */ static void unescape_argv(int *argcp, char ***argvp) { int j, k; int limit_includes = 20 + *argcp; int count_includes = 0; bool doalloc = FALSE; char *filename; const char **my_argv = 0; int my_argc; DLG_TRACE(("# unescape_argv\n")); for (k = 0; k < 2; ++k) { my_argc = 0; if (special_argv != 0) { for (j = 0; special_argv[j] != 0; ++j) { if (!strcmp(special_argv[j], "--")) { break; } else if (isOption(special_argv[j])) { if (k != 0) my_argv[my_argc] = special_argv[j]; my_argc++; } } } if (k == 0) { my_argc += (*argcp + 1); my_argv = dlg_calloc(const char *, (size_t) my_argc); assert_ptr(my_argv, "unescape_argv"); } } for (j = 1; j < *argcp; j++) { bool escaped = FALSE; if (!strcmp((*argvp)[j], "--")) { escaped = TRUE; dlg_eat_argv(argcp, argvp, j, 1); } else if (!strcmp((*argvp)[j], "--args")) { fprintf(stderr, "Showing arguments at arg%d\n", j); for (k = 0; k < *argcp; ++k) { fprintf(stderr, " arg%d:%s\n", k, (*argvp)[k]); } dlg_eat_argv(argcp, argvp, j, 1); --j; } else if (!strcmp((*argvp)[j], "--file")) { if (++count_includes > limit_includes) { handle_leaks(); dlg_exiterr("Too many --file options"); } if ((filename = (*argvp)[j + 1]) != 0) { FILE *fp; char **list; - char *blob; - int added; - size_t bytes_read; - size_t length; - int n; if (*filename == '&') { fp = fdopen(atoi(filename + sizeof(char)), "r"); } else { fp = fopen(filename, "r"); } if (fp) { + char *blob; + int added; + size_t bytes_read; + size_t length; + int n; + DLG_TRACE(("# opened --file %s ..\n", filename)); blob = NULL; length = 0; do { blob = dlg_realloc(char, length + BUFSIZ + 1, blob); assert_ptr(blob, "unescape_argv"); bytes_read = fread(blob + length, sizeof(char), (size_t) BUFSIZ, fp); length += bytes_read; if (ferror(fp)) { handle_leaks(); dlg_exiterr("error on filehandle in unescape_argv"); } } while (bytes_read == BUFSIZ); fclose(fp); blob[length] = '\0'; ignore_leak(blob); list = dlg_string_to_argv(blob); added = dlg_count_argv(list); if (added > 2) { /* *argcp arguments before the expansion of --file - 2 for the removal of '--file <filepath>' + added for the arguments contained in <filepath> + 1 for the terminating NULL pointer */ size_t need = (size_t) (*argcp + added - 1); if (doalloc) { *argvp = dlg_realloc(char *, need, *argvp); assert_ptr(*argvp, "unescape_argv"); } else { char **newp = dlg_malloc(char *, need); ignore_leak(newp); assert_ptr(newp, "unescape_argv"); for (n = 0; n < *argcp; ++n) { newp[n] = (*argvp)[n]; } /* The new array is not NULL-terminated yet. */ *argvp = newp; doalloc = TRUE; } my_argv = dlg_realloc(const char *, need, my_argv); assert_ptr(my_argv, "unescape_argv"); /* Shift the arguments after '--file <filepath>' right by (added - 2) positions */ for (n = *argcp - 1; n >= j + 2; --n) { (*argvp)[n + added - 2] = (*argvp)[n]; } } else if (added < 2) { /* 0 or 1 argument read from the included file -> shift the arguments after '--file <filepath>' left by (2 - added) positions */ for (n = j + added; n + 2 - added < *argcp; ++n) { (*argvp)[n] = (*argvp)[n + 2 - added]; } } /* Copy the inserted arguments to *argvp */ for (n = 0; n < added; ++n) { (*argvp)[n + j] = list[n]; } *argcp += added - 2; (*argvp)[*argcp] = 0; /* Write the NULL terminator */ free(list); /* No-op if 'list' is NULL */ /* Force rescan starting from the first inserted argument */ --j; DLG_TRACE(("# finished --file\n")); continue; } else { handle_leaks(); dlg_exiterr("Cannot open --file %s", filename); } } else { handle_leaks(); dlg_exiterr("No value given for --file"); } } if (!escaped && (*argvp)[j] != 0 && !strncmp((*argvp)[j], "--", (size_t) 2) && isalpha(UCH((*argvp)[j][2]))) { my_argv[my_argc++] = (*argvp)[j]; DLG_TRACE(("#\toption argv[%d]=%s\n", j, (*argvp)[j])); } } my_argv[my_argc] = 0; known_opts = my_argc; dialog_opts = my_argv; DLG_TRACE(("#\t%d options vs %d arguments\n", known_opts, *argcp)); dialog_argv = (*argvp); } -static eOptions -lookupOption(const char *name, int pass) +static const Options * +findOption(const char *name, int pass, bool recur) { - unsigned n; - eOptions result = o_unknown; + const Options *result = NULL; - if (isOption(name)) { - name += 2; - for (n = 0; n < sizeof(options) / sizeof(options[0]); n++) { + if (!strncmp(name, "--", 2) && isalpha(UCH(name[2]))) { + unsigned n; + + name += 2; /* skip the "--" */ + for (n = 0; n < TableSize(options); n++) { if ((pass & options[n].pass) != 0 && !strcmp(name, options[n].name)) { - result = options[n].code; + result = &options[n]; break; } } + if (result == NULL && !recur) { + char *temp = malloc(8 + strlen(name)); + if (temp != NULL) { + if (!strncmp(name, "no", 2)) { + int skip = !strncmp(name, "no-", 3) ? 3 : 2; + sprintf(temp, "--no-%s", name + skip); + result = findOption(temp, pass, TRUE); + if (result == NULL) { + sprintf(temp, "--%s", name + skip); + result = findOption(temp, pass, TRUE); + } + } + if (result == NULL && strncmp(name, "no", 2)) { + sprintf(temp, "--no-%s", name); + result = findOption(temp, pass, TRUE); + } + free(temp); + } + } + } + return result; +} + +static eOptions +lookupOption(const char *name, int pass) +{ + eOptions result = o_unknown; + const Options *data = findOption(name, pass, FALSE); + if (data != NULL) { + result = data->code; } return result; } static void Usage(const char *msg) { handle_leaks(); - dlg_exiterr("Error: %s.\nUse --help to list options.\n\n", msg); + dlg_exiterr("%s.\nUse --help to list options.\n\n", msg); } /* * Count arguments, stopping at the end of the argument list, or on any of our * "--" tokens. */ static int arg_rest(char *argv[]) { int i = 1; /* argv[0] points to a "--" token */ while (argv[i] != 0 && (!isOption(argv[i]) || lookupOption(argv[i], 7) == o_unknown)) i++; return i; } /* * In MultiWidget this function is needed to count how many tags * a widget (menu, checklist, radiolist) has */ static int howmany_tags(char *argv[], int group) { int result = 0; - int have; char temp[80]; while (argv[0] != 0) { + int have; + if (isOption(argv[0])) break; if ((have = arg_rest(argv)) < group) { const char *format = _("Expected %d arguments, found only %d"); sprintf(temp, format, group, have); Usage(temp); } else if ((have % group) != 0) { const char *format = _("Expected %d arguments, found extra %d"); sprintf(temp, format, group, (have % group)); Usage(temp); } argv += have; result += (have / group); } return result; } static int numeric_arg(char **av, int n) { int result = 0; if (n < dlg_count_argv(av)) { - char msg[80]; char *last = 0; result = (int) strtol(av[n], &last, 10); if (last == 0 || *last != 0) { + char msg[80]; + sprintf(msg, "Expected a number for token %d of %.20s", n, av[0]); Usage(msg); } } return result; } static char * optional_str(char **av, int n, char *dft) { char *ret = dft; if (arg_rest(av) > n) ret = av[n]; return ret; } #if defined(HAVE_DLG_GAUGE) || defined(HAVE_XDIALOG) static int optional_num(char **av, int n, int dft) { int ret = dft; if (arg_rest(av) > n) ret = numeric_arg(av, n); return ret; } #endif /* * On AIX 4.x, we have to flush the output right away since there is a bug in * the curses package which discards stdout even when we've used newterm to * redirect output to /dev/tty. */ static int show_result(int ret) { bool either = FALSE; switch (ret) { case DLG_EXIT_OK: case DLG_EXIT_EXTRA: case DLG_EXIT_HELP: case DLG_EXIT_ITEM_HELP: if ((dialog_state.output_count > 1) && !dialog_vars.separate_output) { fputs((dialog_state.separate_str ? dialog_state.separate_str : DEFAULT_SEPARATE_STR), dialog_state.output); either = TRUE; } if (dialog_vars.input_result != 0 && dialog_vars.input_result[0] != '\0') { fputs(dialog_vars.input_result, dialog_state.output); DLG_TRACE(("# input_result:\n%s\n", dialog_vars.input_result)); either = TRUE; } if (either) { fflush(dialog_state.output); } break; } return ret; } /* * These are the widget callers. */ static int call_yesno(CALLARGS) { *offset_add = 4; return dialog_yesno(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3)); } static int call_msgbox(CALLARGS) { *offset_add = 4; return dialog_msgbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), 1); } static int call_infobox(CALLARGS) { *offset_add = 4; return dialog_msgbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), 0); } static int call_textbox(CALLARGS) { *offset_add = 4; return dialog_textbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3)); } static int call_menu(CALLARGS) { int tags = howmany_tags(av + 5, MENUBOX_TAGS); *offset_add = 5 + tags * MENUBOX_TAGS; return dialog_menu(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5); } static int call_inputmenu(CALLARGS) { int tags = howmany_tags(av + 5, MENUBOX_TAGS); bool free_extra_label = FALSE; int result; dialog_vars.input_menu = TRUE; if (dialog_vars.max_input == 0) dialog_vars.max_input = MAX_LEN / 2; if (dialog_vars.extra_label == 0) { free_extra_label = TRUE; dialog_vars.extra_label = dlg_strclone(_("Rename")); } dialog_vars.extra_button = TRUE; *offset_add = 5 + tags * MENUBOX_TAGS; result = dialog_menu(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5); if (free_extra_label) { free(dialog_vars.extra_label); dialog_vars.extra_label = 0; } return result; } static int call_checklist(CALLARGS) { int tags = howmany_tags(av + 5, CHECKBOX_TAGS); int code; *offset_add = 5 + tags * CHECKBOX_TAGS; code = dialog_checklist(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5, FLAG_CHECK); return code; } static int call_radiolist(CALLARGS) { int tags = howmany_tags(av + 5, CHECKBOX_TAGS); *offset_add = 5 + tags * CHECKBOX_TAGS; return dialog_checklist(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5, FLAG_RADIO); } static int call_inputbox(CALLARGS) { *offset_add = arg_rest(av); return dialog_inputbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), optional_str(av, 4, 0), 0); } static int call_passwordbox(CALLARGS) { *offset_add = arg_rest(av); return dialog_inputbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), optional_str(av, 4, 0), 1); } #ifdef HAVE_XDIALOG static int call_calendar(CALLARGS) { *offset_add = arg_rest(av); return dialog_calendar(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), optional_num(av, 4, -1), optional_num(av, 5, -1), optional_num(av, 6, -1)); } static int call_dselect(CALLARGS) { *offset_add = arg_rest(av); return dialog_dselect(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3)); } static int call_editbox(CALLARGS) { *offset_add = 4; return dialog_editbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3)); } static int call_fselect(CALLARGS) { *offset_add = arg_rest(av); return dialog_fselect(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3)); } static int call_timebox(CALLARGS) { *offset_add = arg_rest(av); return dialog_timebox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), optional_num(av, 4, -1), optional_num(av, 5, -1), optional_num(av, 6, -1)); } #endif /* HAVE_XDIALOG */ /* dialog 1.2 widgets */ #ifdef HAVE_XDIALOG2 #define DisableNoTags() \ bool save_no_tags = dialog_vars.no_tags; \ bool save_no_items = dialog_vars.no_items; \ dialog_vars.no_tags = TRUE; \ dialog_vars.no_items = FALSE #define RestoreNoTags() \ dialog_vars.no_tags = save_no_tags; \ dialog_vars.no_items = save_no_items static int call_buildlist(CALLARGS) { int tags = howmany_tags(av + 5, CHECKBOX_TAGS); int result; DisableNoTags(); *offset_add = 5 + tags * CHECKBOX_TAGS; result = dialog_buildlist(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5, dialog_vars.reorder); RestoreNoTags(); return result; } static int call_rangebox(CALLARGS) { int min_value; *offset_add = arg_rest(av); min_value = numeric_arg(av, 4); return dialog_rangebox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), min_value, numeric_arg(av, 5), (*offset_add > 6) ? numeric_arg(av, 6) : min_value); } static int call_treeview(CALLARGS) { int tags = howmany_tags(av + 5, TREEVIEW_TAGS); int result; DisableNoTags(); *offset_add = arg_rest(av); result = dialog_treeview(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5, FLAG_RADIO); RestoreNoTags(); return result; } #endif /* HAVE_XDIALOG */ #ifdef HAVE_DLG_FORMBOX static int call_form(CALLARGS) { int group = FORMBOX_TAGS; int tags = howmany_tags(av + 5, group); *offset_add = 5 + tags * group; return dialog_form(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5); } static int call_password_form(CALLARGS) { unsigned save = dialog_vars.formitem_type; int result; dialog_vars.formitem_type = 1; result = call_form(PASSARGS); dialog_vars.formitem_type = save; return result; } #endif /* HAVE_DLG_FORMBOX */ #ifdef HAVE_DLG_MIXEDFORM static int call_mixed_form(CALLARGS) { int group = MIXEDFORM_TAGS; int tags = howmany_tags(av + 5, group); *offset_add = 5 + tags * group; return dialog_mixedform(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + 5); } #endif /* HAVE_DLG_MIXEDFORM */ #ifdef HAVE_DLG_GAUGE static int call_gauge(CALLARGS) { *offset_add = arg_rest(av); return dialog_gauge(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), optional_num(av, 4, 0)); } static int call_pause(CALLARGS) { *offset_add = arg_rest(av); return dialog_pause(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4)); } #endif #ifdef HAVE_MIXEDGAUGE static int call_mixed_gauge(CALLARGS) { #define MIXEDGAUGE_BASE 5 int tags = howmany_tags(av + MIXEDGAUGE_BASE, MIXEDGAUGE_TAGS); *offset_add = MIXEDGAUGE_BASE + tags * MIXEDGAUGE_TAGS; return dialog_mixedgauge(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), numeric_arg(av, 4), tags, av + MIXEDGAUGE_BASE); } #endif #ifdef HAVE_DLG_GAUGE static int call_prgbox(CALLARGS) { *offset_add = arg_rest(av); /* the original version does not accept a prompt string, but for * consistency we allow it. */ return ((*offset_add == 5) ? dialog_prgbox(t, av[1], av[2], numeric_arg(av, 3), numeric_arg(av, 4), TRUE) : dialog_prgbox(t, "", av[1], numeric_arg(av, 2), numeric_arg(av, 3), TRUE)); } #endif #ifdef HAVE_DLG_GAUGE static int call_programbox(CALLARGS) { int result; *offset_add = arg_rest(av); /* this function is a compromise between --prgbox and --progressbox. */ result = ((*offset_add == 4) ? dlg_progressbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), TRUE, dialog_state.pipe_input) : dlg_progressbox(t, "", numeric_arg(av, 1), numeric_arg(av, 2), TRUE, dialog_state.pipe_input)); dialog_state.pipe_input = 0; return result; } #endif #ifdef HAVE_DLG_GAUGE static int call_progressbox(CALLARGS) { *offset_add = arg_rest(av); /* the original version does not accept a prompt string, but for * consistency we allow it. */ return ((*offset_add == 4) ? dialog_progressbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3)) : dialog_progressbox(t, "", numeric_arg(av, 1), numeric_arg(av, 2))); } #endif #ifdef HAVE_DLG_TAILBOX static int call_tailbox(CALLARGS) { *offset_add = 4; return dialog_tailbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), FALSE); } static int call_tailboxbg(CALLARGS) { *offset_add = 4; return dialog_tailbox(t, av[1], numeric_arg(av, 2), numeric_arg(av, 3), TRUE); } #endif /* *INDENT-OFF* */ static const Mode modes[] = { {o_yesno, 4, 4, call_yesno}, {o_msgbox, 4, 4, call_msgbox}, {o_infobox, 4, 4, call_infobox}, {o_textbox, 4, 4, call_textbox}, {o_menu, 6, 0, call_menu}, {o_inputmenu, 6, 0, call_inputmenu}, {o_checklist, 7, 0, call_checklist}, {o_radiolist, 7, 0, call_radiolist}, {o_inputbox, 4, 5, call_inputbox}, {o_passwordbox, 4, 5, call_passwordbox}, #ifdef HAVE_DLG_GAUGE {o_gauge, 4, 5, call_gauge}, {o_pause, 5, 5, call_pause}, {o_prgbox, 4, 5, call_prgbox}, {o_programbox, 3, 4, call_programbox}, {o_progressbox, 3, 4, call_progressbox}, #endif #ifdef HAVE_DLG_FORMBOX {o_passwordform, 13, 0, call_password_form}, {o_form, 13, 0, call_form}, #endif #ifdef HAVE_MIXEDGAUGE {o_mixedgauge, MIXEDGAUGE_BASE, 0, call_mixed_gauge}, #endif #ifdef HAVE_DLG_MIXEDFORM {o_mixedform, 13, 0, call_mixed_form}, #endif #ifdef HAVE_DLG_TAILBOX {o_tailbox, 4, 4, call_tailbox}, {o_tailboxbg, 4, 4, call_tailboxbg}, #endif #ifdef HAVE_XDIALOG {o_calendar, 4, 7, call_calendar}, {o_dselect, 4, 5, call_dselect}, {o_editbox, 4, 4, call_editbox}, {o_fselect, 4, 5, call_fselect}, {o_timebox, 4, 7, call_timebox}, #endif #ifdef HAVE_XDIALOG2 {o_buildlist, 4, 0, call_buildlist}, {o_rangebox, 5, 7, call_rangebox}, {o_treeview, 4, 0, call_treeview}, #endif }; /* *INDENT-ON* */ static char * optionString(char **argv, int *num) { int next = *num + 1; char *result = argv[next]; if (result == 0) { char temp[80]; sprintf(temp, "Expected a string-parameter for %.20s", argv[*num]); Usage(temp); } *num = next; return result; } static int optionValue(char **argv, int *num) { int next = *num + 1; char *src = argv[next]; char *tmp = 0; int result = 0; if (src != 0) { result = (int) strtol(src, &tmp, 0); if (tmp == 0 || *tmp != 0) src = 0; } if (src == 0) { char temp[80]; sprintf(temp, "Expected a numeric-parameter for %.20s", argv[*num]); Usage(temp); } *num = next; return result; } +/* + * In findOption, we made provision for adding/removing a "no" prefix from + * any boolean option. This function determines the actual true/false result. + */ +static bool +optionBool(const char *actual, const Options * data) +{ + bool normal = (data->type == tTrue) ? TRUE : FALSE; + bool result = !strcmp(actual + 2, data->name) ? normal : !normal; + if (result != normal) { + int want_no = (strncmp(actual + 2, "no", 2) == 0); + int have_no = (strncmp(data->name, "no", 2) == 0); + if (have_no == want_no) + result = normal; + } + return result; +} + /* Return exit-code for a named button */ static int button_code(const char *name) { /* *INDENT-OFF* */ static struct { const char *name; int code; } table[] = { { "ok", DLG_EXIT_OK }, { "yes", DLG_EXIT_OK }, { "cancel", DLG_EXIT_CANCEL }, { "no", DLG_EXIT_CANCEL }, { "help", DLG_EXIT_HELP }, { "extra", DLG_EXIT_EXTRA }, }; /* *INDENT-ON* */ int code = DLG_EXIT_ERROR; size_t i; - for (i = 0; i < (sizeof(table) / sizeof(table[0])); i++) { + for (i = 0; i < TableSize(table); i++) { if (!dlg_strcmp(name, table[i].name)) { code = table[i].code; break; } } if (code == DLG_EXIT_ERROR) { char temp[80]; sprintf(temp, "Button name \"%.20s\" unknown", name); Usage(temp); } return code; } /* * If this is the last option, we do not want any error messages - just our * output. Calling end_dialog() cancels the refresh() at the end of the * program as well. */ static void IgnoreNonScreen(char **argv, int offset) { if (argv[offset + 1] == 0) { ignore_unknown = TRUE; end_dialog(); } } static void PrintTextOnly(char **argv, int *offset, eOptions code) { /* TODO - handle two optional numeric params */ char *text; int height = 0; int width = 0; int height2 = 0; int width2 = 0; int next = arg_rest(argv + *offset); - if (LINES <= 0 && COLS <= 0) - dlg_ttysize(fileno(dialog_state.input), &LINES, &COLS); + if (LINES <= 0 && COLS <= 0) { + dlg_ttysize(fileno(dialog_state.input), + &dialog_state.screen_height, + &dialog_state.screen_width); + } text = strdup(optionString(argv, offset)); IgnoreNonScreen(argv, *offset); if (next >= 1) { next = MIN(next, 3); height = numeric_arg(argv, *offset + 1); if (next >= 2) width = numeric_arg(argv, *offset + 2); *offset += next - 1; } dlg_trim_string(text); dlg_auto_size(NULL, text, &height2, &width2, height, width); switch (code) { - case o_print_text_only: + case o_text_only: dialog_state.text_only = TRUE; dlg_print_autowrap(stdscr, text, height2, width2); dialog_state.text_only = FALSE; break; case o_print_text_size: fprintf(dialog_state.output, "%d %d\n", dialog_state.text_height, dialog_state.text_width); break; default: break; } } /* * Print parts of a message */ static void PrintList(const char *const *list) { const char *leaf = strrchr(program, '/'); unsigned n = 0; if (leaf != 0) leaf++; else leaf = program; while (*list != 0) { fprintf(dialog_state.output, *list, n ? leaf : dialog_version()); (void) fputc('\n', dialog_state.output); n = 1; list++; } } static const Mode * lookupMode(eOptions code) { const Mode *modePtr = 0; unsigned n; - for (n = 0; n < sizeof(modes) / sizeof(modes[0]); n++) { + for (n = 0; n < TableSize(modes); n++) { if (modes[n].code == code) { modePtr = &modes[n]; break; } } return modePtr; } static int compare_opts(const void *a, const void *b) { Options *const *p = (Options * const *) a; Options *const *q = (Options * const *) b; return strcmp((*p)->name, (*q)->name); } /* * Print program's version. */ static void PrintVersion(FILE *fp) { fprintf(fp, "Version: %s\n", dialog_version()); } /* * Print program help-message */ static void Help(void) { static const char *const tbl_1[] = { "cdialog (ComeOn Dialog!) version %s", - "Copyright 2000-2017,2018 Thomas E. Dickey", + "Copyright 2000-2020,2021 Thomas E. Dickey", "This is free software; see the source for copying conditions. There is NO", "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", "", "* Display dialog boxes from shell scripts *", "", "Usage: %s <options> { --and-widget <options> }", "where options are \"common\" options, followed by \"box\" options", "", #ifdef HAVE_RC_FILE "Special options:", " [--create-rc \"file\"]", #endif 0 }, *const tbl_3[] = { "", "Auto-size with height and width = 0. Maximize with height and width = -1.", "Global-auto-size if also menu_height/list_height = 0.", 0 }; - size_t limit = sizeof(options) / sizeof(options[0]); + size_t limit = TableSize(options); size_t j, k; const Options **opts; end_dialog(); dialog_state.output = stdout; opts = dlg_calloc(const Options *, limit); assert_ptr(opts, "Help"); for (j = 0; j < limit; ++j) { opts[j] = &(options[j]); } qsort(opts, limit, sizeof(Options *), compare_opts); PrintList(tbl_1); fprintf(dialog_state.output, "Common options:\n "); for (j = k = 0; j < limit; j++) { if ((opts[j]->pass & 1) && opts[j]->help != 0) { size_t len = 6 + strlen(opts[j]->name) + strlen(opts[j]->help); k += len; if (k > 75) { fprintf(dialog_state.output, "\n "); k = len; } fprintf(dialog_state.output, " [--%s%s%s]", opts[j]->name, *(opts[j]->help) ? " " : "", opts[j]->help); } } fprintf(dialog_state.output, "\nBox options:\n"); for (j = 0; j < limit; j++) { if ((opts[j]->pass & 2) != 0 && opts[j]->help != 0 && lookupMode(opts[j]->code)) { fprintf(dialog_state.output, " --%-12s %s\n", opts[j]->name, opts[j]->help); } } PrintList(tbl_3); free(opts); handle_leaks(); dlg_exit(DLG_EXIT_OK); } #ifdef HAVE_DLG_TRACE /* * Only the first call to dlg_trace will open a trace file. But each time * --trace is parsed, we show the whole parameter list as it is at that moment, * counting discarded parameters. The only way to capture the whole parameter * list is if --trace is the first option. */ static void process_trace_option(char **argv, int *offset) { int j; if (dialog_state.trace_output == 0) { dlg_trace(optionString(argv, offset)); } else { DLG_TRACE(("# ignore extra --trace option\n")); *offset += 1; } DLG_TRACE(("# Parameters:\n")); for (j = 0; argv[j] != 0; ++j) { DLG_TRACE(("#\targv[%d] = %s\n", j, argv[j])); } } #endif /* * "Common" options apply to all widgets more/less. Most of the common options * set values in dialog_vars, a few set dialog_state and a couple write to the * output stream. */ static int -process_common_options(int argc, char **argv, int offset, bool output) +process_common_options(int argc, char **argv, int offset, int output) { + const Options *data = NULL; bool done = FALSE; - eOptions code; - DLG_TRACE(("# process_common_options, offset %d\n", offset)); + DLG_TRACE(("# process_common_options, offset %d:%d\n", offset, argc)); + + while (!done && offset < argc) { + static char empty[] = ""; + eOptions code = o_unknown; + char *sval = empty; + bool bval; + int nval; + char *target; - while (offset < argc && !done) { /* Common options */ DLG_TRACE(("#\targv[%d] = %s\n", offset, argv[offset])); - switch (code = lookupOption(argv[offset], 1)) { - case o_title: - dialog_vars.title = optionString(argv, &offset); - break; - case o_backtitle: - dialog_vars.backtitle = optionString(argv, &offset); - break; - case o_separate_widget: - dialog_state.separate_str = optionString(argv, &offset); - break; - case o_separate_output: - dialog_vars.separate_output = TRUE; - break; - case o_colors: - dialog_vars.colors = TRUE; - break; - case o_cr_wrap: - dialog_vars.cr_wrap = TRUE; - break; - case o_no_nl_expand: - dialog_vars.no_nl_expand = TRUE; - break; - case o_no_collapse: - dialog_vars.nocollapse = TRUE; - break; - case o_no_kill: - dialog_vars.cant_kill = TRUE; - break; - case o_nocancel: - dialog_vars.nocancel = TRUE; - break; - case o_nook: - dialog_vars.nook = TRUE; - break; - case o_quoted: - dialog_vars.quoted = TRUE; + if ((data = findOption(argv[offset], 1, FALSE)) == NULL) { + done = TRUE; + continue; + } + + switch (data->vars) { + default: + target = NULL; break; - case o_single_quoted: - dialog_vars.single_quoted = TRUE; + case 1: + target = (char *) &dialog_state; break; - case o_size_err: - dialog_vars.size_err = TRUE; + case 2: + target = (char *) &dialog_vars; break; - case o_beep: - dialog_vars.beep_signal = TRUE; + } + +#define TraceTarget \ + ((target == (char *) &dialog_state) \ + ? "dialog_state" \ + : "dialog_vars") +#define TraceBVal (bval ? "TRUE" : "FALSE") +#define TraceDone(fmt,value) \ + DLG_TRACE(("#\t.. set %s.%s = %"fmt"\n", TraceTarget, data->name, value)) +#define TraceLate(fmt,value) \ + DLG_TRACE(("#\t.. defer setting %s = %"fmt"\n", data->name, value)) + + code = data->code; + switch (data->type) { + default: break; - case o_beep_after: - dialog_vars.beep_after_signal = TRUE; + case tFalse: + case tTrue: + bval = optionBool(argv[offset], data); + if (target != NULL) { + *(bool *) (target + data->offset) = bval; + TraceDone("s", TraceBVal); + } else { + TraceLate("s", TraceBVal); + } break; - case o_scrollbar: - dialog_state.use_scrollbar = TRUE; + case tNumber: + nval = optionValue(argv, &offset); + if (target != NULL) { + *(int *) (void *) (target + data->offset) = nval; + TraceDone("d", nval); + } else { + TraceLate("d", nval); + } break; - case o_shadow: - dialog_state.use_shadow = TRUE; + case tString: + sval = optionString(argv, &offset); + if (target != NULL) { + *(char **) (void *) (target + data->offset) = sval; + TraceDone("s", sval); + } else { + TraceLate("s", sval); + } break; + } + + switch (code) { case o_defaultno: - dialog_vars.defaultno = TRUE; dialog_vars.default_button = DLG_EXIT_CANCEL; break; case o_default_button: - dialog_vars.default_button = button_code(optionString(argv, &offset)); + dialog_vars.default_button = button_code(sval); dialog_vars.defaultno = dialog_vars.default_button == DLG_EXIT_CANCEL; break; - case o_default_item: - dialog_vars.default_item = optionString(argv, &offset); - break; - case o_insecure: - dialog_vars.insecure = TRUE; - break; - case o_item_help: - dialog_vars.item_help = TRUE; - break; - case o_help_line: - dialog_vars.help_line = optionString(argv, &offset); - break; - case o_help_file: - dialog_vars.help_file = optionString(argv, &offset); - break; - case o_help_button: - dialog_vars.help_button = TRUE; - break; - case o_help_status: - dialog_vars.help_status = TRUE; - break; - case o_help_tags: - dialog_vars.help_tags = TRUE; - break; - case o_extra_button: - dialog_vars.extra_button = TRUE; - break; - case o_ignore: - ignore_unknown = TRUE; - break; - case o_keep_window: - dialog_vars.keep_window = TRUE; - break; - case o_last_key: - dialog_vars.last_key = TRUE; - break; - case o_no_shadow: - dialog_state.use_shadow = FALSE; - break; - case o_print_size: - dialog_vars.print_siz = TRUE; - break; - case o_print_text_only: + case o_text_only: case o_print_text_size: PrintTextOnly(argv, &offset, code); break; case o_print_maxsize: if (output) { IgnoreNonScreen(argv, offset); fflush(dialog_state.output); fprintf(dialog_state.output, "MaxSize: %d, %d\n", SLINES, SCOLS); } break; case o_print_version: if (output) { PrintVersion(dialog_state.output); } break; - case o_separator: - case o_output_separator: - dialog_vars.output_separator = optionString(argv, &offset); - break; - case o_column_separator: - dialog_vars.column_separator = optionString(argv, &offset); - break; - case o_tab_correct: - dialog_vars.tab_correct = TRUE; - break; - case o_sleep: - dialog_vars.sleep_secs = optionValue(argv, &offset); - break; - case o_timeout: - dialog_vars.timeout_secs = optionValue(argv, &offset); - break; - case o_max_input: - dialog_vars.max_input = optionValue(argv, &offset); - break; - case o_tab_len: - dialog_state.tab_len = optionValue(argv, &offset); - break; - case o_trim: - dialog_vars.trim_whitespace = TRUE; - break; case o_visit_items: - dialog_state.visit_items = TRUE; dialog_state.visit_cols = 1; break; - case o_aspect: - dialog_state.aspect_ratio = optionValue(argv, &offset); - break; - case o_begin: - dialog_vars.begin_set = TRUE; - dialog_vars.begin_y = optionValue(argv, &offset); - dialog_vars.begin_x = optionValue(argv, &offset); - break; - case o_clear: - dialog_vars.dlg_clear_screen = TRUE; - break; - case o_yes_label: - dialog_vars.yes_label = optionString(argv, &offset); - break; - case o_no_label: - dialog_vars.no_label = optionString(argv, &offset); - break; - case o_ok_label: - dialog_vars.ok_label = optionString(argv, &offset); - break; - case o_cancel_label: - dialog_vars.cancel_label = optionString(argv, &offset); - break; - case o_extra_label: - dialog_vars.extra_label = optionString(argv, &offset); - break; - case o_exit_label: - dialog_vars.exit_label = optionString(argv, &offset); - break; - case o_help_label: - dialog_vars.help_label = optionString(argv, &offset); - break; - case o_date_format: - dialog_vars.date_format = optionString(argv, &offset); - break; - case o_time_format: - dialog_vars.time_format = optionString(argv, &offset); - break; - case o_keep_tite: - dialog_vars.keep_tite = TRUE; + case o_begin_set: +#ifdef HAVE_WHIPTAIL + if (!strcmp(argv[offset], "--topleft")) { + dialog_vars.begin_y = 0; + dialog_vars.begin_x = 0; + } else +#endif + { + dialog_vars.begin_y = optionValue(argv, &offset); + dialog_vars.begin_x = optionValue(argv, &offset); + } break; case o_ascii_lines: - dialog_vars.ascii_lines = TRUE; dialog_vars.no_lines = FALSE; break; case o_no_lines: - dialog_vars.no_lines = TRUE; dialog_vars.ascii_lines = FALSE; break; case o_no_mouse: - dialog_state.no_mouse = TRUE; mouse_close(); break; -#ifdef HAVE_WHIPTAIL - case o_topleft: - dialog_vars.begin_set = TRUE; - dialog_vars.begin_y = 0; - dialog_vars.begin_x = 0; - break; - case o_fullbutton: - /* ignore */ - break; -#endif - /* options of Xdialog which we ignore */ - case o_icon: - case o_wmclass: - (void) optionString(argv, &offset); - /* FALLTHRU */ - case o_allow_close: - case o_auto_placement: - case o_fixed_font: - case o_keep_colors: - case o_no_close: - case o_no_cr_wrap: - case o_screen_center: - case o_smooth: - case o_under_mouse: - break; case o_unknown: - if (ignore_unknown) - break; - /* FALLTHRU */ - default: /* no more common options */ - done = TRUE; + done = !ignore_unknown; + default: break; #ifdef HAVE_DLG_TRACE case o_trace: process_trace_option(argv, &offset); break; -#endif -#if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL) - case o_no_items: - dialog_vars.no_items = TRUE; - break; - case o_no_tags: - dialog_vars.no_tags = TRUE; - break; -#endif -#ifdef HAVE_XDIALOG2 - case o_reorder: - dialog_vars.reorder = TRUE; - break; -#endif -#ifdef HAVE_XDIALOG - case o_week_start: - dialog_vars.week_start = optionString(argv, &offset); - break; #endif case o_iso_week: - dialog_vars.iso_week = TRUE; if (dialog_vars.week_start == 0) { /* Monday is implied */ static char default_1st[] = "1"; dialog_vars.week_start = default_1st; } break; } if (!done) offset++; } if (dialog_state.aspect_ratio == 0) dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO; return offset; } /* * Initialize options at the start of a series of common options culminating * in a widget. */ static void init_result(char *buffer) { static bool first = TRUE; DLG_TRACE(("# init_result\n")); /* clear everything we do not save for the next widget */ memset(&dialog_vars, 0, sizeof(dialog_vars)); dialog_vars.input_result = buffer; dialog_vars.input_result[0] = '\0'; dialog_vars.default_button = -1; /* * The first time this is called, check for common options given by an * environment variable. */ if (first) { - char *env = getenv("DIALOGOPTS"); + char *env = dlg_getenv_str("DIALOGOPTS"); if (env != 0) env = dlg_strclone(env); if (env != 0) { special_argv = dlg_string_to_argv(env); special_argc = dlg_count_argv(special_argv); } first = FALSE; } if (special_argv != 0) { process_common_options(special_argc, special_argv, 0, FALSE); } } int main(int argc, char *argv[]) { char temp[256]; bool esc_pressed = FALSE; bool keep_tite = FALSE; - bool first_time = TRUE; + int initial = 1; int offset = 1; - int offset_add; + int offset_add = 0; int retval = DLG_EXIT_OK; - int j, have; + int j; eOptions code; - const Mode *modePtr; char my_buffer[MAX_LEN + 1]; memset(&dialog_state, 0, sizeof(dialog_state)); memset(&dialog_vars, 0, sizeof(dialog_vars)); #if defined(ENABLE_NLS) /* initialize locale support */ setlocale(LC_ALL, ""); bindtextdomain(NLS_TEXTDOMAIN, LOCALEDIR); textdomain(NLS_TEXTDOMAIN); #elif defined(HAVE_SETLOCALE) (void) setlocale(LC_ALL, ""); #endif init_result(my_buffer); /* honor $DIALOGOPTS */ unescape_argv(&argc, &argv); program = argv[0]; dialog_state.output = stderr; dialog_state.input = stdin; /* * Look for the last --stdout, --stderr or --output-fd option, and use * that. We can only write to one of them. If --stdout is used, that * can interfere with initializing the curses library, so we want to * know explicitly if it is used. * * Also, look for any --version or --help message, processing those * immediately. */ while (offset < argc) { int base = offset; switch (lookupOption(argv[offset], 7)) { - case o_stdout: + case o_output_stdout: dialog_state.output = stdout; break; - case o_stderr: + case o_output_stderr: dialog_state.output = stderr; break; case o_input_fd: if ((j = optionValue(argv, &offset)) < 0 || (dialog_state.input = fdopen(j, "r")) == 0) { handle_leaks(); dlg_exiterr("Cannot open input-fd\n"); } break; case o_output_fd: if ((j = optionValue(argv, &offset)) < 0 || (dialog_state.output = fdopen(j, "w")) == 0) { handle_leaks(); dlg_exiterr("Cannot open output-fd\n"); } break; case o_keep_tite: keep_tite = TRUE; break; case o_version: dialog_state.output = stdout; PrintVersion(dialog_state.output); dlg_exit(DLG_EXIT_OK); break; case o_help: Help(); break; #ifdef HAVE_DLG_TRACE case o_trace: /* * Process/remove the --trace option if it is the first option. * Otherwise, process it in more/less expected order as a * "common" option. */ if (base == 1) { process_trace_option(argv, &offset); break; } else { ++offset; continue; } #endif default: ++offset; continue; } DLG_TRACE(("# discarding %d parameters starting with argv[%d] (%s)\n", 1 + offset - base, base, argv[base])); for (j = base; j < argc; ++j) { dialog_argv[j] = dialog_argv[j + 1 + (offset - base)]; } argc -= (1 + offset - base); offset = base; } offset = 1; init_result(my_buffer); - dialog_vars.keep_tite = keep_tite; /* init_result() cleared global */ + dialog_vars.keep_tite |= keep_tite; /* init_result() cleared global */ /* * Dialog's output may be redirected (see above). Handle the special * case of options that only report information without interaction. */ if (argc == 2) { switch (code = lookupOption(argv[1], 7)) { case o_print_maxsize: (void) initscr(); endwin(); fflush(dialog_state.output); fprintf(dialog_state.output, "MaxSize: %d, %d\n", SLINES, SCOLS); break; case o_print_version: PrintVersion(dialog_state.output); break; - case o_clear: + case o_dlg_clear_screen: initscr(); refresh(); + dlg_keep_tite((dialog_state.output == stdout) ? stderr : stdout); endwin(); break; case o_ignore: break; default: Help(); break; } dlg_exit(DLG_EXIT_OK); } else if (argc < 2) { Help(); } #ifdef HAVE_RC_FILE else if (lookupOption(argv[1], 7) == o_create_rc) { if (argc != 3) { sprintf(temp, "Expected a filename for %.50s", argv[1]); Usage(temp); } if (dlg_parse_rc() == -1) { /* Read the configuration file */ handle_leaks(); dlg_exiterr("dialog: dlg_parse_rc"); } dlg_create_rc(argv[2]); dlg_exit(DLG_EXIT_OK); } #endif else { /* * Handle combinations of common options including --print-text-only * which can be done before involving curses, in case we can exit * without initializing curses (and writing to the terminal). */ - offset = process_common_options(argc, argv, offset, TRUE); - if (offset >= argc) + initial = process_common_options(argc, argv, offset, TRUE); + if (initial >= argc) dlg_exit(DLG_EXIT_OK); } init_dialog(dialog_state.input, dialog_state.output); while (offset < argc && !esc_pressed) { - if (first_time) { - first_time = FALSE; - } else { - init_result(my_buffer); - offset = process_common_options(argc, argv, offset, TRUE); - } + int have; + const Mode *modePtr; + + init_result(my_buffer); + offset = process_common_options(argc, argv, offset, offset > initial); if (argv[offset] == NULL) { if (ignore_unknown) break; Usage("Expected a box option"); } if (dialog_vars.separate_output) { switch (lookupOption(argv[offset], 2)) { #ifdef HAVE_XDIALOG2 case o_buildlist: case o_treeview: #endif case o_checklist: break; default: sprintf(temp, "Unexpected widget with --separate-output %.20s", argv[offset]); Usage(temp); } } dlg_put_backtitle(); /* use a table to look for the requested mode, to avoid code duplication */ modePtr = 0; if ((code = lookupOption(argv[offset], 2)) != o_unknown) modePtr = lookupMode(code); if (modePtr == 0) { sprintf(temp, "%s option %.20s", lookupOption(argv[offset], 7) != o_unknown ? "Unexpected" : "Unknown", argv[offset]); Usage(temp); } have = arg_rest(&argv[offset]); if (have < modePtr->argmin) { sprintf(temp, "Expected at least %d tokens for %.20s, have %d", modePtr->argmin - 1, argv[offset], have - 1); Usage(temp); } if (modePtr->argmax && have > modePtr->argmax) { sprintf(temp, "Expected no more than %d tokens for %.20s, have %d", modePtr->argmax - 1, argv[offset], have - 1); Usage(temp); } /* * Trim whitespace from non-title option values, e.g., the ones that * will be used as captions or prompts. Do that only for the widget * we are about to process, since the "--trim" option is reset before * accumulating options for each widget. */ for (j = offset + 1; j <= offset + have; j++) { switch (lookupOption(argv[j - 1], 7)) { case o_unknown: case o_title: case o_backtitle: case o_help_line: case o_help_file: break; default: if (argv[j] != 0) { char *argv_j = strdup(argv[j]); if (argv_j != 0) { dlg_trim_string(argv_j); argv[j] = argv_j; } else { argv[j] = strdup("?"); } ignore_leak(argv[j]); } break; } } DLG_TRACE(("# execute %s\n", argv[offset])); retval = show_result((*(modePtr->jumper)) (dialog_vars.title, argv + offset, &offset_add)); DLG_TRACE(("# widget returns %d\n", retval)); offset += offset_add; if (dialog_vars.input_result != my_buffer) { free(dialog_vars.input_result); dialog_vars.input_result = 0; } if (retval == DLG_EXIT_ESC) { esc_pressed = TRUE; } else { if (dialog_vars.beep_after_signal) (void) beep(); if (dialog_vars.sleep_secs) (void) napms(dialog_vars.sleep_secs * 1000); if (offset < argc) { switch (lookupOption(argv[offset], 7)) { case o_and_widget: offset++; break; case o_unknown: sprintf(temp, "Expected --and-widget, not %.20s", argv[offset]); Usage(temp); break; default: /* if we got a cancel, etc., stop chaining */ if (retval != DLG_EXIT_OK) esc_pressed = TRUE; else dialog_vars.dlg_clear_screen = TRUE; break; } } if (dialog_vars.dlg_clear_screen) dlg_clear(); } } dlg_killall_bg(&retval); if (dialog_state.screen_initialized) { (void) refresh(); end_dialog(); } handle_leaks(); dlg_exit(retval); } diff --git a/dialog.h b/dialog.h index 2746cd03328d..4ac3a4248ce5 100644 --- a/dialog.h +++ b/dialog.h @@ -1,950 +1,1002 @@ /* - * $Id: dialog.h,v 1.283 2018/06/19 22:52:11 tom Exp $ + * $Id: dialog.h,v 1.304 2021/01/17 16:58:22 tom Exp $ * * dialog.h -- common declarations for all dialog modules * - * Copyright 2000-2017,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #ifndef DIALOG_H_included #define DIALOG_H_included 1 /* *INDENT-OFF* */ #include <dlg_config.h> #ifdef __hpux #define __HP_CURSES_COMPAT /* workaround for getattrs, etc. */ #endif #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <ctype.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <signal.h> /* fork() etc. */ #include <math.h> /* sqrt() */ /* header conflict with Solaris xpg4 versus <sys/regset.h> */ #if defined(ERR) && (ERR == 13) #undef ERR #endif #if defined(HAVE_NCURSESW_NCURSES_H) #include <ncursesw/ncurses.h> #elif defined(HAVE_NCURSES_NCURSES_H) #include <ncurses/ncurses.h> #elif defined(HAVE_NCURSES_CURSES_H) #include <ncurses/curses.h> #elif defined(HAVE_NCURSES_H) #include <ncurses.h> #else #include <curses.h> #if defined(HAVE_UNCTRL_H) #include <unctrl.h> /* most curses.h headers include this, some do not */ #endif #endif /* Solaris xpg4 renames these */ #ifndef KEY_MAX #ifdef __KEY_MAX #define KEY_MAX __KEY_MAX #endif #endif #ifndef KEY_MIN #ifdef __KEY_MIN #define KEY_MIN __KEY_MIN #endif #endif /* possible conflicts with <term.h> which may be included in <curses.h> */ #ifdef color_names #undef color_names #endif #ifdef buttons #undef buttons #endif #ifdef ENABLE_NLS #include <libintl.h> #include <langinfo.h> #define _(s) dgettext(PACKAGE, s) #else #undef _ #define _(s) s #endif #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) /*nothing*/ #endif #ifndef GCC_NORETURN #define GCC_NORETURN /*nothing*/ #endif #ifndef GCC_UNUSED #define GCC_UNUSED /*nothing*/ #endif #ifndef HAVE_WGET_WCH #undef USE_WIDE_CURSES #endif /* * FIXME: a configure check would be useful */ #ifdef __hpux #undef ACS_UARROW #undef ACS_DARROW #undef ACS_BLOCK #endif /* * Change these if you want */ #define USE_SHADOW TRUE #define USE_COLORS TRUE +/* + * These allow using the print-formatting code before curses is initialized. + */ +#define DLG_COLS (COLS ? COLS : dialog_state.screen_width) +#define DLG_LINES (LINES ? LINES : dialog_state.screen_height) + +/* + * Define the usable size of a window, discounting the area needed for shadow. + */ #ifdef HAVE_COLOR -#define SCOLS (COLS - (dialog_state.use_shadow ? SHADOW_COLS : 0)) -#define SLINES (LINES - (dialog_state.use_shadow ? SHADOW_ROWS : 0)) +#define SCOLS (DLG_COLS - (dialog_state.use_shadow ? SHADOW_COLS : 0)) +#define SLINES (DLG_LINES - (dialog_state.use_shadow ? SHADOW_ROWS : 0)) #else #define SCOLS COLS #define SLINES LINES #endif +/* + * These are the default values for exit-codes, which can be overridden by + * environment variables, e.g., $DIALOG_CANCEL for DLG_EXIT_CANCEL. + */ #define DLG_EXIT_ESC 255 #define DLG_EXIT_UNKNOWN -2 /* never return this (internal use) */ #define DLG_EXIT_ERROR -1 /* the shell sees this as 255 */ #define DLG_EXIT_OK 0 #define DLG_EXIT_CANCEL 1 #define DLG_EXIT_HELP 2 #define DLG_EXIT_EXTRA 3 #define DLG_EXIT_ITEM_HELP 4 /* actually DLG_EXIT_HELP */ +#define DLG_EXIT_TIMEOUT 5 #define DLG_CTRL(n) ((n) & 0x1f) /* CTRL is preferred, but conflicts */ +#define CHR_LEAVE DLG_CTRL('D') #define CHR_HELP DLG_CTRL('E') #define CHR_BACKSPACE DLG_CTRL('H') #define CHR_REPAINT DLG_CTRL('L') -#define CHR_KILL DLG_CTRL('U') -#define CHR_LITERAL DLG_CTRL('V') -#define CHR_DELETE 127 #define CHR_NEXT DLG_CTRL('N') #define CHR_PREVIOUS DLG_CTRL('P') +#define CHR_KILL DLG_CTRL('U') #define CHR_TRACE DLG_CTRL('T') +#define CHR_LITERAL DLG_CTRL('V') #define CHR_SPACE ' ' +#define CHR_DELETE 127 #define ESC 27 #define TAB DLG_CTRL('I') #define MARGIN 1 /* width of the line drawn around each box */ #define GUTTER 2 /* minimum columns between name/description in menu */ #define SHADOW_ROWS 1 /* rows to reserve for window's shadow */ #define SHADOW_COLS 2 /* columns to reserve for window's shadow */ #define ARROWS_COL 5 /* distance from left margin to up/down arrows */ #define MAX_LEN 2048 #define BUF_SIZE (10L*1024) #undef MIN #define MIN(x,y) ((x) < (y) ? (x) : (y)) #undef MAX #define MAX(x,y) ((x) > (y) ? (x) : (y)) #define DEFAULT_SEPARATE_STR "\t" #define DEFAULT_ASPECT_RATIO 9 /* how many spaces is a tab long (default)? */ #define TAB_LEN 8 #define WTIMEOUT_VAL 10 /* minimum amount of time needed for curses */ +#define WTIMEOUT_OFF -1 /* value to disable timeout */ #ifndef A_CHARTEXT #define A_CHARTEXT 0xff #endif #define CharOf(ch) ((ch) & 0xff) #ifndef ACS_ULCORNER #define ACS_ULCORNER '+' #endif #ifndef ACS_LLCORNER #define ACS_LLCORNER '+' #endif #ifndef ACS_URCORNER #define ACS_URCORNER '+' #endif #ifndef ACS_LRCORNER #define ACS_LRCORNER '+' #endif #ifndef ACS_HLINE #define ACS_HLINE '-' #endif #ifndef ACS_VLINE #define ACS_VLINE '|' #endif #ifndef ACS_LTEE #define ACS_LTEE '+' #endif #ifndef ACS_RTEE #define ACS_RTEE '+' #endif #ifndef ACS_UARROW #define ACS_UARROW '^' #endif #ifndef ACS_DARROW #define ACS_DARROW 'v' #endif #ifndef ACS_BLOCK #define ACS_BLOCK '#' #endif /* these definitions may work for antique versions of curses */ #ifndef HAVE_GETBEGYX #undef getbegyx #define getbegyx(win,y,x) (y = (win)?(win)->_begy:ERR, x = (win)?(win)->_begx:ERR) #endif #ifndef HAVE_GETMAXYX #undef getmaxyx #define getmaxyx(win,y,x) (y = (win)?(win)->_maxy:ERR, x = (win)?(win)->_maxx:ERR) #endif #ifndef HAVE_GETPARYX #undef getparyx #define getparyx(win,y,x) (y = (win)?(win)->_pary:ERR, x = (win)?(win)->_parx:ERR) #endif #if !defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT) #undef wgetparent #define wgetparent(win) ((win) ? (win)->_parent : 0) #endif #if !defined(HAVE_WSYNCUP) #undef wsyncup #define wsyncup(win) /* nothing */ #endif #if !defined(HAVE_WCURSYNCUP) #undef wcursyncup #define wcursyncup(win) /* nothing */ #endif #ifdef __cplusplus extern "C" { #endif /* these definitions may be needed for bleeding-edge curses implementations */ #if !(defined(HAVE_GETBEGX) && defined(HAVE_GETBEGY)) #undef getbegx #undef getbegy #define getbegx(win) dlg_getbegx(win) #define getbegy(win) dlg_getbegy(win) extern int dlg_getbegx(WINDOW * /*win*/); extern int dlg_getbegy(WINDOW * /*win*/); #endif #if !(defined(HAVE_GETCURX) && defined(HAVE_GETCURY)) #undef getcurx #undef getcury #define getcurx(win) dlg_getcurx(win) #define getcury(win) dlg_getcury(win) extern int dlg_getcurx(WINDOW * /*win*/); extern int dlg_getcury(WINDOW * /*win*/); #endif #if !(defined(HAVE_GETMAXX) && defined(HAVE_GETMAXY)) #undef getmaxx #undef getmaxy #define getmaxx(win) dlg_getmaxx(win) #define getmaxy(win) dlg_getmaxy(win) extern int dlg_getmaxx(WINDOW * /*win*/); extern int dlg_getmaxy(WINDOW * /*win*/); #endif #if !(defined(HAVE_GETPARX) && defined(HAVE_GETPARY)) #undef getparx #undef getpary #define getparx(win) dlg_getparx(win) #define getpary(win) dlg_getpary(win) extern int dlg_getparx(WINDOW * /*win*/); extern int dlg_getpary(WINDOW * /*win*/); #endif #if !(defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT)) #undef wgetparent #define wgetparent(win) dlg_wgetparent(win) extern WINDOW * dlg_wgetparent(WINDOW * /*win*/); #endif /* * This is a list of "old" names, which should be helpful in updating * applications that use libdialog. Starting with 2003/11/26, all exported * symbols from libdialog have "dlg_" prefix, or "dialog_" prefix or "_dialog" * suffix (or suffix "_dialog", e.g., init_dialog). */ #ifdef __DIALOG_OLD_NAMES__ #define color_table dlg_color_table #define attr_clear(win,h,w,a) dlg_attr_clear(win,h,w,a) #define auto_size(t,s,h,w,xl,mc) dlg_auto_size(t,s,h,w,xl,mc) #define auto_sizefile(t,f,h,w,xl,mc) dlg_auto_sizefile(t,f,h,w,xl,mc) #define beeping() dlg_beeping() #define box_x_ordinate(w) dlg_box_x_ordinate(w) #define box_y_ordinate(h) dlg_box_y_ordinate(h) #define calc_listh(h,lh,in) dlg_calc_listh(h,lh,in) #define calc_listw(in,items,group) dlg_calc_listw(in,items,group) #define color_setup() dlg_color_setup() #define create_rc(f) dlg_create_rc(f) #define ctl_size(h,w) dlg_ctl_size(h,w) #define del_window(win) dlg_del_window(win) #define dialog_clear() dlg_clear() #define draw_bottom_box(win) dlg_draw_bottom_box(win) #define draw_box(win,y,x,h,w,xc,bc) dlg_draw_box(win,y,x,h,w,xc,bc) #define draw_shadow(win,h,w,y,x) dlg_draw_shadow(win,h,w,y,x) #define draw_title(win,t) dlg_draw_title(win,t) #define exiterr dlg_exiterr #define killall_bg(n) dlg_killall_bg(n) #define mouse_bigregion(y,x) dlg_mouse_bigregion(y,x) #define mouse_free_regions() dlg_mouse_free_regions() #define mouse_mkbigregion(y,x,h,w,n,ix,iy,m) dlg_mouse_mkbigregion(y,x,h,w,n,ix,iy,m) #define mouse_mkregion(y,x,h,w,n) dlg_mouse_mkregion(y,x,h,w,n) #define mouse_region(y,x) dlg_mouse_region(y,x) #define mouse_setbase(x,y) dlg_mouse_setbase(x,y) #define mouse_setcode(c) dlg_mouse_setcode(c) #define mouse_wgetch(w,c) dlg_mouse_wgetch(w,c) #define new_window(h,w,y,x) dlg_new_window(h,w,y,x) #define parse_rc() dlg_parse_rc() #define print_autowrap(win,s,h,w) dlg_print_autowrap(win,s,h,w) #define print_size(h,w) dlg_print_size(h,w) #define put_backtitle() dlg_put_backtitle() #define strclone(cprompt) dlg_strclone(cprompt) #define sub_window(win,h,w,y,x) dlg_sub_window(win,h,w,y,x) #define tab_correct_str(s) dlg_tab_correct_str(s) #endif /* * Attribute names */ #define DIALOG_ATR(n) dlg_color_table[n].atr #define screen_attr DIALOG_ATR(0) #define shadow_attr DIALOG_ATR(1) #define dialog_attr DIALOG_ATR(2) #define title_attr DIALOG_ATR(3) #define border_attr DIALOG_ATR(4) #define button_active_attr DIALOG_ATR(5) #define button_inactive_attr DIALOG_ATR(6) #define button_key_active_attr DIALOG_ATR(7) #define button_key_inactive_attr DIALOG_ATR(8) #define button_label_active_attr DIALOG_ATR(9) #define button_label_inactive_attr DIALOG_ATR(10) #define inputbox_attr DIALOG_ATR(11) #define inputbox_border_attr DIALOG_ATR(12) #define searchbox_attr DIALOG_ATR(13) #define searchbox_title_attr DIALOG_ATR(14) #define searchbox_border_attr DIALOG_ATR(15) #define position_indicator_attr DIALOG_ATR(16) #define menubox_attr DIALOG_ATR(17) #define menubox_border_attr DIALOG_ATR(18) #define item_attr DIALOG_ATR(19) #define item_selected_attr DIALOG_ATR(20) #define tag_attr DIALOG_ATR(21) #define tag_selected_attr DIALOG_ATR(22) #define tag_key_attr DIALOG_ATR(23) #define tag_key_selected_attr DIALOG_ATR(24) #define check_attr DIALOG_ATR(25) #define check_selected_attr DIALOG_ATR(26) #define uarrow_attr DIALOG_ATR(27) #define darrow_attr DIALOG_ATR(28) #define itemhelp_attr DIALOG_ATR(29) #define form_active_text_attr DIALOG_ATR(30) #define form_text_attr DIALOG_ATR(31) #define form_item_readonly_attr DIALOG_ATR(32) #define gauge_attr DIALOG_ATR(33) #define border2_attr DIALOG_ATR(34) #define inputbox_border2_attr DIALOG_ATR(35) #define searchbox_border2_attr DIALOG_ATR(36) #define menubox_border2_attr DIALOG_ATR(37) #define DLGK_max (KEY_MAX + 256) /* * Use attributes. */ #ifdef PDCURSES #define dlg_attrset(w,a) (void) wattrset((w), (a)) #define dlg_attron(w,a) (void) wattron((w), (a)) #define dlg_attroff(w,a) (void) wattroff((w), (a)) #else #define dlg_attrset(w,a) (void) wattrset((w), (int)(a)) #define dlg_attron(w,a) (void) wattron((w), (int)(a)) #define dlg_attroff(w,a) (void) wattroff((w), (int)(a)) #endif /* * Callbacks are used to implement the "background" tailbox. */ struct _dlg_callback; typedef void (*DIALOG_FREEBACK) (struct _dlg_callback * /* p */); typedef struct _dlg_callback { struct _dlg_callback *next; FILE *input; WINDOW *win; bool keep_bg; /* keep in background, on exit */ bool bg_task; /* true if this is background task */ bool (*handle_getc)(struct _dlg_callback *p, int ch, int fkey, int *result); bool keep_win; /* true to not erase window on exit */ /* data for dlg_add_callback_ref */ struct _dlg_callback **caller; DIALOG_FREEBACK freeback; /* 1.1-20110107 */ bool (*handle_input)(struct _dlg_callback *p); bool input_ready; } DIALOG_CALLBACK; typedef struct _dlg_windows { struct _dlg_windows *next; WINDOW *normal; WINDOW *shadow; + int getc_timeout; } DIALOG_WINDOWS; /* * Global variables, which are initialized as needed */ typedef struct { DIALOG_CALLBACK *getc_callbacks; DIALOG_CALLBACK *getc_redirect; DIALOG_WINDOWS *all_windows; DIALOG_WINDOWS *all_subwindows; FILE *output; /* option "--output-fd fd" */ FILE *pipe_input; /* used for gauge widget */ FILE *screen_output; /* newterm(), etc. */ bool screen_initialized; bool use_colors; /* use colors by default? */ bool use_scrollbar; /* option "--scrollbar" */ bool use_shadow; /* shadow dialog boxes by default? */ bool visit_items; /* option "--visit-items" */ char *separate_str; /* option "--separate-widget string" */ int aspect_ratio; /* option "--aspect ratio" */ int output_count; /* # of widgets that may have done output */ int tab_len; /* option "--tab-len n" */ /* 1.0-20070227 */ FILE *input; /* option "--input-fd fd" */ #ifdef HAVE_DLG_TRACE FILE *trace_output; /* option "--trace file" */ #endif /* 1.1-20110106 */ bool no_mouse; /* option "--no-mouse" */ int visit_cols; /* option "--visit-items" */ /* 1.2-20130922 */ bool finish_string; /* caching optimization for gauge */ /* 1.2-20150125 */ bool plain_buttons; /* true to suppress button-label highlight */ /* 1.3-20180610 */ bool text_only; /* option "--print-text-only", etc. */ int text_height; int text_width; + /* 1.3-20190211 */ + int screen_height; + int screen_width; +#ifdef KEY_RESIZE + /* 1.3-20190724 */ + bool had_resize; /* ERR may follow KEY_RESIZE when polling */ +#endif } DIALOG_STATE; extern DIALOG_STATE dialog_state; /* * Global variables, which dialog resets before each widget */ typedef struct { bool beep_after_signal; /* option "--beep-after" */ bool beep_signal; /* option "--beep" */ bool begin_set; /* option "--begin y x" was used */ bool cant_kill; /* option "--no-kill" */ bool colors; /* option "--colors" */ bool cr_wrap; /* option "--cr-wrap" */ bool defaultno; /* option "--defaultno" */ bool dlg_clear_screen; /* option "--clear" */ bool extra_button; /* option "--extra-button" */ bool help_button; /* option "--help-button" */ bool help_status; /* option "--help-status" */ bool input_menu; /* menu vs inputmenu widget */ bool insecure; /* option "--insecure" */ bool item_help; /* option "--item-help" */ bool keep_window; /* option "--keep-window" */ bool nocancel; /* option "--no-cancel" */ bool nocollapse; /* option "--no-collapse" */ bool print_siz; /* option "--print-size" */ bool separate_output; /* option "--separate-output" */ bool single_quoted; /* option "--single-quoted" */ bool size_err; /* option "--size-err" */ bool tab_correct; /* option "--tab-correct" */ bool trim_whitespace; /* option "--trim" */ char *backtitle; /* option "--backtitle backtitle" */ char *cancel_label; /* option "--cancel-label string" */ char *default_item; /* option "--default-item string" */ char *exit_label; /* option "--exit-label string" */ char *extra_label; /* option "--extra-label string" */ char *help_label; /* option "--help-label string" */ char *input_result; char *no_label; /* option "--no-label string" */ char *ok_label; /* option "--ok-label string" */ char *title; /* option "--title title" */ char *yes_label; /* option "--yes-label string" */ int begin_x; /* option "--begin y x" (second value) */ int begin_y; /* option "--begin y x" (first value) */ int max_input; /* option "--max-input size" */ int scale_factor; /* RESERVED */ int sleep_secs; /* option "--sleep secs" */ int timeout_secs; /* option "--timeout secs" */ unsigned input_length; /* nonzero if input_result is allocated */ /* 1.0-20051207 */ unsigned formitem_type; /* DIALOG_FORMITEM.type in dialog_form() */ /* 1.1-20070227 */ bool keep_tite; /* option "--keep-tite" */ bool ascii_lines; /* option "--ascii-lines" */ bool no_lines; /* option "--no-lines" */ /* 1.1-20070930 */ bool nook; /* option "--no-ok" */ /* 1.1-20080727 */ bool quoted; /* option "--quoted" */ char *column_header; /* RESERVED "--column-header" */ char *column_separator; /* option "--column-separator" */ char *output_separator; /* option "--output-separator" */ /* 1.1-20100118 */ char *date_format; /* option "--date-format" */ char *time_format; /* option "--time-format" */ /* 1.1-20110629 */ char *help_line; /* option "--hline" */ char *help_file; /* option "--hfile" */ bool in_helpfile; /* flag to prevent recursion in --hfile */ bool no_nl_expand; /* option "--no-nl-expand" */ /* 1.1-20120701 */ int default_button; /* option "--default-button" (exit code) */ /* 1.1-20121218 */ bool no_tags; /* option "--no-tags" */ bool no_items; /* option "--no-items" */ /* 1.2-20130315 */ bool last_key; /* option "--last-key" */ /* 1.2-20130902 */ bool help_tags; /* option "--help-tags" */ /* 1.3-20160126 */ char *week_start; /* option "--week-start" */ /* 1.3-20160206 */ bool iso_week; /* option "--iso-week" */ /* 1.3-20170131 */ bool reorder; /* option "--reorder" */ + /* 1.3-20201117 */ + int pause_secs; /* used by pause widget */ + /* 1.3-20201126 */ + bool erase_on_exit; /* option "--erase-on-exit" */ + bool cursor_off_label; /* option "--cursor-off-label" */ + /* 1.3-20210117 */ + bool no_hot_list; /* option "--no-hot-list" */ } DIALOG_VARS; #define USE_ITEM_HELP(s) (dialog_vars.item_help && (s) != 0) /* * Some settings change the number of data items per row which dialog reads * from a script. */ #define DLG__NO_ITEMS (dialog_vars.no_items ? 0 : 1) #define DLG__ITEM_HELP (dialog_vars.item_help ? 1 : 0) /* * These are the total number of data items per row used for each widget type. */ #define CHECKBOX_TAGS (2 + DLG__ITEM_HELP + DLG__NO_ITEMS) #define MENUBOX_TAGS (1 + DLG__ITEM_HELP + DLG__NO_ITEMS) #define FORMBOX_TAGS (8 + DLG__ITEM_HELP) #define MIXEDFORM_TAGS (1 + FORMBOX_TAGS) #define MIXEDGAUGE_TAGS 2 #define TREEVIEW_TAGS (3 + DLG__ITEM_HELP + DLG__NO_ITEMS) extern DIALOG_VARS dialog_vars; #ifndef HAVE_TYPE_CHTYPE #define chtype long #endif #ifndef isblank #define isblank(c) ((c) == ' ' || (c) == TAB) #endif #define UCH(ch) ((unsigned char)(ch)) #define assert_ptr(ptr,msg) if ((ptr) == 0) dlg_exiterr("cannot allocate memory in " msg) #define dlg_malloc(t,n) (t *) malloc((size_t)(n) * sizeof(t)) #define dlg_calloc(t,n) (t *) calloc((size_t)(n), sizeof(t)) #define dlg_realloc(t,n,p) (t *) realloc((p), (n) * sizeof(t)) /* * Table for attribute- and color-values. */ typedef struct { - chtype atr; + chtype atr; /* attribute corresponding to fg, bg, etc */ #ifdef HAVE_COLOR - int fg; - int bg; - int hilite; -#endif + int fg; /* foreground color-number */ + int bg; /* background color-number */ + int hilite; /* true if bold */ +#ifdef HAVE_RC_FILE2 + int ul; /* true if underline */ + int rv; /* true if reverse */ +#endif /* HAVE_RC_FILE2 */ +#endif /* HAVE_COLOR */ #ifdef HAVE_RC_FILE const char *name; const char *comment; #endif } DIALOG_COLORS; extern DIALOG_COLORS dlg_color_table[]; /* * Function prototypes */ extern const char *dialog_version(void); /* widgets, each in separate files */ extern int dialog_buildlist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*order_mode*/); extern int dialog_calendar(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*day*/, int /*month*/, int /*year*/); extern int dialog_checklist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*flag*/); extern int dialog_dselect(const char * /*title*/, const char * /*path*/, int /*height*/, int /*width*/); extern int dialog_editbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); extern int dialog_form(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, char ** /*items*/); extern int dialog_fselect(const char * /*title*/, const char * /*path*/, int /*height*/, int /*width*/); extern int dialog_gauge(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*percent*/); extern int dialog_helpfile(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); extern int dialog_inputbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, const char * /*init*/, const int /*password*/); extern int dialog_menu(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*menu_height*/, int /*item_no*/, char ** /*items*/); extern int dialog_mixedform(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, char ** /*items*/); extern int dialog_mixedgauge(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*percent*/, int /*item_no*/, char ** /*items*/); extern int dialog_msgbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*pauseopt*/); extern int dialog_pause(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*seconds*/); extern int dialog_prgbox(const char * /*title*/, const char * /*cprompt*/, const char * /*command*/, int /*height*/, int /*width*/, int /*pauseopt*/); extern int dialog_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/); extern int dialog_rangebox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/, int /*min_value*/, int /*max_value*/, int /*default_value*/); extern int dialog_tailbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/, int /*bg_task*/); extern int dialog_textbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); extern int dialog_timebox(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*hour*/, int /*minute*/, int /*second*/); extern int dialog_treeview(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*flag*/); extern int dialog_yesno(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/); /* some widgets have alternate entrypoints, to allow list manipulation */ typedef struct { char *name; char *text; char *help; int state; } DIALOG_LISTITEM; typedef struct { unsigned type; /* the field type (0=input, 1=password) */ char *name; /* the field label */ int name_len; /* ...its length */ int name_y; /* ...its y-ordinate */ int name_x; /* ...its x-ordinate */ bool name_free; /* ...true if .name can be freed */ char *text; /* the field contents */ int text_len; /* ...its length on the screen */ int text_y; /* ...its y-ordinate */ int text_x; /* ...its x-ordinate */ int text_flen; /* ...its length on screen, or 0 if no input allowed */ int text_ilen; /* ...its limit on amount to be entered */ bool text_free; /* ...true if .text can be freed */ char *help; /* help-message, if any */ bool help_free; /* ...true if .help can be freed */ } DIALOG_FORMITEM; typedef int (DIALOG_INPUTMENU) (DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); extern int dlg_checklist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int /*flag*/, int * /*current_item*/); extern int dlg_form(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, DIALOG_FORMITEM * /*items*/, int * /*current_item*/); extern int dlg_menu(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*menu_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, int * /*current_item*/, DIALOG_INPUTMENU /*rename_menu*/); extern int dlg_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*pauseopt*/, FILE * /* fp */); /* argv.c */ extern char ** dlg_string_to_argv(char * /* blob */); extern int dlg_count_argv(char ** /* argv */); extern int dlg_eat_argv(int * /* argcp */, char *** /* argvp */, int /* start */, int /* count */); /* arrows.c */ extern void dlg_draw_arrows(WINDOW * /*dialog*/, int /*top_arrow*/, int /*bottom_arrow*/, int /*x*/, int /*top*/, int /*bottom*/); extern void dlg_draw_arrows2(WINDOW * /*dialog*/, int /*top_arrow*/, int /*bottom_arrow*/, int /*x*/, int /*top*/, int /*bottom*/, chtype /*attr*/, chtype /*borderattr*/); extern void dlg_draw_helpline(WINDOW * /*dialog*/, bool /*decorations*/); extern void dlg_draw_scrollbar(WINDOW * /*dialog*/, long /* first_data */, long /* this_data */, long /* next_data */, long /* total_data */, int /* left */, int /* right */, int /*top*/, int /*bottom*/, chtype /*attr*/, chtype /*borderattr*/); /* buildlist.c */ extern int dlg_buildlist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int /*order_mode*/, int * /*current_item*/); /* buttons.c */ extern const char ** dlg_exit_label(void); extern const char ** dlg_ok_label(void); extern const char ** dlg_ok_labels(void); extern const char ** dlg_yes_labels(void); extern int dlg_button_count(const char ** /*labels*/); extern int dlg_button_to_char(const char * /*label*/); extern int dlg_button_x_step(const char ** /*labels*/, int /*limit*/, int * /*gap*/, int * /*margin*/, int * /*step*/); extern int dlg_char_to_button(int /*ch*/, const char ** /*labels*/); extern int dlg_exit_buttoncode(int /*button*/); extern int dlg_match_char(int /*ch*/, const char * /*string*/); extern int dlg_next_button(const char ** /*labels*/, int /*button*/); extern int dlg_next_ok_buttonindex(int /*current*/, int /*extra*/); extern int dlg_ok_buttoncode(int /*button*/); extern int dlg_prev_button(const char ** /*labels*/, int /*button*/); extern int dlg_prev_ok_buttonindex(int /*current*/, int /*extra*/); extern int dlg_yes_buttoncode(int /*button*/); extern void dlg_button_layout(const char ** /*labels*/, int * /*limit*/); extern void dlg_button_sizes(const char ** /*labels*/, int /*vertical*/, int * /*longest*/, int * /*length*/); extern void dlg_draw_buttons(WINDOW * /*win*/, int /*y*/, int /*x*/, const char ** /*labels*/, int /*selected*/, int /*vertical*/, int /*limit*/); /* columns.c */ extern void dlg_align_columns(char ** /* target */, int /* per_row */, int /* num_rows */); extern void dlg_free_columns(char ** /* target */, int /* per_row */, int /* num_rows */); /* editbox.c */ extern int dlg_editbox(const char * /*title*/, char *** /*list*/, int * /*rows*/, int /*height*/, int /*width*/); /* formbox.c */ extern int dlg_default_formitem(DIALOG_FORMITEM * /*items*/); extern int dlg_ordinate(const char * /*s*/); extern void dlg_free_formitems(DIALOG_FORMITEM * /*items*/); /* guage.c */ extern void * dlg_allocate_gauge(const char * /* title */, const char * /* cprompt */, int /* height */, int /* width */, int /* percent */); extern void * dlg_reallocate_gauge(void * /* objptr */, const char * /* title */, const char * /* cprompt */, int /* height */, int /* width */, int /* percent */); extern void dlg_free_gauge(void * /* objptr */); extern void dlg_update_gauge(void * /* objptr */, int /* percent */); /* inputstr.c */ extern bool dlg_edit_string(char * /*string*/, int * /*offset*/, int /*key*/, int /*fkey*/, bool /*force*/); extern const int * dlg_index_columns(const char * /*string*/); extern const int * dlg_index_wchars(const char * /*string*/); extern int dlg_count_columns(const char * /*string*/); extern int dlg_count_wchars(const char * /*string*/); extern int dlg_edit_offset(char * /*string*/, int /*offset*/, int /*x_last*/); extern int dlg_find_index(const int * /*list*/, int /*limit*/, int /*to_find*/); extern int dlg_limit_columns(const char * /*string*/, int /*limit*/, int /*offset*/); extern void dlg_finish_string(const char * /* string */); extern void dlg_show_string(WINDOW * /*win*/, const char * /*string*/, int /*offset*/, chtype /*attr*/, int /*y_base*/, int /*x_base*/, int /*x_last*/, bool /*hidden*/, bool /*force*/); /* menubox.c */ extern int dlg_dummy_menutext(DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); extern int dlg_renamed_menutext(DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); /* prgbox.c */ extern FILE * dlg_popen(const char * /*command */, const char * /*type */); /* rc.c */ #ifdef HAVE_RC_FILE extern int dlg_parse_rc(void); extern void dlg_create_rc(const char * /*filename*/); #endif /* treeview.c */ extern int dlg_treeview(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int * /*depths*/, int /*flag*/, int * /*current_item*/); /* ttysize.c */ extern int dlg_ttysize(int /* fd */, int * /* height */, int * /* width */); /* ui_getc.c */ extern int dlg_getc(WINDOW * /*win*/, int * /*fkey*/); extern int dlg_getc_callbacks(int /*ch*/, int /*fkey*/, int * /*result*/); extern int dlg_last_getc(void); extern void dlg_add_last_key(int /*mode*/); extern void dlg_add_callback(DIALOG_CALLBACK * /*p*/); extern void dlg_add_callback_ref(DIALOG_CALLBACK ** /*p*/, DIALOG_FREEBACK /* cleanup */); extern void dlg_flush_getc(void); extern void dlg_remove_callback(DIALOG_CALLBACK * /*p*/); extern void dlg_killall_bg(int *retval); /* util.c */ +extern DIALOG_WINDOWS * _dlg_find_window(WINDOW * /* win */); +extern WINDOW * dlg_der_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); extern WINDOW * dlg_new_modal_window(WINDOW * /*parent*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); extern WINDOW * dlg_new_window(int /*height*/, int /*width*/, int /*y*/, int /*x*/); extern WINDOW * dlg_sub_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); extern bool dlg_need_separator(void); +extern char * dlg_getenv_str(const char * /*name*/); extern char * dlg_set_result(const char * /*string*/); extern char * dlg_strclone(const char * /*cprompt*/); extern char * dlg_strempty(void); extern chtype dlg_asciibox(chtype /*ch*/); extern chtype dlg_boxchar(chtype /*ch*/); extern chtype dlg_get_attrs(WINDOW * /*win*/); +extern const char * dlg_exitcode2s(int /*code*/); extern const char * dlg_print_line(WINDOW * /*win*/, chtype * /*attr*/, const char * /*prompt*/, int /*lm*/, int /*rm*/, int * /*x*/); extern int dlg_box_x_ordinate(int /*width*/); extern int dlg_box_y_ordinate(int /*height*/); extern int dlg_calc_list_width(int /*item_no*/, DIALOG_LISTITEM * /*items*/); extern int dlg_calc_listw(int /*item_no*/, char ** /*items*/, int /*group*/); extern int dlg_check_scrolled(int /* key */, int /* last */, int /* page */, bool * /* show */, int * /* offset */); extern int dlg_count_real_columns(const char * /*text*/); extern int dlg_default_item(char ** /*items*/, int /*llen*/); extern int dlg_default_listitem(DIALOG_LISTITEM * /*items*/); extern int dlg_defaultno_button(void); extern int dlg_default_button(void); +extern int dlg_exitname2n(const char * /*name*/); +extern int dlg_getenv_num(const char * /*name*/, int * /* value */); extern int dlg_max_input(int /*max_len*/); extern int dlg_print_scrolled(WINDOW * /* win */, const char * /* prompt */, int /* offset */, int /* height */, int /* width */, int /* pauseopt */); +extern int dlg_set_timeout(WINDOW * /* win */, bool /* will_getc */); extern void dlg_add_help_formitem(int * /* result */, char ** /* tag */, DIALOG_FORMITEM * /* item */); extern void dlg_add_help_listitem(int * /* result */, char ** /* tag */, DIALOG_LISTITEM * /* item */); extern void dlg_add_quoted(char * /*string*/); extern void dlg_add_result(const char * /*string*/); extern void dlg_add_separator(void); extern void dlg_add_string(char * /*string*/); extern void dlg_attr_clear(WINDOW * /*win*/, int /*height*/, int /*width*/, chtype /*attr*/); extern void dlg_auto_size(const char * /*title*/, const char * /*prompt*/, int * /*height*/, int * /*width*/, int /*boxlines*/, int /*mincols*/); extern void dlg_auto_sizefile(const char * /*title*/, const char * /*file*/, int * /*height*/, int * /*width*/, int /*boxlines*/, int /*mincols*/); extern void dlg_beeping(void); extern void dlg_calc_listh(int * /*height*/, int * /*list_height*/, int /*item_no*/); extern void dlg_clear(void); extern void dlg_clr_result(void); extern void dlg_ctl_size(int /*height*/, int /*width*/); extern void dlg_del_window(WINDOW * /*win*/); extern void dlg_does_output(void); extern void dlg_draw_bottom_box(WINDOW * /*win*/); extern void dlg_draw_bottom_box2(WINDOW * /*win*/, chtype /*on_left*/, chtype /*on_right*/, chtype /*on_inside*/); extern void dlg_draw_box(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/); extern void dlg_draw_box2(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/, chtype /*borderchar2*/); extern void dlg_draw_title(WINDOW *win, const char *title); extern void dlg_exit(int /*code*/) GCC_NORETURN; extern void dlg_item_help(const char * /*txt*/); +extern void dlg_keep_tite(FILE * /*output */); extern void dlg_print_autowrap(WINDOW * /*win*/, const char * /*prompt*/, int /*height*/, int /*width*/); extern void dlg_print_listitem(WINDOW * /*win*/, const char * /*text*/, int /*climit*/, bool /*first*/, int /*selected*/); extern void dlg_print_size(int /*height*/, int /*width*/); extern void dlg_print_text(WINDOW * /*win*/, const char * /*txt*/, int /*len*/, chtype * /*attr*/); extern void dlg_put_backtitle(void); +extern void dlg_reset_timeout(WINDOW * /* win */); extern void dlg_restore_vars(DIALOG_VARS * /* save */); extern void dlg_save_vars(DIALOG_VARS * /* save */); extern void dlg_set_focus(WINDOW * /*parent*/, WINDOW * /*win*/); extern void dlg_tab_correct_str(char * /*prompt*/); extern void dlg_trim_string(char * /*src*/); extern void end_dialog(void); extern void init_dialog(FILE * /*input*/, FILE * /*output*/); extern void dlg_exiterr(const char *, ...) GCC_NORETURN GCC_PRINTFLIKE(1,2); #ifdef HAVE_COLOR extern chtype dlg_color_pair(int /*foreground*/, int /*background*/); extern int dlg_color_count(void); extern void dlg_color_setup(void); extern void dlg_draw_shadow(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); #endif #ifdef HAVE_STRCASECMP #define dlg_strcmp(a,b) strcasecmp(a,b) #else extern int dlg_strcmp(const char * /*a*/, const char * /*b*/); #endif #ifdef HAVE_DLG_TRACE #define DLG_TRACE(params) dlg_trace_msg params extern void dlg_trace_msg(const char *fmt, ...) GCC_PRINTFLIKE(1,2); +extern void dlg_trace_va_msg(const char *fmt, va_list ap); #define DLG_TRACE2S(name,value) dlg_trace_2s (name,value) #define DLG_TRACE2N(name,value) dlg_trace_2n (name,value) extern void dlg_trace_2s(const char * /*name*/, const char * /*value*/); extern void dlg_trace_2n(const char * /*name*/, int /*value*/); extern void dlg_trace_win(WINDOW * /*win*/); extern void dlg_trace_chr(int /*ch*/, int /*fkey*/); extern void dlg_trace(const char * /*fname*/); #else #define DLG_TRACE(params) /* nothing */ #define DLG_TRACE2S(name,value) /* nothing */ #define DLG_TRACE2N(name,value) /* nothing */ +#define dlg_trace_va_msg(fmt, ap) /* nothing */ #define dlg_trace_win(win) /* nothing */ #define dlg_trace_chr(ch,fkey) /* nothing */ #define dlg_trace(fname) /* nothing */ #endif #ifdef KEY_RESIZE +extern void _dlg_resize_cleanup(WINDOW * /*win*/); extern void dlg_move_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); extern void dlg_will_resize(WINDOW * /*win*/); #endif /* * Normally "enter" means "ok". Use this macro to handle the explicit * check for DLGK_ENTER: */ #define dlg_enter_buttoncode(code) (dialog_vars.nook ? DLG_EXIT_OK : dlg_ok_buttoncode(code)) /* * The following stuff is needed for mouse support */ typedef struct mseRegion { int x, y, X, Y, code; int mode, step_x, step_y; struct mseRegion *next; } mseRegion; #if defined(NCURSES_MOUSE_VERSION) #define mouse_open() mousemask(BUTTON1_PRESSED, (mmask_t *) 0) #define mouse_close() mousemask(0, (mmask_t *) 0) extern mseRegion * dlg_mouse_mkregion (int /*y*/, int /*x*/, int /*height*/, int /*width*/, int /*code*/); extern void dlg_mouse_free_regions (void); extern void dlg_mouse_mkbigregion (int /*y*/, int /*x*/, int /*height*/, int /*width*/, int /*code*/, int /*step_x*/, int /*step_y*/, int /*mode*/); extern void dlg_mouse_setbase (int /*x*/, int /*y*/); extern void dlg_mouse_setcode (int /*code*/); #define USE_MOUSE 1 #else #define mouse_open() /*nothing*/ #define mouse_close() /*nothing*/ #define dlg_mouse_free_regions() /* nothing */ #define dlg_mouse_mkregion(y, x, height, width, code) /*nothing*/ #define dlg_mouse_mkbigregion(y, x, height, width, code, step_x, step_y, mode) /*nothing*/ #define dlg_mouse_setbase(x, y) /*nothing*/ #define dlg_mouse_setcode(c) /*nothing*/ #define USE_MOUSE 0 #endif extern mseRegion *dlg_mouse_region (int /*y*/, int /*x*/); extern mseRegion *dlg_mouse_bigregion (int /*y*/, int /*x*/); extern int dlg_mouse_wgetch (WINDOW * /*win*/, int * /*fkey*/); extern int dlg_mouse_wgetch_nowait (WINDOW * /*win*/, int * /*fkey*/); #define mouse_mkbutton(y,x,len,code) dlg_mouse_mkregion(y,x,1,len,code); /* * This is the base for fictitious keys, which activate * the buttons. * * Mouse-generated keys are the following: * -- the first 32 are used as numbers, in addition to '0'-'9' * -- uppercase chars are used to invoke the button (M_EVENT + 'O') */ #define M_EVENT (DLGK_max + 1) /* * The `flag' parameter in checklist is used to select between * radiolist and checklist */ #define FLAG_CHECK 1 #define FLAG_RADIO 0 /* * This is used only for debugging (FIXME: should have a separate header). */ #ifdef NO_LEAKS extern void _dlg_inputstr_leaks(void); -#if defined(NCURSES_VERSION) && defined(HAVE__NC_FREE_AND_EXIT) +#if defined(NCURSES_VERSION) +#if defined(HAVE_CURSES_EXIT) +/* just use curses_exit() */ +#elif defined(HAVE__NC_FREE_AND_EXIT) extern void _nc_free_and_exit(int); /* nc_alloc.h normally not installed */ +#define curses_exit(code) _nc_free_and_exit(code) #endif -#endif +#endif /* NCURSES_VERSION */ +#endif /* NO_LEAKS */ #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* DIALOG_H_included */ diff --git a/dlg_colors.h b/dlg_colors.h index c047f721cb7a..de91627afaa5 100644 --- a/dlg_colors.h +++ b/dlg_colors.h @@ -1,202 +1,280 @@ /* - * $Id: dlg_colors.h,v 1.17 2011/10/14 21:19:59 tom Exp $ + * $Id: dlg_colors.h,v 1.18 2019/09/23 09:14:30 tom Exp $ * * colors.h -- color attribute definitions * - * Copyright 2000-2007,2011 Thomas E. Dickey + * Copyright 2000-2011,2019 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #ifndef COLORS_H_included #define COLORS_H_included 1 #include <dialog.h> /* * Default color definitions (DLGC means "Dialog Color") * * DLGC_FG_xxx = foreground for "xxx" * DLGC_BG_xxx = background for "xxx" * DLGC_HL_xxx = highlight for "xxx" + * DLGC_UL_xxx = underline for "xxx" + * DLGC_RV_xxx = reverse for "xxx" */ #define DLGC_FG_SCREEN COLOR_CYAN #define DLGC_BG_SCREEN COLOR_BLUE #define DLGC_HL_SCREEN TRUE +#define DLGC_UL_SCREEN FALSE +#define DLGC_RV_SCREEN FALSE #define DLGC_FG_SHADOW COLOR_BLACK #define DLGC_BG_SHADOW COLOR_BLACK #define DLGC_HL_SHADOW TRUE +#define DLGC_UL_SHADOW FALSE +#define DLGC_RV_SHADOW FALSE #define DLGC_FG_DIALOG COLOR_BLACK #define DLGC_BG_DIALOG COLOR_WHITE #define DLGC_HL_DIALOG FALSE +#define DLGC_UL_DIALOG FALSE +#define DLGC_RV_DIALOG FALSE #define DLGC_FG_TITLE COLOR_BLUE #define DLGC_BG_TITLE COLOR_WHITE #define DLGC_HL_TITLE TRUE +#define DLGC_UL_TITLE FALSE +#define DLGC_RV_TITLE FALSE #define DLGC_FG_BORDER COLOR_WHITE #define DLGC_BG_BORDER COLOR_WHITE #define DLGC_HL_BORDER TRUE +#define DLGC_UL_BORDER FALSE +#define DLGC_RV_BORDER FALSE #define DLGC_FG_BORDER2 DLGC_FG_DIALOG #define DLGC_BG_BORDER2 DLGC_BG_DIALOG #define DLGC_HL_BORDER2 DLGC_HL_DIALOG +#define DLGC_UL_BORDER2 FALSE +#define DLGC_RV_BORDER2 FALSE #define DLGC_FG_BUTTON_ACTIVE COLOR_WHITE #define DLGC_BG_BUTTON_ACTIVE COLOR_BLUE #define DLGC_HL_BUTTON_ACTIVE TRUE +#define DLGC_UL_BUTTON_ACTIVE FALSE +#define DLGC_RV_BUTTON_ACTIVE FALSE #define DLGC_FG_BUTTON_INACTIVE COLOR_BLACK #define DLGC_BG_BUTTON_INACTIVE COLOR_WHITE #define DLGC_HL_BUTTON_INACTIVE FALSE +#define DLGC_UL_BUTTON_INACTIVE FALSE +#define DLGC_RV_BUTTON_INACTIVE FALSE #define DLGC_FG_BUTTON_KEY_ACTIVE COLOR_WHITE #define DLGC_BG_BUTTON_KEY_ACTIVE COLOR_BLUE #define DLGC_HL_BUTTON_KEY_ACTIVE TRUE +#define DLGC_UL_BUTTON_KEY_ACTIVE FALSE +#define DLGC_RV_BUTTON_KEY_ACTIVE FALSE #define DLGC_FG_BUTTON_KEY_INACTIVE COLOR_RED #define DLGC_BG_BUTTON_KEY_INACTIVE COLOR_WHITE #define DLGC_HL_BUTTON_KEY_INACTIVE FALSE +#define DLGC_UL_BUTTON_KEY_INACTIVE FALSE +#define DLGC_RV_BUTTON_KEY_INACTIVE FALSE #define DLGC_FG_BUTTON_LABEL_ACTIVE COLOR_YELLOW #define DLGC_BG_BUTTON_LABEL_ACTIVE COLOR_BLUE #define DLGC_HL_BUTTON_LABEL_ACTIVE TRUE +#define DLGC_UL_BUTTON_LABEL_ACTIVE FALSE +#define DLGC_RV_BUTTON_LABEL_ACTIVE FALSE #define DLGC_FG_BUTTON_LABEL_INACTIVE COLOR_BLACK #define DLGC_BG_BUTTON_LABEL_INACTIVE COLOR_WHITE #define DLGC_HL_BUTTON_LABEL_INACTIVE TRUE +#define DLGC_UL_BUTTON_LABEL_INACTIVE FALSE +#define DLGC_RV_BUTTON_LABEL_INACTIVE FALSE #define DLGC_FG_FORM_ITEM_READONLY COLOR_CYAN #define DLGC_BG_FORM_ITEM_READONLY COLOR_WHITE #define DLGC_HL_FORM_ITEM_READONLY TRUE +#define DLGC_UL_FORM_ITEM_READONLY FALSE +#define DLGC_RV_FORM_ITEM_READONLY FALSE #define DLGC_FG_INPUTBOX COLOR_BLACK #define DLGC_BG_INPUTBOX COLOR_WHITE #define DLGC_HL_INPUTBOX FALSE +#define DLGC_UL_INPUTBOX FALSE +#define DLGC_RV_INPUTBOX FALSE #define DLGC_FG_INPUTBOX_BORDER COLOR_BLACK #define DLGC_BG_INPUTBOX_BORDER COLOR_WHITE #define DLGC_HL_INPUTBOX_BORDER FALSE +#define DLGC_UL_INPUTBOX_BORDER FALSE +#define DLGC_RV_INPUTBOX_BORDER FALSE #define DLGC_FG_INPUTBOX_BORDER2 DLGC_FG_INPUTBOX #define DLGC_BG_INPUTBOX_BORDER2 DLGC_BG_INPUTBOX #define DLGC_HL_INPUTBOX_BORDER2 DLGC_HL_INPUTBOX +#define DLGC_UL_INPUTBOX_BORDER2 FALSE +#define DLGC_RV_INPUTBOX_BORDER2 FALSE #define DLGC_FG_SEARCHBOX COLOR_BLACK #define DLGC_BG_SEARCHBOX COLOR_WHITE #define DLGC_HL_SEARCHBOX FALSE +#define DLGC_UL_SEARCHBOX FALSE +#define DLGC_RV_SEARCHBOX FALSE #define DLGC_FG_SEARCHBOX_TITLE COLOR_BLUE #define DLGC_BG_SEARCHBOX_TITLE COLOR_WHITE #define DLGC_HL_SEARCHBOX_TITLE TRUE +#define DLGC_UL_SEARCHBOX_TITLE FALSE +#define DLGC_RV_SEARCHBOX_TITLE FALSE #define DLGC_FG_SEARCHBOX_BORDER COLOR_WHITE #define DLGC_BG_SEARCHBOX_BORDER COLOR_WHITE #define DLGC_HL_SEARCHBOX_BORDER TRUE +#define DLGC_UL_SEARCHBOX_BORDER FALSE +#define DLGC_RV_SEARCHBOX_BORDER FALSE #define DLGC_FG_SEARCHBOX_BORDER2 DLGC_FG_SEARCHBOX #define DLGC_BG_SEARCHBOX_BORDER2 DLGC_BG_SEARCHBOX #define DLGC_HL_SEARCHBOX_BORDER2 DLGC_HL_SEARCHBOX +#define DLGC_UL_SEARCHBOX_BORDER2 FALSE +#define DLGC_RV_SEARCHBOX_BORDER2 FALSE #define DLGC_FG_POSITION_INDICATOR COLOR_BLUE #define DLGC_BG_POSITION_INDICATOR COLOR_WHITE #define DLGC_HL_POSITION_INDICATOR TRUE +#define DLGC_UL_POSITION_INDICATOR FALSE +#define DLGC_RV_POSITION_INDICATOR FALSE #define DLGC_FG_MENUBOX COLOR_BLACK #define DLGC_BG_MENUBOX COLOR_WHITE #define DLGC_HL_MENUBOX FALSE +#define DLGC_UL_MENUBOX FALSE +#define DLGC_RV_MENUBOX FALSE #define DLGC_FG_MENUBOX_BORDER COLOR_WHITE #define DLGC_BG_MENUBOX_BORDER COLOR_WHITE #define DLGC_HL_MENUBOX_BORDER TRUE +#define DLGC_UL_MENUBOX_BORDER FALSE +#define DLGC_RV_MENUBOX_BORDER FALSE #define DLGC_FG_MENUBOX_BORDER2 DLGC_FG_MENUBOX #define DLGC_BG_MENUBOX_BORDER2 DLGC_BG_MENUBOX #define DLGC_HL_MENUBOX_BORDER2 DLGC_HL_MENUBOX +#define DLGC_UL_MENUBOX_BORDER2 FALSE +#define DLGC_RV_MENUBOX_BORDER2 FALSE #define DLGC_FG_ITEM COLOR_BLACK #define DLGC_BG_ITEM COLOR_WHITE #define DLGC_HL_ITEM FALSE +#define DLGC_UL_ITEM FALSE +#define DLGC_RV_ITEM FALSE #define DLGC_FG_ITEM_SELECTED COLOR_WHITE #define DLGC_BG_ITEM_SELECTED COLOR_BLUE #define DLGC_HL_ITEM_SELECTED TRUE +#define DLGC_UL_ITEM_SELECTED FALSE +#define DLGC_RV_ITEM_SELECTED FALSE #define DLGC_FG_TAG COLOR_BLUE #define DLGC_BG_TAG COLOR_WHITE #define DLGC_HL_TAG TRUE +#define DLGC_UL_TAG FALSE +#define DLGC_RV_TAG FALSE #define DLGC_FG_TAG_SELECTED COLOR_YELLOW #define DLGC_BG_TAG_SELECTED COLOR_BLUE #define DLGC_HL_TAG_SELECTED TRUE +#define DLGC_UL_TAG_SELECTED FALSE +#define DLGC_RV_TAG_SELECTED FALSE #define DLGC_FG_TAG_KEY COLOR_RED #define DLGC_BG_TAG_KEY COLOR_WHITE #define DLGC_HL_TAG_KEY FALSE +#define DLGC_UL_TAG_KEY FALSE +#define DLGC_RV_TAG_KEY FALSE #define DLGC_FG_TAG_KEY_SELECTED COLOR_RED #define DLGC_BG_TAG_KEY_SELECTED COLOR_BLUE #define DLGC_HL_TAG_KEY_SELECTED TRUE +#define DLGC_UL_TAG_KEY_SELECTED FALSE +#define DLGC_RV_TAG_KEY_SELECTED FALSE #define DLGC_FG_CHECK COLOR_BLACK #define DLGC_BG_CHECK COLOR_WHITE #define DLGC_HL_CHECK FALSE +#define DLGC_UL_CHECK FALSE +#define DLGC_RV_CHECK FALSE #define DLGC_FG_CHECK_SELECTED COLOR_WHITE #define DLGC_BG_CHECK_SELECTED COLOR_BLUE #define DLGC_HL_CHECK_SELECTED TRUE +#define DLGC_UL_CHECK_SELECTED FALSE +#define DLGC_RV_CHECK_SELECTED FALSE #define DLGC_FG_UARROW COLOR_GREEN #define DLGC_BG_UARROW COLOR_WHITE #define DLGC_HL_UARROW TRUE +#define DLGC_UL_UARROW FALSE +#define DLGC_RV_UARROW FALSE #define DLGC_FG_DARROW COLOR_GREEN #define DLGC_BG_DARROW COLOR_WHITE #define DLGC_HL_DARROW TRUE +#define DLGC_UL_DARROW FALSE +#define DLGC_RV_DARROW FALSE #define DLGC_FG_ITEMHELP COLOR_WHITE #define DLGC_BG_ITEMHELP COLOR_BLACK #define DLGC_HL_ITEMHELP FALSE +#define DLGC_UL_ITEMHELP FALSE +#define DLGC_RV_ITEMHELP FALSE #define DLGC_FG_FORM_ACTIVE_TEXT COLOR_WHITE #define DLGC_BG_FORM_ACTIVE_TEXT COLOR_BLUE #define DLGC_HL_FORM_ACTIVE_TEXT TRUE +#define DLGC_UL_FORM_ACTIVE_TEXT FALSE +#define DLGC_RV_FORM_ACTIVE_TEXT FALSE #define DLGC_FG_FORM_TEXT COLOR_WHITE #define DLGC_BG_FORM_TEXT COLOR_CYAN #define DLGC_HL_FORM_TEXT TRUE +#define DLGC_UL_FORM_TEXT FALSE +#define DLGC_RV_FORM_TEXT FALSE #define DLGC_FG_GAUGE COLOR_BLUE #define DLGC_BG_GAUGE COLOR_WHITE #define DLGC_HL_GAUGE TRUE +#define DLGC_UL_GAUGE FALSE +#define DLGC_RV_GAUGE FALSE /* End of default color definitions */ /* * Global variables */ typedef struct { const char *name; int value; } color_names_st; #endif /* COLORS_H_included */ diff --git a/dlg_internals.h b/dlg_internals.h new file mode 100644 index 000000000000..4c6fb9e09615 --- /dev/null +++ b/dlg_internals.h @@ -0,0 +1,47 @@ +/* + * $Id: dlg_internals.h,v 1.3 2019/08/08 21:29:41 tom Exp $ + * + * dlg_internals.h -- runtime binding support for dialog + * + * Copyright 2019 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#ifndef DLG_INTERNALS_H_included +#define DLG_INTERNALS_H_included 1 + +#include <dialog.h> + +#define TableSize(name) (sizeof(name)/sizeof((name)[0])) + +/* *INDENT-OFF* */ +#define resizeit(name, NAME) \ + name = ((NAME >= old_##NAME) \ + ? (NAME - (old_##NAME - old_##name)) \ + : old_##name) + +#define AddLastKey() \ + if (dialog_vars.last_key) { \ + if (dlg_need_separator()) \ + dlg_add_separator(); \ + dlg_add_last_key(-1); \ + } + + +/* *INDENT-ON* */ + +#endif /* DLG_INTERNALS_H_included */ diff --git a/dlg_keys.c b/dlg_keys.c index cb8af7c62719..e2706568fc61 100644 --- a/dlg_keys.c +++ b/dlg_keys.c @@ -1,888 +1,973 @@ /* - * $Id: dlg_keys.c,v 1.45 2018/05/28 17:27:10 tom Exp $ + * $Id: dlg_keys.c,v 1.58 2020/11/26 17:11:56 Glenn.Herteg Exp $ * * dlg_keys.c -- runtime binding support for dialog * - * Copyright 2006-2017,2018 Thomas E. Dickey + * Copyright 2006-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> +#include <dlg_internals.h> #define LIST_BINDINGS struct _list_bindings #define CHR_BACKSLASH '\\' #define IsOctal(ch) ((ch) >= '0' && (ch) <= '7') -#define TableSize(name) (sizeof(name)/sizeof(name[0])) LIST_BINDINGS { LIST_BINDINGS *link; WINDOW *win; /* window on which widget gets input */ const char *name; /* widget name */ bool buttons; /* true only for dlg_register_buttons() */ DLG_KEYS_BINDING *binding; /* list of bindings */ }; #define WILDNAME "*" static LIST_BINDINGS *all_bindings; static const DLG_KEYS_BINDING end_keys_binding = END_KEYS_BINDING; /* * For a given named widget's window, associate a binding table. */ void dlg_register_window(WINDOW *win, const char *name, DLG_KEYS_BINDING * binding) { LIST_BINDINGS *p, *q; for (p = all_bindings, q = 0; p != 0; q = p, p = p->link) { if (p->win == win && !strcmp(p->name, name)) { p->binding = binding; return; } } /* add built-in bindings at the end of the list (see compare_bindings). */ if ((p = dlg_calloc(LIST_BINDINGS, 1)) != 0) { p->win = win; p->name = name; p->binding = binding; if (q != 0) { q->link = p; } else { all_bindings = p; } } #if defined(HAVE_DLG_TRACE) && defined(HAVE_RC_FILE) /* * Trace the binding information assigned to this window. For most widgets * there is only one binding table. forms have two, so the trace will be * longer. Since compiled-in bindings are only visible when the widget is * registered, there is no other way to see what bindings are available, * than by running dialog and tracing it. */ DLG_TRACE(("# dlg_register_window %s\n", name)); dlg_dump_keys(dialog_state.trace_output); dlg_dump_window_keys(dialog_state.trace_output, win); DLG_TRACE(("# ...done dlg_register_window %s\n", name)); #endif } /* * Unlike dlg_lookup_key(), this looks for either widget-builtin or rc-file * definitions, depending on whether 'win' is null. */ static int key_is_bound(WINDOW *win, const char *name, int curses_key, int function_key) { LIST_BINDINGS *p; for (p = all_bindings; p != 0; p = p->link) { if (p->win == win && !dlg_strcmp(p->name, name)) { int n; for (n = 0; p->binding[n].is_function_key >= 0; ++n) { if (p->binding[n].curses_key == curses_key && p->binding[n].is_function_key == function_key) { return TRUE; } } } } return FALSE; } /* * Call this function after dlg_register_window(), for the list of button * labels associated with the widget. * * Ensure that dlg_lookup_key() will not accidentally translate a key that * we would like to use for a button abbreviation to some other key, e.g., * h/j/k/l for navigation into a cursor key. Do this by binding the key * to itself. * * See dlg_char_to_button(). */ void dlg_register_buttons(WINDOW *win, const char *name, const char **buttons) { int n; LIST_BINDINGS *p; DLG_KEYS_BINDING *q; if (buttons == 0) return; for (n = 0; buttons[n] != 0; ++n) { int curses_key = dlg_button_to_char(buttons[n]); + /* ignore binding if there is no key to bind */ + if (curses_key < 0) + continue; + /* ignore multibyte characters */ if (curses_key >= KEY_MIN) continue; /* if it is not bound in the widget, skip it (no conflicts) */ if (!key_is_bound(win, name, curses_key, FALSE)) continue; #ifdef HAVE_RC_FILE /* if it is bound in the rc-file, skip it */ if (key_is_bound(0, name, curses_key, FALSE)) continue; #endif if ((p = dlg_calloc(LIST_BINDINGS, 1)) != 0) { if ((q = dlg_calloc(DLG_KEYS_BINDING, 2)) != 0) { q[0].is_function_key = 0; q[0].curses_key = curses_key; q[0].dialog_key = curses_key; q[1] = end_keys_binding; p->win = win; p->name = name; p->buttons = TRUE; p->binding = q; /* put these at the beginning, to override the widget's table */ p->link = all_bindings; all_bindings = p; } else { free(p); } } } } /* * Remove the bindings for a given window. */ void dlg_unregister_window(WINDOW *win) { LIST_BINDINGS *p, *q; for (p = all_bindings, q = 0; p != 0; p = p->link) { if (p->win == win) { if (q != 0) { q->link = p->link; } else { all_bindings = p->link; } /* the user-defined and buttons-bindings all are length=1 */ if (p->binding[1].is_function_key < 0) free(p->binding); free(p); dlg_unregister_window(win); break; } q = p; } } /* * Call this after wgetch(), using the same window pointer and passing * the curses-key. * * If there is no binding associated with the widget, it simply returns * the given curses-key. * * Parameters: * win is the window on which the wgetch() was done. * curses_key is the value returned by wgetch(). * fkey in/out (on input, it is nonzero if curses_key is a function key, * and on output, it is nonzero if the result is a function key). */ int dlg_lookup_key(WINDOW *win, int curses_key, int *fkey) { LIST_BINDINGS *p; DLG_KEYS_BINDING *q; /* * Ignore mouse clicks, since they are already encoded properly. */ #ifdef KEY_MOUSE if (*fkey != 0 && curses_key == KEY_MOUSE) { ; } else #endif /* * Ignore resize events, since they are already encoded properly. */ #ifdef KEY_RESIZE if (*fkey != 0 && curses_key == KEY_RESIZE) { ; } else #endif if (*fkey == 0 || curses_key < KEY_MAX) { const char *name = WILDNAME; if (win != 0) { for (p = all_bindings; p != 0; p = p->link) { if (p->win == win) { name = p->name; break; } } } for (p = all_bindings; p != 0; p = p->link) { if (p->win == win || (p->win == 0 && (!strcmp(p->name, name) || !strcmp(p->name, WILDNAME)))) { int function_key = (*fkey != 0); for (q = p->binding; q->is_function_key >= 0; ++q) { if (p->buttons && !function_key && q->curses_key == (int) dlg_toupper(curses_key)) { *fkey = 0; return q->dialog_key; } if (q->curses_key == curses_key && q->is_function_key == function_key) { *fkey = q->dialog_key; return *fkey; } } } } } return curses_key; } /* * Test a dialog internal keycode to see if it corresponds to one of the push * buttons on the widget such as "OK". * * This is only useful if there are user-defined key bindings, since there are * no built-in bindings that map directly to DLGK_OK, etc. * * See also dlg_ok_buttoncode(). */ int dlg_result_key(int dialog_key, int fkey GCC_UNUSED, int *resultp) { int done = FALSE; + DLG_TRACE(("# dlg_result_key(dialog_key=%d, fkey=%d)\n", dialog_key, fkey)); +#ifdef KEY_RESIZE + if (dialog_state.had_resize) { + if (dialog_key == ERR) { + dialog_key = 0; + } else { + dialog_state.had_resize = FALSE; + } + } else if (fkey && dialog_key == KEY_RESIZE) { + dialog_state.had_resize = TRUE; + } +#endif #ifdef HAVE_RC_FILE if (fkey) { switch ((DLG_KEYS_ENUM) dialog_key) { case DLGK_OK: - *resultp = DLG_EXIT_OK; - done = TRUE; + if (!dialog_vars.nook) { + *resultp = DLG_EXIT_OK; + done = TRUE; + } break; case DLGK_CANCEL: if (!dialog_vars.nocancel) { *resultp = DLG_EXIT_CANCEL; done = TRUE; } break; case DLGK_EXTRA: if (dialog_vars.extra_button) { *resultp = DLG_EXIT_EXTRA; done = TRUE; } break; case DLGK_HELP: if (dialog_vars.help_button) { *resultp = DLG_EXIT_HELP; done = TRUE; } break; case DLGK_ESC: *resultp = DLG_EXIT_ESC; done = TRUE; break; default: break; } } else #endif if (dialog_key == ESC) { *resultp = DLG_EXIT_ESC; done = TRUE; } else if (dialog_key == ERR) { *resultp = DLG_EXIT_ERROR; done = TRUE; } return done; } +/* + * If a key was bound to one of the button-codes in dlg_result_key(), fake + * a button-value and an "Enter" key to cause the calling widget to return + * the corresponding status. + * + * See dlg_ok_buttoncode(), which maps settings for ok/extra/help and button + * number into exit-code. + */ +int +dlg_button_key(int exit_code, int *button, int *dialog_key, int *fkey) +{ + int changed = FALSE; + switch (exit_code) { + case DLG_EXIT_OK: + if (!dialog_vars.nook) { + *button = 0; + changed = TRUE; + } + break; + case DLG_EXIT_EXTRA: + if (dialog_vars.extra_button) { + *button = dialog_vars.nook ? 0 : 1; + changed = TRUE; + } + break; + case DLG_EXIT_CANCEL: + if (!dialog_vars.nocancel) { + *button = dialog_vars.nook ? 1 : 2; + changed = TRUE; + } + break; + case DLG_EXIT_HELP: + if (dialog_vars.help_button) { + int cancel = dialog_vars.nocancel ? 0 : 1; + int extra = dialog_vars.extra_button ? 1 : 0; + int okay = dialog_vars.nook ? 0 : 1; + *button = okay + extra + cancel; + changed = TRUE; + } + break; + } + if (changed) { + DLG_TRACE(("# dlg_button_key(%d:%s) button %d\n", + exit_code, dlg_exitcode2s(exit_code), *button)); + *dialog_key = *fkey = DLGK_ENTER; + } + return changed; +} + +int +dlg_ok_button_key(int exit_code, int *button, int *dialog_key, int *fkey) +{ + int result; + DIALOG_VARS save; + + dlg_save_vars(&save); + dialog_vars.nocancel = TRUE; + + result = dlg_button_key(exit_code, button, dialog_key, fkey); + + dlg_restore_vars(&save); + return result; +} + #ifdef HAVE_RC_FILE typedef struct { const char *name; int code; } CODENAME; #define ASCII_NAME(name,code) { #name, code } #define CURSES_NAME(upper) { #upper, KEY_ ## upper } #define COUNT_CURSES TableSize(curses_names) static const CODENAME curses_names[] = { ASCII_NAME(ESC, '\033'), ASCII_NAME(CR, '\r'), ASCII_NAME(LF, '\n'), ASCII_NAME(FF, '\f'), ASCII_NAME(TAB, '\t'), ASCII_NAME(DEL, '\177'), CURSES_NAME(DOWN), CURSES_NAME(UP), CURSES_NAME(LEFT), CURSES_NAME(RIGHT), CURSES_NAME(HOME), CURSES_NAME(BACKSPACE), CURSES_NAME(F0), CURSES_NAME(DL), CURSES_NAME(IL), CURSES_NAME(DC), CURSES_NAME(IC), CURSES_NAME(EIC), CURSES_NAME(CLEAR), CURSES_NAME(EOS), CURSES_NAME(EOL), CURSES_NAME(SF), CURSES_NAME(SR), CURSES_NAME(NPAGE), CURSES_NAME(PPAGE), CURSES_NAME(STAB), CURSES_NAME(CTAB), CURSES_NAME(CATAB), CURSES_NAME(ENTER), CURSES_NAME(PRINT), CURSES_NAME(LL), CURSES_NAME(A1), CURSES_NAME(A3), CURSES_NAME(B2), CURSES_NAME(C1), CURSES_NAME(C3), CURSES_NAME(BTAB), CURSES_NAME(BEG), CURSES_NAME(CANCEL), CURSES_NAME(CLOSE), CURSES_NAME(COMMAND), CURSES_NAME(COPY), CURSES_NAME(CREATE), CURSES_NAME(END), CURSES_NAME(EXIT), CURSES_NAME(FIND), CURSES_NAME(HELP), CURSES_NAME(MARK), CURSES_NAME(MESSAGE), CURSES_NAME(MOVE), CURSES_NAME(NEXT), CURSES_NAME(OPEN), CURSES_NAME(OPTIONS), CURSES_NAME(PREVIOUS), CURSES_NAME(REDO), CURSES_NAME(REFERENCE), CURSES_NAME(REFRESH), CURSES_NAME(REPLACE), CURSES_NAME(RESTART), CURSES_NAME(RESUME), CURSES_NAME(SAVE), CURSES_NAME(SBEG), CURSES_NAME(SCANCEL), CURSES_NAME(SCOMMAND), CURSES_NAME(SCOPY), CURSES_NAME(SCREATE), CURSES_NAME(SDC), CURSES_NAME(SDL), CURSES_NAME(SELECT), CURSES_NAME(SEND), CURSES_NAME(SEOL), CURSES_NAME(SEXIT), CURSES_NAME(SFIND), CURSES_NAME(SHELP), CURSES_NAME(SHOME), CURSES_NAME(SIC), CURSES_NAME(SLEFT), CURSES_NAME(SMESSAGE), CURSES_NAME(SMOVE), CURSES_NAME(SNEXT), CURSES_NAME(SOPTIONS), CURSES_NAME(SPREVIOUS), CURSES_NAME(SPRINT), CURSES_NAME(SREDO), CURSES_NAME(SREPLACE), CURSES_NAME(SRIGHT), CURSES_NAME(SRSUME), CURSES_NAME(SSAVE), CURSES_NAME(SSUSPEND), CURSES_NAME(SUNDO), CURSES_NAME(SUSPEND), CURSES_NAME(UNDO), }; #define DIALOG_NAME(upper) { #upper, DLGK_ ## upper } #define COUNT_DIALOG TableSize(dialog_names) static const CODENAME dialog_names[] = { DIALOG_NAME(OK), DIALOG_NAME(CANCEL), DIALOG_NAME(EXTRA), DIALOG_NAME(HELP), DIALOG_NAME(ESC), DIALOG_NAME(PAGE_FIRST), DIALOG_NAME(PAGE_LAST), DIALOG_NAME(PAGE_NEXT), DIALOG_NAME(PAGE_PREV), DIALOG_NAME(ITEM_FIRST), DIALOG_NAME(ITEM_LAST), DIALOG_NAME(ITEM_NEXT), DIALOG_NAME(ITEM_PREV), DIALOG_NAME(FIELD_FIRST), DIALOG_NAME(FIELD_LAST), DIALOG_NAME(FIELD_NEXT), DIALOG_NAME(FIELD_PREV), DIALOG_NAME(FORM_FIRST), DIALOG_NAME(FORM_LAST), DIALOG_NAME(FORM_NEXT), DIALOG_NAME(FORM_PREV), DIALOG_NAME(GRID_UP), DIALOG_NAME(GRID_DOWN), DIALOG_NAME(GRID_LEFT), DIALOG_NAME(GRID_RIGHT), DIALOG_NAME(DELETE_LEFT), DIALOG_NAME(DELETE_RIGHT), DIALOG_NAME(DELETE_ALL), DIALOG_NAME(ENTER), DIALOG_NAME(BEGIN), DIALOG_NAME(FINAL), DIALOG_NAME(SELECT), DIALOG_NAME(HELPFILE), DIALOG_NAME(TRACE), - DIALOG_NAME(TOGGLE) + DIALOG_NAME(TOGGLE), + DIALOG_NAME(LEAVE) }; #define MAP2(letter,actual) { letter, actual } static const struct { int letter; int actual; } escaped_letters[] = { MAP2('a', DLG_CTRL('G')), MAP2('b', DLG_CTRL('H')), MAP2('f', DLG_CTRL('L')), MAP2('n', DLG_CTRL('J')), MAP2('r', DLG_CTRL('M')), MAP2('s', CHR_SPACE), MAP2('t', DLG_CTRL('I')), MAP2('\\', '\\'), }; #undef MAP2 static char * skip_white(char *s) { while (*s != '\0' && isspace(UCH(*s))) ++s; return s; } static char * skip_black(char *s) { while (*s != '\0' && !isspace(UCH(*s))) ++s; return s; } /* * Find a user-defined binding, given the curses key code. */ static DLG_KEYS_BINDING * find_binding(char *widget, int curses_key) { LIST_BINDINGS *p; DLG_KEYS_BINDING *result = 0; for (p = all_bindings; p != 0; p = p->link) { if (p->win == 0 && !dlg_strcmp(p->name, widget) && p->binding->curses_key == curses_key) { result = p->binding; break; } } return result; } /* * Built-in bindings have a nonzero "win" member, and the associated binding * table can have more than one entry. We keep those last, since lookups will * find the user-defined bindings first and use those. * * Sort "*" (all-widgets) entries past named widgets, since those are less * specific. */ static int compare_bindings(LIST_BINDINGS * a, LIST_BINDINGS * b) { int result = 0; if (a->win == b->win) { if (!strcmp(a->name, b->name)) { result = a->binding[0].curses_key - b->binding[0].curses_key; } else if (!strcmp(b->name, WILDNAME)) { result = -1; } else if (!strcmp(a->name, WILDNAME)) { result = 1; } else { result = dlg_strcmp(a->name, b->name); } } else if (b->win) { result = -1; } else { result = 1; } return result; } /* * Find a user-defined binding, given the curses key code. If it does not * exist, create a new one, inserting it into the linked list, keeping it * sorted to simplify lookups for user-defined bindings that can override * the built-in bindings. */ static DLG_KEYS_BINDING * make_binding(char *widget, int curses_key, int is_function, int dialog_key) { LIST_BINDINGS *entry = 0; DLG_KEYS_BINDING *data = 0; char *name; - LIST_BINDINGS *p, *q; DLG_KEYS_BINDING *result = find_binding(widget, curses_key); if (result == 0 && (entry = dlg_calloc(LIST_BINDINGS, 1)) != 0 && (data = dlg_calloc(DLG_KEYS_BINDING, 2)) != 0 && (name = dlg_strclone(widget)) != 0) { + LIST_BINDINGS *p, *q; entry->name = name; entry->binding = data; data[0].is_function_key = is_function; data[0].curses_key = curses_key; data[0].dialog_key = dialog_key; data[1] = end_keys_binding; for (p = all_bindings, q = 0; p != 0; q = p, p = p->link) { if (compare_bindings(entry, p) < 0) { break; } } if (q != 0) { q->link = entry; } else { all_bindings = entry; } if (p != 0) { entry->link = p; } result = data; } else if (entry != 0) { free(entry); if (data) free(data); } return result; } static int decode_escaped(char **string) { - unsigned n; int result = 0; if (IsOctal(**string)) { int limit = 3; while (limit-- > 0 && IsOctal(**string)) { int ch = (**string); *string += 1; result = (result << 3) | (ch - '0'); } } else { + unsigned n; + for (n = 0; n < TableSize(escaped_letters); ++n) { if (**string == escaped_letters[n].letter) { *string += 1; result = escaped_letters[n].actual; break; } } } return result; } static char * encode_escaped(int value) { static char result[80]; unsigned n; bool found = FALSE; for (n = 0; n < TableSize(escaped_letters); ++n) { if (value == escaped_letters[n].actual) { found = TRUE; sprintf(result, "%c", escaped_letters[n].letter); break; } } if (!found) { sprintf(result, "%03o", value & 0xff); } return result; } /* * Parse the parameters of the "bindkey" configuration-file entry. This * expects widget name which may be "*", followed by curses key definition and * then dialog key definition. * * The curses key "should" be one of the names (ignoring case) from * curses_names[], but may also be a single control character (prefix "^" or * "~" depending on whether it is C0 or C1), or an escaped single character. * Binding a printable character with dialog is possible but not useful. * * The dialog key must be one of the names from dialog_names[]. */ int dlg_parse_bindkey(char *params) { char *p = skip_white(params); - char *q; - bool escaped = FALSE; - int modified = 0; int result = FALSE; - unsigned xx; char *widget; - int is_function = FALSE; int curses_key; int dialog_key; curses_key = -1; dialog_key = -1; widget = p; p = skip_black(p); if (p != widget && *p != '\0') { + char *q; + unsigned xx; + bool escaped = FALSE; + int modified = 0; + int is_function = FALSE; + *p++ = '\0'; p = skip_white(p); q = p; while (*p != '\0' && curses_key < 0) { if (escaped) { escaped = FALSE; curses_key = decode_escaped(&p); } else if (*p == CHR_BACKSLASH) { escaped = TRUE; } else if (modified) { if (*p == '?') { curses_key = ((modified == '^') ? 127 : 255); } else { curses_key = ((modified == '^') ? (*p & 0x1f) : ((*p & 0x1f) | 0x80)); } } else if (*p == '^') { modified = *p; } else if (*p == '~') { modified = *p; } else if (isspace(UCH(*p))) { break; } ++p; } if (!isspace(UCH(*p))) { ; } else { *p++ = '\0'; if (curses_key < 0) { char fprefix[2]; char check[2]; int keynumber; - if (sscanf(q, "%[Ff]%d%c", fprefix, &keynumber, check) == 2) { + if (sscanf(q, "%1[Ff]%d%c", fprefix, &keynumber, check) == 2) { curses_key = KEY_F(keynumber); is_function = TRUE; } else { for (xx = 0; xx < COUNT_CURSES; ++xx) { if (!dlg_strcmp(curses_names[xx].name, q)) { curses_key = curses_names[xx].code; is_function = (curses_key >= KEY_MIN); break; } } } } } q = skip_white(p); p = skip_black(q); if (p != q) { for (xx = 0; xx < COUNT_DIALOG; ++xx) { if (!dlg_strcmp(dialog_names[xx].name, q)) { dialog_key = dialog_names[xx].code; break; } } } if (*widget != '\0' && curses_key >= 0 && dialog_key >= 0 && make_binding(widget, curses_key, is_function, dialog_key) != 0) { result = TRUE; } } return result; } static void dump_curses_key(FILE *fp, int curses_key) { if (curses_key > KEY_MIN) { unsigned n; bool found = FALSE; for (n = 0; n < COUNT_CURSES; ++n) { if (curses_names[n].code == curses_key) { fprintf(fp, "%s", curses_names[n].name); found = TRUE; break; } } if (!found) { #ifdef KEY_MOUSE if (is_DLGK_MOUSE(curses_key)) { fprintf(fp, "MOUSE-"); dump_curses_key(fp, curses_key - M_EVENT); } else #endif if (curses_key >= KEY_F(0)) { fprintf(fp, "F%d", curses_key - KEY_F(0)); } else { fprintf(fp, "curses%d", curses_key); } } } else if (curses_key >= 0 && curses_key < 32) { fprintf(fp, "^%c", curses_key + 64); } else if (curses_key == 127) { fprintf(fp, "^?"); } else if (curses_key >= 128 && curses_key < 160) { fprintf(fp, "~%c", curses_key - 64); } else if (curses_key == 255) { fprintf(fp, "~?"); } else if (curses_key > 32 && curses_key < 127 && curses_key != CHR_BACKSLASH) { fprintf(fp, "%c", curses_key); } else { fprintf(fp, "%c%s", CHR_BACKSLASH, encode_escaped(curses_key)); } } static void dump_dialog_key(FILE *fp, int dialog_key) { unsigned n; bool found = FALSE; for (n = 0; n < COUNT_DIALOG; ++n) { if (dialog_names[n].code == dialog_key) { fputs(dialog_names[n].name, fp); found = TRUE; break; } } if (!found) { fprintf(fp, "dialog%d", dialog_key); } } static void dump_one_binding(FILE *fp, WINDOW *win, const char *widget, DLG_KEYS_BINDING * binding) { int actual; int fkey = (binding->curses_key > 255); fprintf(fp, "bindkey %s ", widget); dump_curses_key(fp, binding->curses_key); fputc(' ', fp); dump_dialog_key(fp, binding->dialog_key); actual = dlg_lookup_key(win, binding->curses_key, &fkey); #ifdef KEY_MOUSE if (is_DLGK_MOUSE(binding->curses_key) && is_DLGK_MOUSE(actual)) { ; /* EMPTY */ } else #endif if (actual != binding->dialog_key) { fprintf(fp, "\t# overridden by "); dump_dialog_key(fp, actual); } fputc('\n', fp); } /* * Dump bindings for the given window. If it is a null, then this dumps the * initial bindings which were loaded from the rc-file that are used as * overall defaults. */ void dlg_dump_window_keys(FILE *fp, WINDOW *win) { if (fp != 0) { LIST_BINDINGS *p; DLG_KEYS_BINDING *q; const char *last = ""; for (p = all_bindings; p != 0; p = p->link) { if (p->win == win) { if (dlg_strcmp(last, p->name)) { fprintf(fp, "# key bindings for %s widgets%s\n", !strcmp(p->name, WILDNAME) ? "all" : p->name, win == 0 ? " (user-defined)" : ""); last = p->name; } for (q = p->binding; q->is_function_key >= 0; ++q) { dump_one_binding(fp, win, p->name, q); } } } } } /* * Dump all of the bindings which are not specific to a given widget, i.e., * the "win" member is null. */ void dlg_dump_keys(FILE *fp) { if (fp != 0) { LIST_BINDINGS *p; unsigned count = 0; for (p = all_bindings; p != 0; p = p->link) { if (p->win == 0) { ++count; } } if (count != 0) { dlg_dump_window_keys(fp, 0); } } } #endif /* HAVE_RC_FILE */ diff --git a/dlg_keys.h b/dlg_keys.h index 737db28fdab6..1179b0e99ecc 100644 --- a/dlg_keys.h +++ b/dlg_keys.h @@ -1,178 +1,182 @@ /* - * $Id: dlg_keys.h,v 1.36 2016/08/28 21:23:17 tom Exp $ + * $Id: dlg_keys.h,v 1.39 2020/11/22 23:19:24 tom Exp $ * * dlg_keys.h -- runtime binding support for dialog * - * Copyright 2005-2012,2016 Thomas E. Dickey + * Copyright 2005-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #ifndef DLG_KEYS_H_included #define DLG_KEYS_H_included 1 /* *INDENT-OFF* */ #include <dialog.h> #ifdef USE_WIDE_CURSES #include <wctype.h> #define dlg_toupper(ch) towupper((wint_t)ch) #define dlg_isupper(ch) iswupper((wint_t)ch) #else #define dlg_toupper(ch) (((ch) > 0 && (ch) <= 255) ? toupper(ch) : (ch)) #define dlg_isupper(ch) (isalpha(ch) && isupper(ch)) #endif #ifdef __cplusplus extern "C" { #endif typedef struct { int is_function_key; int curses_key; int dialog_key; } DLG_KEYS_BINDING; #define DLG_KEYS_DATA(dialog, curses) { (curses) >= KEY_MIN, curses, dialog } #define END_KEYS_BINDING { -1, 0, 0 } /* * Define dialog's internal function-keys past the range used by curses. */ typedef enum { DLGK_MIN = KEY_MAX + 1, /* predefined buttons */ DLGK_OK, DLGK_CANCEL, DLGK_EXTRA, DLGK_HELP, DLGK_ESC, /* moving from screen to screen (pages) */ DLGK_PAGE_FIRST, DLGK_PAGE_LAST, DLGK_PAGE_NEXT, DLGK_PAGE_PREV, /* moving within a list */ DLGK_ITEM_FIRST, DLGK_ITEM_LAST, DLGK_ITEM_NEXT, DLGK_ITEM_PREV, /* moving from field to field (or buttons) */ DLGK_FIELD_FIRST, DLGK_FIELD_LAST, DLGK_FIELD_NEXT, DLGK_FIELD_PREV, /* moving from form-field to form-field (or buttons) */ DLGK_FORM_FIRST, DLGK_FORM_LAST, DLGK_FORM_NEXT, DLGK_FORM_PREV, /* moving within a grid */ DLGK_GRID_UP, DLGK_GRID_DOWN, DLGK_GRID_LEFT, DLGK_GRID_RIGHT, /* delete */ DLGK_DELETE_LEFT, DLGK_DELETE_RIGHT, DLGK_DELETE_ALL, /* special */ DLGK_ENTER, DLGK_BEGIN, DLGK_FINAL, DLGK_SELECT, DLGK_HELPFILE, DLGK_TRACE, - DLGK_TOGGLE + DLGK_TOGGLE, + DLGK_LEAVE } DLG_KEYS_ENUM; #define is_DLGK_MOUSE(code) ((code) >= M_EVENT) #define DLGK_MOUSE(code) ((code) + M_EVENT) #define HELPKEY_BINDINGS \ DLG_KEYS_DATA( DLGK_HELPFILE, CHR_HELP ), \ DLG_KEYS_DATA( DLGK_HELPFILE, KEY_F(1) ), \ DLG_KEYS_DATA( DLGK_HELPFILE, KEY_HELP ) #define ENTERKEY_BINDINGS \ DLG_KEYS_DATA( DLGK_ENTER, '\n' ), \ DLG_KEYS_DATA( DLGK_ENTER, '\r' ), \ - DLG_KEYS_DATA( DLGK_ENTER, KEY_ENTER ) + DLG_KEYS_DATA( DLGK_ENTER, KEY_ENTER ), \ + DLG_KEYS_DATA( DLGK_LEAVE, CHR_LEAVE ) /* ^U == 21 */ #define INPUTSTR_BINDINGS \ DLG_KEYS_DATA( DLGK_BEGIN, KEY_HOME ), \ DLG_KEYS_DATA( DLGK_DELETE_ALL, CHR_KILL ), \ DLG_KEYS_DATA( DLGK_DELETE_LEFT, CHR_BACKSPACE ), \ DLG_KEYS_DATA( DLGK_DELETE_LEFT, KEY_BACKSPACE ), \ DLG_KEYS_DATA( DLGK_DELETE_RIGHT, CHR_DELETE ), \ DLG_KEYS_DATA( DLGK_DELETE_RIGHT, KEY_DC ), \ DLG_KEYS_DATA( DLGK_FINAL, KEY_END ), \ DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), \ DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ) #define SCROLL_FKEY_BINDINGS \ DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), \ DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), \ DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \ DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ) #define SCROLLKEY_BINDINGS \ SCROLL_FKEY_BINDINGS, \ DLG_KEYS_DATA( DLGK_GRID_DOWN, 'J' ), \ DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), \ DLG_KEYS_DATA( DLGK_GRID_UP, 'K' ), \ DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), \ DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), \ DLG_KEYS_DATA( DLGK_PAGE_LAST, 'G' ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'F' ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'f' ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, 'B' ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, 'b' ) #define TRAVERSE_BINDINGS \ DLG_KEYS_DATA( DLGK_ENTER, CHR_SPACE ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ) #define TOGGLEKEY_BINDINGS \ DLG_KEYS_DATA( DLGK_TOGGLE, CHR_SPACE ) +extern int dlg_button_key(int /*exit_code*/, int * /*button*/, int * /*dialog_key*/, int * /*fkey*/); extern int dlg_lookup_key(WINDOW * /*win*/, int /*curses_key*/, int * /*dialog_key*/); +extern int dlg_ok_button_key(int /*exit_code*/, int * /*button*/, int * /*dialog_key*/, int * /*fkey*/); extern int dlg_result_key(int /*dialog_key*/, int /*fkey*/, int * /*resultp*/); extern void dlg_register_buttons(WINDOW * /*win*/, const char * /*name*/, const char ** /*buttons*/); extern void dlg_register_window(WINDOW * /*win*/, const char * /*name*/, DLG_KEYS_BINDING * /*binding*/); extern void dlg_unregister_window(WINDOW * /*win*/); #ifdef HAVE_RC_FILE extern int dlg_parse_bindkey(char * /*params*/); extern void dlg_dump_keys(FILE * /*fp*/); extern void dlg_dump_window_keys(FILE * /*fp*/, WINDOW * /*win*/); #endif #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* DLG_KEYS_H_included */ diff --git a/editbox.c b/editbox.c index db0620d8f94b..1ea80dd6384a 100644 --- a/editbox.c +++ b/editbox.c @@ -1,760 +1,771 @@ /* - * $Id: editbox.c,v 1.70 2018/06/19 22:57:01 tom Exp $ + * $Id: editbox.c,v 1.80 2020/11/23 00:27:21 tom Exp $ * * editbox.c -- implements the edit box * - * Copyright 2007-2016,2018 Thomas E. Dickey + * Copyright 2007-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> #include <sys/stat.h> #define sTEXT -1 static void fail_list(void) { dlg_exiterr("File too large"); } static void grow_list(char ***list, int *have, int want) { if (want > *have) { size_t last = (size_t) *have; size_t need = (size_t) (want | 31) + 3; *have = (int) need; (*list) = dlg_realloc(char *, need, *list); if ((*list) == 0) { fail_list(); } else { while (++last < need) { (*list)[last] = 0; } } } } static void load_list(const char *file, char ***list, int *rows) { - FILE *fp; char *blob = 0; struct stat sb; - unsigned n, pass; - unsigned need; size_t size; *list = 0; *rows = 0; if (stat(file, &sb) < 0 || (sb.st_mode & S_IFMT) != S_IFREG) dlg_exiterr("Not a file: %s", file); size = (size_t) sb.st_size; if ((blob = dlg_malloc(char, size + 2)) == 0) { fail_list(); } else { + FILE *fp; + unsigned n, pass; + blob[size] = '\0'; if ((fp = fopen(file, "r")) == 0) dlg_exiterr("Cannot open: %s", file); size = fread(blob, sizeof(char), size, fp); fclose(fp); /* * If the file is not empty, ensure that it ends with a newline. */ if (size != 0 && blob[size - 1] != '\n') { blob[++size - 1] = '\n'; blob[size] = '\0'; } for (pass = 0; pass < 2; ++pass) { int first = TRUE; - need = 0; + unsigned need = 0; + for (n = 0; n < size; ++n) { if (first && pass) { (*list)[need] = blob + n; first = FALSE; } if (blob[n] == '\n') { first = TRUE; ++need; if (pass) blob[n] = '\0'; } } if (pass) { if (need == 0) { (*list)[0] = dlg_strclone(""); (*list)[1] = 0; } else { for (n = 0; n < need; ++n) { (*list)[n] = dlg_strclone((*list)[n]); } (*list)[need] = 0; } } else { grow_list(list, rows, (int) need + 1); } } free(blob); } } static void free_list(char ***list, int *rows) { if (*list != 0) { int n; for (n = 0; n < (*rows); ++n) { if ((*list)[n] != 0) free((*list)[n]); } free(*list); *list = 0; } *rows = 0; } /* * Display a single row in the editing window: * thisrow is the actual row number that's being displayed. * show_row is the row number that's highlighted for edit. * base_row is the first row number in the window */ static bool display_one(WINDOW *win, char *text, int thisrow, int show_row, int base_row, int chr_offset) { bool result; if (text != 0) { dlg_show_string(win, text, chr_offset, ((thisrow == show_row) ? form_active_text_attr : form_text_attr), thisrow - base_row, 0, getmaxx(win), FALSE, FALSE); result = TRUE; } else { result = FALSE; } return result; } static void display_all(WINDOW *win, char **list, int show_row, int firstrow, int lastrow, int chr_offset) { int limit = getmaxy(win); int row; dlg_attr_clear(win, getmaxy(win), getmaxx(win), dialog_attr); if (lastrow - firstrow >= limit) lastrow = firstrow + limit; for (row = firstrow; row < lastrow; ++row) { if (!display_one(win, list[row], row, show_row, firstrow, (row == show_row) ? chr_offset : 0)) break; } } static int size_list(char **list) { int result = 0; if (list != 0) { while (*list++ != 0) { ++result; } } return result; } static bool scroll_to(int pagesize, int rows, int *base_row, int *this_row, int target) { bool result = FALSE; if (target < *base_row) { if (target < 0) { if (*base_row == 0 && *this_row == 0) { beep(); } else { *this_row = 0; *base_row = 0; result = TRUE; } } else { *this_row = target; *base_row = target; result = TRUE; } } else if (target >= rows) { if (*this_row < rows - 1) { *this_row = rows - 1; *base_row = rows - 1; result = TRUE; } else { beep(); } } else if (target >= *base_row + pagesize) { *this_row = target; *base_row = target; result = TRUE; } else { *this_row = target; result = FALSE; } if (pagesize < rows) { if (*base_row + pagesize >= rows) { *base_row = rows - pagesize; } } else { *base_row = 0; } return result; } static int col_to_chr_offset(const char *text, int col) { const int *cols = dlg_index_columns(text); const int *indx = dlg_index_wchars(text); bool found = FALSE; int result = 0; unsigned n; unsigned len = (unsigned) dlg_count_wchars(text); for (n = 0; n < len; ++n) { if (cols[n] <= col && cols[n + 1] > col) { result = indx[n]; found = TRUE; break; } } if (!found && len && cols[len] == col) { result = indx[len]; } return result; } -#define SCROLL_TO(target) show_all = scroll_to(pagesize, listsize, &base_row, &thisrow, target) +#define Scroll_To(target) scroll_to(pagesize, listsize, &base_row, &thisrow, target) +#define SCROLL_TO(target) show_all = Scroll_To(target) #define PREV_ROW (*list)[thisrow - 1] #define THIS_ROW (*list)[thisrow] #define NEXT_ROW (*list)[thisrow + 1] #define UPDATE_COL(input) col_offset = dlg_edit_offset(input, chr_offset, box_width) static int widest_line(char **list) { int result = MAX_LEN; - char *value; if (list != 0) { + char *value; + while ((value = *list++) != 0) { int check = (int) strlen(value); if (check > result) result = check; } } return result; } #define NAVIGATE_BINDINGS \ DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), \ DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), \ DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), \ DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \ DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), \ DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_LL ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE) ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ) /* * Display a dialog box for editing a copy of a file */ int dlg_editbox(const char *title, char ***list, int *rows, int height, int width) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; static DLG_KEYS_BINDING binding2[] = { INPUTSTR_BINDINGS, HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, /* no TOGGLEKEY_BINDINGS, since that includes space... */ END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif int x, y, box_y, box_x, box_height, box_width; int show_buttons; int thisrow, base_row, lastrow; int goal_col = -1; int col_offset = 0; int chr_offset = 0; int key, fkey, code; int pagesize; int listsize = size_list(*list); int result = DLG_EXIT_UNKNOWN; int state; size_t max_len = (size_t) dlg_max_input(widest_line(*list)); - char *input, *buffer; - bool show_all, show_one, was_mouse; + char *buffer; + bool show_all, show_one; bool first_trace = TRUE; WINDOW *dialog; WINDOW *editing; DIALOG_VARS save_vars; const char **buttons = dlg_ok_labels(); int mincols = (3 * COLS / 4); DLG_TRACE(("# editbox args:\n")); DLG_TRACE2S("title", title); /* FIXME dump the rows & list */ DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); dlg_save_vars(&save_vars); dialog_vars.separate_output = TRUE; dlg_does_output(); buffer = dlg_malloc(char, max_len + 1); assert_ptr(buffer, "dlg_editbox"); thisrow = base_row = lastrow = 0; #ifdef KEY_RESIZE retry: #endif show_buttons = TRUE; state = dialog_vars.default_button >= 0 ? dlg_default_button() : sTEXT; fkey = 0; dlg_button_layout(buttons, &mincols); dlg_auto_size(title, "", &height, &width, 3 * LINES / 4, mincols); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); dlg_register_window(dialog, "editbox", binding); dlg_register_buttons(dialog, "editbox", buttons); dlg_mouse_setbase(x, y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); /* Draw the editing field in a box */ box_y = MARGIN + 0; box_x = MARGIN + 1; box_width = width - 2 - (2 * MARGIN); box_height = height - (4 * MARGIN); dlg_draw_box(dialog, box_y, box_x, box_height, box_width, border_attr, border2_attr); dlg_mouse_mkbigregion(box_y + MARGIN, box_x + MARGIN, box_height - (2 * MARGIN), box_width - (2 * MARGIN), KEY_MAX, 1, 1, 3); editing = dlg_sub_window(dialog, box_height - (2 * MARGIN), box_width - (2 * MARGIN), getbegy(dialog) + box_y + 1, getbegx(dialog) + box_x + 1); dlg_register_window(editing, "editbox2", binding2); show_all = TRUE; show_one = FALSE; pagesize = getmaxy(editing); while (result == DLG_EXIT_UNKNOWN) { - int edit = 0; + bool was_mouse; + char *input; if (show_all) { display_all(editing, *list, thisrow, base_row, listsize, chr_offset); display_one(editing, THIS_ROW, thisrow, thisrow, base_row, chr_offset); show_all = FALSE; show_one = TRUE; } else { if (thisrow != lastrow) { display_one(editing, (*list)[lastrow], lastrow, thisrow, base_row, 0); show_one = TRUE; } } if (show_one) { display_one(editing, THIS_ROW, thisrow, thisrow, base_row, chr_offset); getyx(editing, y, x); dlg_draw_scrollbar(dialog, base_row, base_row, base_row + pagesize, listsize, box_x, box_x + getmaxx(editing), box_y + 0, box_y + getmaxy(editing) + 1, border2_attr, border_attr); wmove(editing, y, x); show_one = FALSE; } lastrow = thisrow; input = THIS_ROW; /* * The last field drawn determines where the cursor is shown: */ if (show_buttons) { show_buttons = FALSE; UPDATE_COL(input); if (state != sTEXT) { display_one(editing, input, thisrow, -1, base_row, 0); wrefresh(editing); } dlg_draw_buttons(dialog, height - 2, 0, buttons, (state != sTEXT) ? state : 99, FALSE, width); if (state == sTEXT) { display_one(editing, input, thisrow, thisrow, base_row, chr_offset); } } if (first_trace) { first_trace = FALSE; dlg_trace_win(dialog); } key = dlg_mouse_wgetch((state == sTEXT) ? editing : dialog, &fkey); if (key == ERR) { result = DLG_EXIT_ERROR; break; } else if (key == ESC) { result = DLG_EXIT_ESC; break; } if (state != sTEXT) { - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &code, &key, &fkey)) + break; + } } was_mouse = (fkey && is_DLGK_MOUSE(key)); if (was_mouse) key -= M_EVENT; /* * Handle mouse clicks first, since we want to know if this is a * button, or something that dlg_edit_string() should handle. */ if (fkey && was_mouse && (code = dlg_ok_buttoncode(key)) >= 0) { result = code; continue; } if (was_mouse && (key >= KEY_MAX)) { int wide = getmaxx(editing); int cell = key - KEY_MAX; int check = (cell / wide) + base_row; if (check < listsize) { thisrow = check; col_offset = (cell % wide); chr_offset = col_to_chr_offset(THIS_ROW, col_offset); show_one = TRUE; if (state != sTEXT) { state = sTEXT; show_buttons = TRUE; } } else { beep(); } continue; } else if (was_mouse && key >= KEY_MIN) { key = dlg_lookup_key(dialog, key, &fkey); } if (state == sTEXT) { /* editing box selected */ + int edit = 0; + /* * Intercept scrolling keys that dlg_edit_string() does not * understand. */ if (fkey) { bool moved = TRUE; switch (key) { case DLGK_GRID_UP: SCROLL_TO(thisrow - 1); break; case DLGK_GRID_DOWN: SCROLL_TO(thisrow + 1); break; case DLGK_PAGE_FIRST: SCROLL_TO(0); break; case DLGK_PAGE_LAST: SCROLL_TO(listsize); break; case DLGK_PAGE_NEXT: SCROLL_TO(base_row + pagesize); break; case DLGK_PAGE_PREV: if (thisrow > base_row) { SCROLL_TO(base_row); } else { SCROLL_TO(base_row - pagesize); } break; case DLGK_DELETE_LEFT: if (chr_offset == 0) { if (thisrow == 0) { beep(); } else { size_t len = (strlen(THIS_ROW) + strlen(PREV_ROW) + 1); char *tmp = dlg_malloc(char, len); assert_ptr(tmp, "dlg_editbox"); chr_offset = dlg_count_wchars(PREV_ROW); UPDATE_COL(PREV_ROW); goal_col = col_offset; sprintf(tmp, "%s%s", PREV_ROW, THIS_ROW); if (len > max_len) tmp[max_len] = '\0'; free(PREV_ROW); PREV_ROW = tmp; for (y = thisrow; y < listsize; ++y) { (*list)[y] = (*list)[y + 1]; } --listsize; --thisrow; - SCROLL_TO(thisrow); + (void) Scroll_To(thisrow); show_all = TRUE; } } else { /* dlg_edit_string() can handle this case */ moved = FALSE; } break; default: moved = FALSE; break; } if (moved) { if (thisrow != lastrow) { if (goal_col < 0) goal_col = col_offset; chr_offset = col_to_chr_offset(THIS_ROW, goal_col); } else { UPDATE_COL(THIS_ROW); } continue; } } strncpy(buffer, input, max_len - 1)[max_len - 1] = '\0'; edit = dlg_edit_string(buffer, &chr_offset, key, fkey, FALSE); if (edit) { goal_col = UPDATE_COL(input); if (strcmp(input, buffer)) { free(input); THIS_ROW = dlg_strclone(buffer); input = THIS_ROW; } display_one(editing, input, thisrow, thisrow, base_row, chr_offset); continue; } } /* handle non-functionkeys */ if (!fkey && (code = dlg_char_to_button(key, buttons)) >= 0) { dlg_del_window(dialog); result = dlg_ok_buttoncode(code); continue; } /* handle functionkeys */ if (fkey) { switch (key) { case DLGK_GRID_UP: case DLGK_GRID_LEFT: case DLGK_FIELD_PREV: show_buttons = TRUE; state = dlg_prev_ok_buttonindex(state, sTEXT); break; case DLGK_GRID_RIGHT: case DLGK_GRID_DOWN: case DLGK_FIELD_NEXT: show_buttons = TRUE; state = dlg_next_ok_buttonindex(state, sTEXT); break; case DLGK_ENTER: if (state == sTEXT) { const int *indx = dlg_index_wchars(THIS_ROW); int split = indx[chr_offset]; char *tmp = dlg_strclone(THIS_ROW + split); assert_ptr(tmp, "dlg_editbox"); grow_list(list, rows, listsize + 1); ++listsize; for (y = listsize; y > thisrow; --y) { (*list)[y] = (*list)[y - 1]; } THIS_ROW[split] = '\0'; ++thisrow; chr_offset = 0; col_offset = 0; THIS_ROW = tmp; - SCROLL_TO(thisrow); + (void) Scroll_To(thisrow); show_all = TRUE; } else { - result = dlg_ok_buttoncode(state); + result = dlg_enter_buttoncode(state); } break; + case DLGK_LEAVE: + if (state >= 0) + result = dlg_ok_buttoncode(state); + break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; - dlg_clear(); - dlg_unregister_window(editing); - dlg_del_window(editing); - dlg_del_window(dialog); - dlg_mouse_free_regions(); /* repaint */ + dlg_del_window(editing); + dlg_unregister_window(editing); + _dlg_resize_cleanup(dialog); goto retry; #endif case DLGK_TOGGLE: if (state != sTEXT) { result = dlg_ok_buttoncode(state); } else { beep(); } break; default: beep(); break; } - } else { + } else if (key > 0) { beep(); } } dlg_unregister_window(editing); dlg_del_window(editing); dlg_del_window(dialog); dlg_mouse_free_regions(); /* * The caller's copy of the (*list)[] array has been updated, but for * consistency with the other widgets, we put the "real" result in * the output buffer. */ if (result == DLG_EXIT_OK) { int n; for (n = 0; n < listsize; ++n) { dlg_add_result((*list)[n]); dlg_add_separator(); } dlg_add_last_key(-1); } free(buffer); dlg_restore_vars(&save_vars); return result; } int dialog_editbox(const char *title, const char *file, int height, int width) { int result; char **list; int rows; load_list(file, &list, &rows); result = dlg_editbox(title, &list, &rows, height, width); free_list(&list, &rows); return result; } diff --git a/formbox.c b/formbox.c index a5de87668d22..1a4faae06625 100644 --- a/formbox.c +++ b/formbox.c @@ -1,998 +1,1002 @@ /* - * $Id: formbox.c,v 1.95 2018/06/21 08:23:31 tom Exp $ + * $Id: formbox.c,v 1.103 2021/01/17 22:19:05 tom Exp $ * * formbox.c -- implements the form (i.e., some pairs label/editbox) * - * Copyright 2003-2016,2018 Thomas E. Dickey + * Copyright 2003-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * This is adapted from source contributed by * Valery Reznic (valery_reznic@users.sourceforge.net) */ #include <dialog.h> #include <dlg_keys.h> #define LLEN(n) ((n) * FORMBOX_TAGS) #define ItemName(i) items[LLEN(i) + 0] #define ItemNameY(i) items[LLEN(i) + 1] #define ItemNameX(i) items[LLEN(i) + 2] #define ItemText(i) items[LLEN(i) + 3] #define ItemTextY(i) items[LLEN(i) + 4] #define ItemTextX(i) items[LLEN(i) + 5] #define ItemTextFLen(i) items[LLEN(i) + 6] #define ItemTextILen(i) items[LLEN(i) + 7] #define ItemHelp(i) (dialog_vars.item_help ? items[LLEN(i) + 8] : dlg_strempty()) static bool is_readonly(DIALOG_FORMITEM * item) { return ((item->type & 2) != 0) || (item->text_flen <= 0); } static bool is_hidden(DIALOG_FORMITEM * item) { return ((item->type & 1) != 0); } static bool in_window(WINDOW *win, int scrollamt, int y) { return (y >= scrollamt && y - scrollamt < getmaxy(win)); } static bool ok_move(WINDOW *win, int scrollamt, int y, int x) { return in_window(win, scrollamt, y) && (wmove(win, y - scrollamt, x) != ERR); } static void move_past(WINDOW *win, int y, int x) { if (wmove(win, y, x) == ERR) wmove(win, y, getmaxx(win) - 1); } /* * Print form item */ static int print_item(WINDOW *win, DIALOG_FORMITEM * item, int scrollamt, bool choice) { int count = 0; int len; if (ok_move(win, scrollamt, item->name_y, item->name_x)) { len = item->name_len; len = MIN(len, getmaxx(win) - item->name_x); if (len > 0) { dlg_show_string(win, item->name, 0, menubox_attr, item->name_y - scrollamt, item->name_x, len, FALSE, FALSE); move_past(win, item->name_y - scrollamt, item->name_x + len); count = 1; } } if (item->text_len && ok_move(win, scrollamt, item->text_y, item->text_x)) { chtype this_item_attribute; len = item->text_len; len = MIN(len, getmaxx(win) - item->text_x); if (!is_readonly(item)) { this_item_attribute = choice ? form_active_text_attr : form_text_attr; } else { this_item_attribute = form_item_readonly_attr; } if (len > 0) { dlg_show_string(win, item->text, 0, this_item_attribute, item->text_y - scrollamt, item->text_x, len, is_hidden(item), FALSE); move_past(win, item->text_y - scrollamt, item->text_x + len); count = 1; } } return count; } /* * Print the entire form. */ static void print_form(WINDOW *win, DIALOG_FORMITEM * item, int total, int scrollamt, int choice) { int n; int count = 0; for (n = 0; n < total; ++n) { count += print_item(win, item + n, scrollamt, n == choice); } if (count) { wbkgdset(win, menubox_attr | ' '); wclrtobot(win); (void) wnoutrefresh(win); } } static int set_choice(DIALOG_FORMITEM item[], int choice, int item_no, bool * noneditable) { int result = -1; - int i; *noneditable = FALSE; if (!is_readonly(&item[choice])) { result = choice; } else { + int i; + for (i = 0; i < item_no; i++) { if (!is_readonly(&(item[i]))) { result = i; break; } } if (result < 0) { *noneditable = TRUE; result = 0; } } return result; } /* * Find the last y-value in the form. */ static int form_limit(DIALOG_FORMITEM item[]) { int n; int limit = 0; for (n = 0; item[n].name != 0; ++n) { if (limit < item[n].name_y) limit = item[n].name_y; if (limit < item[n].text_y) limit = item[n].text_y; } return limit; } static int is_first_field(DIALOG_FORMITEM item[], int choice) { int count = 0; while (choice >= 0) { if (item[choice].text_flen > 0) { ++count; } --choice; } return (count == 1); } static int is_last_field(DIALOG_FORMITEM item[], int choice, int item_no) { int count = 0; while (choice < item_no) { if (item[choice].text_flen > 0) { ++count; } ++choice; } return (count == 1); } /* * Tab to the next field. */ static bool tab_next(WINDOW *win, DIALOG_FORMITEM item[], int item_no, int stepsize, int *choice, int *scrollamt) { int old_choice = *choice; int old_scroll = *scrollamt; bool wrapped = FALSE; do { do { *choice += stepsize; if (*choice < 0) { *choice = item_no - 1; wrapped = TRUE; } else if (*choice >= item_no) { *choice = 0; wrapped = TRUE; } } while ((*choice != old_choice) && is_readonly(&(item[*choice]))); if (item[*choice].text_flen > 0) { int lo = MIN(item[*choice].name_y, item[*choice].text_y); int hi = MAX(item[*choice].name_y, item[*choice].text_y); if (old_choice == *choice) break; print_item(win, item + old_choice, *scrollamt, FALSE); if (*scrollamt < lo + 1 - getmaxy(win)) *scrollamt = lo + 1 - getmaxy(win); if (*scrollamt > hi) *scrollamt = hi; /* * If we have to scroll to show a wrap-around, it does get * confusing. Just give up rather than scroll. Tab'ing to the * next field in a multi-column form is a different matter. Scroll * for that. */ if (*scrollamt != old_scroll) { if (wrapped) { beep(); *scrollamt = old_scroll; *choice = old_choice; } else { scrollok(win, TRUE); wscrl(win, *scrollamt - old_scroll); scrollok(win, FALSE); } } break; } } while (*choice != old_choice); return (old_choice != *choice) || (old_scroll != *scrollamt); } /* * Scroll to the next page, putting the choice at the first editable field * in that page. Note that fields are not necessarily in top-to-bottom order, * nor is there necessarily a field on each row of the window. */ static bool scroll_next(WINDOW *win, DIALOG_FORMITEM item[], int stepsize, int *choice, int *scrollamt) { bool result = TRUE; int old_choice = *choice; int old_scroll = *scrollamt; int old_row = MIN(item[old_choice].text_y, item[old_choice].name_y); int target = old_scroll + stepsize; - int n; if (stepsize < 0) { if (old_row != old_scroll) target = old_scroll; else target = old_scroll + stepsize; if (target < 0) { result = FALSE; } } else { if (target > form_limit(item)) { result = FALSE; } } if (result) { + int n; + for (n = 0; item[n].name != 0; ++n) { if (item[n].text_flen > 0) { int new_row = MIN(item[n].text_y, item[n].name_y); if (abs(new_row - target) < abs(old_row - target)) { old_row = new_row; *choice = n; } } } if (old_choice != *choice) print_item(win, item + old_choice, *scrollamt, FALSE); *scrollamt = *choice; if (*scrollamt != old_scroll) { scrollok(win, TRUE); wscrl(win, *scrollamt - old_scroll); scrollok(win, FALSE); } result = (old_choice != *choice) || (old_scroll != *scrollamt); } if (!result) beep(); return result; } /* * Do a sanity check on the field length, and return the "right" value. */ static int real_length(DIALOG_FORMITEM * item) { return (item->text_flen > 0 ? item->text_flen : (item->text_flen < 0 ? -item->text_flen : item->text_len)); } /* * Compute the form size, setup field buffers. */ static void make_FORM_ELTs(DIALOG_FORMITEM * item, int item_no, int *min_height, int *min_width) { int i; int min_w = 0; int min_h = 0; for (i = 0; i < item_no; ++i) { int real_len = real_length(item + i); /* * Special value '0' for text_flen: no input allowed * Special value '0' for text_ilen: 'be the same as text_flen' */ if (item[i].text_ilen == 0) item[i].text_ilen = real_len; min_h = MAX(min_h, item[i].name_y + 1); min_h = MAX(min_h, item[i].text_y + 1); min_w = MAX(min_w, item[i].name_x + 1 + item[i].name_len); min_w = MAX(min_w, item[i].text_x + 1 + real_len); item[i].text_len = real_length(item + i); /* * We do not know the actual length of .text, so we allocate it here * to ensure it is big enough. */ if (item[i].text_flen > 0) { int max_len = dlg_max_input(MAX(item[i].text_ilen + 1, MAX_LEN)); char *old_text = item[i].text; item[i].text = dlg_malloc(char, (size_t) max_len + 1); assert_ptr(item[i].text, "make_FORM_ELTs"); sprintf(item[i].text, "%.*s", item[i].text_ilen, old_text); if (item[i].text_free) { - item[i].text_free = FALSE; free(old_text); } item[i].text_free = TRUE; } } *min_height = min_h; *min_width = min_w; } int dlg_default_formitem(DIALOG_FORMITEM * items) { int result = 0; if (dialog_vars.default_item != 0) { int count = 0; while (items->name != 0) { if (!strcmp(dialog_vars.default_item, items->name)) { result = count; break; } ++items; count++; } } return result; } #define sTEXT -1 static int next_valid_buttonindex(int state, int extra, bool non_editable) { state = dlg_next_ok_buttonindex(state, extra); while (non_editable && state == sTEXT) state = dlg_next_ok_buttonindex(state, sTEXT); return state; } static int prev_valid_buttonindex(int state, int extra, bool non_editable) { state = dlg_prev_ok_buttonindex(state, extra); while (non_editable && state == sTEXT) state = dlg_prev_ok_buttonindex(state, sTEXT); return state; } #define NAVIGATE_BINDINGS \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_RIGHT ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NEXT ), \ DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), \ DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_PREVIOUS ), \ DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_LEFT ), \ DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ) /* * Display a form for entering a number of fields */ int dlg_form(const char *title, const char *cprompt, int height, int width, int form_height, int item_no, DIALOG_FORMITEM * items, int *current_item) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; static DLG_KEYS_BINDING binding2[] = { INPUTSTR_BINDINGS, HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, /* no TOGGLEKEY_BINDINGS, since that includes space... */ END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif int form_width; bool first = TRUE; bool first_trace = TRUE; int chr_offset = 0; int state = (dialog_vars.default_button >= 0 ? dlg_default_button() : sTEXT); int x, y, cur_x, cur_y, box_x, box_y; int code; - int key = 0; int fkey; int choice = dlg_default_formitem(items); int new_choice, new_scroll; int scrollamt = 0; int result = DLG_EXIT_UNKNOWN; int min_width = 0, min_height = 0; bool was_autosize = (height == 0 || width == 0); bool show_buttons = FALSE; bool scroll_changed = FALSE; bool field_changed = FALSE; bool non_editable = FALSE; WINDOW *dialog, *form; char *prompt; const char **buttons = dlg_ok_labels(); DIALOG_FORMITEM *current; DLG_TRACE(("# %sform args:\n", (dialog_vars.formitem_type ? "password" : ""))); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("lheight", form_height); DLG_TRACE2N("llength", item_no); /* FIXME dump the items[][] too */ DLG_TRACE2N("current", *current_item); make_FORM_ELTs(items, item_no, &min_height, &min_width); dlg_button_layout(buttons, &min_width); dlg_does_output(); #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); dlg_auto_size(title, prompt, &height, &width, 1 + 3 * MARGIN, MAX(26, 2 + min_width)); if (form_height == 0) form_height = min_height; if (was_autosize) { form_height = MIN(SLINES - height, form_height); height += form_height; } else { int thigh = 0; int twide = 0; dlg_auto_size(title, prompt, &thigh, &twide, 0, width); thigh = SLINES - (height - (thigh + 1 + 3 * MARGIN)); form_height = MIN(thigh, form_height); } dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); dlg_register_window(dialog, "formbox", binding); dlg_register_buttons(dialog, "formbox", buttons); dlg_mouse_setbase(x, y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); form_width = width - 6; getyx(dialog, cur_y, cur_x); (void) cur_x; box_y = cur_y + 1; box_x = (width - form_width) / 2 - 1; /* create new window for the form */ form = dlg_sub_window(dialog, form_height, form_width, y + box_y + 1, x + box_x + 1); dlg_register_window(form, "formfield", binding2); /* draw a box around the form items */ dlg_draw_box(dialog, box_y, box_x, form_height + 2, form_width + 2, menubox_border_attr, menubox_border2_attr); /* register the new window, along with its borders */ dlg_mouse_mkbigregion(getbegy(form) - getbegy(dialog), getbegx(form) - getbegx(dialog), getmaxy(form), getmaxx(form), KEY_MAX, 1, 1, 3 /* by cells */ ); show_buttons = TRUE; scroll_changed = TRUE; choice = set_choice(items, choice, item_no, &non_editable); current = &items[choice]; if (non_editable) state = next_valid_buttonindex(state, sTEXT, non_editable); while (result == DLG_EXIT_UNKNOWN) { int edit = FALSE; + int key; if (scroll_changed) { print_form(form, items, item_no, scrollamt, choice); dlg_draw_scrollbar(dialog, scrollamt, scrollamt, scrollamt + form_height + 1, min_height, box_x + 1, box_x + form_width, box_y, box_y + form_height + 1, menubox_border2_attr, menubox_border_attr); scroll_changed = FALSE; } if (show_buttons) { dlg_item_help(""); dlg_draw_buttons(dialog, height - 2, 0, buttons, ((state < 0) ? 1000 /* no such button, not highlighted */ : state), FALSE, width); show_buttons = FALSE; } if (first_trace) { first_trace = FALSE; dlg_trace_win(dialog); } if (field_changed || state == sTEXT) { if (field_changed) chr_offset = 0; current = &items[choice]; dialog_vars.max_input = current->text_ilen; dlg_item_help(current->help); dlg_show_string(form, current->text, chr_offset, form_active_text_attr, current->text_y - scrollamt, current->text_x, current->text_len, is_hidden(current), first); wsyncup(form); wcursyncup(form); field_changed = FALSE; } key = dlg_mouse_wgetch((state == sTEXT) ? form : dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) + if (dlg_result_key(key, fkey, &result)) { break; + } /* handle non-functionkeys */ if (!fkey) { if (state != sTEXT) { code = dlg_char_to_button(key, buttons); if (code >= 0) { dlg_del_window(dialog); result = dlg_ok_buttoncode(code); continue; } } } /* handle functionkeys */ if (fkey) { bool do_scroll = FALSE; bool do_tab = FALSE; int move_by = 0; switch (key) { case DLGK_MOUSE(KEY_PPAGE): case DLGK_PAGE_PREV: do_scroll = TRUE; move_by = -form_height; break; case DLGK_MOUSE(KEY_NPAGE): case DLGK_PAGE_NEXT: do_scroll = TRUE; move_by = form_height; break; case DLGK_TOGGLE: case DLGK_ENTER: dlg_del_window(dialog); result = (state >= 0) ? dlg_enter_buttoncode(state) : DLG_EXIT_OK; continue; + case DLGK_LEAVE: + if (state >= 0) + result = dlg_ok_buttoncode(state); + break; case DLGK_GRID_LEFT: if (state == sTEXT) break; /* FALLTHRU */ case DLGK_ITEM_PREV: if (state == sTEXT) { do_tab = TRUE; move_by = -1; break; } else { state = prev_valid_buttonindex(state, 0, non_editable); show_buttons = TRUE; continue; } case DLGK_FORM_PREV: if (state == sTEXT && !is_first_field(items, choice)) { do_tab = TRUE; move_by = -1; break; } else { int old_state = state; state = prev_valid_buttonindex(state, sTEXT, non_editable); show_buttons = TRUE; if (old_state >= 0 && state == sTEXT) { new_choice = item_no - 1; if (choice != new_choice) { print_item(form, items + choice, scrollamt, FALSE); choice = new_choice; } } continue; } case DLGK_FIELD_PREV: state = prev_valid_buttonindex(state, sTEXT, non_editable); show_buttons = TRUE; continue; case DLGK_FIELD_NEXT: state = next_valid_buttonindex(state, sTEXT, non_editable); show_buttons = TRUE; continue; case DLGK_GRID_RIGHT: if (state == sTEXT) break; /* FALLTHRU */ case DLGK_ITEM_NEXT: if (state == sTEXT) { do_tab = TRUE; move_by = 1; break; } else { state = next_valid_buttonindex(state, 0, non_editable); show_buttons = TRUE; continue; } case DLGK_FORM_NEXT: if (state == sTEXT && !is_last_field(items, choice, item_no)) { do_tab = TRUE; move_by = 1; break; } else { state = next_valid_buttonindex(state, sTEXT, non_editable); show_buttons = TRUE; if (state == sTEXT && choice) { print_item(form, items + choice, scrollamt, FALSE); choice = 0; } continue; } #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; free(prompt); - dlg_clear(); + _dlg_resize_cleanup(dialog); dlg_unregister_window(form); - dlg_del_window(dialog); - dlg_mouse_free_regions(); /* repaint */ goto retry; #endif default: #if USE_MOUSE if (is_DLGK_MOUSE(key)) { if (key >= DLGK_MOUSE(KEY_MAX)) { int cell = key - DLGK_MOUSE(KEY_MAX); int row = (cell / getmaxx(form)) + scrollamt; int col = (cell % getmaxx(form)); int n; for (n = 0; n < item_no; ++n) { if (items[n].name_y == row && items[n].name_x <= col && (items[n].name_x + items[n].name_len > col || (items[n].name_y == items[n].text_y && items[n].text_x > col))) { if (!is_readonly(&(items[n]))) { field_changed = TRUE; break; } } if (items[n].text_y == row && items[n].text_x <= col && items[n].text_x + items[n].text_ilen > col) { if (!is_readonly(&(items[n]))) { field_changed = TRUE; break; } } } if (field_changed) { print_item(form, items + choice, scrollamt, FALSE); choice = n; continue; } beep(); } else if ((code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { result = code; } continue; } #endif break; } new_scroll = scrollamt; new_choice = choice; if (do_scroll) { if (scroll_next(form, items, move_by, &new_choice, &new_scroll)) { if (choice != new_choice) { choice = new_choice; field_changed = TRUE; } if (scrollamt != new_scroll) { scrollamt = new_scroll; scroll_changed = TRUE; } } continue; } if (do_tab) { if (tab_next(form, items, item_no, move_by, &new_choice, &new_scroll)) { if (choice != new_choice) { choice = new_choice; field_changed = TRUE; } if (scrollamt != new_scroll) { scrollamt = new_scroll; scroll_changed = TRUE; } } continue; } } if (state == sTEXT) { /* Input box selected */ if (!is_readonly(current)) edit = dlg_edit_string(current->text, &chr_offset, key, fkey, first); if (edit) { dlg_show_string(form, current->text, chr_offset, form_active_text_attr, current->text_y - scrollamt, current->text_x, current->text_len, is_hidden(current), first); continue; } } } dlg_mouse_free_regions(); dlg_unregister_window(form); dlg_del_window(dialog); free(prompt); *current_item = choice; return result; } /* * Free memory owned by a list of DIALOG_FORMITEM's. */ void dlg_free_formitems(DIALOG_FORMITEM * items) { int n; for (n = 0; items[n].name != 0; ++n) { if (items[n].name_free) free(items[n].name); if (items[n].text_free) free(items[n].text); if (items[n].help_free && items[n].help != dlg_strempty()) free(items[n].help); } free(items); } /* * The script accepts values beginning at 1, while curses starts at 0. */ int dlg_ordinate(const char *s) { int result = atoi(s); if (result > 0) --result; else result = 0; return result; } int dialog_form(const char *title, const char *cprompt, int height, int width, int form_height, int item_no, char **items) { int result; int choice = 0; int i; DIALOG_FORMITEM *listitems; DIALOG_VARS save_vars; bool show_status = FALSE; char *help_result; dlg_save_vars(&save_vars); dialog_vars.separate_output = TRUE; listitems = dlg_calloc(DIALOG_FORMITEM, (size_t) item_no + 1); assert_ptr(listitems, "dialog_form"); for (i = 0; i < item_no; ++i) { listitems[i].type = dialog_vars.formitem_type; listitems[i].name = ItemName(i); listitems[i].name_len = (int) strlen(ItemName(i)); listitems[i].name_y = dlg_ordinate(ItemNameY(i)); listitems[i].name_x = dlg_ordinate(ItemNameX(i)); listitems[i].text = ItemText(i); listitems[i].text_len = (int) strlen(ItemText(i)); listitems[i].text_y = dlg_ordinate(ItemTextY(i)); listitems[i].text_x = dlg_ordinate(ItemTextX(i)); listitems[i].text_flen = atoi(ItemTextFLen(i)); listitems[i].text_ilen = atoi(ItemTextILen(i)); listitems[i].help = ((dialog_vars.item_help) ? ItemHelp(i) : dlg_strempty()); } result = dlg_form(title, cprompt, height, width, form_height, item_no, listitems, &choice); switch (result) { case DLG_EXIT_OK: /* FALLTHRU */ case DLG_EXIT_EXTRA: show_status = TRUE; break; case DLG_EXIT_HELP: dlg_add_help_formitem(&result, &help_result, &listitems[choice]); show_status = dialog_vars.help_status; dlg_add_string(help_result); if (show_status) dlg_add_separator(); break; } if (show_status) { for (i = 0; i < item_no; i++) { if (listitems[i].text_flen > 0) { dlg_add_string(listitems[i].text); dlg_add_separator(); } } dlg_add_last_key(-1); } dlg_free_formitems(listitems); dlg_restore_vars(&save_vars); return result; } diff --git a/fselect.c b/fselect.c index a8e5d7eb926b..753805b27286 100644 --- a/fselect.c +++ b/fselect.c @@ -1,941 +1,962 @@ /* - * $Id: fselect.c,v 1.102 2018/06/21 23:28:04 tom Exp $ + * $Id: fselect.c,v 1.115 2021/01/16 17:19:15 tom Exp $ * * fselect.c -- implements the file-selector box * - * Copyright 2000-2017,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> #include <sys/types.h> #include <sys/stat.h> #if HAVE_DIRENT_H # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include <sys/ndir.h> # endif # if HAVE_SYS_DIR_H # include <sys/dir.h> # endif # if HAVE_NDIR_H # include <ndir.h> # endif #endif # if defined(_FILE_OFFSET_BITS) && defined(HAVE_STRUCT_DIRENT64) # if !defined(_LP64) && (_FILE_OFFSET_BITS == 64) # define DIRENT struct dirent64 # else # define DIRENT struct dirent # endif # else # define DIRENT struct dirent # endif #define EXT_WIDE 1 #define HDR_HIGH 1 #define BTN_HIGH (1 + 2 * MARGIN) /* Ok/Cancel, also input-box */ #define MIN_HIGH (HDR_HIGH - MARGIN + (BTN_HIGH * 2) + 4 * MARGIN) #define MIN_WIDE (2 * MAX(dlg_count_columns(d_label), dlg_count_columns(f_label)) + 6 * MARGIN + 2 * EXT_WIDE) #define MOUSE_D (KEY_MAX + 0) #define MOUSE_F (KEY_MAX + 10000) #define MOUSE_T (KEY_MAX + 20000) typedef enum { sDIRS = -3 ,sFILES = -2 ,sTEXT = -1 } STATES; typedef struct { WINDOW *par; /* parent window */ WINDOW *win; /* this window */ int length; /* length of the data[] array */ int offset; /* index of first item on screen */ int choice; /* index of the selection */ int mousex; /* base of mouse-code return-values */ unsigned allocd; char **data; } LIST; typedef struct { int length; char **data; } MATCH; static void init_list(LIST * list, WINDOW *par, WINDOW *win, int mousex) { list->par = par; list->win = win; list->length = 0; list->offset = 0; list->choice = 0; list->mousex = mousex; list->allocd = 0; list->data = 0; dlg_mouse_mkbigregion(getbegy(win), getbegx(win), getmaxy(win), getmaxx(win), mousex, 1, 1, 1 /* by lines */ ); } static char * leaf_of(char *path) { char *leaf = strrchr(path, '/'); if (leaf != 0) leaf++; else leaf = path; return leaf; } static char * data_of(LIST * list) { if (list != 0 && list->data != 0) return list->data[list->choice]; return 0; } static void free_list(LIST * list, int reinit) { - int n; - if (list->data != 0) { + int n; + for (n = 0; list->data[n] != 0; n++) free(list->data[n]); free(list->data); list->data = 0; } if (reinit) init_list(list, list->par, list->win, list->mousex); } static void add_to_list(LIST * list, char *text) { unsigned need; need = (unsigned) (list->length + 1); if (need + 1 > list->allocd) { list->allocd = 2 * (need + 1); if (list->data == 0) { list->data = dlg_malloc(char *, list->allocd); } else { list->data = dlg_realloc(char *, list->allocd, list->data); } assert_ptr(list->data, "add_to_list"); } list->data[list->length++] = dlg_strclone(text); list->data[list->length] = 0; } static void keep_visible(LIST * list) { int high = getmaxy(list->win); if (list->choice < list->offset) { list->offset = list->choice; } if (list->choice - list->offset >= high) list->offset = list->choice - high + 1; } #define Value(c) (int)((c) & 0xff) static int find_choice(char *target, LIST * list) { - int n; int choice = list->choice; - int len_1, len_2, cmp_1, cmp_2; if (*target == 0) { list->choice = 0; } else { + int n; + int len_1, cmp_1; + /* find the match with the longest length. If more than one has the * same length, choose the one with the closest match of the final * character. */ len_1 = 0; cmp_1 = 256; for (n = 0; n < list->length; n++) { char *a = target; char *b = list->data[n]; + int len_2, cmp_2; len_2 = 0; while ((*a != 0) && (*b != 0) && (*a == *b)) { a++; b++; len_2++; } cmp_2 = Value(*a) - Value(*b); if (cmp_2 < 0) cmp_2 = -cmp_2; if ((len_2 > len_1) || (len_1 == len_2 && cmp_2 < cmp_1)) { len_1 = len_2; cmp_1 = cmp_2; list->choice = n; } } } if (choice != list->choice) { keep_visible(list); } return (choice != list->choice); } static void display_list(LIST * list) { - int n; - int x; - int y; - int top; - int bottom; - if (list->win != 0) { + int n; + int x; + int y; + int top; + int bottom; + dlg_attr_clear(list->win, getmaxy(list->win), getmaxx(list->win), item_attr); for (n = list->offset; n < list->length && list->data[n]; n++) { y = n - list->offset; if (y >= getmaxy(list->win)) break; (void) wmove(list->win, y, 0); if (n == list->choice) dlg_attrset(list->win, item_selected_attr); (void) waddstr(list->win, list->data[n]); dlg_attrset(list->win, item_attr); } dlg_attrset(list->win, item_attr); getparyx(list->win, y, x); top = y - 1; bottom = y + getmaxy(list->win); dlg_draw_scrollbar(list->par, (long) list->offset, (long) list->offset, (long) (list->offset + getmaxy(list->win)), (long) (list->length), x + 1, x + getmaxx(list->win), top, bottom, menubox_border2_attr, menubox_border_attr); (void) wmove(list->win, list->choice - list->offset, 0); (void) wnoutrefresh(list->win); } } /* FIXME: see arrows.c * This workaround is used to allow two lists to have scroll-tabs at the same * time, by reassigning their return-values to be different. Just for * readability, we use the names of keys with similar connotations, though all * that is really required is that they're distinct, so we can put them in a * switch statement. */ +#if USE_MOUSE static void fix_arrows(LIST * list) { - int x; - int y; - int top; - int right; - int bottom; - if (list->win != 0) { + int x; + int y; + int top; + int right; + int bottom; + getparyx(list->win, y, x); top = y - 1; right = getmaxx(list->win); bottom = y + getmaxy(list->win); mouse_mkbutton(top, x, right, ((list->mousex == MOUSE_D) ? KEY_PREVIOUS : KEY_PPAGE)); mouse_mkbutton(bottom, x, right, ((list->mousex == MOUSE_D) ? KEY_NEXT : KEY_NPAGE)); } } +#else +#define fix_arrows(list) /* nothing */ +#endif + static bool show_list(char *target, LIST * list, bool keep) { bool changed = keep || find_choice(target, list); display_list(list); return changed; } /* * Highlight the closest match to 'target' in the given list, setting offset * to match. */ static bool show_both_lists(char *input, LIST * d_list, LIST * f_list, bool keep) { char *leaf = leaf_of(input); return show_list(leaf, d_list, keep) || show_list(leaf, f_list, keep); } /* * Move up/down in the given list */ static bool change_list(int choice, LIST * list) { if (data_of(list) != 0) { int last = list->length - 1; choice += list->choice; if (choice < 0) choice = 0; if (choice > last) choice = last; list->choice = choice; keep_visible(list); display_list(list); return TRUE; } return FALSE; } static void scroll_list(int direction, LIST * list) { if (data_of(list) != 0) { int length = getmaxy(list->win); if (change_list(direction * length, list)) return; } beep(); } static int compar(const void *a, const void *b) { return strcmp(*(const char *const *) a, *(const char *const *) b); } static void match(char *name, LIST * d_list, LIST * f_list, MATCH * match_list) { char *test = leaf_of(name); size_t test_len = strlen(test); char **matches = dlg_malloc(char *, (size_t) (d_list->length + f_list->length)); size_t data_len = 0; - int i; - for (i = 2; i < d_list->length; i++) { - if (strncmp(test, d_list->data[i], test_len) == 0) { - matches[data_len++] = d_list->data[i]; + + if (matches != 0) { + int i; + char **new_ptr; + + for (i = 2; i < d_list->length; i++) { + if (strncmp(test, d_list->data[i], test_len) == 0) { + matches[data_len++] = d_list->data[i]; + } } - } - for (i = 0; i < f_list->length; i++) { - if (strncmp(test, f_list->data[i], test_len) == 0) { - matches[data_len++] = f_list->data[i]; + for (i = 0; i < f_list->length; i++) { + if (strncmp(test, f_list->data[i], test_len) == 0) { + matches[data_len++] = f_list->data[i]; + } + } + if ((new_ptr = dlg_realloc(char *, data_len + 1, matches)) != 0) { + matches = new_ptr; + } else { + free(matches); + matches = 0; + data_len = 0; } } - matches = dlg_realloc(char *, data_len + 1, matches); match_list->data = matches; match_list->length = (int) data_len; } static void free_match(MATCH * match_list) { free(match_list->data); match_list->length = 0; } static int complete(char *name, LIST * d_list, LIST * f_list, char **buff_ptr) { MATCH match_list; char *test; size_t test_len; size_t i; - int j; char *buff; match(name, d_list, f_list, &match_list); if (match_list.length == 0) { + free(match_list.data); *buff_ptr = NULL; return 0; } test = match_list.data[0]; test_len = strlen(test); buff = dlg_malloc(char, test_len + 2); if (match_list.length == 1) { strcpy(buff, test); i = test_len; if (test == data_of(d_list)) { buff[test_len] = '/'; i++; } } else { + int j; + for (i = 0; i < test_len; i++) { char test_char = test[i]; if (test_char == '\0') break; for (j = 0; j < match_list.length; j++) { if (match_list.data[j][i] != test_char) { break; } } if (j == match_list.length) { (buff)[i] = test_char; } else break; } buff = dlg_realloc(char, i + 1, buff); } free_match(&match_list); buff[i] = '\0'; *buff_ptr = buff; return (i != 0); } static bool fill_lists(char *current, char *input, LIST * d_list, LIST * f_list, bool keep) { bool result = TRUE; bool rescan = FALSE; - DIR *dp; - DIRENT *de; struct stat sb; int n; char path[MAX_LEN + 1]; - char *leaf; /* check if we've updated the lists */ for (n = 0; current[n] && input[n]; n++) { if (current[n] != input[n]) break; } if (current[n] == input[n]) { result = FALSE; rescan = (n == 0 && d_list->length == 0); } else if (strchr(current + n, '/') == 0 && strchr(input + n, '/') == 0) { result = show_both_lists(input, d_list, f_list, keep); } else { rescan = TRUE; } if (rescan) { + DIR *dp; size_t have = strlen(input); + char *leaf; if (have > MAX_LEN) have = MAX_LEN; memcpy(current, input, have); current[have] = '\0'; /* refill the lists */ free_list(d_list, TRUE); free_list(f_list, TRUE); memcpy(path, current, have); path[have] = '\0'; if ((leaf = strrchr(path, '/')) != 0) { *++leaf = 0; } else { strcpy(path, "./"); leaf = path + strlen(path); } DLG_TRACE(("opendir '%s'\n", path)); if ((dp = opendir(path)) != 0) { + DIRENT *de; + while ((de = readdir(dp)) != 0) { size_t len = NAMLEN(de); if (len == 0 || (len + have + 2) >= MAX_LEN) continue; memcpy(leaf, de->d_name, len); leaf[len] = '\0'; if (stat(path, &sb) == 0) { if ((sb.st_mode & S_IFMT) == S_IFDIR) add_to_list(d_list, leaf); else if (f_list->win) add_to_list(f_list, leaf); } } (void) closedir(dp); /* sort the lists */ if (d_list->data != 0 && d_list->length > 1) { qsort(d_list->data, (size_t) d_list->length, sizeof(d_list->data[0]), compar); } if (f_list->data != 0 && f_list->length > 1) { qsort(f_list->data, (size_t) f_list->length, sizeof(f_list->data[0]), compar); } } (void) show_both_lists(input, d_list, f_list, FALSE); d_list->offset = d_list->choice; f_list->offset = f_list->choice; result = TRUE; } return result; } static bool usable_state(int state, LIST * dirs, LIST * files) { bool result; switch (state) { case sDIRS: result = (dirs->win != 0) && (data_of(dirs) != 0); break; case sFILES: result = (files->win != 0) && (data_of(files) != 0); break; default: result = TRUE; break; } return result; } #define which_list() ((state == sFILES) \ ? &f_list \ : ((state == sDIRS) \ ? &d_list \ : 0)) #define NAVIGATE_BINDINGS \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), \ DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NEXT ), \ DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), \ DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), \ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ) /* * Display a dialog box for entering a filename */ static int dlg_fselect(const char *title, const char *path, int height, int width, int dselect) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; static DLG_KEYS_BINDING binding2[] = { INPUTSTR_BINDINGS, HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; bool resized = FALSE; #endif int tbox_y, tbox_x, tbox_width, tbox_height; int dbox_y, dbox_x, dbox_width, dbox_height; int fbox_y, fbox_x, fbox_width, fbox_height; int show_buttons = TRUE; int offset = 0; int key = 0; int fkey = FALSE; int code; int result = DLG_EXIT_UNKNOWN; int state = dialog_vars.default_button >= 0 ? dlg_default_button() : sTEXT; int button; bool first = (state == sTEXT); bool first_trace = TRUE; char *input; char *completed; char current[MAX_LEN + 1]; WINDOW *dialog = 0; WINDOW *w_text = 0; WINDOW *w_work = 0; const char **buttons = dlg_ok_labels(); const char *d_label = _("Directories"); const char *f_label = _("Files"); char *partial = 0; int min_wide = MIN_WIDE; int min_items = height ? 0 : 4; LIST d_list, f_list; DLG_TRACE(("# %s args:\n", dselect ? "dselect" : "fselect")); DLG_TRACE2S("title", title); DLG_TRACE2S("path", path); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); dlg_does_output(); /* Set up the initial value */ input = dlg_set_result(path); offset = (int) strlen(input); *current = 0; dlg_button_layout(buttons, &min_wide); #ifdef KEY_RESIZE retry: #endif - dlg_auto_size(title, (char *) 0, &height, &width, 6, 25); - height += MIN_HIGH + min_items; - if (width < min_wide) - width = min_wide; + dlg_auto_size(title, "", &height, &width, MIN_HIGH + min_items, min_wide); + dlg_print_size(height, width); dlg_ctl_size(height, width); dialog = dlg_new_window(height, width, dlg_box_y_ordinate(height), dlg_box_x_ordinate(width)); dlg_register_window(dialog, "fselect", binding); dlg_register_buttons(dialog, "fselect", buttons); dlg_mouse_setbase(0, 0); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); /* Draw the input field box */ tbox_height = 1; tbox_width = width - (4 * MARGIN + 2); tbox_y = height - (BTN_HIGH * 2) + MARGIN; tbox_x = (width - tbox_width) / 2; - w_text = derwin(dialog, tbox_height, tbox_width, tbox_y, tbox_x); + w_text = dlg_der_window(dialog, tbox_height, tbox_width, tbox_y, tbox_x); if (w_text == 0) { result = DLG_EXIT_ERROR; goto finish; } - (void) keypad(w_text, TRUE); dlg_draw_box(dialog, tbox_y - MARGIN, tbox_x - MARGIN, (2 * MARGIN + 1), tbox_width + (MARGIN + EXT_WIDE), menubox_border_attr, menubox_border2_attr); dlg_mouse_mkbigregion(getbegy(dialog) + tbox_y - MARGIN, getbegx(dialog) + tbox_x - MARGIN, 1 + (2 * MARGIN), tbox_width + (MARGIN + EXT_WIDE), MOUSE_T, 1, 1, 3 /* doesn't matter */ ); dlg_register_window(w_text, "fselect2", binding2); /* Draw the directory listing box */ if (dselect) dbox_width = (width - (6 * MARGIN)); else dbox_width = (width - (6 * MARGIN + 2 * EXT_WIDE)) / 2; dbox_height = height - MIN_HIGH; dbox_y = (2 * MARGIN + 1); dbox_x = tbox_x; - w_work = derwin(dialog, dbox_height, dbox_width, dbox_y, dbox_x); + w_work = dlg_der_window(dialog, dbox_height, dbox_width, dbox_y, dbox_x); if (w_work == 0) { result = DLG_EXIT_ERROR; goto finish; } - (void) keypad(w_work, TRUE); (void) mvwaddstr(dialog, dbox_y - (MARGIN + 1), dbox_x - MARGIN, d_label); dlg_draw_box(dialog, dbox_y - MARGIN, dbox_x - MARGIN, dbox_height + (MARGIN + 1), dbox_width + (MARGIN + 1), menubox_border_attr, menubox_border2_attr); init_list(&d_list, dialog, w_work, MOUSE_D); if (!dselect) { /* Draw the filename listing box */ fbox_height = dbox_height; fbox_width = dbox_width; fbox_y = dbox_y; fbox_x = tbox_x + dbox_width + (2 * MARGIN); - w_work = derwin(dialog, fbox_height, fbox_width, fbox_y, fbox_x); + w_work = dlg_der_window(dialog, fbox_height, fbox_width, fbox_y, fbox_x); if (w_work == 0) { result = DLG_EXIT_ERROR; goto finish; } - (void) keypad(w_work, TRUE); (void) mvwaddstr(dialog, fbox_y - (MARGIN + 1), fbox_x - MARGIN, f_label); dlg_draw_box(dialog, fbox_y - MARGIN, fbox_x - MARGIN, fbox_height + (MARGIN + 1), fbox_width + (MARGIN + 1), menubox_border_attr, menubox_border2_attr); init_list(&f_list, dialog, w_work, MOUSE_F); } else { memset(&f_list, 0, sizeof(f_list)); } while (result == DLG_EXIT_UNKNOWN) { if (fill_lists(current, input, &d_list, &f_list, state < sTEXT)) show_buttons = TRUE; #ifdef KEY_RESIZE if (resized) { resized = FALSE; dlg_show_string(w_text, input, offset, inputbox_attr, 0, 0, tbox_width, FALSE, first); } #endif /* * The last field drawn determines where the cursor is shown: */ if (show_buttons) { show_buttons = FALSE; button = (state < 0) ? 0 : state; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); } if (first_trace) { first_trace = FALSE; dlg_trace_win(dialog); } if (state < 0) { switch (state) { case sTEXT: dlg_set_focus(dialog, w_text); break; case sFILES: dlg_set_focus(dialog, f_list.win); break; case sDIRS: dlg_set_focus(dialog, d_list.win); break; } } if (first) { (void) wrefresh(dialog); } else { fix_arrows(&d_list); fix_arrows(&f_list); key = dlg_mouse_wgetch((state == sTEXT) ? w_text : dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } } if (key == DLGK_TOGGLE) { key = DLGK_SELECT; fkey = TRUE; } if (fkey) { switch (key) { case DLGK_MOUSE(KEY_PREVIOUS): state = sDIRS; scroll_list(-1, which_list()); continue; case DLGK_MOUSE(KEY_NEXT): state = sDIRS; scroll_list(1, which_list()); continue; case DLGK_MOUSE(KEY_PPAGE): state = sFILES; scroll_list(-1, which_list()); continue; case DLGK_MOUSE(KEY_NPAGE): state = sFILES; scroll_list(1, which_list()); continue; case DLGK_PAGE_PREV: scroll_list(-1, which_list()); continue; case DLGK_PAGE_NEXT: scroll_list(1, which_list()); continue; case DLGK_ITEM_PREV: if (change_list(-1, which_list())) continue; /* FALLTHRU */ case DLGK_FIELD_PREV: show_buttons = TRUE; do { state = dlg_prev_ok_buttonindex(state, sDIRS); } while (!usable_state(state, &d_list, &f_list)); continue; case DLGK_ITEM_NEXT: if (change_list(1, which_list())) continue; /* FALLTHRU */ case DLGK_FIELD_NEXT: show_buttons = TRUE; do { state = dlg_next_ok_buttonindex(state, sDIRS); } while (!usable_state(state, &d_list, &f_list)); continue; case DLGK_SELECT: completed = 0; if (partial != 0) { free(partial); partial = 0; } if (state == sFILES && !dselect) { completed = data_of(&f_list); } else if (state == sDIRS) { completed = data_of(&d_list); } else { if (complete(input, &d_list, &f_list, &partial)) { completed = partial; } } if (completed != 0) { state = sTEXT; show_buttons = TRUE; strcpy(leaf_of(input), completed); offset = (int) strlen(input); dlg_show_string(w_text, input, offset, inputbox_attr, 0, 0, tbox_width, 0, first); if (partial != NULL) { free(partial); partial = 0; } continue; } else { /* if (state < sTEXT) */ (void) beep(); continue; } /* FALLTHRU */ case DLGK_ENTER: result = (state > 0) ? dlg_enter_buttoncode(state) : DLG_EXIT_OK; continue; + case DLGK_LEAVE: + if (state >= 0) + result = dlg_ok_buttoncode(state); + break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; show_buttons = TRUE; *current = 0; resized = TRUE; /* repaint */ - dlg_clear(); - dlg_del_window(dialog); - refresh(); - dlg_mouse_free_regions(); + free_list(&d_list, FALSE); + free_list(&f_list, FALSE); + _dlg_resize_cleanup(dialog); goto retry; #endif default: if (key >= DLGK_MOUSE(MOUSE_T)) { state = sTEXT; continue; } else if (key >= DLGK_MOUSE(MOUSE_F)) { if (f_list.win != 0) { state = sFILES; f_list.choice = (key - DLGK_MOUSE(MOUSE_F)) + f_list.offset; display_list(&f_list); } continue; } else if (key >= DLGK_MOUSE(MOUSE_D)) { if (d_list.win != 0) { state = sDIRS; d_list.choice = (key - DLGK_MOUSE(MOUSE_D)) + d_list.offset; display_list(&d_list); } continue; } else if (is_DLGK_MOUSE(key) && (code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { result = code; continue; } break; } } if (state < 0) { /* Input box selected if we're editing */ int edit = dlg_edit_string(input, &offset, key, fkey, first); if (edit) { dlg_show_string(w_text, input, offset, inputbox_attr, 0, 0, tbox_width, 0, first); first = FALSE; state = sTEXT; } - } else if (state >= 0 && - (code = dlg_char_to_button(key, buttons)) >= 0) { + } else if ((code = dlg_char_to_button(key, buttons)) >= 0) { result = dlg_ok_buttoncode(code); break; } } + AddLastKey(); dlg_unregister_window(w_text); dlg_del_window(dialog); dlg_mouse_free_regions(); free_list(&d_list, FALSE); free_list(&f_list, FALSE); finish: if (partial != 0) free(partial); return result; } /* * Display a dialog box for entering a filename */ int dialog_fselect(const char *title, const char *path, int height, int width) { return dlg_fselect(title, path, height, width, FALSE); } /* * Display a dialog box for entering a directory */ int dialog_dselect(const char *title, const char *path, int height, int width) { return dlg_fselect(title, path, height, width, TRUE); } diff --git a/guage.c b/guage.c index 95664b06b956..5895330c6d56 100644 --- a/guage.c +++ b/guage.c @@ -1,453 +1,456 @@ /* - * $Id: guage.c,v 1.76 2018/06/21 08:23:43 tom Exp $ + * $Id: guage.c,v 1.83 2020/03/27 20:54:43 tom Exp $ * * guage.c -- implements the gauge dialog * - * Copyright 2000-2015,2018 Thomas E. Dickey + * Copyright 2000-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Marc Ewing, Red Hat Software */ #include <dialog.h> #include <errno.h> #define MY_LEN (MAX_LEN)/2 #define MIN_HIGH (4) #define MIN_WIDE (10 + 2 * (2 + MARGIN)) #define isMarker(buf) !strncmp(buf, "XXX", (size_t) 3) typedef struct _my_obj { DIALOG_CALLBACK obj; /* has to be first in struct */ struct _my_obj *next; WINDOW *text; char *title; char *prompt; char prompt_buf[MY_LEN]; int percent; int height; int width; char line[MAX_LEN + 1]; } MY_OBJ; static MY_OBJ *all_objects; static int valid(MY_OBJ * obj) { MY_OBJ *list = all_objects; int result = 0; while (list != 0) { if (list == obj) { result = 1; break; } list = list->next; } return result; } static void delink(MY_OBJ * obj) { MY_OBJ *p = all_objects; MY_OBJ *q = 0; while (p != 0) { if (p == obj) { if (q != 0) { q->next = p->next; } else { all_objects = p->next; } break; } q = p; p = p->next; } } static int read_data(char *buffer, FILE *fp) { int result; if (feof(fp)) { result = 0; } else if (fgets(buffer, MY_LEN, fp) != 0) { DLG_TRACE(("read_data:%s", buffer)); buffer[MY_LEN] = '\0'; dlg_trim_string(buffer); result = 1; } else { result = -1; } return result; } static int decode_percent(char *buffer) { char *tmp = 0; long value = strtol(buffer, &tmp, 10); if (tmp != 0 && (*tmp == 0 || isspace(UCH(*tmp))) && value >= 0) { return TRUE; } return FALSE; } static void repaint_text(MY_OBJ * obj) { WINDOW *dialog = obj->obj.win; - int i, x; if (dialog != 0) { + int i, x; + (void) werase(dialog); dlg_draw_box2(dialog, 0, 0, obj->height, obj->width, dialog_attr, border_attr, border2_attr); dlg_draw_title(dialog, obj->title); dlg_attrset(dialog, dialog_attr); dlg_draw_helpline(dialog, FALSE); dlg_print_autowrap(dialog, obj->prompt, obj->height, obj->width); dlg_draw_box2(dialog, obj->height - 4, 2 + MARGIN, 2 + MARGIN, obj->width - 2 * (2 + MARGIN), dialog_attr, border_attr, border2_attr); /* * Clear the area for the progress bar by filling it with spaces * in the gauge-attribute, and write the percentage with that * attribute. */ (void) wmove(dialog, obj->height - 3, 4); dlg_attrset(dialog, gauge_attr); for (i = 0; i < (obj->width - 2 * (3 + MARGIN)); i++) (void) waddch(dialog, ' '); (void) wmove(dialog, obj->height - 3, (obj->width / 2) - 2); (void) wprintw(dialog, "%3d%%", obj->percent); /* * Now draw a bar in reverse, relative to the background. * The window attribute was useful for painting the background, * but requires some tweaks to reverse it. */ x = (obj->percent * (obj->width - 2 * (3 + MARGIN))) / 100; if ((gauge_attr & A_REVERSE) != 0) { dlg_attroff(dialog, A_REVERSE); } else { dlg_attrset(dialog, A_REVERSE); } (void) wmove(dialog, obj->height - 3, 4); for (i = 0; i < x; i++) { chtype ch2 = winch(dialog); if (gauge_attr & A_REVERSE) { ch2 &= ~A_REVERSE; } (void) waddch(dialog, ch2); } (void) wrefresh(dialog); } } static bool handle_input(DIALOG_CALLBACK * cb) { MY_OBJ *obj = (MY_OBJ *) cb; bool result; bool cleanup = FALSE; int status; char buf[MY_LEN + 1]; if (dialog_state.pipe_input == 0) { status = -1; cleanup = TRUE; } else if ((status = read_data(buf, dialog_state.pipe_input)) > 0) { if (isMarker(buf)) { /* * Historically, next line should be percentage, but one of the * worse-written clones of 'dialog' assumes the number is missing. * (Gresham's Law applied to software). */ if ((status = read_data(buf, dialog_state.pipe_input)) > 0) { obj->prompt_buf[0] = '\0'; if (decode_percent(buf)) obj->percent = atoi(buf); else strcpy(obj->prompt_buf, buf); /* Rest is message text */ while ((status = read_data(buf, dialog_state.pipe_input)) > 0 && !isMarker(buf)) { if (strlen(obj->prompt_buf) + strlen(buf) < sizeof(obj->prompt_buf) - 1) { strcat(obj->prompt_buf, buf); } } if (obj->prompt != obj->prompt_buf) free(obj->prompt); obj->prompt = obj->prompt_buf; } } else if (decode_percent(buf)) { obj->percent = atoi(buf); } } else { if (feof(dialog_state.pipe_input) || (ferror(dialog_state.pipe_input) && errno != EINTR)) { cleanup = TRUE; } } repaint_text(obj); if (status > 0) { result = TRUE; } else { result = FALSE; if (cleanup) { dlg_remove_callback(cb); delink(obj); } } return result; } static bool handle_my_getc(DIALOG_CALLBACK * cb, int ch, int fkey, int *result) { bool status = TRUE; *result = DLG_EXIT_OK; if (cb != 0) { if (!fkey && (ch == ERR)) { (void) handle_input(cb); /* cb might be freed in handle_input */ status = (valid((MY_OBJ *) cb) && (cb->input != 0)); } } else { status = FALSE; } return status; } static void my_cleanup(DIALOG_CALLBACK * cb) { MY_OBJ *obj = (MY_OBJ *) cb; if (valid(obj)) { if (obj->prompt != obj->prompt_buf) { free(obj->prompt); obj->prompt = obj->prompt_buf; } free(obj->title); dlg_del_window(obj->obj.win); delink(obj); } } void dlg_update_gauge(void *objptr, int percent) { MY_OBJ *obj = (MY_OBJ *) objptr; bool save_finish_string = dialog_state.finish_string; dialog_state.finish_string = TRUE; curs_set(0); obj->percent = percent; repaint_text(obj); dialog_state.finish_string = save_finish_string; } /* * (Re)Allocates an object and fills it as per the arguments */ void * dlg_reallocate_gauge(void *objptr, const char *title, const char *cprompt, int height, int width, int percent) { char *prompt = dlg_strclone(cprompt); - MY_OBJ *obj = objptr; + MY_OBJ *obj; bool save_finish_string = dialog_state.finish_string; dialog_state.finish_string = TRUE; dlg_tab_correct_str(prompt); if (objptr == 0) { /* create a new object */ obj = dlg_calloc(MY_OBJ, 1); assert_ptr(obj, "dialog_gauge"); dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); dlg_print_size(height, width); dlg_ctl_size(height, width); } else { /* reuse an existing object */ obj = objptr; height = obj->height; width = obj->width; } if (obj->obj.win == 0) { /* center dialog box on screen */ int x = dlg_box_x_ordinate(width); int y = dlg_box_y_ordinate(height); WINDOW *dialog = dlg_new_window(height, width, y, x); obj->obj.win = dialog; } obj->obj.input = dialog_state.pipe_input; obj->obj.keep_win = TRUE; obj->obj.bg_task = TRUE; obj->obj.handle_getc = handle_my_getc; obj->obj.handle_input = handle_input; if (obj->title == 0 || strcmp(obj->title, title)) { dlg_finish_string(obj->title); free(obj->title); obj->title = dlg_strclone(title); } dlg_finish_string(obj->prompt); free(obj->prompt); obj->prompt = prompt; obj->percent = percent; obj->height = height; obj->width = width; /* if this was a new object, link it into the list */ if (objptr == 0) { obj->next = all_objects; all_objects = obj; } dialog_state.finish_string = save_finish_string; return (void *) obj; } void * dlg_allocate_gauge(const char *title, const char *cprompt, int height, int width, int percent) { return dlg_reallocate_gauge(NULL, title, cprompt, height, width, percent); } void dlg_free_gauge(void *objptr) { MY_OBJ *obj = (MY_OBJ *) objptr; if (valid(obj)) { + if (obj->title) + free(obj->title); + if (obj->prompt) + free(obj->prompt); obj->obj.keep_win = FALSE; dlg_remove_callback(&(obj->obj)); delink(obj); } curs_set(1); } /* * Display a gauge, or progress meter. Starts at percent% and reads stdin. If * stdin is not XXX, then it is interpreted as a percentage, and the display is * updated accordingly. Otherwise the next line is the percentage, and * subsequent lines up to another XXX are used for the new prompt. Note that * the size of the window never changes, so the prompt can not get any larger * than the height and width specified. */ int dialog_gauge(const char *title, const char *cprompt, int height, int width, int percent) { int fkey; int ch, result; void *objptr = dlg_allocate_gauge(title, cprompt, height, width, percent); MY_OBJ *obj = (MY_OBJ *) objptr; DLG_TRACE(("# gauge args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("percent", percent); dlg_add_callback_ref((DIALOG_CALLBACK **) & obj, my_cleanup); dlg_update_gauge(obj, percent); dlg_trace_win(obj->obj.win); do { ch = dlg_getc(obj->obj.win, &fkey); #ifdef KEY_RESIZE if (fkey && ch == KEY_RESIZE) { MY_OBJ *oldobj = obj; dlg_will_resize(obj->obj.win); - dlg_mouse_free_regions(); obj = dlg_allocate_gauge(title, cprompt, height, width, oldobj->percent); /* avoid breaking new window in dlg_remove_callback */ oldobj->obj.caller = 0; oldobj->obj.input = 0; oldobj->obj.keep_win = FALSE; /* remove the old version of the gauge */ - dlg_clear(); + _dlg_resize_cleanup(oldobj->obj.win); dlg_remove_callback(&(oldobj->obj)); - refresh(); dlg_add_callback_ref((DIALOG_CALLBACK **) & obj, my_cleanup); dlg_update_gauge(obj, obj->percent); } #endif } while (valid(obj) && handle_my_getc(&(obj->obj), ch, fkey, &result)); dlg_free_gauge(obj); return (DLG_EXIT_OK); } diff --git a/inputbox.c b/inputbox.c index a627e7ad3bde..1199a5c8be7f 100644 --- a/inputbox.c +++ b/inputbox.c @@ -1,266 +1,274 @@ /* - * $Id: inputbox.c,v 1.84 2018/06/21 23:29:35 tom Exp $ + * $Id: inputbox.c,v 1.93 2021/01/17 16:36:37 tom Exp $ * * inputbox.c -- implements the input box * - * Copyright 2000-2016,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors: * Savio Lam (lam836@cs.cuhk.hk) */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> #define sTEXT -1 #define NAVIGATE_BINDINGS \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \ DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), \ DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ) +#define BTN_HIGH 1 +#define HDR_HIGH 1 +#define MIN_HIGH (HDR_HIGH + (MARGIN * 2 + 1) + (BTN_HIGH + MARGIN * 2)) +#define MIN_WIDE 26 + /* * Display a dialog box for entering a string */ int dialog_inputbox(const char *title, const char *cprompt, int height, int width, const char *init, const int password) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; static DLG_KEYS_BINDING binding2[] = { INPUTSTR_BINDINGS, HELPKEY_BINDINGS, ENTERKEY_BINDINGS, NAVIGATE_BINDINGS, /* no TOGGLEKEY_BINDINGS, since that includes space... */ END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif int xorg, yorg; int x, y, box_y, box_x, box_width; int show_buttons; int col_offset = 0; int chr_offset = 0; int key, fkey, code; int result = DLG_EXIT_UNKNOWN; int state; bool first; bool edited; char *input; WINDOW *dialog; WINDOW *editor; char *prompt = dlg_strclone(cprompt); const char **buttons = dlg_ok_labels(); dlg_does_output(); DLG_TRACE(("# inputbox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2S("init", init); DLG_TRACE2N("password", password); dlg_tab_correct_str(prompt); /* Set up the initial value */ input = dlg_set_result(init); edited = FALSE; #ifdef KEY_RESIZE retry: #endif show_buttons = TRUE; state = dialog_vars.default_button >= 0 ? dlg_default_button() : sTEXT; first = (state == sTEXT); key = fkey = 0; if (init != NULL) { - dlg_auto_size(title, prompt, &height, &width, 5, - MIN(MAX(dlg_count_columns(init) + 7, 26), + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, + MIN(MAX(dlg_count_columns(init) + 7, MIN_WIDE), SCOLS - (dialog_vars.begin_set ? dialog_vars.begin_x : 0))); chr_offset = (int) strlen(init); } else { - dlg_auto_size(title, prompt, &height, &width, 5, 26); + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); } dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); xorg = dlg_box_x_ordinate(width); yorg = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, yorg, xorg); dlg_register_window(dialog, "inputbox", binding); dlg_register_buttons(dialog, "inputbox", buttons); dlg_mouse_setbase(xorg, yorg); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); dlg_draw_helpline(dialog, FALSE); dlg_print_autowrap(dialog, prompt, height, width); /* Draw the input field box */ box_width = width - 6; getyx(dialog, y, x); (void) x; box_y = y + 2; box_x = (width - box_width) / 2; dlg_mouse_mkregion(y + 1, box_x - 1, 3, box_width + 2, 'i'); dlg_draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, border_attr, border2_attr); /* Make a window for the input-field, to associate bindings */ editor = dlg_sub_window(dialog, 1, box_width, yorg + box_y, xorg + box_x); dlg_register_window(editor, "inputbox2", binding2); if (*input != '\0') { dlg_show_string(editor, input, chr_offset, inputbox_attr, 0, 0, box_width, (bool) (password != 0), first); wsyncup(editor); wcursyncup(editor); } - while (result == DLG_EXIT_UNKNOWN) { - int edit = 0; + while (result == DLG_EXIT_UNKNOWN) { /* * The last field drawn determines where the cursor is shown: */ if (show_buttons) { show_buttons = FALSE; col_offset = dlg_edit_offset(input, chr_offset, box_width); (void) wmove(dialog, box_y, box_x + col_offset); dlg_draw_buttons(dialog, height - 2, 0, buttons, state, FALSE, width); } if (!first) { if (*input != '\0' && !edited) { dlg_show_string(editor, input, chr_offset, inputbox_attr, 0, 0, box_width, (bool) (password != 0), first); wmove(editor, 0, chr_offset); wsyncup(editor); wcursyncup(editor); } key = dlg_mouse_wgetch((state == sTEXT) ? editor : dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &code, &key, &fkey)) + break; + } } /* * Handle mouse clicks first, since we want to know if this is a button, * or something that dlg_edit_string() should handle. */ if (fkey && is_DLGK_MOUSE(key) && (code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { result = code; continue; } if (state == sTEXT) { /* Input box selected */ - edit = dlg_edit_string(input, &chr_offset, key, fkey, first); + int edit = dlg_edit_string(input, &chr_offset, key, fkey, first); if (edit) { dlg_show_string(editor, input, chr_offset, inputbox_attr, 0, 0, box_width, (bool) (password != 0), first); wsyncup(editor); wcursyncup(editor); first = FALSE; edited = TRUE; continue; } else if (first) { first = FALSE; continue; } } /* handle non-functionkeys */ if (!fkey && (code = dlg_char_to_button(key, buttons)) >= 0) { dlg_del_window(dialog); result = dlg_ok_buttoncode(code); continue; } /* handle functionkeys */ if (fkey) { switch (key) { case DLGK_MOUSE('i'): /* mouse enter events */ state = 0; /* FALLTHRU */ case DLGK_FIELD_PREV: show_buttons = TRUE; state = dlg_prev_ok_buttonindex(state, sTEXT); break; case DLGK_FIELD_NEXT: show_buttons = TRUE; state = dlg_next_ok_buttonindex(state, sTEXT); break; case DLGK_TOGGLE: case DLGK_ENTER: dlg_del_window(dialog); result = (state >= 0) ? dlg_enter_buttoncode(state) : DLG_EXIT_OK; break; + case DLGK_LEAVE: + if (state >= 0) + result = dlg_ok_buttoncode(state); + break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; /* repaint */ - dlg_clear(); - dlg_del_window(dialog); - refresh(); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); goto retry; #endif default: beep(); break; } - } else { + } else if (key > 0) { beep(); } } + AddLastKey(); dlg_unregister_window(editor); dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); return result; } diff --git a/inputstr.c b/inputstr.c index 78255fd32fa9..2c7bb7d0f4db 100644 --- a/inputstr.c +++ b/inputstr.c @@ -1,804 +1,808 @@ /* - * $Id: inputstr.c,v 1.88 2018/06/18 22:10:54 tom Exp $ + * $Id: inputstr.c,v 1.91 2021/01/17 22:19:05 tom Exp $ * * inputstr.c -- functions for input/display of a string * - * Copyright 2000-2017,2018 Thomas E. Dickey + * Copyright 2000-2019,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> #include <errno.h> #ifdef HAVE_SETLOCALE #include <locale.h> #endif #if defined(HAVE_SEARCH_H) && defined(HAVE_TSEARCH) #include <search.h> #else #undef HAVE_TSEARCH #endif #ifdef NEED_WCHAR_H #include <wchar.h> #endif #if defined(USE_WIDE_CURSES) #define USE_CACHING 1 #elif defined(HAVE_XDIALOG) #define USE_CACHING 1 /* editbox really needs caching! */ #else #define USE_CACHING 0 #endif typedef struct _cache { struct _cache *next; #if USE_CACHING int cache_num; /* tells what type of data is in list[] */ const char *string_at; /* unique: associate caches by char* */ #endif size_t s_len; /* strlen(string) - we add 1 for EOS */ size_t i_len; /* length(list) - we add 1 for EOS */ char *string; /* a copy of the last-processed string */ int *list; /* indices into the string */ } CACHE; #if USE_CACHING #define SAME_CACHE(c,s,l) (c->string != 0 && memcmp(c->string,s,l) == 0) static CACHE *cache_list; typedef enum { cInxCols ,cCntWideBytes ,cCntWideChars ,cInxWideChars ,cMAX } CACHE_USED; #ifdef HAVE_TSEARCH static void *sorted_cache; #endif #ifdef USE_WIDE_CURSES static int have_locale(void) { static int result = -1; if (result < 0) { char *test = setlocale(LC_ALL, 0); if (test == 0 || *test == 0) { result = FALSE; } else if (strcmp(test, "C") && strcmp(test, "POSIX")) { result = TRUE; } else { result = FALSE; } } return result; } #endif #ifdef HAVE_TSEARCH #if 0 static void show_tsearch(const void *nodep, const VISIT which, const int depth) { const CACHE *p = *(CACHE * const *) nodep; (void) depth; if (which == postorder || which == leaf) { DLG_TRACE(("# cache %p %p:%s\n", p, p->string, p->string)); } } static void trace_cache(const char *fn, int ln) { DLG_TRACE(("# trace_cache %s@%d\n", fn, ln)); twalk(sorted_cache, show_tsearch); } #else #define trace_cache(fn, ln) /* nothing */ #endif #define CMP(a,b) (((a) > (b)) ? 1 : (((a) < (b)) ? -1 : 0)) static int compare_cache(const void *a, const void *b) { const CACHE *p = (const CACHE *) a; const CACHE *q = (const CACHE *) b; int result = CMP(p->cache_num, q->cache_num); if (result == 0) result = CMP(p->string_at, q->string_at); return result; } #endif static CACHE * find_cache(int cache_num, const char *string) { CACHE *p; #ifdef HAVE_TSEARCH void *pp; CACHE find; memset(&find, 0, sizeof(find)); find.cache_num = cache_num; find.string_at = string; if ((pp = tfind(&find, &sorted_cache, compare_cache)) != 0) { p = *(CACHE **) pp; } else { p = 0; } #else for (p = cache_list; p != 0; p = p->next) { if (p->string_at == string) { break; } } #endif return p; } static CACHE * make_cache(int cache_num, const char *string) { CACHE *p; p = dlg_calloc(CACHE, 1); assert_ptr(p, "load_cache"); p->next = cache_list; cache_list = p; p->cache_num = cache_num; p->string_at = string; #ifdef HAVE_TSEARCH (void) tsearch(p, &sorted_cache, compare_cache); #endif return p; } static CACHE * load_cache(int cache_num, const char *string) { CACHE *p; if ((p = find_cache(cache_num, string)) == 0) { p = make_cache(cache_num, string); } return p; } #else static CACHE my_cache; #define SAME_CACHE(c,s,l) (c->string != 0) #define load_cache(cache, string) &my_cache #endif /* USE_CACHING */ /* * If the given string has not changed, we do not need to update the index. * If we need to update the index, allocate enough memory for it. */ static bool same_cache2(CACHE * cache, const char *string, unsigned i_len) { - unsigned need; size_t s_len = strlen(string); bool result = TRUE; if (cache->s_len == 0 || cache->s_len < s_len || cache->list == 0 || !SAME_CACHE(cache, string, (size_t) s_len)) { + unsigned need = (i_len + 1); - need = (i_len + 1); if (cache->list == 0) { cache->list = dlg_malloc(int, need); } else if (cache->i_len < i_len) { cache->list = dlg_realloc(int, need, cache->list); } assert_ptr(cache->list, "load_cache"); cache->i_len = i_len; if (cache->s_len >= s_len && cache->string != 0) { strcpy(cache->string, string); } else { if (cache->string != 0) free(cache->string); cache->string = dlg_strclone(string); } cache->s_len = s_len; result = FALSE; } return result; } #ifdef USE_WIDE_CURSES /* * Like same_cache2(), but we are only concerned about caching a copy of the * string and its associated length. */ static bool same_cache1(CACHE * cache, const char *string, size_t i_len) { size_t s_len = strlen(string); bool result = TRUE; if (cache->s_len != s_len || !SAME_CACHE(cache, string, (size_t) s_len)) { if (cache->s_len >= s_len && cache->string != 0) { strcpy(cache->string, string); } else { if (cache->string != 0) free(cache->string); cache->string = dlg_strclone(string); } cache->s_len = s_len; cache->i_len = i_len; result = FALSE; } return result; } #endif /* USE_CACHING */ /* * Counts the number of bytes that make up complete wide-characters, up to byte * 'len'. If there is no locale set, simply return the original length. */ #ifdef USE_WIDE_CURSES static int dlg_count_wcbytes(const char *string, size_t len) { int result; if (have_locale()) { CACHE *cache = load_cache(cCntWideBytes, string); if (!same_cache1(cache, string, len)) { while (len != 0) { size_t code = 0; const char *src = cache->string; mbstate_t state; char save = cache->string[len]; cache->string[len] = '\0'; memset(&state, 0, sizeof(state)); code = mbsrtowcs((wchar_t *) 0, &src, len, &state); cache->string[len] = save; if ((int) code >= 0) { break; } --len; } cache->i_len = len; } result = (int) cache->i_len; } else { result = (int) len; } return result; } #endif /* USE_WIDE_CURSES */ /* * Counts the number of wide-characters in the string. */ int dlg_count_wchars(const char *string) { int result; #ifdef USE_WIDE_CURSES if (have_locale()) { size_t len = strlen(string); CACHE *cache = load_cache(cCntWideChars, string); if (!same_cache1(cache, string, len)) { const char *src = cache->string; mbstate_t state; int part = dlg_count_wcbytes(cache->string, len); char save = cache->string[part]; - size_t code; wchar_t *temp = dlg_calloc(wchar_t, len + 1); if (temp != 0) { + size_t code; + cache->string[part] = '\0'; memset(&state, 0, sizeof(state)); code = mbsrtowcs(temp, &src, (size_t) part, &state); cache->i_len = ((int) code >= 0) ? wcslen(temp) : 0; cache->string[part] = save; free(temp); } else { cache->i_len = 0; } } result = (int) cache->i_len; } else #endif /* USE_WIDE_CURSES */ { result = (int) strlen(string); } return result; } /* * Build an index of the wide-characters in the string, so we can easily tell * which byte-offset begins a given wide-character. */ const int * dlg_index_wchars(const char *string) { unsigned len = (unsigned) dlg_count_wchars(string); - unsigned inx; CACHE *cache = load_cache(cInxWideChars, string); if (!same_cache2(cache, string, len)) { const char *current = string; + unsigned inx; cache->list[0] = 0; for (inx = 1; inx <= len; ++inx) { #ifdef USE_WIDE_CURSES if (have_locale()) { mbstate_t state; int width; memset(&state, 0, sizeof(state)); width = (int) mbrlen(current, strlen(current), &state); if (width <= 0) width = 1; /* FIXME: what if we have a control-char? */ current += width; cache->list[inx] = cache->list[inx - 1] + width; } else #endif /* USE_WIDE_CURSES */ { (void) current; cache->list[inx] = (int) inx; } } } return cache->list; } /* * Given the character-offset to find in the list, return the corresponding * array index. */ int dlg_find_index(const int *list, int limit, int to_find) { int result; for (result = 0; result <= limit; ++result) { if (to_find == list[result] || result == limit || ((result < limit) && (to_find < list[result + 1]))) { break; } } return result; } /* * Build a list of the display-columns for the given string's characters. */ const int * dlg_index_columns(const char *string) { unsigned len = (unsigned) dlg_count_wchars(string); - unsigned inx; CACHE *cache = load_cache(cInxCols, string); if (!same_cache2(cache, string, len)) { + cache->list[0] = 0; #ifdef USE_WIDE_CURSES if (have_locale()) { + unsigned inx; size_t num_bytes = strlen(string); const int *inx_wchars = dlg_index_wchars(string); mbstate_t state; for (inx = 0; inx < len; ++inx) { - wchar_t temp[2]; - size_t check; int result; if (string[inx_wchars[inx]] == TAB) { result = ((cache->list[inx] | 7) + 1) - cache->list[inx]; } else { + wchar_t temp[2]; + size_t check; + memset(&state, 0, sizeof(state)); memset(temp, 0, sizeof(temp)); check = mbrtowc(temp, string + inx_wchars[inx], num_bytes - (size_t) inx_wchars[inx], &state); if ((int) check <= 0) { result = 1; } else { result = wcwidth(temp[0]); } if (result < 0) { const wchar_t *printable; cchar_t temp2, *temp2p = &temp2; setcchar(temp2p, temp, 0, 0, 0); printable = wunctrl(temp2p); result = printable ? (int) wcslen(printable) : 1; } } cache->list[inx + 1] = result; if (inx != 0) cache->list[inx + 1] += cache->list[inx]; } } else #endif /* USE_WIDE_CURSES */ { + unsigned inx; + for (inx = 0; inx < len; ++inx) { chtype ch = UCH(string[inx]); if (ch == TAB) cache->list[inx + 1] = ((cache->list[inx] | 7) + 1) - cache->list[inx]; else if (isprint(UCH(ch))) cache->list[inx + 1] = 1; else { const char *printable; printable = unctrl(ch); cache->list[inx + 1] = (printable ? (int) strlen(printable) : 1); } if (inx != 0) cache->list[inx + 1] += cache->list[inx]; } } } return cache->list; } /* * Returns the number of columns used for a string. That happens to be the * end-value of the cols[] array. */ int dlg_count_columns(const char *string) { int result = 0; int limit = dlg_count_wchars(string); if (limit > 0) { const int *cols = dlg_index_columns(string); result = cols[limit]; } else { result = (int) strlen(string); } dlg_finish_string(string); return result; } /* * Given a column limit, count the number of wide characters that can fit * into that limit. The offset is used to skip over a leading character * that was already written. */ int dlg_limit_columns(const char *string, int limit, int offset) { const int *cols = dlg_index_columns(string); int result = dlg_count_wchars(string); while (result > 0 && (cols[result] - cols[offset]) > limit) --result; return result; } /* * Updates the string and character-offset, given various editing characters * or literal characters which are inserted at the character-offset. */ bool dlg_edit_string(char *string, int *chr_offset, int key, int fkey, bool force) { int i; int len = (int) strlen(string); int limit = dlg_count_wchars(string); const int *indx = dlg_index_wchars(string); int offset = dlg_find_index(indx, limit, *chr_offset); int max_len = dlg_max_input(MAX_LEN); bool edit = TRUE; /* transform editing characters into equivalent function-keys */ if (!fkey) { fkey = TRUE; /* assume we transform */ switch (key) { case 0: break; case ESC: case TAB: fkey = FALSE; /* this is used for navigation */ break; default: fkey = FALSE; /* ...no, we did not transform */ break; } } if (fkey) { switch (key) { case 0: /* special case for loop entry */ edit = force; break; case DLGK_GRID_LEFT: if (*chr_offset && offset > 0) *chr_offset = indx[offset - 1]; break; case DLGK_GRID_RIGHT: if (offset < limit) *chr_offset = indx[offset + 1]; break; case DLGK_BEGIN: if (*chr_offset) *chr_offset = 0; break; case DLGK_FINAL: if (offset < limit) *chr_offset = indx[limit]; break; case DLGK_DELETE_LEFT: if (offset) { int gap = indx[offset] - indx[offset - 1]; *chr_offset = indx[offset - 1]; if (gap > 0) { for (i = *chr_offset; (string[i] = string[i + gap]) != '\0'; i++) { ; } } } break; case DLGK_DELETE_RIGHT: if (limit) { if (--limit == 0) { string[*chr_offset = 0] = '\0'; } else { int gap = ((offset <= limit) ? (indx[offset + 1] - indx[offset]) : 0); if (gap > 0) { for (i = indx[offset]; (string[i] = string[i + gap]) != '\0'; i++) { ; } } else if (offset > 0) { string[indx[offset - 1]] = '\0'; } if (*chr_offset > indx[limit]) *chr_offset = indx[limit]; } } break; case DLGK_DELETE_ALL: string[*chr_offset = 0] = '\0'; break; case DLGK_ENTER: edit = 0; break; #ifdef KEY_RESIZE case KEY_RESIZE: edit = 0; break; #endif case DLGK_GRID_UP: case DLGK_GRID_DOWN: case DLGK_FIELD_NEXT: case DLGK_FIELD_PREV: edit = 0; break; case ERR: edit = 0; break; default: beep(); break; } } else { if (key == ESC || key == ERR) { edit = 0; } else { if (len < max_len) { for (i = ++len; i > *chr_offset; i--) string[i] = string[i - 1]; string[*chr_offset] = (char) key; *chr_offset += 1; } else { (void) beep(); } } } return edit; } static void compute_edit_offset(const char *string, int chr_offset, int x_last, int *p_dpy_column, int *p_scroll_amt) { const int *cols = dlg_index_columns(string); const int *indx = dlg_index_wchars(string); int limit = dlg_count_wchars(string); int offset = dlg_find_index(indx, limit, chr_offset); int offset2; int dpy_column; int n; for (n = offset2 = 0; n <= offset; ++n) { if ((cols[offset] - cols[n]) < x_last && (offset == limit || (cols[offset + 1] - cols[n]) < x_last)) { offset2 = n; break; } } dpy_column = cols[offset] - cols[offset2]; if (p_dpy_column != 0) *p_dpy_column = dpy_column; if (p_scroll_amt != 0) *p_scroll_amt = offset2; } /* * Given the character-offset in the string, returns the display-offset where * we will position the cursor. */ int dlg_edit_offset(char *string, int chr_offset, int x_last) { int result; compute_edit_offset(string, chr_offset, x_last, &result, 0); return result; } /* * Displays the string, shifted as necessary, to fit within the box and show * the current character-offset. */ void dlg_show_string(WINDOW *win, const char *string, /* string to display (may be multibyte) */ int chr_offset, /* character (not bytes) offset */ chtype attr, /* window-attributes */ int y_base, /* beginning row on screen */ int x_base, /* beginning column on screen */ int x_last, /* number of columns on screen */ bool hidden, /* if true, do not echo */ bool force) /* if true, force repaint */ { x_last = MIN(x_last + x_base, getmaxx(win)) - x_base; if (hidden && !dialog_vars.insecure) { if (force) { (void) wmove(win, y_base, x_base); wrefresh(win); } } else { const int *cols = dlg_index_columns(string); const int *indx = dlg_index_wchars(string); int limit = dlg_count_wchars(string); int i, j, k; int input_x; int scrollamt; compute_edit_offset(string, chr_offset, x_last, &input_x, &scrollamt); dlg_attrset(win, attr); (void) wmove(win, y_base, x_base); for (i = scrollamt, k = 0; i < limit && k < x_last; ++i) { int check = cols[i + 1] - cols[scrollamt]; if (check <= x_last) { for (j = indx[i]; j < indx[i + 1]; ++j) { chtype ch = UCH(string[j]); if (hidden && dialog_vars.insecure) { waddch(win, '*'); } else if (ch == TAB) { int count = cols[i + 1] - cols[i]; while (--count >= 0) waddch(win, ' '); } else { waddch(win, ch); } } k = check; } else { break; } } while (k++ < x_last) waddch(win, ' '); (void) wmove(win, y_base, x_base + input_x); wrefresh(win); } } /* * Discard cached data for the given string. */ void dlg_finish_string(const char *string) { #if USE_CACHING if ((string != 0) && dialog_state.finish_string) { CACHE *p = cache_list; CACHE *q = 0; CACHE *r; while (p != 0) { if (p->string_at == string) { #ifdef HAVE_TSEARCH if (tdelete(p, &sorted_cache, compare_cache) == 0) { continue; } trace_cache(__FILE__, __LINE__); #endif if (p->string != 0) free(p->string); if (p->list != 0) free(p->list); if (p == cache_list) { cache_list = p->next; r = cache_list; } else { q->next = p->next; r = q; } free(p); p = r; } else { q = p; p = p->next; } } } #else (void) string; #endif } #ifdef NO_LEAKS void _dlg_inputstr_leaks(void) { #if USE_CACHING dialog_state.finish_string = TRUE; trace_cache(__FILE__, __LINE__); while (cache_list != 0) { dlg_finish_string(cache_list->string_at); } #endif /* USE_CACHING */ } #endif /* NO_LEAKS */ diff --git a/makefile.in b/makefile.in index 34d2619abfdc..f87ff176dfa9 100644 --- a/makefile.in +++ b/makefile.in @@ -1,358 +1,363 @@ -# $Id: makefile.in,v 1.97 2018/06/09 01:05:18 tom Exp $ +# $Id: makefile.in,v 1.103 2021/01/11 09:03:36 tom Exp $ # template makefile for DIALOG ############################################################################## -# Copyright (c) 1999-2017,2018 Thomas E. Dickey # +# Copyright (c) 1999-2020,2021 Thomas E. Dickey # # # # 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, distribute # # with modifications, 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 ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ top_builddir = . x = @EXEEXT@ o = .@OBJEXT@ DESTDIR = @DESTDIR@ THIS = dialog CFG_ROOTNAME = @CFG_ROOTNAME@ HDR_ROOTNAME = @HDR_ROOTNAME@ LIB_ROOTNAME = @LIB_ROOTNAME@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION = $(VERSION_MAJOR).$(VERSION_MINOR) REL_VERSION = @REL_VERSION@ ABI_VERSION = @ABI_VERSION@ LIB_ROOTNAME = @LIB_ROOTNAME@ RESULTING_SYMS = @RESULTING_SYMS@ VERSIONED_SYMS = @VERSIONED_SYMS@ @SET_SHLIB_VARS@ bindir = @bindir@ includedir = @includedir@ libdir = @libdir@ mandir = @mandir@ manext = 1 libext = 3 BINDIR = $(DESTDIR)$(bindir) INCLUDEDIR = $(DESTDIR)$(includedir) LIBDIR = $(DESTDIR)$(libdir) MANDIR = $(DESTDIR)$(mandir) MAN1DIR = $(MANDIR)/man1 MAN3DIR = $(MANDIR)/man3 # see po/makefile localedir = $(prefix)/@DATADIRNAME@/locale CFLAGS = @CFLAGS@ CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@ @DEFS@ -DLOCALEDIR=\"$(localedir)\" EXTRA_CFLAGS = @EXTRA_CFLAGS@ CC = @CC@ CPP = @CPP@ AR = @AR@ ARFLAGS = @ARFLAGS@ LDFLAGS = @EXTRA_LDFLAGS@ @LDFLAGS@ LIBS = @LIBS@ @INTLLIBS@ RANLIB = @LIB_PREP@ RM = rm -f LN_S = @LN_S@ LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ +RPATH_LIST = @RPATH_LIST@ LIBTOOL = @LIBTOOL@ @ECHO_LT@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_CREATE = @LIB_CREATE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ LIBTOOL_VERSION = @LIBTOOL_VERSION@ INSTALL = @INSTALL@ INSTALL_PROGRAM = $(LIBTOOL_INSTALL) @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_DATA = @INSTALL_DATA@ LINK = $(LIBTOOL_LINK) # The library is always named for the package, but the program can be further # renamed at install time, starting with the package name. PACKAGE = @PACKAGE@ ACTUAL_PROG = `echo $(PACKAGE) |sed @program_transform_name@` LIB_CONFIG = $(CFG_ROOTNAME)-config # The library name $(LIB) is set at configure/make time, since it is used as a # makefile target. Ditto for $(PROG). LIB = @LIB_TARGET@ PROG = @PACKAGE@$x # # Standard .c to .o compile line. # .SUFFIXES: .c .i $o .1 .man .txt @MAN2HTML_NOTE@ .html @GROFF_NOTE@ .ps .pdf .c.i : @RULE_CC@ @ECHO_CC@$(CPP) $(CPPFLAGS) -c $< >$@ .c$o : @RULE_CC@ @ECHO_CC@$(LIBTOOL_COMPILE) $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c $< @NROFF_NOTE@.1.txt : -@NROFF_NOTE@ GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | nroff -Tascii -man | col -bx" >$@ +@NROFF_NOTE@ GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | nroff -rHY=0 -Tascii -man | col -bx" >$@ @MAN2HTML_NOTE@.1.html : @MAN2HTML_NOTE@ ./@MAN2HTML_TEMP@ $* 1 man >$@ @MAN2HTML_NOTE@ @GROFF_NOTE@.1.ps : @GROFF_NOTE@ $(SHELL) -c "tbl $< | groff -man" >$@ @GROFF_NOTE@ @GROFF_NOTE@.ps.pdf : @GROFF_NOTE@ ps2pdf $*.ps EXTRAOBJS = @EXTRAOBJS@ OBJECTS = $(EXTRAOBJS) \ argv$o \ arrows$o \ buttons$o \ checklist$o \ columns$o \ dlg_keys$o \ editbox$o \ help$o \ inputbox$o \ inputstr$o \ menubox$o \ mouse$o \ mousewget$o \ msgbox$o \ textbox$o \ ttysize$o \ ui_getc$o \ util$o \ version$o \ yesno$o LIB_OBJECT = @LIB_OBJECT@ SRCS = $(OBJECTS:$o=.c) HDRS = \ dialog.h \ dlg_colors.h \ dlg_config.h \ dlg_keys.h ALL = $(LIB) $(PROG) BIN_DIRS = $(BINDIR) $(MAN1DIR) LIB_DIRS = $(LIBDIR) $(INCLUDEDIR) PO_DIR = $(srcdir)/po all :: $(ALL) @LIBTOOL_MAKE@install :: install-lib @LIBTOOL_MAKE@uninstall :: uninstall-lib @INTLDIR_MAKE@@INTLLIBS@ : @INTLDIR_MAKE@ @echo "Building GNU gettext library..." @INTLDIR_MAKE@ @cd intl && $(MAKE) @cf_cv_makeflags@ dialog$o \ $(OBJECTS) : $(srcdir)/dialog.h $(srcdir)/dlg_keys.h dlg_config.h VERSION -$(PROG)$x : $(LIB) dialog$o @INTLDIR_MAKE@ @INTLLIBS@ +$(PROG) : $(LIB) dialog$o @INTLDIR_MAKE@ @INTLLIBS@ $(LINK) -o $@ dialog$o -L. -l@PACKAGE@ $(CFLAGS) $(LDFLAGS) $(LIBS) clean \ distclean \ install \ install-full \ install-strip \ uninstall :: @echo making $@ @INTLDIR_MAKE@ @-test -f intl/makefile && cd intl && $(MAKE) @cf_cv_makeflags@ $@ @MSG_DIR_MAKE@ @-test -f po/makefile && cd po && $(MAKE) @cf_cv_makeflags@ $@ clean :: @- $(RM) -r autom4te.cache - $(RM) *.*cov *.da *.bb *.bbg - $(LIBTOOL_CLEAN) $(RM) *.i *$o $(ALL) - $(RM) headers.sed - $(RM) *.html *.pdf *.png *.ps *.txt dialog_lib.1 - $(RM) core *~ tags TAGS distclean :: clean $(RM) intl/libintl.h intl/po2tbl.sed $(RM) makefile dlg_config.h config.cache config.log config.status $(RM) samples/install/makefile $(RM) headers-sh $(RM) man2html.* $(RM) dialog-config +check : + @echo "Verify that create-rc works" + $(SHELL) -c "DIALOG=./$(PROG) ./run_test.sh $(srcdir)/samples" + install :: install-bin install-man @echo "made $@" install-full :: install-lib install-bin install-man @echo "made $@" install-strip :: $(PROG) $(BINDIR) $(INSTALL_PROGRAM) -s $(PROG) $(BINDIR) uninstall :: uninstall-bin uninstall-man @echo "made $@" uninstall-full :: uninstall-bin uninstall-man uninstall-lib @echo "made $@" install-bin : $(PROG) $(BINDIR) $(INSTALL_PROGRAM) $(PROG) $(BINDIR)/$(ACTUAL_PROG)$x uninstall-bin : $(RM) $(BINDIR)/$(ACTUAL_PROG)$x install-man :: $(MAN1DIR) @ echo "** installing $(ACTUAL_PROG).$(manext)" @ $(SHELL) $(srcdir)/rename.sh \ $(srcdir)/dialog.1 \ $(MAN1DIR)/$(ACTUAL_PROG).$(manext) \ $(ACTUAL_PROG) \ @PACKAGE@ \ $(INSTALL_DATA) uninstall-man :: $(RM) $(MAN1DIR)/$(ACTUAL_PROG).$(manext) # most users do not want/need the library, so the install rules are distinct. install-lib :: $(BINDIR) dialog-config @ echo "** installing config script in $(BINDIR)" @ $(INSTALL_SCRIPT) dialog-config $(BINDIR)/$(LIB_CONFIG) install-lib :: $(LIB_DIRS) $(LIB) headers.sed @ echo "** installing library in $(LIBDIR)" @ $(LIBTOOL_INSTALL) $(INSTALL_DATA) $(LIB) $(LIBDIR) @ echo "** installing headers in $(INCLUDEDIR)" @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dialog.h @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dlg_colors.h @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dlg_keys.h @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) . dlg_config.h uninstall-lib :: $(BINDIR) $(RM) $(BINDIR)/$(LIB_CONFIG) uninstall-lib :: $(LIB_DIRS) - $(LIBTOOL_UNINSTALL) $(RM) $(LIBDIR)/$(LIB) @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) $(srcdir) dialog.h @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) $(srcdir) dlg_colors.h @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) $(srcdir) dlg_keys.h @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) . dlg_config.h install-lib :: $(MAN3DIR) @ echo "** installing @PACKAGE@.$(libext)" @ $(SHELL) $(srcdir)/rename.sh \ $(srcdir)/dialog.3 \ $(MAN3DIR)/@PACKAGE@.$(libext) \ $(ACTUAL_PROG) \ @PACKAGE@ \ $(INSTALL_DATA) uninstall-lib :: $(RM) $(MAN3DIR)/@PACKAGE@.$(libext) headers.sed : headers-sh $(SHELL) headers-sh $(INCLUDEDIR) $(srcdir) ################################################################################ TOP_DOCS = \ @NROFF_NOTE@ dialog.txt \ @MAN2HTML_NOTE@ dialog.html \ @GROFF_NOTE@ dialog.pdf \ @GROFF_NOTE@ dialog.ps dialog.html : dialog.1 dialog.pdf : dialog.ps dialog.ps : dialog.1 dialog.txt : dialog.1 ################################################################################ # rename, to use suffix-rules dialog_lib.1 : dialog.3 -$(RM) $@ cp dialog.3 $@ LIB_DOCS = \ dialog_lib.1 \ @NROFF_NOTE@ dialog_lib.txt \ @MAN2HTML_NOTE@ dialog_lib.html \ @GROFF_NOTE@ dialog_lib.pdf \ @GROFF_NOTE@ dialog_lib.ps dialog_lib.html : dialog_lib.1 dialog_lib.pdf : dialog_lib.ps dialog_lib.ps : dialog_lib.1 dialog_lib.txt : dialog_lib.1 ################################################################################ docs: $(TOP_DOCS) $(LIB_DOCS) clean-docs: -$(RM) $(TOP_DOCS) $(LIB_DOCS) ################################################################################ $(MAN1DIR) \ $(MAN3DIR) \ $(BINDIR) \ $(INCLUDEDIR) \ $(LIBDIR) : ; mkdir -p $@ @MAKE_LOWER_TAGS@tags : @MAKE_LOWER_TAGS@ $(CTAGS) $(SRCS) $(HDRS) @MAKE_LOWER_TAGS@TAGS : @MAKE_LOWER_TAGS@ $(ETAGS) $(SRCS) $(HDRS) update-po: rsync -Lrtvz translationproject.org::tp/latest/dialog/ $(PO_DIR) test -f $(PO_DIR)/makefile && cd $(PO_DIR) && $(MAKE) $@ lint: $(LINT) $(LINT_OPTS) $(CPPFLAGS) *.c diff --git a/menubox.c b/menubox.c index abbe11c23362..c2fda7694cc3 100644 --- a/menubox.c +++ b/menubox.c @@ -1,801 +1,814 @@ /* - * $Id: menubox.c,v 1.159 2018/06/21 23:28:56 tom Exp $ + * $Id: menubox.c,v 1.171 2020/11/23 21:03:11 tom Exp $ * * menubox.c -- implements the menu box * - * Copyright 2000-2016,2018 Thomas E. Dickey + * Copyright 2000-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public Licens, version 2.1e * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> typedef enum { Unselected = 0, Selected, Editing } Mode; typedef struct { /* the outer-window */ WINDOW *dialog; int box_y; int box_x; int tag_x; int item_x; int menu_height; int menu_width; /* the inner-window */ WINDOW *menu; DIALOG_LISTITEM *items; int item_no; } ALL_DATA; #define MIN_HIGH (1 + (5 * MARGIN)) #define INPUT_ROWS 3 /* rows per inputmenu entry */ #define RowHeight(i) (is_inputmenu ? ((i) * INPUT_ROWS) : ((i) * 1)) #define ItemToRow(i) (is_inputmenu ? ((i) * INPUT_ROWS + 1) : (i)) #define RowToItem(i) (is_inputmenu ? ((i) / INPUT_ROWS + 0) : (i)) /* * Print menu item */ static void print_item(ALL_DATA * data, WINDOW *win, DIALOG_LISTITEM * item, int choice, Mode selected, bool is_inputmenu) { chtype save = dlg_get_attrs(win); - int n; int climit = (data->item_x - data->tag_x - GUTTER); int my_width = data->menu_width; int my_x = data->item_x; int my_y = ItemToRow(choice); bool both = (!dialog_vars.no_tags && !dialog_vars.no_items); bool first = TRUE; chtype bordchar; const char *show = (dialog_vars.no_items ? item->name : item->text); switch (selected) { default: case Unselected: bordchar = item_attr; break; case Selected: bordchar = item_selected_attr; break; case Editing: bordchar = dialog_attr; break; } /* Clear 'residue' of last item and mark current current item */ if (is_inputmenu) { + int n; + dlg_attrset(win, (selected != Unselected) ? item_selected_attr : item_attr); for (n = my_y - 1; n < my_y + INPUT_ROWS - 1; n++) { wmove(win, n, 0); wprintw(win, "%*s", my_width, " "); } } else { dlg_attrset(win, menubox_attr); wmove(win, my_y, 0); wprintw(win, "%*s", my_width, " "); } /* highlight first char of the tag to be special */ if (both) { (void) wmove(win, my_y, data->tag_x); dlg_print_listitem(win, item->name, climit, first, selected); first = FALSE; } /* Draw the input field box (only for inputmenu) */ (void) wmove(win, my_y, my_x); if (is_inputmenu) { my_width -= 1; dlg_draw_box(win, my_y - 1, my_x, INPUT_ROWS, my_width - my_x - data->tag_x, bordchar, bordchar); my_width -= 1; ++my_x; } /* print actual item */ wmove(win, my_y, my_x); dlg_print_listitem(win, show, my_width - my_x, first, selected); if (selected) { dlg_item_help(item->help); } dlg_attrset(win, save); } /* * Allow the user to edit the text of a menu entry. */ static int input_menu_edit(ALL_DATA * data, DIALOG_LISTITEM * items, int choice, char **resultp) { chtype save = dlg_get_attrs(data->menu); char *result; int offset = 0; int key = 0, fkey = 0; bool first = TRUE; /* see above */ bool is_inputmenu = TRUE; int y = ItemToRow(choice); int code = TRUE; int max_len = dlg_max_input(MAX((int) strlen(items->text) + 1, MAX_LEN)); result = dlg_malloc(char, (size_t) max_len); assert_ptr(result, "input_menu_edit"); /* original item is used to initialize the input string. */ result[0] = '\0'; strcpy(result, items->text); print_item(data, data->menu, items, choice, Editing, TRUE); /* taken out of inputbox.c - but somewhat modified */ for (;;) { - if (!first) + if (!first) { + int check = DLG_EXIT_UNKNOWN; key = dlg_mouse_wgetch(data->menu, &fkey); + if (dlg_result_key(key, fkey, &check)) { + if (check == DLG_EXIT_CANCEL) { + code = FALSE; + break; + } else { + flash(); + } + } + } if (dlg_edit_string(result, &offset, key, fkey, first)) { dlg_show_string(data->menu, result, offset, inputbox_attr, y, data->item_x + 1, data->menu_width - data->item_x - 3, FALSE, first); first = FALSE; } else if (key == ESC || key == TAB) { code = FALSE; break; } else { break; } } print_item(data, data->menu, items, choice, Selected, TRUE); dlg_attrset(data->menu, save); *resultp = result; return code; } static int handle_button(int code, DIALOG_LISTITEM * items, int choice) { char *help_result; switch (code) { case DLG_EXIT_OK: /* FALLTHRU */ case DLG_EXIT_EXTRA: dlg_add_string(items[choice].name); break; case DLG_EXIT_HELP: dlg_add_help_listitem(&code, &help_result, &items[choice]); dlg_add_string(help_result); break; } + AddLastKey(); return code; } int dlg_renamed_menutext(DIALOG_LISTITEM * items, int current, char *newtext) { if (dialog_vars.input_result) dialog_vars.input_result[0] = '\0'; dlg_add_result("RENAMED "); dlg_add_string(items[current].name); dlg_add_result(" "); dlg_add_string(newtext); + AddLastKey(); return DLG_EXIT_EXTRA; } int dlg_dummy_menutext(DIALOG_LISTITEM * items, int current, char *newtext) { (void) items; (void) current; (void) newtext; return DLG_EXIT_ERROR; } static void print_menu(ALL_DATA * data, int choice, int scrollamt, int max_choice, bool is_inputmenu) { int i; for (i = 0; i < max_choice; i++) { print_item(data, data->menu, &data->items[i + scrollamt], i, (i == choice) ? Selected : Unselected, is_inputmenu); } /* Clean bottom lines */ if (is_inputmenu) { int spare_lines, x_count; spare_lines = data->menu_height % INPUT_ROWS; dlg_attrset(data->menu, menubox_attr); for (; spare_lines; spare_lines--) { wmove(data->menu, data->menu_height - spare_lines, 0); for (x_count = 0; x_count < data->menu_width; x_count++) { waddch(data->menu, ' '); } } } (void) wnoutrefresh(data->menu); dlg_draw_scrollbar(data->dialog, scrollamt, scrollamt, scrollamt + max_choice, data->item_no, data->box_x, data->box_x + data->menu_width, data->box_y, data->box_y + data->menu_height + 1, menubox_border2_attr, menubox_border_attr); } static bool check_hotkey(DIALOG_LISTITEM * items, int choice) { bool result = FALSE; if (dlg_match_char(dlg_last_getc(), (dialog_vars.no_tags ? items[choice].text : items[choice].name))) { result = TRUE; } return result; } /* * This is an alternate interface to 'menu' which allows the application * to read the list item states back directly without putting them in the * output buffer. */ int dlg_menu(const char *title, const char *cprompt, int height, int width, int menu_height, int item_no, DIALOG_LISTITEM * items, int *current_item, DIALOG_INPUTMENU rename_menutext) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, TOGGLEKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+' ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), END_KEYS_BINDING }; static DLG_KEYS_BINDING binding2[] = { INPUTSTR_BINDINGS, HELPKEY_BINDINGS, ENTERKEY_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_LINES = LINES; int old_COLS = COLS; int old_height = height; int old_width = width; #endif ALL_DATA all; int i, j, x, y, cur_x, cur_y; - int key = 0, fkey; + int fkey; int button = dialog_state.visit_items ? -1 : dlg_default_button(); int choice = dlg_default_listitem(items); int result = DLG_EXIT_UNKNOWN; int scrollamt = 0; int max_choice; - int found; int use_width, name_width, text_width, list_width; WINDOW *dialog, *menu; char *prompt = 0; const char **buttons = dlg_ok_labels(); bool is_inputmenu = ((rename_menutext != 0) && (rename_menutext != dlg_dummy_menutext)); DLG_TRACE(("# menubox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("lheight", menu_height); DLG_TRACE2N("llength", item_no); /* FIXME dump the items[][] too */ - DLG_TRACE2N("current", *current_item); DLG_TRACE2N("rename", rename_menutext != 0); dialog_state.plain_buttons = TRUE; all.items = items; all.item_no = item_no; dlg_does_output(); #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); all.menu_height = menu_height; use_width = dlg_calc_list_width(item_no, items) + 10; use_width = MAX(26, use_width); if (all.menu_height == 0) { /* calculate height without items (4) */ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width); dlg_calc_listh(&height, &all.menu_height, item_no); } else { dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + all.menu_height, use_width); } dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); all.dialog = dialog; dlg_register_window(dialog, "menubox", binding); dlg_register_buttons(dialog, "menubox", buttons); dlg_mouse_setbase(x, y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); all.menu_width = width - 6; getyx(dialog, cur_y, cur_x); all.box_y = cur_y + 1; all.box_x = (width - all.menu_width) / 2 - 1; /* * After displaying the prompt, we know how much space we really have. * Limit the list to avoid overwriting the ok-button. */ - if (all.menu_height + MIN_HIGH > height - cur_y) - all.menu_height = height - MIN_HIGH - cur_y; + all.menu_height = height - MIN_HIGH - cur_y; if (all.menu_height <= 0) all.menu_height = 1; /* Find out maximal number of displayable items at once. */ max_choice = MIN(all.menu_height, RowHeight(item_no)); if (is_inputmenu) max_choice /= INPUT_ROWS; /* create new window for the menu */ menu = dlg_sub_window(dialog, all.menu_height, all.menu_width, y + all.box_y + 1, x + all.box_x + 1); all.menu = menu; dlg_register_window(menu, "menu", binding2); dlg_register_buttons(menu, "menu", buttons); /* draw a box around the menu items */ dlg_draw_box(dialog, all.box_y, all.box_x, all.menu_height + 2, all.menu_width + 2, menubox_border_attr, menubox_border2_attr); name_width = 0; text_width = 0; /* Find length of longest item to center menu * * only if --menu was given, using --inputmenu * * won't be centered. */ for (i = 0; i < item_no; i++) { name_width = MAX(name_width, dlg_count_columns(items[i].name)); text_width = MAX(text_width, dlg_count_columns(items[i].text)); } /* If the name+text is wider than the list is allowed, then truncate * one or both of them. If the name is no wider than 30% of the list, * leave it intact. * * FIXME: the gutter width and name/list ratio should be configurable. */ use_width = (all.menu_width - GUTTER); if (dialog_vars.no_tags) { list_width = MIN(use_width, text_width); } else if (dialog_vars.no_items) { list_width = MIN(use_width, name_width); } else { if (text_width >= 0 && name_width >= 0 && use_width > 0 && text_width + name_width > use_width) { int need = (int) (0.30 * use_width); if (name_width > need) { int want = (int) (use_width * ((double) name_width) / (text_width + name_width)); name_width = (want > need) ? want : need; } text_width = use_width - name_width; } list_width = (text_width + name_width); } all.tag_x = (is_inputmenu ? 0 : (use_width - list_width) / 2); all.item_x = ((dialog_vars.no_tags ? 0 : (dialog_vars.no_items ? 0 : (GUTTER + name_width))) + all.tag_x); if (choice - scrollamt >= max_choice) { scrollamt = choice - (max_choice - 1); choice = max_choice - 1; } print_menu(&all, choice, scrollamt, max_choice, is_inputmenu); /* register the new window, along with its borders */ dlg_mouse_mkbigregion(all.box_y + 1, all.box_x, all.menu_height + 2, all.menu_width + 2, KEY_MAX, 1, 1, 1 /* by lines */ ); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); dlg_trace_win(dialog); + while (result == DLG_EXIT_UNKNOWN) { + int key, found; + if (button < 0) /* --visit-items */ wmove(dialog, all.box_y + ItemToRow(choice) + 1, all.box_x + all.tag_x + 1); key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } found = FALSE; if (fkey) { /* * Allow a mouse-click on a box to switch selection to that box. * Handling a button click is a little more complicated, since we * push a KEY_ENTER back onto the input stream so we'll put the * cursor at the right place before handling the "keypress". */ if (key >= DLGK_MOUSE(KEY_MAX)) { key -= DLGK_MOUSE(KEY_MAX); i = RowToItem(key); if (i < max_choice) { found = TRUE; } else { beep(); continue; } } else if (is_DLGK_MOUSE(key) && dlg_ok_buttoncode(key - M_EVENT) >= 0) { button = (key - M_EVENT); ungetch('\n'); continue; } } else { /* * Check if key pressed matches first character of any item tag in * list. If there is more than one match, we will cycle through * each one as the same key is pressed repeatedly. */ if (button < 0 || !dialog_state.visit_items) { for (j = scrollamt + choice + 1; j < item_no; j++) { if (check_hotkey(items, j)) { found = TRUE; i = j - scrollamt; break; } } if (!found) { for (j = 0; j <= scrollamt + choice; j++) { if (check_hotkey(items, j)) { found = TRUE; i = j - scrollamt; break; } } } if (found) dlg_flush_getc(); } else if ((j = dlg_char_to_button(key, buttons)) >= 0) { button = j; ungetch('\n'); continue; } /* * A single digit (1-9) positions the selection to that line in the * current screen. */ if (!found && (key <= '9') && (key > '0') && (key - '1' < max_choice)) { found = TRUE; i = key - '1'; } } if (!found && fkey) { found = TRUE; switch (key) { case DLGK_PAGE_FIRST: i = -scrollamt; break; case DLGK_PAGE_LAST: i = item_no - 1 - scrollamt; break; case DLGK_MOUSE(KEY_PPAGE): case DLGK_PAGE_PREV: if (choice) i = 0; else if (scrollamt != 0) i = -MIN(scrollamt, max_choice); else continue; break; case DLGK_MOUSE(KEY_NPAGE): case DLGK_PAGE_NEXT: i = MIN(choice + max_choice, item_no - scrollamt - 1); break; case DLGK_ITEM_PREV: i = choice - 1; if (choice == 0 && scrollamt == 0) continue; break; case DLGK_ITEM_NEXT: i = choice + 1; if (scrollamt + choice >= item_no - 1) continue; break; default: found = FALSE; break; } } if (found) { if (i != choice) { getyx(dialog, cur_y, cur_x); if (i < 0 || i >= max_choice) { if (i < 0) { scrollamt += i; choice = 0; } else { choice = max_choice - 1; scrollamt += (i - max_choice + 1); } print_menu(&all, choice, scrollamt, max_choice, is_inputmenu); } else { choice = i; print_menu(&all, choice, scrollamt, max_choice, is_inputmenu); (void) wmove(dialog, cur_y, cur_x); wrefresh(dialog); } } continue; /* wait for another key press */ } if (fkey) { switch (key) { case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; + case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; + case DLGK_TOGGLE: case DLGK_ENTER: - if (is_inputmenu) - result = dlg_ok_buttoncode(button); - else - result = dlg_enter_buttoncode(button); + case DLGK_LEAVE: + result = ((key == DLGK_LEAVE) + ? dlg_ok_buttoncode(button) + : dlg_enter_buttoncode(button)); /* * If dlg_menu() is called from dialog_menu(), we want to * capture the results into dialog_vars.input_result. */ if (result == DLG_EXIT_ERROR) { result = DLG_EXIT_UNKNOWN; } else if (is_inputmenu || rename_menutext == dlg_dummy_menutext) { result = handle_button(result, items, scrollamt + choice); } /* * If we have a rename_menutext function, interpret the Extra * button as a request to rename the menu's text. If that * function doesn't return "Unknown", we will exit from this * function. Usually that is done for dialog_menu(), so the * shell script can use the updated value. If it does return * "Unknown", update the list item only. A direct caller of * dlg_menu() can free the renamed value - we cannot. */ if (is_inputmenu && result == DLG_EXIT_EXTRA) { char *tmp; if (input_menu_edit(&all, &items[scrollamt + choice], choice, &tmp)) { result = rename_menutext(items, scrollamt + choice, tmp); if (result == DLG_EXIT_UNKNOWN) { items[scrollamt + choice].text = tmp; } else { free(tmp); } } else { result = DLG_EXIT_UNKNOWN; print_item(&all, menu, &items[scrollamt + choice], choice, Selected, is_inputmenu); (void) wnoutrefresh(menu); free(tmp); } if (result == DLG_EXIT_UNKNOWN) { dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); } } break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ -#define resizeit(name, NAME) \ - name = ((NAME >= old_##NAME) \ - ? (NAME - (old_##NAME - old_##name)) \ - : old_##name) resizeit(height, LINES); resizeit(width, COLS); free(prompt); - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); /* repaint */ goto retry; #endif default: flash(); break; } } } dlg_mouse_free_regions(); dlg_unregister_window(menu); dlg_del_window(dialog); free(prompt); *current_item = scrollamt + choice; + + DLG_TRACE2N("current", *current_item); return result; } /* * Display a menu for choosing among a number of options */ int dialog_menu(const char *title, const char *cprompt, int height, int width, int menu_height, int item_no, char **items) { int result; int choice; int i, j; DIALOG_LISTITEM *listitems; listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); assert_ptr(listitems, "dialog_menu"); for (i = j = 0; i < item_no; ++i) { listitems[i].name = items[j++]; listitems[i].text = (dialog_vars.no_items ? dlg_strempty() : items[j++]); listitems[i].help = ((dialog_vars.item_help) ? items[j++] : dlg_strempty()); } dlg_align_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); result = dlg_menu(title, cprompt, height, width, menu_height, item_no, listitems, &choice, (dialog_vars.input_menu ? dlg_renamed_menutext : dlg_dummy_menutext)); dlg_free_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); free(listitems); return result; } diff --git a/mixedgauge.c b/mixedgauge.c index 30f0b69a1219..a08659fe2989 100644 --- a/mixedgauge.c +++ b/mixedgauge.c @@ -1,403 +1,408 @@ /* - * $Id: mixedgauge.c,v 1.34 2018/06/18 22:09:31 tom Exp $ + * $Id: mixedgauge.c,v 1.37 2021/01/16 17:19:15 tom Exp $ * * mixedgauge.c -- implements the mixedgauge dialog * - * Copyright 2007-2012,2018 Thomas E. Dickey + * Copyright 2007-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * This is inspired by a patch from Kiran Cherupally * (but different interface design). */ #include <dialog.h> #define LLEN(n) ((n) * MIXEDGAUGE_TAGS) #define ItemData(i) &items[LLEN(i)] #define ItemName(i) items[LLEN(i)] #define ItemText(i) items[LLEN(i) + 1] #define MIN_HIGH (4) #define MIN_WIDE (10 + 2 * (2 + MARGIN)) typedef struct { WINDOW *dialog; WINDOW *caption; const char *title; char *prompt; int height, old_height, min_height; int width, old_width, min_width; int len_name, len_text; int item_no; DIALOG_LISTITEM *list; } DIALOG_MIXEDGAUGE; static const char * status_string(char *given, char **freeMe) { const char *result; *freeMe = 0; if (isdigit(UCH(*given))) { switch (*given) { case '0': result = _("Succeeded"); break; case '1': result = _("Failed"); break; case '2': result = _("Passed"); break; case '3': result = _("Completed"); break; case '4': result = _("Checked"); break; case '5': result = _("Done"); break; case '6': result = _("Skipped"); break; case '7': result = _("In Progress"); break; case '8': result = ""; break; case '9': result = _("N/A"); break; default: result = "?"; break; } } else if (*given == '-') { size_t need = strlen(++given) + 4; char *temp = dlg_malloc(char, need); *freeMe = temp; sprintf(temp, "%3s%%", given); result = temp; } else if (!isspace(UCH(*given))) { result = given; } else { result = 0; } return result; } /* This function displays status messages */ static void myprint_status(DIALOG_MIXEDGAUGE * dlg) { WINDOW *win = dlg->dialog; int limit_y = dlg->height; int limit_x = dlg->width; - int y = MARGIN; int item; int cells = dlg->len_text - 2; int lm = limit_x - dlg->len_text - 1; int bm = limit_y; /* bottom margin */ int last_y = 0, last_x = 0; int j, xxx; float percent; - const char *status = ""; char *freeMe = 0; bm -= (2 * MARGIN); getyx(win, last_y, last_x); for (item = 0; item < dlg->item_no; ++item) { + const char *status = ""; chtype attr = A_NORMAL; + int y = item + MARGIN + 1; - y = item + MARGIN + 1; if (y > bm) break; status = status_string(dlg->list[item].text, &freeMe); - if (status == 0 || *status == 0) + if (status == 0 || *status == 0) { + free(freeMe); continue; + } (void) wmove(win, y, 2 * MARGIN); dlg_attrset(win, dialog_attr); dlg_print_text(win, dlg->list[item].name, lm, &attr); (void) wmove(win, y, lm); (void) waddch(win, '['); (void) wmove(win, y, lm + (cells - (int) strlen(status)) / 2); if (freeMe) { (void) wmove(win, y, lm + 1); dlg_attrset(win, title_attr); for (j = 0; j < cells; j++) (void) waddch(win, ' '); (void) wmove(win, y, lm + (cells - (int) strlen(status)) / 2); (void) waddstr(win, status); if ((title_attr & A_REVERSE) != 0) { dlg_attroff(win, A_REVERSE); } else { dlg_attrset(win, A_REVERSE); } (void) wmove(win, y, lm + 1); if (sscanf(status, "%f%%", &percent) != 1) percent = 0.0; xxx = (int) ((cells * (percent + 0.5)) / 100.0); for (j = 0; j < xxx; j++) { chtype ch1 = winch(win); if (title_attr & A_REVERSE) { ch1 &= ~A_REVERSE; } (void) waddch(win, ch1); } free(freeMe); } else { (void) wmove(win, y, lm + (cells - (int) strlen(status)) / 2); (void) waddstr(win, status); } (void) wmove(win, y, limit_x - 3); dlg_attrset(win, dialog_attr); (void) waddch(win, ']'); (void) wnoutrefresh(win); } if (win != 0) wmove(win, last_y, last_x); } static void mydraw_mixed_box(WINDOW *win, int y, int x, int height, int width, chtype boxchar, chtype borderchar) { dlg_draw_box(win, y, x, height, width, boxchar, borderchar); { chtype attr = A_NORMAL; const char *message = _("Overall Progress"); chtype save2 = dlg_get_attrs(win); dlg_attrset(win, title_attr); (void) wmove(win, y, x + 2); dlg_print_text(win, message, width, &attr); dlg_attrset(win, save2); } } static char * clean_copy(const char *string) { char *result = dlg_strclone(string); dlg_trim_string(result); dlg_tab_correct_str(result); return result; } /* * Update mixed-gauge dialog (may be from pipe, may be via direct calls). */ static void dlg_update_mixedgauge(DIALOG_MIXEDGAUGE * dlg, int percent) { int i, x; /* * Clear the area for the progress bar by filling it with spaces * in the title-attribute, and write the percentage with that * attribute. */ (void) wmove(dlg->dialog, dlg->height - 3, 4); dlg_attrset(dlg->dialog, gauge_attr); for (i = 0; i < (dlg->width - 2 * (3 + MARGIN)); i++) (void) waddch(dlg->dialog, ' '); (void) wmove(dlg->dialog, dlg->height - 3, (dlg->width / 2) - 2); (void) wprintw(dlg->dialog, "%3d%%", percent); /* * Now draw a bar in reverse, relative to the background. * The window attribute was useful for painting the background, * but requires some tweaks to reverse it. */ x = (percent * (dlg->width - 2 * (3 + MARGIN))) / 100; if ((title_attr & A_REVERSE) != 0) { dlg_attroff(dlg->dialog, A_REVERSE); } else { dlg_attrset(dlg->dialog, A_REVERSE); } (void) wmove(dlg->dialog, dlg->height - 3, 4); for (i = 0; i < x; i++) { chtype ch = winch(dlg->dialog); if (title_attr & A_REVERSE) { ch &= ~A_REVERSE; } (void) waddch(dlg->dialog, ch); } myprint_status(dlg); dlg_trace_win(dlg->dialog); } /* * Setup dialog. */ static void dlg_begin_mixedgauge(DIALOG_MIXEDGAUGE * dlg, int *began, const char *aTitle, const char *aPrompt, int aHeight, int aWidth, int aItemNo, char **items) { - int n, y, x; + int y, x; if (!*began) { + int n; + curs_set(0); memset(dlg, 0, sizeof(*dlg)); dlg->title = aTitle; dlg->prompt = clean_copy(aPrompt); dlg->height = dlg->old_height = aHeight; dlg->width = dlg->old_width = aWidth; dlg->item_no = aItemNo; dlg->list = dlg_calloc(DIALOG_LISTITEM, (size_t) aItemNo); assert_ptr(dlg->list, "dialog_mixedgauge"); dlg->len_name = 0; dlg->len_text = 15; for (n = 0; n < aItemNo; ++n) { int thisWidth = (int) strlen(ItemName(n)); if (dlg->len_name < thisWidth) dlg->len_name = thisWidth; dlg->list[n].name = ItemName(n); dlg->list[n].text = ItemText(n); } dlg->min_height = MIN_HIGH + aItemNo; dlg->min_width = MIN_WIDE + dlg->len_name + GUTTER + dlg->len_text; if (dlg->prompt != 0 && *(dlg->prompt) != 0) dlg->min_height += (2 * MARGIN); #ifdef KEY_RESIZE nodelay(stdscr, TRUE); #endif } #ifdef KEY_RESIZE else { dlg_del_window(dlg->dialog); dlg->height = dlg->old_height; dlg->width = dlg->old_width; } #endif dlg_auto_size(dlg->title, dlg->prompt, &(dlg->height), &(dlg->width), dlg->min_height, dlg->min_width); dlg_print_size(dlg->height, dlg->width); dlg_ctl_size(dlg->height, dlg->width); /* center dialog box on screen */ x = dlg_box_x_ordinate(dlg->width); y = dlg_box_y_ordinate(dlg->height); dlg->dialog = dlg_new_window(dlg->height, dlg->width, y, x); (void) werase(dlg->dialog); dlg_draw_box2(dlg->dialog, 0, 0, dlg->height, dlg->width, dialog_attr, border_attr, border2_attr); dlg_draw_title(dlg->dialog, dlg->title); dlg_draw_helpline(dlg->dialog, FALSE); if ((dlg->prompt != 0 && *(dlg->prompt) != 0) && wmove(dlg->dialog, dlg->item_no, 0) != ERR) { dlg->caption = dlg_sub_window(dlg->dialog, dlg->height - dlg->item_no - (2 * MARGIN), dlg->width, y + dlg->item_no + (2 * MARGIN), x); dlg_attrset(dlg->caption, dialog_attr); dlg_print_autowrap(dlg->caption, dlg->prompt, dlg->height, dlg->width); } mydraw_mixed_box(dlg->dialog, dlg->height - 4, 2 + MARGIN, 2 + MARGIN, dlg->width - 2 * (2 + MARGIN), dialog_attr, border_attr); *began += 1; } /* * Discard the mixed-gauge dialog. */ static int dlg_finish_mixedgauge(DIALOG_MIXEDGAUGE * dlg, int status) { (void) wrefresh(dlg->dialog); #ifdef KEY_RESIZE nodelay(stdscr, FALSE); #endif curs_set(1); dlg_del_window(dlg->dialog); + free(dlg->prompt); + free(dlg->list); return status; } /* * Setup dialog, read mixed-gauge data from pipe. */ int dialog_mixedgauge(const char *title, const char *cprompt, int height, int width, int percent, int item_no, char **items) { DIALOG_MIXEDGAUGE dlg; int began = 0; DLG_TRACE(("# mixedgauge args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("percent", percent); DLG_TRACE2N("llength", item_no); /* FIXME dump the items[][] too */ dlg_begin_mixedgauge(&dlg, &began, title, cprompt, height, width, item_no, items); dlg_update_mixedgauge(&dlg, percent); return dlg_finish_mixedgauge(&dlg, DLG_EXIT_OK); } diff --git a/mousewget.c b/mousewget.c index 6702a79e6e56..fc85a7106237 100644 --- a/mousewget.c +++ b/mousewget.c @@ -1,95 +1,96 @@ /* - * $Id: mousewget.c,v 1.24 2017/01/31 00:27:21 tom Exp $ + * $Id: mousewget.c,v 1.25 2019/07/25 00:06:38 tom Exp $ * - * mousewget.c -- mouse/wgetch support for dialog + * mousewget.c -- mouse/wgetch support for dialog * - * Copyright 2000-2016,2017 Thomas E. Dickey + * Copyright 2000-2017,2019 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> static int mouse_wgetch(WINDOW *win, int *fkey, bool ignore_errs) { int mouse_err = FALSE; int key; do { key = dlg_getc(win, fkey); #if USE_MOUSE mouse_err = FALSE; if (key == KEY_MOUSE) { MEVENT event; - mseRegion *p; if (getmouse(&event) != ERR) { + mseRegion *p; + DLG_TRACE(("# mouse-click abs %d,%d (rel %d,%d)\n", event.y, event.x, event.y - getbegy(win), event.x - getbegx(win))); if ((p = dlg_mouse_region(event.y, event.x)) != 0) { key = DLGK_MOUSE(p->code); } else if ((p = dlg_mouse_bigregion(event.y, event.x)) != 0) { int x = event.x - p->x; int y = event.y - p->y; int row = (p->X - p->x) / p->step_x; key = -(p->code); switch (p->mode) { case 1: /* index by lines */ key += y; break; case 2: /* index by columns */ key += (x / p->step_x); break; default: case 3: /* index by cells */ key += (x / p->step_x) + (y * row); break; } } else { (void) beep(); mouse_err = TRUE; } } else { (void) beep(); mouse_err = TRUE; } } #endif } while (ignore_errs && mouse_err); return key; } int dlg_mouse_wgetch(WINDOW *win, int *fkey) { return mouse_wgetch(win, fkey, TRUE); } int dlg_mouse_wgetch_nowait(WINDOW *win, int *fkey) { return mouse_wgetch(win, fkey, FALSE); } diff --git a/msgbox.c b/msgbox.c index d9a2eb1c9065..5264368b67dc 100644 --- a/msgbox.c +++ b/msgbox.c @@ -1,202 +1,204 @@ /* - * $Id: msgbox.c,v 1.81 2018/06/21 23:29:59 tom Exp $ + * $Id: msgbox.c,v 1.89 2020/11/23 00:32:02 tom Exp $ * * msgbox.c -- implements the message box and info box * - * Copyright 2000-2012,2018 Thomas E. Dickey + * Copyright 2000-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors: * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> #include <dlg_keys.h> /* * Display a message box. Program will pause and display an "OK" button * if the parameter 'pauseopt' is non-zero. */ int dialog_msgbox(const char *title, const char *cprompt, int height, int width, int pauseopt) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, SCROLLKEY_BINDINGS, TRAVERSE_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ - int x, y, last = 0, page; + int x, y, page; int button; - int key = 0, fkey; + int key, fkey; int result = DLG_EXIT_UNKNOWN; WINDOW *dialog = 0; char *prompt; const char **buttons = dlg_ok_label(); int offset = 0; - int check; bool show = TRUE; int min_width = (pauseopt == 1 ? 12 : 0); bool save_nocancel = dialog_vars.nocancel; #ifdef KEY_RESIZE int req_high; int req_wide; #endif DLG_TRACE(("# msgbox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("pauseopt", pauseopt); dialog_vars.nocancel = TRUE; button = dlg_default_button(); #ifdef KEY_RESIZE req_high = height; req_wide = width; restart: #endif dlg_button_layout(buttons, &min_width); prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); dlg_auto_size(title, prompt, &height, &width, (pauseopt == 1 ? 2 : 0), min_width); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); -#ifdef KEY_RESIZE - if (dialog != 0) - dlg_move_window(dialog, height, width, y, x); - else -#endif - { - dialog = dlg_new_window(height, width, y, x); - dlg_register_window(dialog, "msgbox", binding); - dlg_register_buttons(dialog, "msgbox", buttons); - } + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "msgbox", binding); + dlg_register_buttons(dialog, "msgbox", buttons); + page = height - (1 + 3 * MARGIN); dlg_mouse_setbase(x, y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); if (pauseopt) { + int last = 0; + dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n'); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); dlg_draw_helpline(dialog, FALSE); while (result == DLG_EXIT_UNKNOWN) { + int check; + if (show) { last = dlg_print_scrolled(dialog, prompt, offset, page, width, pauseopt); dlg_trace_win(dialog); show = FALSE; } key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; - + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } if (!fkey && (check = dlg_char_to_button(key, buttons)) >= 0) { result = dlg_ok_buttoncode(check); break; } if (fkey) { switch (key) { #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); - dlg_clear(); free(prompt); height = req_high; width = req_wide; show = TRUE; + _dlg_resize_cleanup(dialog); goto restart; #endif case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_ENTER: + result = dlg_enter_buttoncode(button); + break; + case DLGK_LEAVE: result = dlg_ok_buttoncode(button); break; default: if (is_DLGK_MOUSE(key)) { result = dlg_ok_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } else if (dlg_check_scrolled(key, last, page, &show, &offset) == 0) { } else { beep(); } break; } - } else { + } else if (key > 0) { beep(); } } } else { dlg_print_scrolled(dialog, prompt, offset, page, width, pauseopt); dlg_draw_helpline(dialog, FALSE); wrefresh(dialog); dlg_trace_win(dialog); result = DLG_EXIT_OK; } + dlg_add_last_key(-1); dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); dialog_vars.nocancel = save_nocancel; return result; } diff --git a/package/debian/changelog b/package/debian/changelog index 29bfa1d9c5d8..2bef7f287f2c 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,229 +1,337 @@ +cdialog (20210117) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 13 Jan 2021 19:58:21 -0500 + +cdialog (20210112) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 11 Jan 2021 03:53:05 -0500 + +cdialog (20201126) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 26 Jul 2020 11:17:16 -0400 + +cdialog (20200327) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 19 Mar 2020 05:02:12 -0400 + +cdialog (20200228) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 28 Feb 2020 20:31:15 -0500 + +cdialog (20191231) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 31 Dec 2019 15:37:41 -0500 + +cdialog (20191210) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 10 Dec 2019 17:19:19 -0500 + +cdialog (20191209) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 09 Dec 2019 04:14:47 -0500 + +cdialog (20191110) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 10 Nov 2019 17:48:23 -0500 + +cdialog (20190926) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 25 Sep 2019 04:37:53 -0400 + +cdialog (20190924) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 23 Sep 2019 05:13:54 -0400 + +cdialog (20190808) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 08 Aug 2019 16:54:08 -0400 + +cdialog (20190806) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 01 Aug 2019 20:16:04 -0400 + +cdialog (20190728) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 28 Jul 2019 18:04:47 -0400 + +cdialog (20190724) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 22 Jul 2019 19:20:18 -0400 + +cdialog (20190211) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 11 Feb 2019 15:47:42 -0500 + +cdialog (20181107) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 07 Nov 2018 20:38:14 -0500 + +cdialog (20181022) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 28 Oct 2018 10:53:29 -0400 + cdialog (20180621) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 15 Feb 2018 05:02:43 -0500 cdialog (20171209) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 09 Dec 2017 10:52:09 -0500 cdialog (20170509) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 09 May 2017 19:08:48 -0400 cdialog (20170131) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 23 Jan 2017 17:41:21 -0500 cdialog (20161120) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 20 Nov 2016 06:47:59 -0500 cdialog (20160828) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 26 Aug 2016 17:41:17 -0400 cdialog (20160424) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 19 Apr 2016 06:33:50 -0400 cdialog (20160209) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 01 Feb 2016 05:18:04 -0500 cdialog (20160126) unstable; urgency=low * maintenance updates, add --week-start option -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 25 Jan 2016 13:13:51 -0500 cdialog (20150920) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 20 Sep 2015 18:08:36 -0400 cdialog (20150528) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 28 May 2015 19:42:32 -0400 cdialog (20150513) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 13 May 2015 10:46:07 -0400 cdialog (20150512) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 10 May 2015 19:31:46 -0400 cdialog (20150225) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 25 Feb 2015 05:10:57 -0500 cdialog (20150224) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 24 Feb 2015 07:10:45 -0500 cdialog (20150125) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 25 Jan 2015 16:30:54 -0500 cdialog (20140911) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 11 Sep 2014 03:56:17 -0400 cdialog (20140910) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 10 Sep 2014 04:23:13 -0400 cdialog (20140908) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 08 Sep 2014 05:10:11 -0400 cdialog (20140901) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 01 Sep 2014 12:15:40 -0400 cdialog (20140219) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 19 Feb 2014 04:13:36 -0500 cdialog (20140112) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 12 Jan 2014 13:22:17 -0500 cdialog (20130928) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 28 Sep 2013 21:27:37 -0400 cdialog (20130923) unstable; urgency=low * improved memory-caching for gauge widget -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 21 Sep 2013 09:18:26 -0400 cdialog (20130902) unstable; urgency=low * maintenance updates -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 01 Sep 2013 19:08:31 -0400 cdialog (20130523) unstable; urgency=low * minor fixes -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 23 May 2013 19:25:01 -0400 cdialog (20130315) unstable; urgency=low * minor fixes -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 15 Mar 2013 04:41:20 -0400 cdialog (20121230) unstable; urgency=low * new widgets * coverity fixes * configure-script updates -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 06 Oct 2012 09:19:29 -0400 cdialog (20120706) unstable; urgency=high * fix regression in msgbox (ArchLinux #30574) -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 06 Jul 2012 12:52:46 -0400 cdialog (20120703) unstable; urgency=low * minor fixes * add --default-button -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 30 Jun 2012 10:41:05 -0400 cdialog (20120215) unstable; urgency=low * minor fixes -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 15 Feb 2012 19:40:32 -0500 cdialog (20111020) unstable; urgency=high * fix regression in menubox.c logic for inputmenu vs menu. -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 19 Oct 2011 19:17:40 -0400 cdialog (20111018) unstable; urgency=high * improve color configurability * misc bug-fixes. * various improvements to tracing. * remove an incorrect free() call in dlg_free_gauge() * fix missing trailing null from dlg_align_columns -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 07 Sep 2011 20:04:04 -0400 cdialog (20110707) unstable; urgency=high * fix a regression in dlg_getc() from 20110630 changes. -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 07 Jul 2011 18:10:47 -0400 cdialog (20110630) unstable; urgency=high * various bug-fixes reported in FreeBSD. -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 13 Jun 2011 05:44:17 -0400 cdialog (20110302) unstable; urgency=high * Add --prgbox and --progressbox * Bug-fix for --timeout. -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 28 Feb 2011 18:42:17 -0500 cdialog (20110118) unstable; urgency=high * Initial package release -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 30 Dec 2010 09:23:24 -0500 diff --git a/package/debian/compat b/package/debian/compat index 7ed6ff82de6b..f599e28b8ab0 100644 --- a/package/debian/compat +++ b/package/debian/compat @@ -1 +1 @@ -5 +10 diff --git a/package/debian/control b/package/debian/control index c42f663275e4..8df5923fe94c 100644 --- a/package/debian/control +++ b/package/debian/control @@ -1,24 +1,33 @@ Source: cdialog Maintainer: Thomas E. Dickey <dickey@invisible-island.net> Section: misc Priority: optional Standards-Version: 3.8.4 Build-Depends: debhelper (>= 5), libc6 (>= 2.11), libncursesw5-dev (>= 5.3), groff-base Homepage: http://invisible-island.net/dialog/ Package: cdialog Architecture: any Depends: libc6 (>= 2.11), libncursesw5 (>= 5.3) Description: dialog - display dialog boxes from shell scripts Dialog is a program that will let you present a variety of questions or display messages using dialog boxes from a shell script. These types of dialog boxes are implemented (though not all are necessarily compiled into dialog): . buildlist, calendar, checklist, dselect, editbox, form, fselect, gauge, infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, msgbox (message), passwordbox, passwordform, pause, prgbox, programbox, progressbox, radiolist, rangebox, tailbox, tailboxbg, textbox, timebox, treeview, and yesno (yes/no). . This package installs as "cdialog" to avoid conflict with other packages. + +Package: cdialog-dev +Architecture: any +Depends: libc6 (>= 2.11), libncursesw5 (>= 5.3) +Description: dialog - display dialog boxes from shell scripts + Dialog is a program that will let you present a variety of questions or + display messages using dialog boxes from a shell script. These types + This package provides headers and documentation for the library used + by "cdialog". diff --git a/package/debian/copyright b/package/debian/copyright index 7921d2524622..e9614740c905 100644 --- a/package/debian/copyright +++ b/package/debian/copyright @@ -1,111 +1,111 @@ Upstream source http://invisible-island.net/dialog/dialog.html Current dialog upstream maintainer: Thomas Dickey <dickey@invisible-island.net> ------------------------------------------------------------------------------- Files: *.c *.h - Copyright 2000-2017,2018 Thomas E. Dickey + Copyright 2000-2020,2021 Thomas E. Dickey This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software Foundation. 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, write to Free Software Foundation, Inc. 51 Franklin St., Fifth Floor Boston, MA 02110, USA. An earlier version of this program lists as authors Savio Lam (lam836@cs.cuhk.hk) ------------------------------------------------------------------------------- Files: aclocal.m4 Licence: other-BSD -Copyright: 1999-2017,2018 by Thomas E. Dickey +Copyright: 1999-2020,2021 by Thomas E. Dickey 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, distribute with modifications, 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 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 ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. Files: install-sh Copyright: 1994 X Consortium Licence: other-BSD 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. It can only install one file at a time, a restriction shared with many OS's install programs. Files: debian/* -Copyright: 2010-2012,2013 Thomas E. Dickey +Copyright: 2010-2020,2021 Thomas E. Dickey Licence: other-BSD Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the above listed copyright holder(s) not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. On Debian systems, the complete text of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2' diff --git a/package/debian/rules b/package/debian/rules index d8ab2cd9cb5d..4f03a22819bf 100755 --- a/package/debian/rules +++ b/package/debian/rules @@ -1,106 +1,140 @@ #!/usr/bin/make -f +# $Id: rules,v 1.11 2019/07/24 00:53:35 tom Exp $ # Made with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS) CFLAGS := $(shell dpkg-buildflags --get CFLAGS) LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) +TMP = $(CURDIR)/debian/tmp + ACTUAL_PROG = cdialog +DEV_PACKAGE = $(ACTUAL_PROG)-dev + +BINDIR = /usr/bin +LIBDIR = /usr/lib +LOCALE = /usr/share/locale +MANDIR = /usr/share/man +HEADER = /usr/include ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir cp -v package/dialog.map package/${ACTUAL_PROG}.map CPPFLAGS="$(CPPFLAGS)" \ CFLAGS="$(CFLAGS)" \ LDFLAGS="$(LDFLAGS)" \ ./configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=/usr \ --mandir=\$${prefix}/share/man \ --enable-nls \ --enable-header-subdir \ --enable-widec \ --with-shared \ --with-screen=ncursesw6 \ --with-package=${ACTUAL_PROG} \ --with-versioned-syms \ --disable-rpath-hack touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f makefile ] || $(MAKE) distclean rm -f configure-stamp build-stamp install-stamp dh_clean install: install-stamp install-stamp: build-stamp dh_testdir dh_testroot dh_clean -k dh_installdirs - $(MAKE) install DESTDIR=$(CURDIR)/debian/${ACTUAL_PROG} + $(MAKE) install-full DESTDIR=$(TMP) + + dh_install -p${ACTUAL_PROG} $(BINDIR)/$(ACTUAL_PROG) + dh_install -p${ACTUAL_PROG} $(LIBDIR) + dh_install -p${ACTUAL_PROG} $(LOCALE) + dh_install -p${ACTUAL_PROG} $(MANDIR)/man1 + dh_install -p${DEV_PACKAGE} $(BINDIR)/$(ACTUAL_PROG)-config + dh_install -p${DEV_PACKAGE} $(MANDIR)/man3 + dh_install -p${DEV_PACKAGE} $(HEADER) + + echo FIXME + for P in lib${ACTUAL_PROG}.so*; \ + do \ + [ -L "$$P" ] || continue; \ + case "$$P" in \ + *.so) \ + echo "DEV: $$P"; \ + dh_link -p${DEV_PACKAGE} $(LIBDIR)/`readlink $$P` $(LIBDIR)/$$P ; \ + ;; \ + *) \ + echo "BIN: $$P"; \ + dh_link -p${ACTUAL_PROG} $(LIBDIR)/`readlink $$P` $(LIBDIR)/$$P ; \ + ;; \ + esac; \ + done touch install-stamp # Build architecture-independent files here. binary-indep: build install # No binary-indep target. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs CHANGES dh_strip dh_compress dh_fixperms dh_installdeb dh_makeshlibs dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install install-stamp diff --git a/package/dialog.map b/package/dialog.map index c8a733230033..cb3aff61c217 100644 --- a/package/dialog.map +++ b/package/dialog.map @@ -1,222 +1,263 @@ -# $Id: dialog.map,v 1.7 2018/06/21 00:32:55 tom Exp $ +# $Id: dialog.map,v 1.13 2020/11/26 18:09:52 tom Exp $ # script for shared library symbol-versioning using ld # # This file was generated by ncu-mapsyms # Configure options (1.0.20040721) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.1.20070227) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.2.20121230) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.3.20160126) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.3.20180620) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20190806) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20191209) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20200326) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20201126) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec DIALOG_1.0.20040721 { global: dialog_calendar; dialog_checklist; dialog_form; dialog_fselect; dialog_gauge; dialog_inputbox; dialog_menu; dialog_msgbox; dialog_state; dialog_tailbox; dialog_textbox; dialog_timebox; dialog_vars; dialog_version; dialog_yesno; dlg_add_callback; dlg_add_quoted; dlg_add_result; dlg_attr_clear; dlg_auto_size; dlg_auto_sizefile; dlg_beeping; dlg_box_x_ordinate; dlg_box_y_ordinate; dlg_button_count; dlg_button_layout; dlg_button_sizes; dlg_button_x_step; dlg_calc_listh; dlg_calc_listw; dlg_char_to_button; dlg_clear; dlg_color_count; dlg_color_setup; dlg_color_table; dlg_count_columns; dlg_count_wchars; dlg_create_rc; dlg_ctl_size; dlg_default_item; dlg_defaultno_button; dlg_del_window; dlg_does_output; dlg_draw_arrows; dlg_draw_bottom_box; dlg_draw_box; dlg_draw_buttons; dlg_draw_shadow; dlg_draw_title; dlg_edit_offset; dlg_edit_string; dlg_exit; dlg_exit_label; dlg_exiterr; dlg_flush_getc; dlg_getc; dlg_getc_callbacks; dlg_index_columns; dlg_index_wchars; dlg_item_help; dlg_killall_bg; dlg_last_getc; dlg_limit_columns; dlg_match_char; dlg_mouse_bigregion; dlg_mouse_free_regions; dlg_mouse_mkbigregion; dlg_mouse_mkregion; dlg_mouse_region; dlg_mouse_setbase; dlg_mouse_wgetch; dlg_new_window; dlg_next_button; dlg_next_ok_buttonindex; dlg_ok_buttoncode; dlg_ok_label; dlg_ok_labels; dlg_parse_rc; dlg_prev_button; dlg_prev_ok_buttonindex; dlg_print_autowrap; dlg_print_size; dlg_print_text; dlg_put_backtitle; dlg_remove_callback; dlg_set_focus; dlg_show_string; dlg_strclone; dlg_sub_window; dlg_tab_correct_str; dlg_trim_string; dlg_yes_labels; end_dialog; init_dialog; }; DIALOG_1.1.20070227 { global: dialog_dselect; dialog_editbox; dialog_mixedform; dialog_mixedgauge; dialog_pause; dialog_progressbox; dlg_asciibox; dlg_boxchar; dlg_button_to_char; dlg_calc_list_width; dlg_checklist; dlg_clr_result; dlg_color_pair; dlg_default_formitem; dlg_default_listitem; dlg_draw_arrows2; dlg_dump_keys; dlg_editbox; dlg_exit_buttoncode; dlg_find_index; dlg_form; dlg_free_formitems; dlg_lookup_key; dlg_max_input; dlg_menu; dlg_mouse_wgetch_nowait; dlg_move_window; dlg_ordinate; dlg_parse_bindkey; dlg_print_line; dlg_register_buttons; dlg_register_window; dlg_result_key; dlg_set_result; dlg_strempty; dlg_trace; dlg_trace_chr; dlg_trace_win; dlg_unregister_window; dlg_yes_buttoncode; } DIALOG_1.0.20040721; DIALOG_1.2.20121230 { global: dialog_buildlist; dialog_helpfile; dialog_prgbox; dialog_rangebox; dialog_treeview; dlg_add_callback_ref; dlg_add_separator; dlg_add_string; dlg_align_columns; dlg_allocate_gauge; dlg_buildlist; dlg_check_scrolled; dlg_count_argv; dlg_count_real_columns; dlg_default_button; dlg_draw_bottom_box2; dlg_draw_box2; dlg_draw_helpline; dlg_draw_scrollbar; dlg_dummy_menutext; dlg_dump_window_keys; dlg_eat_argv; dlg_free_columns; dlg_free_gauge; dlg_get_attrs; dlg_mouse_setcode; dlg_need_separator; dlg_new_modal_window; dlg_print_listitem; dlg_print_scrolled; dlg_progressbox; dlg_renamed_menutext; dlg_restore_vars; dlg_save_vars; dlg_string_to_argv; dlg_trace_msg; dlg_treeview; dlg_update_gauge; dlg_wgetparent; } DIALOG_1.1.20070227; DIALOG_1.3.20160126 { global: dlg_add_help_formitem; dlg_add_help_listitem; dlg_add_last_key; dlg_finish_string; dlg_popen; dlg_reallocate_gauge; } DIALOG_1.2.20121230; DIALOG_1.3.20180620 { global: dlg_trace_2n; dlg_trace_2s; dlg_ttysize; dlg_will_resize; } DIALOG_1.3.20160126; + +DIALOG_1.3.20190806 { + global: + dlg_button_key; + dlg_exitcode2s; + dlg_exitname2n; + dlg_ok_button_key; +} DIALOG_1.3.20180620; + +DIALOG_1.3.20191209 { + global: + dlg_trace_va_msg; +} DIALOG_1.3.20190806; + +DIALOG_1.3.20200326 { + global: + dlg_reset_timeout; + dlg_set_timeout; +} DIALOG_1.3.20191209; + +DIALOG_1.3.20201126 { + global: + dlg_der_window; + dlg_getenv_num; + dlg_getenv_str; + dlg_keep_tite; + local: + _*; +} DIALOG_1.3.20200326; diff --git a/package/dialog.spec b/package/dialog.spec index c5f6b77aeb2d..2a000011a880 100644 --- a/package/dialog.spec +++ b/package/dialog.spec @@ -1,95 +1,110 @@ Summary: dialog - display dialog boxes from shell scripts %define AppProgram dialog %define AppVersion 1.3 -%define AppRelease 20180621 +%define AppRelease 20210117 %define ActualProg c%{AppProgram} -# $XTermId: dialog.spec,v 1.108 2018/06/21 09:19:45 tom Exp $ +# $XTermId: dialog.spec,v 1.146 2021/01/16 16:21:23 tom Exp $ Name: %{ActualProg} Version: %{AppVersion} Release: %{AppRelease} License: LGPL Group: Applications/System URL: ftp://ftp.invisible-island.net/%{AppProgram} Source0: %{AppProgram}-%{AppVersion}-%{AppRelease}.tgz Packager: Thomas Dickey <dickey@invisible-island.net> +%package devel +Summary: Development headers/library for the dialog package. +Requires: %{ActualProg}, ncurses-devel + %description Dialog is a program that will let you present a variety of questions or display messages using dialog boxes from a shell script. These types of dialog boxes are implemented (though not all are necessarily compiled into dialog): buildlist, calendar, checklist, dselect, editbox, form, fselect, gauge, infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, msgbox (message), passwordbox, passwordform, pause, prgbox, programbox, progressbox, radiolist, rangebox, tailbox, tailboxbg, textbox, timebox, treeview, and yesno (yes/no). This package installs as "cdialog" to avoid conflict with other packages. + +%description devel +This is the development package "cdialog", which includes the header files, +the linkage information and library documentation. %prep %define debug_package %{nil} %setup -q -n %{AppProgram}-%{AppVersion}-%{AppRelease} %build cp -v package/dialog.map package/%{ActualProg}.map INSTALL_PROGRAM='${INSTALL}' \ %configure \ - --target %{_target_platform} \ - --prefix=%{_prefix} \ - --bindir=%{_bindir} \ - --libdir=%{_libdir} \ - --mandir=%{_mandir} \ - --with-package=%{ActualProg} \ - --enable-header-subdir \ - --enable-nls \ - --enable-widec \ - --with-shared \ - --with-ncursesw \ - --with-versioned-syms \ - --disable-rpath-hack + --target %{_target_platform} \ + --prefix=%{_prefix} \ + --bindir=%{_bindir} \ + --libdir=%{_libdir} \ + --mandir=%{_mandir} \ + --with-package=%{ActualProg} \ + --enable-header-subdir \ + --enable-nls \ + --enable-widec \ + --with-shared \ + --with-ncursesw \ + --with-versioned-syms \ + --disable-rpath-hack make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT -make install DESTDIR=$RPM_BUILD_ROOT -make install-full DESTDIR=$RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT +make install-full DESTDIR=$RPM_BUILD_ROOT strip $RPM_BUILD_ROOT%{_bindir}/%{ActualProg} chmod 755 $RPM_BUILD_ROOT%{_libdir}/lib%{ActualProg}.so.* %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_bindir}/%{ActualProg} -%{_bindir}/%{ActualProg}-config %{_mandir}/man1/%{ActualProg}.* -%{_mandir}/man3/%{ActualProg}.* +%{_libdir}/lib%{ActualProg}.so.* +%{_datadir}/locale/*/LC_MESSAGES/%{ActualProg}.mo + +%files devel +%defattr(-,root,root) +%{_bindir}/%{ActualProg}-config %{_includedir}/%{ActualProg}.h %{_includedir}/%{ActualProg}/dlg_colors.h %{_includedir}/%{ActualProg}/dlg_config.h %{_includedir}/%{ActualProg}/dlg_keys.h -%{_libdir}/lib%{ActualProg}.* -%{_datadir}/locale/*/LC_MESSAGES/%{ActualProg}.mo +%{_libdir}/lib%{ActualProg}.so +%{_mandir}/man3/%{ActualProg}.* %changelog # each patch should add its ChangeLog entries here +* Wed Jul 24 2019 Thomas Dickey +- split-out "-devel" package + * Sat Dec 09 2017 Thomas Dickey - update ftp url * Thu Apr 21 2016 Thomas Dickey - remove stray call to libtool * Tue Oct 18 2011 Thomas Dickey - add executable permissions for shared libraries, discard ".la" file. * Thu Dec 30 2010 Thomas Dickey - initial version diff --git a/package/dialog.sym b/package/dialog.sym index d628b35ef5b6..99bc2e1ecacb 100644 --- a/package/dialog.sym +++ b/package/dialog.sym @@ -1,202 +1,225 @@ -# $Id: dialog.sym,v 1.7 2018/06/21 00:32:55 tom Exp $ +# $Id: dialog.sym,v 1.12 2020/11/26 18:08:18 tom Exp $ # script for shared library symbol-visibility using libtool # # This file was generated by ncu-mapsyms # Configure options (1.0.20040721) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.1.20070227) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.2.20121230) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.3.20160126) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec # Configure options (1.3.20180620) # --disable-leaks --enable-trace # --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20190806) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20191209) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20200326) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec +# Configure options (1.3.20201126) +# --disable-leaks --enable-trace +# --disable-leaks --enable-trace --enable-widec dialog_buildlist dialog_calendar dialog_checklist dialog_dselect dialog_editbox dialog_form dialog_fselect dialog_gauge dialog_helpfile dialog_inputbox dialog_menu dialog_mixedform dialog_mixedgauge dialog_msgbox dialog_pause dialog_prgbox dialog_progressbox dialog_rangebox dialog_state dialog_tailbox dialog_textbox dialog_timebox dialog_treeview dialog_vars dialog_version dialog_yesno dlg_add_callback dlg_add_callback_ref dlg_add_help_formitem dlg_add_help_listitem dlg_add_last_key dlg_add_quoted dlg_add_result dlg_add_separator dlg_add_string dlg_align_columns dlg_allocate_gauge dlg_asciibox dlg_attr_clear dlg_auto_size dlg_auto_sizefile dlg_beeping dlg_box_x_ordinate dlg_box_y_ordinate dlg_boxchar dlg_buildlist dlg_button_count +dlg_button_key dlg_button_layout dlg_button_sizes dlg_button_to_char dlg_button_x_step dlg_calc_list_width dlg_calc_listh dlg_calc_listw dlg_char_to_button dlg_check_scrolled dlg_checklist dlg_clear dlg_clr_result dlg_color_count dlg_color_pair dlg_color_setup dlg_color_table dlg_count_argv dlg_count_columns dlg_count_real_columns dlg_count_wchars dlg_create_rc dlg_ctl_size dlg_default_button dlg_default_formitem dlg_default_item dlg_default_listitem dlg_defaultno_button dlg_del_window +dlg_der_window dlg_does_output dlg_draw_arrows dlg_draw_arrows2 dlg_draw_bottom_box dlg_draw_bottom_box2 dlg_draw_box dlg_draw_box2 dlg_draw_buttons dlg_draw_helpline dlg_draw_scrollbar dlg_draw_shadow dlg_draw_title dlg_dummy_menutext dlg_dump_keys dlg_dump_window_keys dlg_eat_argv dlg_edit_offset dlg_edit_string dlg_editbox dlg_exit dlg_exit_buttoncode dlg_exit_label +dlg_exitcode2s dlg_exiterr +dlg_exitname2n dlg_find_index dlg_finish_string dlg_flush_getc dlg_form dlg_free_columns dlg_free_formitems dlg_free_gauge dlg_get_attrs dlg_getc dlg_getc_callbacks +dlg_getenv_num +dlg_getenv_str dlg_index_columns dlg_index_wchars dlg_item_help +dlg_keep_tite dlg_killall_bg dlg_last_getc dlg_limit_columns dlg_lookup_key dlg_match_char dlg_max_input dlg_menu dlg_mouse_bigregion dlg_mouse_free_regions dlg_mouse_mkbigregion dlg_mouse_mkregion dlg_mouse_region dlg_mouse_setbase dlg_mouse_setcode dlg_mouse_wgetch dlg_mouse_wgetch_nowait dlg_move_window dlg_need_separator dlg_new_modal_window dlg_new_window dlg_next_button dlg_next_ok_buttonindex +dlg_ok_button_key dlg_ok_buttoncode dlg_ok_label dlg_ok_labels dlg_ordinate dlg_parse_bindkey dlg_parse_rc dlg_popen dlg_prev_button dlg_prev_ok_buttonindex dlg_print_autowrap dlg_print_line dlg_print_listitem dlg_print_scrolled dlg_print_size dlg_print_text dlg_progressbox dlg_put_backtitle dlg_reallocate_gauge dlg_register_buttons dlg_register_window dlg_remove_callback dlg_renamed_menutext +dlg_reset_timeout dlg_restore_vars dlg_result_key dlg_save_vars dlg_set_focus dlg_set_result +dlg_set_timeout dlg_show_string dlg_strclone dlg_strempty dlg_string_to_argv dlg_sub_window dlg_tab_correct_str dlg_trace dlg_trace_2n dlg_trace_2s dlg_trace_chr dlg_trace_msg +dlg_trace_va_msg dlg_trace_win dlg_treeview dlg_trim_string dlg_ttysize dlg_unregister_window dlg_update_gauge dlg_wgetparent dlg_will_resize dlg_yes_buttoncode dlg_yes_labels end_dialog init_dialog diff --git a/package/freebsd/Makefile b/package/freebsd/Makefile index b2c063899249..814daa74af0d 100644 --- a/package/freebsd/Makefile +++ b/package/freebsd/Makefile @@ -1,48 +1,48 @@ # New ports collection makefile for: ncdialog # Date created: 2003-01-11 # Whom: AlanE <alane@freebsd.org> # # $Carpetsmoker: ports/cdialog/Makefile,v 1.4 2007/04/22 11:30:53 carpetsmoker Exp $ # $FreeBSD: ports/devel/cdialog/Makefile,v 1.40 2012/11/17 05:55:36 svnexp Exp $ # PORTNAME= cdialog -PORTVERSION= 1.3.20180621 +PORTVERSION= 1.3.20210117 PORTEPOCH= 1 CATEGORIES= devel MASTER_SITES= ftp://ftp.invisible-island.net/${PORTNAME:S|^c||}/ DISTNAME= ${PORTNAME:S|^c||}-${PORTVERSION:R}-${PORTVERSION:E} EXTRACT_SUFX= .tgz MAINTAINER= sylvio@FreeBSD.org COMMENT= An enhanced version of 'dialog' to work with ncurses LICENSE= LGPL21 USE_AUTOTOOLS= libtool GNU_CONFIGURE= yes USE_LDCONFIG= yes CONFIGURE_ARGS= --enable-widec \ --includedir=${PREFIX}/include/${PORTNAME} \ --with-libtool \ --with-ncursesw \ --with-package=${PORTNAME} MAKEFILE= makefile MAN1= cdialog.1 MAN3= cdialog.3 MANCOMPRESSED= no INSTALL_TARGET= install-strip install-man install-lib .if !defined(NOPORTEXAMPLES) post-patch: @${FIND} ${WRKSRC}/samples/ -type f -exec ${REINPLACE_CMD} -i "" "s|dialog|cdialog|g" {} \; post-install: @${MKDIR} ${EXAMPLESDIR} cd ${WRKSRC}/samples && ${FIND} . | \ ${CPIO} -pdm -L -R ${SHAREOWN}:${SHAREGRP} ${EXAMPLESDIR} .endif .include <bsd.port.mk> diff --git a/pause.c b/pause.c index eeff0fe7be72..eafb28f1e140 100644 --- a/pause.c +++ b/pause.c @@ -1,256 +1,259 @@ /* - * $Id: pause.c,v 1.39 2018/06/19 22:57:01 tom Exp $ + * $Id: pause.c,v 1.48 2020/11/23 00:38:19 tom Exp $ * * pause.c -- implements the pause dialog * - * Copyright 2004-2012,2018 Thomas E. Dickey + * Copyright 2004-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * This is adapted from source contributed by * Yura Kalinichenko */ #include <dialog.h> #include <dlg_keys.h> #define MY_TIMEOUT 50 #define MIN_HIGH (4) #define MIN_WIDE (10 + 2 * (2 + MARGIN)) #define BTN_HIGH (1 + 2 * MARGIN) /* * This is like gauge, but can be interrupted. * * A pause box displays a meter along the bottom of the box. The meter * indicates how many seconds remain until the end of the pause. The pause * exits when timeout is reached (status OK) or the user presses: * OK button (status OK) * CANCEL button (status CANCEL) * Esc key (status ESC) * */ int dialog_pause(const char *title, const char *cprompt, int height, int width, int seconds) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, TRAVERSE_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif int i, x, y, step; int button = dlg_default_button(); int seconds_orig; WINDOW *dialog; const char **buttons = dlg_ok_labels(); bool have_buttons = (dlg_button_count(buttons) != 0); bool first; - int key = 0, fkey; + int key, fkey; int result = DLG_EXIT_UNKNOWN; int button_high = (have_buttons ? BTN_HIGH : MARGIN); int gauge_y; char *prompt; int save_timeout = dialog_vars.timeout_secs; DLG_TRACE(("# pause args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("seconds", seconds); curs_set(0); - dialog_vars.timeout_secs = 0; seconds_orig = (seconds > 0) ? seconds : 1; + dialog_vars.pause_secs = seconds_orig; + dialog_vars.timeout_secs = 0; #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); if (have_buttons) { dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); dlg_button_layout(buttons, &width); } else { dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + MARGIN - BTN_HIGH, MIN_WIDE); } gauge_y = height - button_high - (1 + 2 * MARGIN); dlg_print_size(height, width); dlg_ctl_size(height, width); /* center dialog box on screen */ x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); dlg_register_window(dialog, "pause", binding); dlg_register_buttons(dialog, "pause", buttons); dlg_mouse_setbase(x, y); nodelay(dialog, TRUE); first = TRUE; do { (void) werase(dialog); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_title(dialog, title); dlg_draw_helpline(dialog, FALSE); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); dlg_draw_box2(dialog, gauge_y, 2 + MARGIN, 2 + MARGIN, width - 2 * (2 + MARGIN), dialog_attr, border_attr, border2_attr); /* * Clear the area for the progress bar by filling it with spaces * in the title-attribute, and write the percentage with that * attribute. */ (void) wmove(dialog, gauge_y + MARGIN, 4); dlg_attrset(dialog, title_attr); for (i = 0; i < (width - 2 * (3 + MARGIN)); i++) (void) waddch(dialog, ' '); (void) wmove(dialog, gauge_y + MARGIN, (width / 2) - 2); (void) wprintw(dialog, "%3d", seconds); /* * Now draw a bar in reverse, relative to the background. * The window attribute was useful for painting the background, * but requires some tweaks to reverse it. */ x = (seconds * (width - 2 * (3 + MARGIN))) / seconds_orig; if ((title_attr & A_REVERSE) != 0) { dlg_attroff(dialog, A_REVERSE); } else { dlg_attrset(dialog, A_REVERSE); } (void) wmove(dialog, gauge_y + MARGIN, 4); for (i = 0; i < x; i++) { chtype ch = winch(dialog); if (title_attr & A_REVERSE) { ch &= ~A_REVERSE; } (void) waddch(dialog, ch); } mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n'); if (have_buttons) { dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); } if (first) { (void) wrefresh(dialog); dlg_trace_win(dialog); first = FALSE; } for (step = 0; (result == DLG_EXIT_UNKNOWN) && (step < 1000); step += MY_TIMEOUT) { napms(MY_TIMEOUT); key = dlg_mouse_wgetch_nowait(dialog, &fkey); if (key == ERR) { ; /* ignore errors in nodelay mode */ - } else { - if (dlg_result_key(key, fkey, &result)) + } else if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) break; } switch (key) { #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); - dlg_clear(); /* fill the background */ - dlg_del_window(dialog); /* delete this window */ height = old_height; width = old_width; free(prompt); - refresh(); /* get it all onto the terminal */ + _dlg_resize_cleanup(dialog); goto retry; #endif case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_ENTER: result = dlg_enter_buttoncode(button); break; + case DLGK_LEAVE: + result = dlg_ok_buttoncode(button); + break; case ERR: break; default: if (is_DLGK_MOUSE(key)) { result = dlg_ok_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } break; } } } while ((result == DLG_EXIT_UNKNOWN) && (seconds-- > 0)); + dlg_add_last_key(-1); curs_set(1); dlg_mouse_free_regions(); dlg_del_window(dialog); free(prompt); dialog_vars.timeout_secs = save_timeout; return ((result == DLG_EXIT_UNKNOWN) ? DLG_EXIT_OK : result); } diff --git a/po/ro.po b/po/ast.po similarity index 56% copy from po/ro.po copy to po/ast.po index b53898b4fef9..29f8d3440297 100644 --- a/po/ro.po +++ b/po/ast.po @@ -1,116 +1,115 @@ -# Translation of dialog messages in Romanian. -# Copyright (C) 2015 Free Software Foundation, Inc. +# Asturian translation for dialog +# Dialog # This file is distributed under the same license as the dialog package. -# Laurentiu Buzdugan <lbuz@rolix.org>, 2005. -# Mihai Cristescu <mihai.cristescu@archlinux.info>, 2015. -# +# Copyright 2003-2007,2008 # Thomas Dickey # +# enolp <enolp@softastur.org>, 2018. msgid "" msgstr "" "Project-Id-Version: dialog 1.1.20080819\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-18 18:26-0400\n" -"PO-Revision-Date: 2015-03-13 19:50+0200\n" -"Last-Translator: Mihai Cristescu <mihai.cristescu@archlinux.info>\n" -"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" -"Language: ro\n" +"PO-Revision-Date: 2018-07-16 01:09+0100\n" +"Last-Translator: enolp <enolp@softastur.org>\n" +"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n" +"Language: ast\n" "X-Bugs: Report translation errors to the Language-Team address.\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%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -"X-Generator: Poedit 1.7.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 2.0\n" #: buttons.c:385 msgid "Yes" -msgstr "Da" +msgstr "Sí" #: buttons.c:393 msgid "No" -msgstr "Nu" +msgstr "Non" #: buttons.c:401 msgid "OK" -msgstr "OK" +msgstr "Aceutar" #: buttons.c:409 msgid "Cancel" -msgstr "Renunță" +msgstr "Encaboxar" #: buttons.c:417 msgid "EXIT" -msgstr "TERMINÄ‚" +msgstr "COLAR" #: buttons.c:425 msgid "Extra" -msgstr "Extra" +msgstr "Adicional" #: buttons.c:433 msgid "Help" -msgstr "Ajutor" +msgstr "Ayuda" #. Headline "Month" #: calendar.c:273 msgid "Month" -msgstr "Lună" +msgstr "Mes" #. Headline "Year" #: calendar.c:293 msgid "Year" -msgstr "An" +msgstr "Añu" #: dialog.c:741 msgid "Rename" -msgstr "RedenumeÈ™te" +msgstr "Renomar" #: fselect.c:550 msgid "Directories" -msgstr "Directoare" +msgstr "Direutorios" #: fselect.c:551 msgid "Files" -msgstr "FiÈ™iere" +msgstr "Ficheros" #: mixedgauge.c:58 msgid "Succeeded" -msgstr "A reuÈ™it" +msgstr "Tuvo ésitu" #: mixedgauge.c:61 msgid "Failed" -msgstr "A eÈ™uat" +msgstr "Falló" #: mixedgauge.c:64 msgid "Passed" -msgstr "A trecut" +msgstr "Posóse" #: mixedgauge.c:67 msgid "Completed" -msgstr "Complet" +msgstr "Completóse" #: mixedgauge.c:70 msgid "Checked" -msgstr "Verificat" +msgstr "Conseñóse" #: mixedgauge.c:73 msgid "Done" -msgstr "Gata" +msgstr "Fecho" #: mixedgauge.c:76 msgid "Skipped" -msgstr "Omis" +msgstr "Saltóse" #: mixedgauge.c:79 msgid "In Progress" -msgstr "ÃŽn curs" +msgstr "En cursu" #: mixedgauge.c:85 msgid "N/A" -msgstr "N/A" +msgstr "N/D" #: mixedgauge.c:193 msgid "Overall Progress" -msgstr "Progres pe ansamblu" +msgstr "Progresu xeneral" #: textbox.c:489 msgid "Search" -msgstr "Căutare" +msgstr "Guetar" diff --git a/po/dialog.pot b/po/dialog.pot index beda1d598bdc..5d981f870062 100644 --- a/po/dialog.pot +++ b/po/dialog.pot @@ -1,110 +1,120 @@ # Dialog -# Copyright 2003-2014,2015 # Thomas Dickey +# Copyright 2003-2020,2021 # Thomas Dickey # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: dialog 1.2.20150510\n" +"Project-Id-Version: dialog 1.3.20210117\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-10 21:00-0400\n" +"POT-Creation-Date: 2021-01-17 15:18-0500\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" -#: buttons.c:480 +#: buttons.c:500 msgid "Yes" msgstr "" -#: buttons.c:488 +#: buttons.c:508 msgid "No" msgstr "" -#: buttons.c:496 +#: buttons.c:516 msgid "OK" msgstr "" -#: buttons.c:504 +#: buttons.c:524 msgid "Cancel" msgstr "" -#: buttons.c:512 +#: buttons.c:532 msgid "EXIT" msgstr "" -#: buttons.c:520 +#: buttons.c:540 msgid "Extra" msgstr "" -#: buttons.c:528 +#: buttons.c:548 msgid "Help" msgstr "" #. Headline "Month" -#: calendar.c:300 +#: calendar.c:463 msgid "Month" msgstr "" #. Headline "Year" -#: calendar.c:322 +#: calendar.c:485 msgid "Year" msgstr "" -#: dialog.c:728 +#: dialog.c:744 +#, c-format +msgid "Expected %d arguments, found only %d" +msgstr "" + +#: dialog.c:748 +#, c-format +msgid "Expected %d arguments, found extra %d" +msgstr "" + +#: dialog.c:907 msgid "Rename" msgstr "" -#: fselect.c:596 +#: fselect.c:623 msgid "Directories" msgstr "" -#: fselect.c:597 +#: fselect.c:624 msgid "Files" msgstr "" #: mixedgauge.c:58 msgid "Succeeded" msgstr "" #: mixedgauge.c:61 msgid "Failed" msgstr "" #: mixedgauge.c:64 msgid "Passed" msgstr "" #: mixedgauge.c:67 msgid "Completed" msgstr "" #: mixedgauge.c:70 msgid "Checked" msgstr "" #: mixedgauge.c:73 msgid "Done" msgstr "" #: mixedgauge.c:76 msgid "Skipped" msgstr "" #: mixedgauge.c:79 msgid "In Progress" msgstr "" #: mixedgauge.c:85 msgid "N/A" msgstr "" -#: mixedgauge.c:190 +#: mixedgauge.c:193 msgid "Overall Progress" msgstr "" -#: textbox.c:502 +#: textbox.c:515 msgid "Search" msgstr "" diff --git a/po/hi.po b/po/hi.po index 57459fe9cd36..482feb2fc26f 100644 --- a/po/hi.po +++ b/po/hi.po @@ -1,112 +1,113 @@ # Hindi translation of Dialog. # This file is distributed under the same license as the dialog package. # msgid "" msgstr "" "Project-Id-Version: dialog\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-18 18:26-0400\n" "PO-Revision-Date: 2007-07-18 11:06+0200\n" "Last-Translator: Deepika Mangla <deepika.mangla@gmail.com>\n" "Language-Team: <elinks@knopper.net>\n" +"Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: 2\n" "X-Poedit-Language: Hindi\n" "X-Poedit-Country: INDIA\n" "X-Generator: KBabel 1.11.4\n" #: buttons.c:385 msgid "Yes" -msgstr "à€¹à€Ÿà€Â" +msgstr "हाà¤" #: buttons.c:393 msgid "No" -msgstr "à€šà€¹à¥€à€‚" +msgstr "नहीं" #: buttons.c:401 msgid "OK" -msgstr "à€ à¥€à€•" +msgstr "ठीक" #: buttons.c:409 msgid "Cancel" -msgstr "à€°à€Šà¥Âà€Š à€•à€°à¥‡à€‚" +msgstr "रदà¥à¤¦ करें" #: buttons.c:417 msgid "EXIT" -msgstr "à€šà€¿à€°à¥Âà€—à€®" +msgstr "निरà¥à¤—म" #: buttons.c:425 msgid "Extra" -msgstr "à€…à€€à€¿à€°à€¿à€•à¥Âà€€" +msgstr "अतिरिकà¥à¤¤" #: buttons.c:433 msgid "Help" -msgstr "à€®à€Šà€Š" +msgstr "मदद" #. Headline "Month" #: calendar.c:273 msgid "Month" -msgstr "à€®à€¹à¥€à€šà€Ÿ" +msgstr "महीना" #. Headline "Year" #: calendar.c:293 msgid "Year" -msgstr "à€µà€°à¥Âà€·" +msgstr "वरà¥à¤·" #: dialog.c:741 msgid "Rename" -msgstr "à€ªà¥Âà€šà€ƒà€šà€Ÿà€®à€•à€°à€£" +msgstr "पà¥à¤¨à¤ƒà¤¨à¤¾à¤®à¤•à¤°à¤£" #: fselect.c:550 msgid "Directories" -msgstr "à€šà€¿à€°à¥Âà€Šà¥‡à€¶à€¿à€•à€Ÿ" +msgstr "निरà¥à¤¦à¥‡à¤¶à¤¿à¤•à¤¾" #: fselect.c:551 msgid "Files" -msgstr "à€žà€‚à€šà€¿à€•à€Ÿ" +msgstr "संचिका" #: mixedgauge.c:58 msgid "Succeeded" -msgstr "à€žà€«à€²" +msgstr "सफल" #: mixedgauge.c:61 msgid "Failed" -msgstr "à€žà€«à€²" +msgstr "सफल" #: mixedgauge.c:64 msgid "Passed" -msgstr "à€ªà€Ÿà€ž" +msgstr "पास" #: mixedgauge.c:67 msgid "Completed" -msgstr "à€žà€®à¥Âà€ªà¥‚à€°à€¿à€€" +msgstr "समà¥à¤ªà¥‚रित" #: mixedgauge.c:70 msgid "Checked" -msgstr "à€…à€µà€°à¥Âà€Šà¥Âà€§" +msgstr "अवरà¥à¤¦à¥à¤§" #: mixedgauge.c:73 msgid "Done" -msgstr "à€žà€«à€² " +msgstr "सफल " #: mixedgauge.c:76 msgid "Skipped" -msgstr "à€›à¥‹à€¡à€Œ à€Šà€¿à€¯à€Ÿ" +msgstr "छोड़ दिया" #: mixedgauge.c:79 msgid "In Progress" -msgstr "à€ªà¥Âà€°à€—à€€à€¿ à€®à¥‡à€‚ à€¹à¥ˆ" +msgstr "पà¥à¤°à¤—ति में है" #: mixedgauge.c:85 msgid "N/A" -msgstr "à€²à€Ÿà€—à¥‚ à€šà€¹à¥€à€‚" +msgstr "लागू नहीं" #: mixedgauge.c:193 msgid "Overall Progress" -msgstr "à€žà€®à€—à¥Âà€° à€ªà¥Âà€°à€—à€€à€¿" +msgstr "समगà¥à¤° पà¥à¤°à¤—ति" #: textbox.c:489 msgid "Search" -msgstr "à€…à€šà¥Âà€žà€šà¥Âà€§à€Ÿà€š" +msgstr "अनà¥à¤¸à¤¨à¥à¤§à¤¾à¤¨" diff --git a/po/ja.po b/po/ja.po index 366ca2825d2a..a69174addaec 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,112 +1,112 @@ # dialog Japanese po file. # Copyright 2000, Thomas Dickey # This file is distributed under the same license as the dialog package. # Hirofumi Takeda <takepin@turbolinux.co.jp>, 2000. # Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2008. # msgid "" msgstr "" "Project-Id-Version: dialog 1.1.20070704\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-01-16 17:57-0500\n" "PO-Revision-Date: 2008-07-24 00:12+0900\n" "Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n" "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" "Language: ja\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: buttons.c:387 msgid "Yes" -msgstr "¤Ï¤¤" +msgstr "ã¯ã„" #: buttons.c:395 msgid "No" -msgstr "¤¤¤¤¤¨" +msgstr "ã„ã„ãˆ" #: buttons.c:403 msgid "OK" -msgstr "λ²ò" +msgstr "了解" #: buttons.c:411 msgid "Cancel" -msgstr "¼è¾Ã" +msgstr "å–消" #: buttons.c:419 msgid "EXIT" -msgstr "½ªÎ»" +msgstr "終了" #: buttons.c:427 msgid "Extra" -msgstr "³ÈÄ¥" +msgstr "æ‹¡å¼µ" #: buttons.c:435 msgid "Help" -msgstr "¥Ø¥ë¥×" +msgstr "ヘルプ" #. Headline "Month" #: calendar.c:298 msgid "Month" -msgstr "·î" +msgstr "月" #. Headline "Year" #: calendar.c:318 msgid "Year" -msgstr "ǯ" +msgstr "å¹´" #: dialog.c:756 msgid "Rename" -msgstr "̾Á°Êѹ¹" +msgstr "åå‰å¤‰æ›´" #: fselect.c:571 msgid "Directories" -msgstr "¥Ç¥£¥ì¥¯¥È¥ê" +msgstr "ディレクトリ" #: fselect.c:572 msgid "Files" -msgstr "¥Õ¥¡¥¤¥ë" +msgstr "ファイル" #: mixedgauge.c:58 msgid "Succeeded" -msgstr "À®¸ù" +msgstr "æˆåŠŸ" #: mixedgauge.c:61 msgid "Failed" -msgstr "¼ºÇÔ" +msgstr "失敗" #: mixedgauge.c:64 msgid "Passed" -msgstr "¥Ñ¥¹" +msgstr "パス" #: mixedgauge.c:67 msgid "Completed" -msgstr "´°Î»" +msgstr "完了" #: mixedgauge.c:70 msgid "Checked" -msgstr "³Îǧ½ªÎ»" +msgstr "確èªçµ‚了" #: mixedgauge.c:73 msgid "Done" -msgstr "½ªÎ»" +msgstr "終了" #: mixedgauge.c:76 msgid "Skipped" -msgstr "¥¹¥­¥Ã¥×" +msgstr "スキップ" #: mixedgauge.c:79 msgid "In Progress" -msgstr "½èÍýÃæ" +msgstr "処ç†ä¸­" #: mixedgauge.c:85 msgid "N/A" -msgstr "̵¸ú" +msgstr "無効" #: mixedgauge.c:193 msgid "Overall Progress" -msgstr "Á´ÂΤοʹԾõ¶·" +msgstr "全体ã®é€²è¡ŒçŠ¶æ³" #: textbox.c:468 msgid "Search" -msgstr "Ä´ºº" +msgstr "調査" diff --git a/po/pt.po b/po/pt.po index 4a06e012edad..8e599c0ff0cc 100644 --- a/po/pt.po +++ b/po/pt.po @@ -1,111 +1,114 @@ -# Portuguese translation of Dialog. -# Copyright (C) 2001 Thomas Dickey. -# Frédéric L. W. Meunier <0 @ pervalidus.net>, 2001. +# Portuguese (Portugal) Translation for the dialog Package +# This file is distributed under the same license as the dialog package. +# Copyright 2003-2007,2008 Thomas Dickey +# This file is distributed under the same license as the dialog package. +# Pedro Albuquerque <palbuquerque73@gmail.com>, 2019. # msgid "" msgstr "" -"Project-Id-Version: Dialog 0.9a-20020814\n" +"Project-Id-Version: dialog 1.1.20080819\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-18 18:26-0400\n" -"PO-Revision-Date: 2002-09-04 19:12-0300\n" -"Last-Translator: Frédéric L. W. Meunier <0 @ pervalidus.net>\n" -"Language-Team: Portuguese <pt @ li.org>\n" +"PO-Revision-Date: 2019-09-25 07:33+0100\n" +"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n" +"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8-bit\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" #: buttons.c:385 msgid "Yes" msgstr "Sim" #: buttons.c:393 msgid "No" msgstr "Não" #: buttons.c:401 msgid "OK" msgstr "Aceitar" #: buttons.c:409 msgid "Cancel" msgstr "Cancelar" #: buttons.c:417 msgid "EXIT" -msgstr "Sair" +msgstr "SAIR" #: buttons.c:425 msgid "Extra" -msgstr "" +msgstr "Extra" #: buttons.c:433 msgid "Help" msgstr "Ajuda" #. Headline "Month" #: calendar.c:273 msgid "Month" msgstr "Mês" #. Headline "Year" #: calendar.c:293 msgid "Year" msgstr "Ano" #: dialog.c:741 msgid "Rename" -msgstr "" +msgstr "Renomear" #: fselect.c:550 msgid "Directories" -msgstr "Directorias" +msgstr "Pastas" #: fselect.c:551 msgid "Files" msgstr "Ficheiros" #: mixedgauge.c:58 msgid "Succeeded" -msgstr "" +msgstr "Sucesso" #: mixedgauge.c:61 -#, fuzzy msgid "Failed" -msgstr "Ficheiros" +msgstr "Falha" #: mixedgauge.c:64 msgid "Passed" -msgstr "" +msgstr "Passou" #: mixedgauge.c:67 msgid "Completed" -msgstr "" +msgstr "Concluído" #: mixedgauge.c:70 msgid "Checked" -msgstr "" +msgstr "Verificado" #: mixedgauge.c:73 msgid "Done" -msgstr "" +msgstr "Feito" #: mixedgauge.c:76 msgid "Skipped" -msgstr "" +msgstr "Ignorado" #: mixedgauge.c:79 msgid "In Progress" -msgstr "" +msgstr "Em Curso" #: mixedgauge.c:85 msgid "N/A" -msgstr "" +msgstr "N/D" #: mixedgauge.c:193 msgid "Overall Progress" -msgstr "" +msgstr "Progresso geral" #: textbox.c:489 -#, fuzzy msgid "Search" -msgstr "Busca" +msgstr "Procurar" diff --git a/po/ro.po b/po/ro.po index b53898b4fef9..ba2250dc53df 100644 --- a/po/ro.po +++ b/po/ro.po @@ -1,116 +1,115 @@ # Translation of dialog messages in Romanian. # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the dialog package. # Laurentiu Buzdugan <lbuz@rolix.org>, 2005. # Mihai Cristescu <mihai.cristescu@archlinux.info>, 2015. # # msgid "" msgstr "" "Project-Id-Version: dialog 1.1.20080819\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-18 18:26-0400\n" "PO-Revision-Date: 2015-03-13 19:50+0200\n" "Last-Translator: Mihai Cristescu <mihai.cristescu@archlinux.info>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" "Language: ro\n" -"X-Bugs: Report translation errors to the Language-Team address.\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%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" "X-Generator: Poedit 1.7.4\n" #: buttons.c:385 msgid "Yes" msgstr "Da" #: buttons.c:393 msgid "No" msgstr "Nu" #: buttons.c:401 msgid "OK" msgstr "OK" #: buttons.c:409 msgid "Cancel" msgstr "Renunță" #: buttons.c:417 msgid "EXIT" msgstr "TERMINÄ‚" #: buttons.c:425 msgid "Extra" msgstr "Extra" #: buttons.c:433 msgid "Help" msgstr "Ajutor" #. Headline "Month" #: calendar.c:273 msgid "Month" msgstr "Lună" #. Headline "Year" #: calendar.c:293 msgid "Year" msgstr "An" #: dialog.c:741 msgid "Rename" msgstr "RedenumeÈ™te" #: fselect.c:550 msgid "Directories" msgstr "Directoare" #: fselect.c:551 msgid "Files" msgstr "FiÈ™iere" #: mixedgauge.c:58 msgid "Succeeded" msgstr "A reuÈ™it" #: mixedgauge.c:61 msgid "Failed" msgstr "A eÈ™uat" #: mixedgauge.c:64 msgid "Passed" msgstr "A trecut" #: mixedgauge.c:67 msgid "Completed" msgstr "Complet" #: mixedgauge.c:70 msgid "Checked" msgstr "Verificat" #: mixedgauge.c:73 msgid "Done" msgstr "Gata" #: mixedgauge.c:76 msgid "Skipped" msgstr "Omis" #: mixedgauge.c:79 msgid "In Progress" msgstr "ÃŽn curs" #: mixedgauge.c:85 msgid "N/A" msgstr "N/A" #: mixedgauge.c:193 msgid "Overall Progress" msgstr "Progres pe ansamblu" #: textbox.c:489 msgid "Search" msgstr "Căutare" diff --git a/po/sq.po b/po/sq.po index 592d4a11ffa4..1d5022131ec9 100644 --- a/po/sq.po +++ b/po/sq.po @@ -1,111 +1,113 @@ -# Albanian translation of Dialog. +# Translation of dialog to Albanian # This file is distributed under the same license as the dialog package. -# Copyright (C) 2005 Thomas Dickey. -# Elian Myftiu <elian@lycos.com>, 2004. -# +# Copyright 2003-2007,2008 # Thomas Dickey +# Besnik Bleta <besnik@programeshqip.org>, 2004,2008,2015, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: Dialog 1.0-20050116\n" +"Project-Id-Version: dialog-1.1.20080819\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-01-16 17:57-0500\n" -"PO-Revision-Date: 2004-11-18 02:28+0100\n" -"Last-Translator: Elian Myftiu <elian@lycos.com>\n" -"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2020-04-01 15:04+0300\n" +"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n" +"Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n" "Language: sq\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\n" -#: buttons.c:387 +#: buttons.c:385 msgid "Yes" msgstr "Po" -#: buttons.c:395 +#: buttons.c:393 msgid "No" msgstr "Jo" -#: buttons.c:403 +#: buttons.c:401 msgid "OK" -msgstr "mirë" +msgstr "OK" -#: buttons.c:411 +#: buttons.c:409 msgid "Cancel" -msgstr "Anullo" +msgstr "Anuloje" -#: buttons.c:419 +#: buttons.c:417 msgid "EXIT" -msgstr "Dal" +msgstr "DALJE" -#: buttons.c:427 +#: buttons.c:425 msgid "Extra" -msgstr "" +msgstr "Ekstra" -#: buttons.c:435 +#: buttons.c:433 msgid "Help" -msgstr "" +msgstr "Ndihmë" #. Headline "Month" -#: calendar.c:298 +#: calendar.c:273 msgid "Month" -msgstr "" +msgstr "Muaj" #. Headline "Year" -#: calendar.c:318 +#: calendar.c:293 msgid "Year" -msgstr "" +msgstr "Vit" -#: dialog.c:756 +#: dialog.c:741 msgid "Rename" -msgstr "" +msgstr "Riemërtoje" -#: fselect.c:571 +#: fselect.c:550 msgid "Directories" -msgstr "" +msgstr "Drejtori" -#: fselect.c:572 +#: fselect.c:551 msgid "Files" -msgstr "" +msgstr "Kartela" #: mixedgauge.c:58 msgid "Succeeded" -msgstr "" +msgstr "Doli me sukses" #: mixedgauge.c:61 msgid "Failed" -msgstr "" +msgstr "Dështoi" #: mixedgauge.c:64 msgid "Passed" -msgstr "" +msgstr "Kaloi" #: mixedgauge.c:67 msgid "Completed" -msgstr "" +msgstr "U plotësua" #: mixedgauge.c:70 msgid "Checked" -msgstr "" +msgstr "U kontrollua" #: mixedgauge.c:73 msgid "Done" -msgstr "" +msgstr "U bë" #: mixedgauge.c:76 msgid "Skipped" -msgstr "" +msgstr "U anashkalua" #: mixedgauge.c:79 msgid "In Progress" -msgstr "" +msgstr "Në ecuri e sipër" #: mixedgauge.c:85 msgid "N/A" -msgstr "" +msgstr "N/A" #: mixedgauge.c:193 msgid "Overall Progress" -msgstr "" +msgstr "Ecuri Gjithsej" -#: textbox.c:468 +#: textbox.c:489 msgid "Search" -msgstr "" +msgstr "KÄ“rko" diff --git a/prgbox.c b/prgbox.c index d095935a358d..089cb552628d 100644 --- a/prgbox.c +++ b/prgbox.c @@ -1,117 +1,118 @@ /* - * $Id: prgbox.c,v 1.13 2016/01/27 01:37:26 tom Exp $ + * $Id: prgbox.c,v 1.14 2019/07/25 00:07:15 tom Exp $ * * prgbox.c -- implements the prg box * - * Copyright 2011-2014,2016 Thomas E. Dickey + * Copyright 2011-2016,2019 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> static void reapchild(int sig) { (void) sig; } /* * Open a pipe which ties stderr and stdout together. */ FILE * dlg_popen(const char *command, const char *type) { FILE *result = 0; int fd[2]; - char *blob; - char **argv; - if ((*type == 'r' || *type != 'w') && pipe(fd) == 0) { + if ((*type == 'r' || *type == 'w') && pipe(fd) == 0) { + char *blob; + switch (fork()) { case -1: /* Error. */ (void) close(fd[0]); (void) close(fd[1]); break; case 0: /* child. */ if (*type == 'r') { if (fd[1] != STDOUT_FILENO) { (void) dup2(fd[1], STDOUT_FILENO); (void) close(fd[1]); } (void) dup2(STDOUT_FILENO, STDERR_FILENO); (void) close(fd[0]); } else { if (fd[0] != STDIN_FILENO) { (void) dup2(fd[0], STDIN_FILENO); (void) close(fd[0]); } (void) close(fd[1]); (void) close(STDERR_FILENO); } /* * Bourne shell needs "-c" option to force it to use only the * given command. Also, it needs the command to be parsed into * tokens. */ if ((blob = malloc(10 + strlen(command))) != 0) { + char **argv; sprintf(blob, "sh -c \"%s\"", command); argv = dlg_string_to_argv(blob); execvp("sh", argv); } _exit(127); /* NOTREACHED */ default: /* parent */ if (*type == 'r') { result = fdopen(fd[0], type); (void) close(fd[1]); } else { result = fdopen(fd[1], type); (void) close(fd[0]); } break; } } return result; } /* * Display text from a pipe in a scrolling window. */ int dialog_prgbox(const char *title, const char *cprompt, const char *command, int height, int width, int pauseopt) { int code; FILE *fp; void (*oldreaper) (int) = signal(SIGCHLD, reapchild); fp = dlg_popen(command, "r"); if (fp == NULL) dlg_exiterr("pipe open failed: %s", command); code = dlg_progressbox(title, cprompt, height, width, pauseopt, fp); pclose(fp); signal(SIGCHLD, oldreaper); return code; } diff --git a/progressbox.c b/progressbox.c index bbac47e52969..9ad731b09100 100644 --- a/progressbox.c +++ b/progressbox.c @@ -1,477 +1,488 @@ /* - * $Id: progressbox.c,v 1.47 2018/06/21 09:14:47 tom Exp $ + * $Id: progressbox.c,v 1.54 2020/11/22 15:48:27 tom Exp $ * * progressbox.c -- implements the progress box * - * Copyright 2006-2014,2018 Thomas E. Dickey + * Copyright 2006-2019,2020 Thomas E. Dickey * Copyright 2005 Valery Reznic * * 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. + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> #ifdef KEY_RESIZE #include <errno.h> #endif #define MIN_HIGH (4) #define MIN_WIDE (10 + 2 * (2 + MARGIN)) #ifdef KEY_RESIZE typedef struct _wrote { struct _wrote *link; char *text; } WROTE; #endif typedef struct { DIALOG_CALLBACK obj; WINDOW *text; char *prompt; int high, wide; int old_high, old_wide; char line[MAX_LEN + 1]; int is_eof; #ifdef KEY_RESIZE WROTE *wrote; #endif } MY_OBJ; static void free_obj(MY_OBJ * obj) { dlg_del_window(obj->obj.win); free(obj->prompt); #ifdef KEY_RESIZE while (obj->wrote) { WROTE *wrote = obj->wrote; obj->wrote = wrote->link; free(wrote->text); free(wrote); } #endif free(obj); } +#ifdef KEY_RESIZE static void restart_obj(MY_OBJ * obj) { free(obj->prompt); obj->high = obj->old_high; obj->wide = obj->old_wide; dlg_clear(); dlg_del_window(obj->obj.win); } +#endif static void start_obj(MY_OBJ * obj, const char *title, const char *cprompt) { int y, x, thigh; - int i; obj->prompt = dlg_strclone(cprompt); dlg_tab_correct_str(obj->prompt); dlg_auto_size(title, obj->prompt, &obj->high, &obj->wide, MIN_HIGH, MIN_WIDE); dlg_print_size(obj->high, obj->wide); dlg_ctl_size(obj->high, obj->wide); x = dlg_box_x_ordinate(obj->wide); y = dlg_box_y_ordinate(obj->high); thigh = obj->high - (2 * MARGIN); obj->obj.win = dlg_new_window(obj->high, obj->wide, y, x); dlg_draw_box2(obj->obj.win, 0, 0, obj->high, obj->wide, dialog_attr, border_attr, border2_attr); dlg_draw_title(obj->obj.win, title); dlg_draw_helpline(obj->obj.win, FALSE); if (obj->prompt[0] != '\0') { + int i; int y2, x2; dlg_attrset(obj->obj.win, dialog_attr); dlg_print_autowrap(obj->obj.win, obj->prompt, obj->high, obj->wide); getyx(obj->obj.win, y2, x2); (void) x2; ++y2; wmove(obj->obj.win, y2, MARGIN); for (i = 0; i < getmaxx(obj->obj.win) - 2 * MARGIN; i++) (void) waddch(obj->obj.win, dlg_boxchar(ACS_HLINE)); y += y2; thigh -= y2; } /* Create window for text region, used for scrolling text */ obj->text = dlg_sub_window(obj->obj.win, thigh, obj->wide - (2 * MARGIN), y + MARGIN, x + MARGIN); (void) wrefresh(obj->obj.win); (void) wmove(obj->obj.win, getmaxy(obj->text), (MARGIN + 1)); (void) wnoutrefresh(obj->obj.win); dlg_attr_clear(obj->text, getmaxy(obj->text), getmaxx(obj->text), dialog_attr); } /* * Return current line of text. */ static char * get_line(MY_OBJ * obj, int *restart) { FILE *fp = obj->obj.input; int col = 0; - int j, tmpint, ch; + int j, tmpint; char *result = obj->line; *restart = 0; for (;;) { - ch = getc(fp); + int ch = getc(fp); #ifdef KEY_RESIZE /* SIGWINCH may have interrupted this - try to ignore if resizable */ if (ferror(fp)) { switch (errno) { case EINTR: clearerr(fp); continue; default: break; } } #endif if (feof(fp) || ferror(fp)) { obj->is_eof = 1; if (!col) { result = NULL; } break; } if (ch == '\n') break; if (ch == '\r') break; if (col >= MAX_LEN) continue; if ((ch == TAB) && (dialog_vars.tab_correct)) { tmpint = dialog_state.tab_len - (col % dialog_state.tab_len); for (j = 0; j < tmpint; j++) { if (col < MAX_LEN) { obj->line[col] = ' '; ++col; } else { break; } } } else { obj->line[col] = (char) ch; ++col; } } obj->line[col] = '\0'; #ifdef KEY_RESIZE if (result != NULL) { WINDOW *win = obj->text; WROTE *wrote = dlg_calloc(WROTE, 1); if (wrote != 0) { wrote->text = dlg_strclone(obj->line); wrote->link = obj->wrote; obj->wrote = wrote; } nodelay(win, TRUE); - if ((ch = wgetch(win)) == KEY_RESIZE) { + if (wgetch(win) == KEY_RESIZE) { *restart = 1; } nodelay(win, FALSE); } #endif return result; } /* * Print a new line of text. */ static void print_line(MY_OBJ * obj, const char *line, int row) { int width = obj->wide - (2 * MARGIN); int limit = MIN((int) strlen(line), width - 2); (void) wmove(obj->text, row, 0); /* move cursor to correct line */ wprintw(obj->text, " %.*s", limit, line); - wclrtoeol(obj->text); + while (++limit < width) { + waddch(obj->text, ' '); + } } #ifdef KEY_RESIZE static int wrote_size(MY_OBJ * obj, int want) { int result = 0; WROTE *wrote = obj->wrote; while (wrote != NULL && want > 0) { wrote = wrote->link; want--; result++; } return result; } static const char * wrote_data(MY_OBJ * obj, int want) { const char *result = NULL; WROTE *wrote = obj->wrote; while (wrote != NULL && want > 0) { result = wrote->text; wrote = wrote->link; want--; } return result; } static int reprint_lines(MY_OBJ * obj, int buttons) { int want = getmaxy(obj->text) - (buttons ? 2 : 0); int have = wrote_size(obj, want); int n; for (n = 0; n < have; ++n) { print_line(obj, wrote_data(obj, have - n), n); } (void) wrefresh(obj->text); return have; } #endif static int pause_for_ok(MY_OBJ * obj, const char *title, const char *cprompt) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, TRAVERSE_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ int button; - int key = 0, fkey; + int key, fkey; int result = DLG_EXIT_UNKNOWN; const char **buttons = dlg_ok_label(); - int check; bool save_nocancel = dialog_vars.nocancel; bool redraw = TRUE; + (void) title; + (void) cprompt; + dialog_vars.nocancel = TRUE; button = dlg_default_button(); #ifdef KEY_RESIZE restart: #endif dlg_register_window(obj->obj.win, "progressbox", binding); dlg_register_buttons(obj->obj.win, "progressbox", buttons); dlg_draw_bottom_box2(obj->obj.win, border_attr, border2_attr, dialog_attr); while (result == DLG_EXIT_UNKNOWN) { + int check; + if (redraw) { redraw = FALSE; if (button < 0) button = 0; dlg_draw_buttons(obj->obj.win, obj->high - 2, 0, buttons, button, FALSE, obj->wide); } key = dlg_mouse_wgetch(obj->obj.win, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } if (!fkey && (check = dlg_char_to_button(key, buttons)) >= 0) { result = dlg_ok_buttoncode(check); break; } if (fkey) { switch (key) { case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); redraw = TRUE; break; case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); redraw = TRUE; break; case DLGK_ENTER: result = dlg_ok_buttoncode(button); break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(obj->obj.win); restart_obj(obj); start_obj(obj, title, cprompt); reprint_lines(obj, TRUE); redraw = TRUE; goto restart; #endif default: if (is_DLGK_MOUSE(key)) { result = dlg_ok_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } else { beep(); } break; } - } else { + } else if (key > 0) { beep(); } } + dlg_add_last_key(-1); + dlg_mouse_free_regions(); dlg_unregister_window(obj->obj.win); dialog_vars.nocancel = save_nocancel; return result; } int dlg_progressbox(const char *title, const char *cprompt, int height, int width, int pauseopt, FILE *fp) { int i; MY_OBJ *obj; int again = 0; int toprow = 0; int result; DLG_TRACE(("# progressbox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("pause", pauseopt); DLG_TRACE2N("fp", fp ? fileno(fp) : -1); obj = dlg_calloc(MY_OBJ, 1); assert_ptr(obj, "dlg_progressbox"); obj->obj.input = fp; obj->high = height; obj->wide = width; #ifdef KEY_RESIZE obj->old_high = height; obj->old_wide = width; curs_set(0); restart: #endif start_obj(obj, title, cprompt); #ifdef KEY_RESIZE if (again) { toprow = reprint_lines(obj, FALSE); } #endif for (i = toprow; get_line(obj, &again); i++) { #ifdef KEY_RESIZE if (again) { dlg_will_resize(obj->obj.win); restart_obj(obj); goto restart; } #endif if (i < getmaxy(obj->text)) { print_line(obj, obj->line, i); } else { scrollok(obj->text, TRUE); scroll(obj->text); scrollok(obj->text, FALSE); print_line(obj, obj->line, getmaxy(obj->text) - 1); } (void) wrefresh(obj->text); if (obj->is_eof) break; } dlg_trace_win(obj->obj.win); curs_set(1); if (pauseopt) { int need = 1 + MARGIN; int base = getmaxy(obj->text) - need; if (i >= base) { i -= base; if (i > need) i = need; if (i > 0) { scrollok(obj->text, TRUE); } wscrl(obj->text, i); } (void) wrefresh(obj->text); result = pause_for_ok(obj, title, cprompt); } else { wrefresh(obj->obj.win); result = DLG_EXIT_OK; } free_obj(obj); return result; } /* * Display text from a stdin in a scrolling window. */ int dialog_progressbox(const char *title, const char *cprompt, int height, int width) { int result; result = dlg_progressbox(title, cprompt, height, width, FALSE, dialog_state.pipe_input); dialog_state.pipe_input = 0; return result; } diff --git a/rangebox.c b/rangebox.c index a5fa2520814a..bc99d4a72cd8 100644 --- a/rangebox.c +++ b/rangebox.c @@ -1,432 +1,421 @@ /* - * $Id: rangebox.c,v 1.24 2018/06/19 22:57:01 tom Exp $ + * $Id: rangebox.c,v 1.32 2020/11/22 23:25:09 tom Exp $ * * rangebox.c -- implements the rangebox dialog * - * Copyright 2012-2017,2018 Thomas E. Dickey + * Copyright 2012-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> #define ONE_HIGH 1 #define MIN_HIGH (ONE_HIGH + 1 + (4 * MARGIN)) #define MIN_WIDE (10 + 2 + (2 * MARGIN)) -struct _box; - -typedef struct _box { - WINDOW *parent; - WINDOW *window; - int x; - int y; - int width; - int height; - int period; - int value; -} BOX; - typedef struct { /* window in which the value and slider are drawn */ WINDOW *window; int min_value; int max_value; /* position and width of the numeric field */ int value_x; int value_len; int value_col; /* position and width of the slider field */ int slide_x; int slide_y; int slide_len; /* current value drawn */ int current; /* value to add to make slider move by one cell */ int slide_inc; } VALUE; static int digits_of(int value) { char temp[80]; sprintf(temp, "%d", value); return (int) strlen(temp); } static int digit_of(VALUE * data) { int col = data->value_col; int result = 1; while (++col < data->value_len) { result *= 10; } return result; } static bool set_digit(VALUE * data, int chr) { bool result = FALSE; char buffer[80]; long check; char *next = 0; sprintf(buffer, "%*d", data->value_len, data->current); buffer[data->value_col] = (char) chr; check = strtol(buffer, &next, 10); if (next == 0 || *next == '\0') { if ((check <= (long) data->max_value) && (check >= (long) data->min_value)) { result = TRUE; data->current = (int) check; } } return result; } /* * This is similar to the gauge code, but differs in the way the number * is displayed, etc. */ static void draw_value(VALUE * data, int value) { if (value != data->current) { WINDOW *win = data->window; int y, x; int n; int ranges = (data->max_value + 1 - data->min_value); int offset = (value - data->min_value); int scaled; getyx(win, y, x); if (ranges > data->slide_len) { scaled = (offset + data->slide_inc) / data->slide_inc; } else if (ranges < data->slide_len) { scaled = (offset + 1) * data->slide_inc; } else { scaled = offset; } dlg_attrset(win, gauge_attr); wmove(win, data->slide_y, data->slide_x); for (n = 0; n < data->slide_len; ++n) { (void) waddch(win, ' '); } wmove(win, data->slide_y, data->value_x); wprintw(win, "%*d", data->value_len, value); if ((gauge_attr & A_REVERSE) != 0) { dlg_attroff(win, A_REVERSE); } else { dlg_attrset(win, A_REVERSE); } wmove(win, data->slide_y, data->slide_x); for (n = 0; n < scaled; ++n) { chtype ch2 = winch(win); if (gauge_attr & A_REVERSE) { ch2 &= ~A_REVERSE; } (void) waddch(win, ch2); } dlg_attrset(win, dialog_attr); wmove(win, y, x); data->current = value; DLG_TRACE(("# drew %d offset %d scaled %d limit %d inc %d\n", value, offset, scaled, data->slide_len, data->slide_inc)); dlg_trace_win(win); } } /* * Allow the user to select from a range of values, e.g., using a slider. */ int dialog_rangebox(const char *title, const char *cprompt, int height, int width, int min_value, int max_value, int default_value) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { DLG_KEYS_DATA( DLGK_DELETE_RIGHT,KEY_DC ), HELPKEY_BINDINGS, ENTERKEY_BINDINGS, TOGGLEKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_NEXT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, CHR_BACKSPACE ), DLG_KEYS_DATA( DLGK_FIELD_PREV, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_END), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+'), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN), DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NEXT), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PREVIOUS ), END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif VALUE data; - int key = 0, key2, fkey; + int key, fkey; int button; int result = DLG_EXIT_UNKNOWN; WINDOW *dialog; int state = dlg_default_button(); const char **buttons = dlg_ok_labels(); char *prompt; char buffer[MAX_LEN]; int cur_value = default_value; int usable; int ranges; int yorg, xorg; DLG_TRACE(("# tailbox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("minval", min_value); DLG_TRACE2N("maxval", max_value); DLG_TRACE2N("default", default_value); if (max_value < min_value) max_value = min_value; if (cur_value > max_value) cur_value = max_value; if (cur_value < min_value) cur_value = min_value; dlg_does_output(); #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(cprompt); - dlg_auto_size(title, prompt, &height, &width, 0, 0); + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); - height += MIN_HIGH; - if (width < MIN_WIDE) - width = MIN_WIDE; dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); dialog = dlg_new_window(height, width, yorg = dlg_box_y_ordinate(height), xorg = dlg_box_x_ordinate(width)); data.window = dialog; data.min_value = min_value; data.max_value = max_value; usable = (width - 2 - 4 * MARGIN); ranges = max_value - min_value + 1; /* * Center the number after allowing for its maximum number of digits. */ data.value_len = digits_of(max_value); if (digits_of(min_value) > data.value_len) data.value_len = digits_of(min_value); data.value_x = (usable - data.value_len) / 2 + MARGIN; data.value_col = data.value_len - 1; /* * The slider is scaled, to try to use the width of the dialog. */ if (ranges > usable) { data.slide_inc = (ranges + usable - 1) / usable; data.slide_len = 1 + ranges / data.slide_inc; } else if (ranges < usable) { data.slide_inc = usable / ranges; data.slide_len = ranges * data.slide_inc; } else { data.slide_inc = 1; data.slide_len = usable; } data.slide_x = (usable - data.slide_len) / 2 + MARGIN + 2; data.slide_y = height - 5; data.current = cur_value - 1; dlg_register_window(dialog, "rangebox", binding); dlg_register_buttons(dialog, "rangebox", buttons); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_mouse_setbase(xorg, yorg); dlg_mouse_mkregion(data.slide_y - 1, data.slide_x - 1, 3, usable + 2, 'i'); dlg_draw_box2(dialog, height - 6, data.slide_x - MARGIN, 2 + MARGIN, data.slide_len + 2 * MARGIN, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_draw_helpline(dialog, FALSE); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); dlg_trace_win(dialog); + while (result == DLG_EXIT_UNKNOWN) { + int key2; + draw_value(&data, cur_value); button = (state < 0) ? 0 : state; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); if (state < 0) { data.value_col = data.value_len + state; wmove(dialog, data.slide_y, data.value_x + data.value_col); } key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } if ((key2 = dlg_char_to_button(key, buttons)) >= 0) { result = key2; } else { /* handle function-keys */ if (fkey) { switch (key) { case DLGK_TOGGLE: case DLGK_ENTER: + result = dlg_enter_buttoncode(button); + break; + case DLGK_LEAVE: result = dlg_ok_buttoncode(button); break; case DLGK_FIELD_PREV: if (state < 0 && state > -data.value_len) { --state; } else { state = dlg_prev_ok_buttonindex(state, -data.value_len); } break; case DLGK_FIELD_NEXT: if (state < 0) { ++state; } else { state = dlg_next_ok_buttonindex(state, -data.value_len); } break; case DLGK_ITEM_FIRST: cur_value = min_value; break; case DLGK_ITEM_LAST: cur_value = max_value; break; case DLGK_ITEM_PREV: if (state < 0) { cur_value -= digit_of(&data); } else { cur_value -= 1; } if (cur_value < min_value) cur_value = min_value; break; case DLGK_ITEM_NEXT: if (state < 0) { cur_value += digit_of(&data); } else { cur_value += 1; } if (cur_value > max_value) cur_value = max_value; break; case DLGK_PAGE_PREV: cur_value -= data.slide_inc; if (cur_value < min_value) cur_value = min_value; break; case DLGK_PAGE_NEXT: cur_value += data.slide_inc; if (cur_value > max_value) cur_value = max_value; break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; /* repaint */ free(prompt); - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); goto retry; #endif case DLGK_MOUSE('i'): state = -data.value_len; break; default: if (is_DLGK_MOUSE(key)) { result = dlg_ok_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } break; } } else if (isdigit(key) && state < 0) { if (set_digit(&data, key)) { cur_value = data.current; data.current--; } } else { beep(); } } } sprintf(buffer, "%d", cur_value); dlg_add_result(buffer); - dlg_add_separator(); - dlg_add_last_key(-1); + AddLastKey(); dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); return result; } diff --git a/rc.c b/rc.c index fa57f5d256fd..84d7f63495e9 100644 --- a/rc.c +++ b/rc.c @@ -1,616 +1,665 @@ /* - * $Id: rc.c,v 1.53 2018/05/31 20:32:15 tom Exp $ + * $Id: rc.c,v 1.60 2020/11/25 00:06:40 tom Exp $ * * rc.c -- routines for processing the configuration file * - * Copyright 2000-2012,2018 Thomas E. Dickey + * Copyright 2000-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> #include <dlg_keys.h> #ifdef HAVE_COLOR #include <dlg_colors.h> +#include <dlg_internals.h> + +#define L_PAREN '(' +#define R_PAREN ')' + +#define MIN_TOKEN 3 +#ifdef HAVE_RC_FILE2 +#define MAX_TOKEN 5 +#else +#define MAX_TOKEN MIN_TOKEN +#endif + +#define UNKNOWN_COLOR -2 /* * For matching color names with color values */ static const color_names_st color_names[] = { #ifdef HAVE_USE_DEFAULT_COLORS {"DEFAULT", -1}, #endif {"BLACK", COLOR_BLACK}, {"RED", COLOR_RED}, {"GREEN", COLOR_GREEN}, {"YELLOW", COLOR_YELLOW}, {"BLUE", COLOR_BLUE}, {"MAGENTA", COLOR_MAGENTA}, {"CYAN", COLOR_CYAN}, {"WHITE", COLOR_WHITE}, }; /* color names */ -#define COLOR_COUNT (sizeof(color_names) / sizeof(color_names[0])) +#define COLOR_COUNT TableSize(color_names) #endif /* HAVE_COLOR */ #define GLOBALRC "/etc/dialogrc" #define DIALOGRC ".dialogrc" /* Types of values */ #define VAL_INT 0 #define VAL_STR 1 #define VAL_BOOL 2 /* Type of line in configuration file */ typedef enum { LINE_ERROR = -1, LINE_EQUALS, LINE_EMPTY } PARSE_LINE; /* number of configuration variables */ -#define VAR_COUNT (sizeof(vars) / sizeof(vars_st)) +#define VAR_COUNT TableSize(vars) /* check if character is string quoting characters */ #define isquote(c) ((c) == '"' || (c) == '\'') /* get last character of string */ #define lastch(str) str[strlen(str)-1] /* * Configuration variables */ typedef struct { const char *name; /* name of configuration variable as in DIALOGRC */ void *var; /* address of actual variable to change */ int type; /* type of value */ const char *comment; /* comment to put in "rc" file */ } vars_st; /* * This table should contain only references to dialog_state, since dialog_vars * is reset specially in dialog.c before each widget. */ static const vars_st vars[] = { {"aspect", &dialog_state.aspect_ratio, VAL_INT, "Set aspect-ration."}, {"separate_widget", &dialog_state.separate_str, VAL_STR, "Set separator (for multiple widgets output)."}, {"tab_len", &dialog_state.tab_len, VAL_INT, "Set tab-length (for textbox tab-conversion)."}, {"visit_items", &dialog_state.visit_items, VAL_BOOL, "Make tab-traversal for checklist, etc., include the list."}, #ifdef HAVE_COLOR {"use_shadow", &dialog_state.use_shadow, VAL_BOOL, "Shadow dialog boxes? This also turns on color."}, {"use_colors", &dialog_state.use_colors, VAL_BOOL, "Turn color support ON or OFF"}, #endif /* HAVE_COLOR */ }; /* vars */ static int skip_whitespace(char *str, int n) { while (isblank(UCH(str[n])) && str[n] != '\0') n++; return n; } static int skip_keyword(char *str, int n) { while (isalnum(UCH(str[n])) && str[n] != '\0') n++; return n; } +static void +trim_token(char **tok) +{ + char *tmp = *tok + skip_whitespace(*tok, 0); + + *tok = tmp; + + while (*tmp != '\0' && !isblank(UCH(*tmp))) + tmp++; + + *tmp = '\0'; +} + +static int +from_boolean(const char *str) +{ + int code = -1; + + if (str != NULL && *str != '\0') { + if (!dlg_strcmp(str, "ON")) { + code = 1; + } else if (!dlg_strcmp(str, "OFF")) { + code = 0; + } + } + return code; +} + +static int +from_color_name(const char *str) +{ + int code = UNKNOWN_COLOR; + + if (str != NULL && *str != '\0') { + size_t i; + + for (i = 0; i < COLOR_COUNT; ++i) { + if (!dlg_strcmp(str, color_names[i].name)) { + code = color_names[i].value; + break; + } + } + } + return code; +} + static int find_vars(char *name) { int result = -1; unsigned i; for (i = 0; i < VAR_COUNT; i++) { if (dlg_strcmp(vars[i].name, name) == 0) { result = (int) i; break; } } return result; } #ifdef HAVE_COLOR static int find_color(char *name) { int result = -1; int i; int limit = dlg_color_count(); for (i = 0; i < limit; i++) { if (dlg_strcmp(dlg_color_table[i].name, name) == 0) { result = i; break; } } return result; } -/* - * Convert an attribute to a string representation like this: - * - * "(foreground,background,highlight)" - */ -static char * -attr_to_str(char *str, int fg, int bg, int hl) +static const char * +to_color_name(int code) { - int i; - - strcpy(str, "("); - /* foreground */ - for (i = 0; fg != color_names[i].value; i++) ; - strcat(str, color_names[i].name); - strcat(str, ","); - - /* background */ - for (i = 0; bg != color_names[i].value; i++) ; - strcat(str, color_names[i].name); - - /* highlight */ - strcat(str, hl ? ",ON)" : ",OFF)"); + const char *result = "?"; + size_t n; + for (n = 0; n < TableSize(color_names); ++n) { + if (code == color_names[n].value) { + result = color_names[n].name; + break; + } + } + return result; +} - return str; +static const char * +to_boolean(int code) +{ + return code ? "ON" : "OFF"; } /* * Extract the foreground, background and highlight values from an attribute - * represented as a string in one of two forms: + * represented as a string in one of these forms: * + * "(foreground,background,highlight,underline,reverse)" + * "(foreground,background,highlight,underline)" * "(foreground,background,highlight)" - " "xxxx_color" + * "xxxx_color" */ static int -str_to_attr(char *str, int *fg, int *bg, int *hl) +str_to_attr(char *str, DIALOG_COLORS * result) { - int i = 0, get_fg = 1; - unsigned j; - char tempstr[MAX_LEN + 1], *part; + char *tokens[MAX_TOKEN + 1]; + char tempstr[MAX_LEN + 1]; size_t have; + size_t i = 0; + size_t tok_count = 0; - if (str[0] != '(' || lastch(str) != ')') { - if ((i = find_color(str)) >= 0) { - *fg = dlg_color_table[i].fg; - *bg = dlg_color_table[i].bg; - *hl = dlg_color_table[i].hilite; + memset(result, 0, sizeof(*result)); + result->fg = -1; + result->bg = -1; + result->hilite = -1; + + if (str[0] != L_PAREN || lastch(str) != R_PAREN) { + int ret; + + if ((ret = find_color(str)) >= 0) { + *result = dlg_color_table[ret]; return 0; } - return -1; /* invalid representation */ + /* invalid representation */ + return -1; } /* remove the parenthesis */ have = strlen(str); if (have > MAX_LEN) { have = MAX_LEN - 1; } else { have -= 2; } memcpy(tempstr, str + 1, have); tempstr[have] = '\0'; - /* get foreground and background */ + /* parse comma-separated tokens, allow up to + * one more than max tokens to detect extras */ + while (tok_count < TableSize(tokens)) { - while (1) { - /* skip white space before fg/bg string */ - i = skip_whitespace(tempstr, i); - if (tempstr[i] == '\0') - return -1; /* invalid representation */ - part = tempstr + i; /* set 'part' to start of fg/bg string */ + tokens[tok_count++] = &tempstr[i]; - /* find end of fg/bg string */ - while (!isblank(UCH(tempstr[i])) && tempstr[i] != ',' - && tempstr[i] != '\0') + while (tempstr[i] != '\0' && tempstr[i] != ',') i++; if (tempstr[i] == '\0') - return -1; /* invalid representation */ - else if (isblank(UCH(tempstr[i]))) { /* not yet ',' */ - tempstr[i++] = '\0'; - - /* skip white space before ',' */ - i = skip_whitespace(tempstr, i); - if (tempstr[i] != ',') - return -1; /* invalid representation */ - } - tempstr[i++] = '\0'; /* skip the ',' */ - for (j = 0; j < COLOR_COUNT && dlg_strcmp(part, color_names[j].name); - j++) ; - if (j == COLOR_COUNT) /* invalid color name */ - return -1; - if (get_fg) { - *fg = color_names[j].value; - get_fg = 0; /* next we have to get the background */ - } else { - *bg = color_names[j].value; break; - } - } /* got foreground and background */ - /* get highlight */ - - /* skip white space before highlight string */ - i = skip_whitespace(tempstr, i); - if (tempstr[i] == '\0') - return -1; /* invalid representation */ - part = tempstr + i; /* set 'part' to start of highlight string */ + tempstr[i++] = '\0'; + } - /* trim trailing white space from highlight string */ - i = (int) strlen(part) - 1; - while (isblank(UCH(part[i])) && i > 0) - i--; - part[i + 1] = '\0'; + if (tok_count < MIN_TOKEN || tok_count > MAX_TOKEN) { + /* invalid representation */ + return -1; + } - if (!dlg_strcmp(part, "ON")) - *hl = TRUE; - else if (!dlg_strcmp(part, "OFF")) - *hl = FALSE; - else - return -1; /* invalid highlight value */ + for (i = 0; i < tok_count; ++i) + trim_token(&tokens[i]); + + /* validate */ + if (UNKNOWN_COLOR == (result->fg = from_color_name(tokens[0])) + || UNKNOWN_COLOR == (result->bg = from_color_name(tokens[1])) + || UNKNOWN_COLOR == (result->hilite = from_boolean(tokens[2])) +#ifdef HAVE_RC_FILE2 + || (tok_count >= 4 && (result->ul = from_boolean(tokens[3])) == -1) + || (tok_count >= 5 && (result->rv = from_boolean(tokens[4])) == -1) +#endif /* HAVE_RC_FILE2 */ + ) { + /* invalid representation */ + return -1; + } return 0; } #endif /* HAVE_COLOR */ /* * Check if the line begins with a special keyword; if so, return true while * pointing params to its parameters. */ static int begins_with(char *line, const char *keyword, char **params) { int i = skip_whitespace(line, 0); int j = skip_keyword(line, i); if ((j - i) == (int) strlen(keyword)) { char save = line[j]; line[j] = 0; if (!dlg_strcmp(keyword, line + i)) { *params = line + skip_whitespace(line, j + 1); return 1; } line[j] = save; } return 0; } /* * Parse a line in the configuration file * * Each line is of the form: "variable = value". On exit, 'var' will contain * the variable name, and 'value' will contain the value string. * * Return values: * * LINE_EMPTY - line is blank or comment * LINE_EQUALS - line contains "variable = value" * LINE_ERROR - syntax error in line */ static PARSE_LINE parse_line(char *line, char **var, char **value) { int i = 0; /* ignore white space at beginning of line */ i = skip_whitespace(line, i); if (line[i] == '\0') /* line is blank */ return LINE_EMPTY; else if (line[i] == '#') /* line is comment */ return LINE_EMPTY; else if (line[i] == '=') /* variable names cannot start with a '=' */ return LINE_ERROR; /* set 'var' to variable name */ *var = line + i++; /* skip to next character */ /* find end of variable name */ while (!isblank(UCH(line[i])) && line[i] != '=' && line[i] != '\0') i++; if (line[i] == '\0') /* syntax error */ return LINE_ERROR; else if (line[i] == '=') line[i++] = '\0'; else { line[i++] = '\0'; /* skip white space before '=' */ i = skip_whitespace(line, i); if (line[i] != '=') /* syntax error */ return LINE_ERROR; else i++; /* skip the '=' */ } /* skip white space after '=' */ i = skip_whitespace(line, i); if (line[i] == '\0') return LINE_ERROR; else *value = line + i; /* set 'value' to value string */ /* trim trailing white space from 'value' */ i = (int) strlen(*value) - 1; while (isblank(UCH((*value)[i])) && i > 0) i--; (*value)[i + 1] = '\0'; return LINE_EQUALS; /* no syntax error in line */ } /* * Create the configuration file */ void dlg_create_rc(const char *filename) { unsigned i; FILE *rc_file; if ((rc_file = fopen(filename, "wt")) == NULL) dlg_exiterr("Error opening file for writing in dlg_create_rc()."); fprintf(rc_file, "#\n\ # Run-time configuration file for dialog\n\ #\n\ # Automatically generated by \"dialog --create-rc <file>\"\n\ #\n\ #\n\ # Types of values:\n\ #\n\ # Number - <number>\n\ # String - \"string\"\n\ # Boolean - <ON|OFF>\n" #ifdef HAVE_COLOR +#ifdef HAVE_RC_FILE2 + "\ +# Attribute - (foreground,background,highlight?,underline?,reverse?)\n" +#else /* HAVE_RC_FILE2 */ "\ # Attribute - (foreground,background,highlight?)\n" -#endif +#endif /* HAVE_RC_FILE2 */ +#endif /* HAVE_COLOR */ ); /* Print an entry for each configuration variable */ for (i = 0; i < VAR_COUNT; i++) { fprintf(rc_file, "\n# %s\n", vars[i].comment); switch (vars[i].type) { case VAL_INT: fprintf(rc_file, "%s = %d\n", vars[i].name, *((int *) vars[i].var)); break; case VAL_STR: fprintf(rc_file, "%s = \"%s\"\n", vars[i].name, (char *) vars[i].var); break; case VAL_BOOL: fprintf(rc_file, "%s = %s\n", vars[i].name, *((bool *) vars[i].var) ? "ON" : "OFF"); break; } } #ifdef HAVE_COLOR for (i = 0; i < (unsigned) dlg_color_count(); ++i) { - char buffer[MAX_LEN + 1]; unsigned j; bool repeat = FALSE; fprintf(rc_file, "\n# %s\n", dlg_color_table[i].comment); for (j = 0; j != i; ++j) { if (dlg_color_table[i].fg == dlg_color_table[j].fg && dlg_color_table[i].bg == dlg_color_table[j].bg && dlg_color_table[i].hilite == dlg_color_table[j].hilite) { fprintf(rc_file, "%s = %s\n", dlg_color_table[i].name, dlg_color_table[j].name); repeat = TRUE; break; } } if (!repeat) { - fprintf(rc_file, "%s = %s\n", dlg_color_table[i].name, - attr_to_str(buffer, - dlg_color_table[i].fg, - dlg_color_table[i].bg, - dlg_color_table[i].hilite)); + fprintf(rc_file, "%s = %c", dlg_color_table[i].name, L_PAREN); + fprintf(rc_file, "%s", to_color_name(dlg_color_table[i].fg)); + fprintf(rc_file, ",%s", to_color_name(dlg_color_table[i].bg)); + fprintf(rc_file, ",%s", to_boolean(dlg_color_table[i].hilite)); +#ifdef HAVE_RC_FILE2 + if (dlg_color_table[i].ul || dlg_color_table[i].rv) + fprintf(rc_file, ",%s", to_boolean(dlg_color_table[i].ul)); + if (dlg_color_table[i].rv) + fprintf(rc_file, ",%s", to_boolean(dlg_color_table[i].rv)); +#endif /* HAVE_RC_FILE2 */ + fprintf(rc_file, "%c\n", R_PAREN); } } #endif /* HAVE_COLOR */ dlg_dump_keys(rc_file); (void) fclose(rc_file); } +static void +report_error(const char *filename, int line_no, const char *msg) +{ + fprintf(stderr, "%s:%d: %s\n", filename, line_no, msg); + dlg_trace_msg("%s:%d: %s\n", filename, line_no, msg); +} + /* * Parse the configuration file and set up variables */ int dlg_parse_rc(void) { int i; int l = 1; PARSE_LINE parse; char str[MAX_LEN + 1]; char *var; char *value; - char *tempptr; + char *filename; int result = 0; FILE *rc_file = 0; char *params; /* * At startup, dialog determines the settings to use as follows: * * a) if the environment variable $DIALOGRC is set, its value determines * the name of the configuration file. * * b) if the file in (a) can't be found, use the file $HOME/.dialogrc * as the configuration file. * * c) if the file in (b) can't be found, try using the GLOBALRC file. * Usually this will be /etc/dialogrc. * * d) if the file in (c) cannot be found, use the compiled-in defaults. */ /* try step (a) */ - if ((tempptr = getenv("DIALOGRC")) != NULL) - rc_file = fopen(tempptr, "rt"); + if ((filename = dlg_getenv_str("DIALOGRC")) != NULL) + rc_file = fopen(filename, "rt"); if (rc_file == NULL) { /* step (a) failed? */ /* try step (b) */ - if ((tempptr = getenv("HOME")) != NULL - && strlen(tempptr) < MAX_LEN - (sizeof(DIALOGRC) + 3)) { - if (tempptr[0] == '\0' || lastch(tempptr) == '/') - sprintf(str, "%s%s", tempptr, DIALOGRC); + if ((filename = dlg_getenv_str("HOME")) != NULL + && strlen(filename) < MAX_LEN - (sizeof(DIALOGRC) + 3)) { + if (filename[0] == '\0' || lastch(filename) == '/') + sprintf(str, "%s%s", filename, DIALOGRC); else - sprintf(str, "%s/%s", tempptr, DIALOGRC); - rc_file = fopen(tempptr = str, "rt"); + sprintf(str, "%s/%s", filename, DIALOGRC); + rc_file = fopen(filename = str, "rt"); } } if (rc_file == NULL) { /* step (b) failed? */ /* try step (c) */ strcpy(str, GLOBALRC); - if ((rc_file = fopen(tempptr = str, "rt")) == NULL) + if ((rc_file = fopen(filename = str, "rt")) == NULL) return 0; /* step (c) failed, use default values */ } - DLG_TRACE(("# opened rc file \"%s\"\n", tempptr)); + DLG_TRACE(("# opened rc file \"%s\"\n", filename)); /* Scan each line and set variables */ while ((result == 0) && (fgets(str, MAX_LEN, rc_file) != NULL)) { DLG_TRACE(("#\t%s", str)); if (*str == '\0' || lastch(str) != '\n') { /* ignore rest of file if line too long */ - fprintf(stderr, "\nParse error: line %d of configuration" - " file too long.\n", l); + report_error(filename, l, "line too long"); result = -1; /* parse aborted */ break; } lastch(str) = '\0'; if (begins_with(str, "bindkey", ¶ms)) { if (!dlg_parse_bindkey(params)) { - fprintf(stderr, "\nParse error: line %d of configuration\n", l); + report_error(filename, l, "invalid bindkey"); result = -1; } continue; } parse = parse_line(str, &var, &value); /* parse current line */ switch (parse) { case LINE_EMPTY: /* ignore blank lines and comments */ break; case LINE_EQUALS: /* search table for matching config variable name */ if ((i = find_vars(var)) >= 0) { switch (vars[i].type) { case VAL_INT: *((int *) vars[i].var) = atoi(value); break; case VAL_STR: if (!isquote(value[0]) || !isquote(lastch(value)) || strlen(value) < 2) { - fprintf(stderr, "\nParse error: string value " - "expected at line %d of configuration " - "file.\n", l); + report_error(filename, l, "expected string value"); result = -1; /* parse aborted */ } else { /* remove the (") quotes */ value++; lastch(value) = '\0'; strcpy((char *) vars[i].var, value); } break; case VAL_BOOL: if (!dlg_strcmp(value, "ON")) *((bool *) vars[i].var) = TRUE; else if (!dlg_strcmp(value, "OFF")) *((bool *) vars[i].var) = FALSE; else { - fprintf(stderr, "\nParse error: boolean value " - "expected at line %d of configuration " - "file (found %s).\n", l, value); + report_error(filename, l, "expected boolean value"); result = -1; /* parse aborted */ } break; } #ifdef HAVE_COLOR } else if ((i = find_color(var)) >= 0) { - int fg = 0; - int bg = 0; - int hl = 0; - if (str_to_attr(value, &fg, &bg, &hl) == -1) { - fprintf(stderr, "\nParse error: attribute " - "value expected at line %d of configuration " - "file.\n", l); + DIALOG_COLORS temp; + if (str_to_attr(value, &temp) == -1) { + report_error(filename, l, "expected attribute value"); result = -1; /* parse aborted */ } else { - dlg_color_table[i].fg = fg; - dlg_color_table[i].bg = bg; - dlg_color_table[i].hilite = hl; + dlg_color_table[i].fg = temp.fg; + dlg_color_table[i].bg = temp.bg; + dlg_color_table[i].hilite = temp.hilite; +#ifdef HAVE_RC_FILE2 + dlg_color_table[i].ul = temp.ul; + dlg_color_table[i].rv = temp.rv; +#endif /* HAVE_RC_FILE2 */ } } else { #endif /* HAVE_COLOR */ - fprintf(stderr, "\nParse error: unknown variable " - "at line %d of configuration file:\n\t%s\n", l, var); + report_error(filename, l, "unknown variable"); result = -1; /* parse aborted */ } break; case LINE_ERROR: - fprintf(stderr, "\nParse error: syntax error at line %d of " - "configuration file.\n", l); + report_error(filename, l, "syntax error"); result = -1; /* parse aborted */ break; } l++; /* next line */ } (void) fclose(rc_file); return result; } diff --git a/headers.sh b/run_test.sh similarity index 56% rename from headers.sh rename to run_test.sh index ec2839afbb2f..036b44dddfe4 100755 --- a/headers.sh +++ b/run_test.sh @@ -1,103 +1,58 @@ -#! /bin/sh -# $Id: headers.sh,v 1.3 2007/02/25 20:37:56 tom Exp $ +#!/bin/sh +# $Id: run_test.sh,v 1.1 2020/03/20 12:08:00 tom Exp $ ############################################################################## -# Copyright (c) 2004,2007 Thomas E. Dickey # +# Copyright (c) 2020 Thomas E. Dickey # # # # 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, distribute # # with modifications, 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 ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# -# Adjust includes for header files that reside in a subdirectory of -# /usr/include, etc. -# -# Parameters (the first case creates the sed script): -# $1 is the target directory -# $2 is the source directory -# or (the second case does the install, using the sed script): -# $1 is the script to use for installing -# $2 is the target directory -# $3 is the source directory -# $4 is the file to install, editing source/target/etc. -PACKAGE=DIALOG -PKGNAME=DLG -CONFIGH=dlg_config.h - -TMPSED=headers.sed - -if test $# = 2 ; then - rm -f $TMPSED - DST=$1 - REF=$2 - LEAF=`basename $DST` - case $DST in - /*/include/$LEAF) - END=`basename $DST` - for i in $REF/*.h - do - NAME=`basename $i` - echo "s/<$NAME>/<$END\/$NAME>/g" >> $TMPSED - done - ;; - *) - echo "" >> $TMPSED - ;; - esac - for name in ` - egrep '^#define[ ][ ]*[_ABCDEFGHIJKLMNOPQRSTUVWXYZ]' $REF/$CONFIGH \ - | sed -e 's/^#define[ ][ ]*//' \ - -e 's/[ ].*//' \ - | egrep -v "^${PACKAGE}_" \ - | sort -u \ - | egrep -v "^${PKGNAME}_"` - do - echo "s/\\<$name\\>/${PKGNAME}_$name/g" >>$TMPSED - done -else - PRG="" - while test $# != 3 - do - PRG="$PRG $1"; shift - done - - DST=$1 - REF=$2 - SRC=$3 - - SHOW=`basename $SRC` - TMPSRC=${TMPDIR-/tmp}/${SHOW}$$ - - echo " ... $SHOW" - test -f $REF/$SRC && SRC="$REF/$SRC" - - rm -f $TMPSRC - sed -f $TMPSED $SRC > $TMPSRC - NAME=`basename $SRC` - - # Just in case someone gzip'd manpages, remove the conflicting copy. - test -f $DST/$NAME.gz && rm -f $DST/$NAME.gz - - eval $PRG $TMPSRC $DST/$NAME - rm -f $TMPSRC -fi +failed() { + echo "? $*" >&2 + exit 1 +} + +: ${DIALOG=./dialog} +CONFIG=samples +INPUTS=inputs.rc +OUTPUT=output.rc + +[ $# != 0 ] && CONFIG="$1" + +[ -f "$DIALOG" ] || failed "no such file: $DIALOG" +[ -d "$CONFIG" ] || failed "no such directory: $CONFIG" + +for rcfile in $CONFIG/*.rc +do + echo "** $rcfile" + DIALOGRC="$rcfile" $DIALOG --create-rc $OUTPUT + sed -e '/^#/d' "$OUTPUT" >"$INPUTS" + mv -f $INPUTS $OUTPUT + sed -e '/^#/d' "$rcfile" >"$INPUTS" + diff -u $INPUTS $OUTPUT | \ + sed -e "s,$INPUTS,$rcfile," \ + -e "s,$OUTPUT,$rcfile-test," +done + +rm -f $INPUTS $OUTPUT diff --git a/samples/buildlist b/samples/buildlist index 72d871f7a149..8e4a70b0c846 100755 --- a/samples/buildlist +++ b/samples/buildlist @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: buildlist,v 1.2 2012/12/04 11:45:21 tom Exp $ +# $Id: buildlist,v 1.3 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "BUILDLIST DEMO" --backtitle "A user-built list" \ --separator "|" \ --buildlist "hello, this is a --buildlist..." 0 0 0 \ "1" "Item number 1" "on" \ "2" "Item number 2" "off" \ "3" "Item number 3" "on" \ "4" "Item number 4" "on" \ "5" "Item number 5" "off" \ "6" "Item number 6" "on" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/buildlist2 b/samples/buildlist2 index d5cbfb7d25e9..1b4dd335060a 100755 --- a/samples/buildlist2 +++ b/samples/buildlist2 @@ -1,42 +1,42 @@ #!/bin/sh -# $Id: buildlist2,v 1.6 2012/12/23 22:28:12 tom Exp $ +# $Id: buildlist2,v 1.8 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-edit count=0 ls -1 | while true do read filename test -z "$filename" && break case $filename in *.*) state=off ;; *-*) state=on ;; *) continue ;; esac case "x$DIALOGOPTS" in *--no-items*|*--noitem*) - echo $filename $state >>$input + echo "$filename $state" >>$input ;; *) - echo $count $filename $state >>$input + echo "$count $filename $state" >>$input ;; esac count=`expr $count + 1` done $DIALOG --title "BUILDLIST DEMO" --backtitle "A user-built list" \ --visit-items --scrollbar --separator "|" \ - --buildlist "hello, this is a --buildlist..." 0 0 10 `cat $input` 2> $output + --buildlist "hello, this is a --buildlist..." 0 0 10 `cat "$input"` 2> $output -retval=$? +returncode=$? tempfile=$output . ./report-tempfile diff --git a/samples/buildlist4 b/samples/buildlist4 new file mode 100755 index 000000000000..6bfa98708017 --- /dev/null +++ b/samples/buildlist4 @@ -0,0 +1,22 @@ +#!/bin/sh +# $Id: buildlist4,v 1.2 2020/11/26 00:03:58 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "BUILDLIST DEMO" --backtitle "A user-built list" \ + --separator "|" \ + --help-button \ + --item-help \ + --buildlist "hello, this is a --buildlist..." 0 0 0 \ + "1" "Item number 1" "on" first \ + "2" "Item number 2" "off" second \ + "3" "Item number 3" "on" third \ + "4" "Item number 4" "on" fourth \ + "5" "Item number 5" "off" fifth \ + "6" "Item number 6" "on" sixth 2> $tempfile + +returncode=$? + +. ./report-tempfile diff --git a/samples/calendar b/samples/calendar index e984bcea1867..f9eb602fe0d9 100755 --- a/samples/calendar +++ b/samples/calendar @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: calendar,v 1.9 2010/01/13 10:20:33 tom Exp $ +# $Id: calendar,v 1.11 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/calendar-stdout b/samples/calendar-stdout index 5dbbbce9d052..107a8e365161 100755 --- a/samples/calendar-stdout +++ b/samples/calendar-stdout @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: calendar-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: calendar-stdout,v 1.8 2020/11/26 00:09:12 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981` -retval=$? +returntext=`$DIALOG --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981` +returncode=$? . ./report-string diff --git a/samples/calendar2 b/samples/calendar2 index f6214ce662cd..70aba16349df 100755 --- a/samples/calendar2 +++ b/samples/calendar2 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: calendar2,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: calendar2,v 1.10 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/calendar2-stdout b/samples/calendar2-stdout index af731d9d2265..34b370f7ee0e 100755 --- a/samples/calendar2-stdout +++ b/samples/calendar2-stdout @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: calendar2-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: calendar2-stdout,v 1.8 2020/11/26 00:09:12 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0` -retval=$? +returntext=`$DIALOG --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0` +returncode=$? . ./report-string diff --git a/samples/calendar3 b/samples/calendar3 index aece69ceb4fe..a6efd575eb53 100755 --- a/samples/calendar3 +++ b/samples/calendar3 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: calendar3,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: calendar3,v 1.11 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --extra-button --extra-label "Hold" --help-button --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --extra-button --extra-label "Hold" --help-button --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/calendar3-stdout b/samples/calendar3-stdout index 4b7ecdbeafb6..7e15920400e4 100755 --- a/samples/calendar3-stdout +++ b/samples/calendar3-stdout @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: calendar3-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: calendar3-stdout,v 1.8 2020/11/26 00:09:12 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --extra-button --extra-label "Hold" --help-button --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981` -retval=$? +returntext=`$DIALOG --extra-button --extra-label "Hold" --help-button --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981` +returncode=$? . ./report-string diff --git a/samples/checklist b/samples/checklist index be3c8c69304c..2e687d613e16 100755 --- a/samples/checklist +++ b/samples/checklist @@ -1,28 +1,28 @@ #! /bin/sh -# $Id: checklist,v 1.14 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist,v 1.15 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off \ "Dog" "No, that's not my dog." ON \ "Orange" "Yeah, that's juicy." off \ "Chicken" "Normally not a pet." off \ "Cat" "No, never put a dog and a cat together!" oN \ "Fish" "Cats like fish." On \ "Lemon" "You know how it tastes." on 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist-8bit b/samples/checklist-8bit index 20b23f13c274..756bf5b6b9c3 100755 --- a/samples/checklist-8bit +++ b/samples/checklist-8bit @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: checklist-8bit,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist-8bit,v 1.10 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./testdata-8bit $DIALOG --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ - "`./rotated-data 0 $SAMPLE`" "It's an `./rotated-data 0 $SAMPLE`." off \ - "`./rotated-data 1 $SAMPLE`" "No, that's not my `./rotated-data 1 $SAMPLE`." ON \ - "`./rotated-data 2 $SAMPLE`" "Yeah, that's `./rotated-data 2 $SAMPLE`." off \ - "`./rotated-data 3 $SAMPLE`" "Normally not a `./rotated-data 3 $SAMPLE`." off \ - "`./rotated-data 4 $SAMPLE`" "No, never put a `./rotated-data 4 $SAMPLE` there!" oN \ - "`./rotated-data 5 $SAMPLE`" "Cats like `./rotated-data 5 $SAMPLE`." On \ - "`./rotated-data 6 $SAMPLE`" "You `./rotated-data 6 $SAMPLE` how it is." on 2> $tempfile + "`./rotated-data 0 "$SAMPLE"`" "It's an `./rotated-data 0 "$SAMPLE"`." off \ + "`./rotated-data 1 "$SAMPLE"`" "No, that's not my `./rotated-data 1 "$SAMPLE"`." ON \ + "`./rotated-data 2 "$SAMPLE"`" "Yeah, that's `./rotated-data 2 "$SAMPLE"`." off \ + "`./rotated-data 3 "$SAMPLE"`" "Normally not a `./rotated-data 3 "$SAMPLE"`." off \ + "`./rotated-data 4 "$SAMPLE"`" "No, never put a `./rotated-data 4 "$SAMPLE"` there!" oN \ + "`./rotated-data 5 "$SAMPLE"`" "Cats like `./rotated-data 5 "$SAMPLE"`." On \ + "`./rotated-data 6 "$SAMPLE"`" "You `./rotated-data 6 "$SAMPLE"` how it is." on 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist-utf8 b/samples/checklist-utf8 index 12ed7239502a..b3f24ad2db7a 100755 --- a/samples/checklist-utf8 +++ b/samples/checklist-utf8 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: checklist-utf8,v 1.12 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist-utf8,v 1.13 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./setup-utf8 $DIALOG --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "APPLE" "It's an APPLE." off \ "DOG" "No, that's not my DOG." ON \ "ORANGE" "Yeah, that's JUICY." off \ "CHICKEN" "Normally not a PET." off \ "CAT" "No, never put a DOG and a CAT together!" oN \ "FISH" "Cats like FISH." On \ "LEMON" "You KNOW how it TASTES." on 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist1 b/samples/checklist1 index a0e19b6c81d5..3c08feae8dc2 100755 --- a/samples/checklist1 +++ b/samples/checklist1 @@ -1,28 +1,28 @@ #! /bin/sh -# $Id: checklist1,v 1.10 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist1,v 1.11 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "" "It's an apple." off \ "Dog" "No, that's not my dog." ON \ "Orange" "Yeah, that's juicy." off \ "Chicken" "" off \ "Cat" "No, never put a dog and a cat together!" oN \ "Fish" "Cats like fish." On \ "Lemon" "You know how it tastes." on 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist10 b/samples/checklist10 index 2ebd5575a8c5..82fdf77b3efe 100755 --- a/samples/checklist10 +++ b/samples/checklist10 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: checklist10,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist10,v 1.10 2020/11/26 00:03:58 tom Exp $ # zero-width column . ./setup-vars . ./setup-tempfile $DIALOG \ --backtitle "No such organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ Dialog "" on \ Readline "" off \ Gnome "" off \ Kde "" off \ Editor "" off \ Noninteractive "" on \ 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist11 b/samples/checklist11 index 85e234991f8c..3e8620e5b418 100755 --- a/samples/checklist11 +++ b/samples/checklist11 @@ -1,33 +1,33 @@ #! /bin/sh -# $Id: checklist11,v 1.1 2010/01/17 23:04:01 tom Exp $ +# $Id: checklist11,v 1.2 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "" "It's an apple." off \ "Dog" "No1, that's not my dog." ON \ "Dog2" "No2, that's not my dog." OFF \ "Dog3" "No3, that's not my dog." OFF \ "Dog4" "No4, that's not my dog." OFF \ "Dog5" "No5, that's not my dog." OFF \ "Dog6" "No6, that's not my dog." OFF \ "Orange" "Yeah, that's juicy." off \ "Chicken" "" off \ "Cat" "No, never put a dog and a cat together!" oN \ "Fish" "Cats like fish." On \ "Lemon" "You know how it tastes." on 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist12 b/samples/checklist12 index e23f88b9072b..68c70ae1b9b3 100755 --- a/samples/checklist12 +++ b/samples/checklist12 @@ -1,44 +1,44 @@ #! /bin/sh -# $Id: checklist12,v 1.3 2012/12/23 22:27:51 tom Exp $ +# $Id: checklist12,v 1.5 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-edit case "x$DIALOGOPTS" in *--no-items*|*--noitem*) CUT="cut -d: -f1,3" ;; *) CUT="cat" ;; esac $CUT >$input <<-EOF Apple:It's an apple.:off Dog:No, that's not my dog.:ON Orange:Yeah, that's juicy.:off Chicken:Normally not a pet.:off Cat:No, never put a dog and a cat together!:oN Fish:Cats like fish.:On Lemon:You know how it tastes.:on EOF -cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output +sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' <$input >$output cat $output >$input $DIALOG --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ --file $input 2> $output -retval=$? +returncode=$? tempfile=$output . ./report-tempfile diff --git a/samples/checklist2 b/samples/checklist2 index c672a682e1b5..e0d41d86a1e1 100755 --- a/samples/checklist2 +++ b/samples/checklist2 @@ -1,28 +1,28 @@ #! /bin/sh -# $Id: checklist2,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist2,v 1.12 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --item-help --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off "fruit" \ "Dog" "No, that's not my dog." ON "not a fruit" \ "Orange" "Yeah, that's juicy." off "fruit" \ "Chicken" "Normally not a pet." off "not a fruit" \ "Cat" "No, never put a dog and a cat together!" oN "not a fruit" \ "Fish" "Cats like fish." On "not a fruit" \ "Lemon" "You know how it tastes." on "the only one you wouldn't eat" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist3 b/samples/checklist3 index ce713d4546be..34471e628cd6 100755 --- a/samples/checklist3 +++ b/samples/checklist3 @@ -1,28 +1,28 @@ #! /bin/sh -# $Id: checklist3,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist3,v 1.12 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --item-help --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ "Fish" "Cats like fish. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ "Lemon" "You know how it tastes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist4 b/samples/checklist4 index 53adeedf95ad..eb6eac6d02e6 100755 --- a/samples/checklist4 +++ b/samples/checklist4 @@ -1,28 +1,28 @@ #! /bin/sh -# $Id: checklist4,v 1.12 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist4,v 1.13 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --help-button --item-help --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ "Fish" "Cats like fish. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ "Lemon" "You know how it tastes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist5 b/samples/checklist5 index 3890c85e09da..a4ccbbc810f7 100755 --- a/samples/checklist5 +++ b/samples/checklist5 @@ -1,29 +1,29 @@ #! /bin/sh -# $Id: checklist5,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist5,v 1.12 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --help-button --item-help --backtitle "No Such Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not anything" \ "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ "Fish" "Cats like fish. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ "Lemon" "You know how it tastes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist6 b/samples/checklist6 index 1a05d06e3d84..6e75856eb6c2 100755 --- a/samples/checklist6 +++ b/samples/checklist6 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: checklist6,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist6,v 1.12 2020/11/26 00:03:58 tom Exp $ # example showing the --colors option . ./setup-vars . ./setup-tempfile $DIALOG --help-button --item-help --colors --backtitle "\Z1No Such\Zn Organization" \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ \Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not anything" \ "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist7 b/samples/checklist7 index 1080b7eee86b..6ff9f7be4c7c 100755 --- a/samples/checklist7 +++ b/samples/checklist7 @@ -1,34 +1,34 @@ #! /bin/sh -# $Id: checklist7,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist7,v 1.12 2020/11/26 00:03:58 tom Exp $ # "checklist6" with --separate-output . ./setup-vars . ./setup-tempfile $DIALOG --help-button \ --item-help \ --colors \ --backtitle "\Z1No Such\Zn Organization" \ --separate-output \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ \Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not anything" \ "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist8 b/samples/checklist8 index 2ec1bbde6209..d87b35fe42ea 100755 --- a/samples/checklist8 +++ b/samples/checklist8 @@ -1,33 +1,33 @@ #! /bin/sh -# $Id: checklist8,v 1.10 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist8,v 1.11 2020/11/26 00:03:58 tom Exp $ # "checklist7" without --item-help . ./setup-vars . ./setup-tempfile $DIALOG --help-button \ --colors \ --backtitle "\Z1No Such\Zn Organization" \ --separate-output \ --title "CHECKLIST BOX" "$@" \ --checklist "Hi, this is a checklist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ \Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON \ "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN \ "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On \ "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/checklist9 b/samples/checklist9 index e8d913fdada6..9e980706d855 100755 --- a/samples/checklist9 +++ b/samples/checklist9 @@ -1,13 +1,13 @@ #! /bin/sh -# $Id: checklist9,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: checklist9,v 1.9 2020/11/26 00:03:58 tom Exp $ # "checklist8" using --file . ./setup-vars . ./setup-tempfile $DIALOG "$@" --file checklist9.txt 2>$tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/copifuncs/copi.ifmcfg2 b/samples/copifuncs/copi.ifmcfg2 index c8a8c03d664a..4d726f387116 100755 --- a/samples/copifuncs/copi.ifmcfg2 +++ b/samples/copifuncs/copi.ifmcfg2 @@ -1,68 +1,68 @@ # Transport programs for mail and news, used by iftoss sendmail /usr/lib/sendmail -f $F $T rnews /usr/lib/news/rnews # Unpackers, used by ifunpack. # $F expands to archieve file name unzip /usr/bin/unzip -oq $F unarj /usr/bin/unarj e $F #unarc /usr/bin/unpack $F unzoo /usr/bin/zoo -extract $F unlzh /usr/bin/lharc -x $F # Packer program, used by ifpack # $F expands to archieve file name, $P - to list of packet names packer /usr/bin/zip $F $P # Maximum arcmail file size, will start new arcmail file if exceeds maxfsize 65000 -# Maximum packet size, ifmail/ifnews will start new packet if exeeds. +# Maximum packet size, ifmail/ifnews will start new packet if exceeds. # .out files are NOT created if nonzero specified, you must run ifpack # to make packets out. (unimplemented) maxpsize 65000 # cnews log file and (temporary) database for seen-bys newslog /usr/lib/news/log msgidbm /tmp/ifmsgids # From this line on, values may be prefixed by a logical expression in # round brackets. Operators are: '!', '&', '|', 'Xor'. # Possible elements are: # - Nodelist flags (like "CM", "MNP", "V32" etc.) # - speed <operator> <numeric> # where <operator> is '=', '!=', '<', '>', '<=', '>=' # - address <wildcard> # where <wildcard> is an (possibly incomplete) fidonet address, # e.g. "5020/*" # - time <interval>[,<interval>,...] # where <interval> is a day spec. with optional time spec., e.g. # Wk2000-0900,Sat1800-0000,Sun # - phone <prefix> # e.g. "phone 7-095-" # Dialing parameters # of multiple "ModemPort", "ModemReset", "ModemDial", "ModemHangup" lines, # first matching is used. # of multiple "PhoneTrans", "ModemConnect", "ModemError" lines, all matching # are used. # In send and expect strings, following substitutions are made: # \\ '\' character # \r carriage return (0x0d) # \n new line (0x0a) # \t tab (0x09) # \b backspace (0x08) # \s space (0x20) # \NNN (where N is an octal digit) - character with octal code NNN # \d 1 second delay (send strings only) # \p 1/4 second pause (send strings only) # \T translated telephone no. (send strings only) # \D untranslated telephone no. (send strings only) # ModemPort present a blank-separated list of ports with possible speed -# extention (separated by colon); if speed is prefixed with 'L', it is +# extension (separated by colon); if speed is prefixed with 'L', it is # a "locked" port speed, otherwise it is a maximum speed to be set, while # actual speed is taken from the nodelist. If speed is omitted (or set # to zero), previous port speed is not changed. #ModemPort (time Any0000-0900,Sat,Sun) ttyS0 #ModemPort cua0:L38400 diff --git a/samples/copifuncs/copi.ifmcfg4 b/samples/copifuncs/copi.ifmcfg4 index 4cb7a75b1fca..57ff9fc6ad11 100755 --- a/samples/copifuncs/copi.ifmcfg4 +++ b/samples/copifuncs/copi.ifmcfg4 @@ -1,30 +1,30 @@ ModemHangup +++ATH\r ModemOK OK ModemConnect CONNECT ModemError BUSY ModemError NO\sCARRIER ModemError NO\sDIAL ModemError RING\r ModemError ERROR -# Call options (time, address and nodelist flag dependant) +# Call options (time, address and nodelist flag dependent) # All matching are applied in the order they are specified. # Possible options are "[No]Call", "[No]Hold", "[No]PUA", "[No]EMSI", # "[No]WaZOO", "[No]Freqs", "[No]Zmodem", "[No]ZedZap", "[No]Janus", # "[No]Hydra". Here, WaZOO stands for YooHoo/2U2 handshake, not for # the transfer scheme. FTS-0001 handshake and DietIFNA scheme cannot -# be disallowed (because they are mandatory by standart). "Hold" +# be disallowed (because they are mandatory by standard). "Hold" # means really hold "hold" type packets and files: do not send them # if our system initiated the session, "NoHold" means send "hold" # packets when our system initiated the session. "NoPUA" stands for # "No PickUp All", i.e. PUP ("Pick Up Primary"). NoCall means do not # perform outbound call. This flag has no effect on the nodes # explicitly specified in the command line. # Default options are "everything allowed". # options ((!CM) & time Any0700-0200) Nocall #options (time Any0900-2100 & ! address 2:5020/*) Nocall # EMSI data for this node # From this line on values CANNOT be prefixed with logical expression # For now, escaping of '}' and ']' unimplemented, try to avoid these # characters please! diff --git a/samples/dialog.py b/samples/dialog.py index 5286b41f1db2..ef6e8626b3c0 100644 --- a/samples/dialog.py +++ b/samples/dialog.py @@ -1,354 +1,354 @@ #!/usr/bin/python -# $Id: dialog.py,v 1.4 2012/06/29 09:33:18 tom Exp $ +# $Id: dialog.py,v 1.5 2019/12/10 22:52:52 tom Exp $ # Module: dialog.py # Copyright (c) 2000 Robb Shecter <robb@acm.org> # All rights reserved. # This source is covered by the GNU GPL. # # This module is a Python wrapper around the Linux "dialog" utility # by Savio Lam and Stuart Herbert. My goals were to make dialog as # easy to use from Python as possible. The demo code at the end of # the module is a good example of how to use it. To run the demo, # execute: # # python dialog.py # # This module has one class in it, "Dialog". An application typically # creates an instance of it, and possibly sets the background title option. # Then, methods can be called on it for interacting with the user. # # I wrote this because I want to use my 486-33 laptop as my main # development computer (!), and I wanted a way to nicely interact with the # user in console mode. There are apparently other modules out there # with similar functionality, but they require the Python curses library. # Writing this module from scratch was easier than figuring out how to # recompile Python with curses enabled. :) # # One interesting feature is that the menu and selection windows allow # *any* objects to be displayed and selected, not just strings. # # TO DO: # Add code so that the input buffer is flushed before a dialog box is # shown. This would make the UI more predictable for users. This # feature could be turned on and off through an instance method. # Drop using temporary files when interacting with 'dialog' # (it's possible -- I've already tried :-). # Try detecting the terminal window size in order to make reasonable # height and width defaults. Hmmm - should also then check for # terminal resizing... # Put into a package name to make more reusable - reduce the possibility # of name collisions. # # NOTES: # there is a bug in (at least) Linux-Mandrake 7.0 Russian Edition # running on AMD K6-2 3D that causes core dump when 'dialog' # is running with --gauge option; # in this case you'll have to recompile 'dialog' program. # # Modifications: # Jul 2000, Sultanbek Tezadov (http://sultan.da.ru) # Added: # - 'gauge' widget *) # - 'title' option to some widgets # - 'checked' option to checklist dialog; clicking "Cancel" is now # recognizable # - 'selected' option to radiolist dialog; clicking "Cancel" is now # recognizable # - some other cosmetic changes and improvements # import os from tempfile import mktemp from string import split from time import sleep # # Path of the dialog executable # DIALOG = os.getenv("DIALOG"); if DIALOG is None: DIALOG="../dialog"; class Dialog: def __init__(self): self.__bgTitle = '' # Default is no background title def setBackgroundTitle(self, text): self.__bgTitle = '--backtitle "%s"' % text def __perform(self, cmd): """Do the actual work of invoking dialog and getting the output.""" fName = mktemp() rv = os.system('%s %s %s 2> %s' % (DIALOG, self.__bgTitle, cmd, fName)) f = open(fName) output = f.readlines() f.close() os.unlink(fName) return (rv, output) def __perform_no_options(self, cmd): """Call dialog w/out passing any more options. Needed by --clear.""" return os.system(DIALOG + ' ' + cmd) def __handleTitle(self, title): if len(title) == 0: return '' else: return '--title "%s" ' % title def yesno(self, text, height=10, width=30, title=''): """ Put a Yes/No question to the user. Uses the dialog --yesno option. Returns a 1 or a 0. """ (code, output) = self.__perform(self.__handleTitle(title) +\ '--yesno "%s" %d %d' % (text, height, width)) return code == 0 def msgbox(self, text, height=10, width=30, title=''): """ Pop up a message to the user which has to be clicked away with "ok". """ self.__perform(self.__handleTitle(title) +\ '--msgbox "%s" %d %d' % (text, height, width)) def infobox(self, text, height=10, width=30): """Make a message to the user, and return immediately.""" self.__perform('--infobox "%s" %d %d' % (text, height, width)) def inputbox(self, text, height=10, width=30, init='', title=''): """ Request a line of input from the user. Returns the user's input or None if cancel was chosen. """ (c, o) = self.__perform(self.__handleTitle(title) +\ '--inputbox "%s" %d %d "%s"' % (text, height, width, init)) try: return o[0] except IndexError: if c == 0: # empty string entered return '' else: # canceled return None def textbox(self, filename, height=20, width=60, title=None): """Display a file in a scrolling text box.""" if title is None: title = filename self.__perform(self.__handleTitle(title) +\ ' --textbox "%s" %d %d' % (filename, height, width)) def menu(self, text, height=15, width=54, list=[]): """ Display a menu of options to the user. This method simplifies the --menu option of dialog, which allows for complex arguments. This method receives a simple list of objects, and each one is assigned a choice number. The selected object is returned, or None if the dialog was canceled. """ menuheight = height - 8 pairs = map(lambda i, item: (i + 1, item), range(len(list)), list) choices = reduce(lambda res, pair: res + '%d "%s" ' % pair, pairs, '') (code, output) = self.__perform('--menu "%s" %d %d %d %s' %\ (text, height, width, menuheight, choices)) try: return list[int(output[0]) - 1] except IndexError: return None def checklist(self, text, height=15, width=54, list=[], checked=None): """ Returns a list of the selected objects. Returns an empty list if nothing was selected. Returns None if the window was canceled. checked -- a list of boolean (0/1) values; len(checked) must equal len(list). """ if checked is None: checked = [0]*len(list) menuheight = height - 8 triples = map( lambda i, item, onoff, fs=('off', 'on'): (i + 1, item, fs[onoff]), range(len(list)), list, checked) choices = reduce(lambda res, triple: res + '%d "%s" %s ' % triple, triples, '') (c, o) = self.__perform('--checklist "%s" %d %d %d %s' %\ (text, height, width, menuheight, choices)) try: output = o[0] indexList = map(lambda x: int(x[1:-1]), split(output)) objectList = filter(lambda item, list=list, indexList=indexList: list.index(item) + 1 in indexList, list) return objectList except IndexError: if c == 0: # Nothing was selected return [] return None # Was canceled def radiolist(self, text, height=15, width=54, list=[], selected=0): """ Return the selected object. Returns empty string if no choice was selected. Returns None if window was canceled. selected -- the selected item (must be between 1 and len(list) or 0, meaning no selection). """ menuheight = height - 8 triples = map(lambda i, item: (i + 1, item, 'off'), range(len(list)), list) if selected: i, item, tmp = triples[selected - 1] triples[selected - 1] = (i, item, 'on') choices = reduce(lambda res, triple: res + '%d "%s" %s ' % triple, triples, '') (c, o) = self.__perform('--radiolist "%s" %d %d %d %s' %\ (text, height, width, menuheight, choices)) try: return list[int(o[0]) - 1] except IndexError: if c == 0: return '' return None def clear(self): """ Clear the screen. Equivalent to the dialog --clear option. """ self.__perform_no_options('--clear') def scrollbox(self, text, height=20, width=60, title=''): """ This is a bonus method. The dialog package only has a function to display a file in a scrolling text field. This method allows any string to be displayed by first saving it in a temp file, and calling --textbox. """ fName = mktemp() f = open(fName, 'w') f.write(text) f.close() self.__perform(self.__handleTitle(title) +\ '--textbox "%s" %d %d' % (fName, height, width)) os.unlink(fName) def gauge_start(self, perc=0, text='', height=8, width=54, title=''): """ Display gauge output window. - Gauge normal usage (assuming that there is an instace of 'Dialog' + Gauge normal usage (assuming that there is an instance of 'Dialog' class named 'd'): d.gauge_start() # do something - d.gauge_iterate(10) # passed throgh 10% + d.gauge_iterate(10) # passed through 10% # ... d.gauge_iterate(100, 'any text here') # work is done d.stop_gauge() # clean-up actions """ cmd = self.__handleTitle(title) +\ '--gauge "%s" %d %d %d' % (text, height, width, perc) cmd = '%s %s %s 2> /dev/null' % (DIALOG, self.__bgTitle, cmd) self.pipe = os.popen(cmd, 'w') #/gauge_start() def gauge_iterate(self, perc, text=''): """ Update percentage point value. See gauge_start() function above for the usage. """ if text: text = 'XXX\n%d\n%s\nXXX\n' % (perc, text) else: text = '%d\n' % perc self.pipe.write(text) self.pipe.flush() #/gauge_iterate() def gauge_stop(self): """ Finish previously started gauge. See gauge_start() function above for the usage. """ self.pipe.close() #/gauge_stop() # # DEMO APPLICATION # if __name__ == '__main__': """ This demo tests all the features of the class. """ d = Dialog() d.setBackgroundTitle('dialog.py demo') d.infobox( "One moment... Just wasting some time here to test the infobox...") sleep(3) if d.yesno("Do you like this demo?"): d.msgbox("Excellent! Here's the source code:") else: d.msgbox("Send your complaints to /dev/null") d.textbox("dialog.py") name = d.inputbox("What's your name?", init="Snow White") fday = d.menu("What's your favorite day of the week?", list=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday (The best day of all)", "Saturday", "Sunday"]) food = d.checklist("What sandwich toppings do you like?", list=["Catsup", "Mustard", "Pesto", "Mayonaise", "Horse radish", "Sun-dried tomatoes"], checked=[0,0,0,1,1,1]) sand = d.radiolist("What's your favorite kind of sandwich?", list=["Hamburger", "Hotdog", "Burrito", "Doener", "Falafel", "Bagel", "Big Mac", "Whopper", "Quarter Pounder", "Peanut Butter and Jelly", "Grilled cheese"], selected=4) # Prepare the message for the final window bigMessage = "Here are some vital statistics about you:\n\nName: " + name +\ "\nFavorite day of the week: " + fday +\ "\nFavorite sandwich toppings:\n" for topping in food: bigMessage = bigMessage + " " + topping + "\n" bigMessage = bigMessage + "Favorite sandwich: " + str(sand) d.scrollbox(bigMessage) #<># Gauge Demo d.gauge_start(0, 'percentage: 0', title='Gauge Demo') for i in range(1, 101): if i < 50: msg = 'percentage: %d' % i elif i == 50: msg = 'Over 50%' else: msg = '' d.gauge_iterate(i, msg) sleep(0.1) d.gauge_stop() #<># d.clear() diff --git a/samples/dselect b/samples/dselect index 9da035dab95d..24ea94022715 100755 --- a/samples/dselect +++ b/samples/dselect @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: dselect,v 1.7 2016/01/26 22:52:53 tom Exp $ +# $Id: dselect,v 1.10 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "Please choose a file" "$@" --dselect $HOME/ 14 48 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "Please choose a file" "$@" --dselect "$HOME/" 14 48 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/editbox b/samples/editbox index 8ae4c63721d9..f59d344c4b3a 100755 --- a/samples/editbox +++ b/samples/editbox @@ -1,45 +1,45 @@ #!/bin/sh -# $Id: editbox,v 1.13 2010/01/13 10:20:03 tom Exp $ +# $Id: editbox,v 1.14 2020/11/26 00:03:58 tom Exp $ . ./setup-vars DIALOG_ERROR=254 export DIALOG_ERROR . ./setup-edit cat << EOF > $input Hi, this is an edit box. It can be used to edit text from a file. It's like a simple text editor, with these keys implemented: PGDN - Move down one page PGUP - Move up one page DOWN - Move down one line UP - Move up one line DELETE - Delete the current character BACKSPC - Delete the previous character Unlike Xdialog, it does not do these: CTRL C - Copy text CTRL V - Paste text Because dialog normally uses TAB for moving between fields, this editbox uses CTRL/V as a literal-next character. You can enter TAB characters by first pressing CTRL/V. This example contains a few tab characters. It supports the mouse - but only for positioning in the editbox, or for clicking on buttons. Your terminal (emulator) may support cut/paste. Try to input some text below: EOF $DIALOG --title "EDIT BOX" \ --fixed-font "$@" --editbox $input 0 0 2>$output -retval=$? +returncode=$? . ./report-edit diff --git a/samples/editbox-utf8 b/samples/editbox-utf8 index 94f2fab69d20..aac84714566c 100755 --- a/samples/editbox-utf8 +++ b/samples/editbox-utf8 @@ -1,35 +1,35 @@ #!/bin/sh -# $Id: editbox-utf8,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: editbox-utf8,v 1.10 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./setup-utf8 . ./setup-edit cat << EOF > $input Hi, this is a edit box. You can use this to allow the user to enter or modify free-form text. Try it now! ----------- -------------------------------- Choose Description of the OS you like ----------- -------------------------------- Linux The Great Unix Clone for 386/486 NetBSD Another free Unix Clone for 386/486 OS/ï¼’ IBM OS/2 WIN NT Microsoft Windows NT PCDOS IBM PC DOS MSDOS Microsoft DOS ----------- -------------------------------- ----------- -------------------------------- EOF $DIALOG --title "EDIT BOX" \ --fixed-font "$@" --editbox $input 0 0 2>$output -retval=$? +returncode=$? . ./report-edit diff --git a/samples/editbox2 b/samples/editbox2 index 66623948751b..e483c2d36e85 100755 --- a/samples/editbox2 +++ b/samples/editbox2 @@ -1,45 +1,45 @@ #!/bin/sh -# $Id: editbox2,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: editbox2,v 1.8 2020/11/26 00:03:58 tom Exp $ # example with extra- and help-buttons . ./setup-vars . ./setup-edit cat << EOF > $input Hi, this is an edit box. It can be used to edit text from a file. It's like a simple text editor, with these keys implemented: PGDN - Move down one page PGUP - Move up one page DOWN - Move down one line UP - Move up one line DELETE - Delete the current character BACKSPC - Delete the previous character Unlike Xdialog, it does not do these: CTRL C - Copy text CTRL V - Paste text Because dialog normally uses TAB for moving between fields, this editbox uses CTRL/V as a literal-next character. You can enter TAB characters by first pressing CTRL/V. This example contains a few tab characters. It supports the mouse - but only for positioning in the editbox, or for clicking on buttons. Your terminal (emulator) may support cut/paste. Try to input some text below: EOF $DIALOG --title "EDIT BOX" \ --extra-button \ --help-button \ --fixed-font "$@" --editbox $input 0 0 2>$output -retval=$? +returncode=$? . ./report-edit diff --git a/samples/editbox3 b/samples/editbox3 index aba30bd6f71e..6e96ff5d1885 100755 --- a/samples/editbox3 +++ b/samples/editbox3 @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: editbox3,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: editbox3,v 1.8 2020/11/26 00:03:58 tom Exp $ # example with extra- and help-buttons . ./setup-vars . ./setup-edit cat << EOF > $input EOF $DIALOG --title "EDIT BOX" \ --extra-button \ --help-button \ --fixed-font "$@" --editbox $input 0 0 2>$output -retval=$? +returncode=$? . ./report-edit diff --git a/samples/editbox4 b/samples/editbox4 index 8153facf1e83..68daf836c64e 100755 --- a/samples/editbox4 +++ b/samples/editbox4 @@ -1,45 +1,45 @@ #!/bin/sh -# $Id: editbox4,v 1.1 2010/01/17 22:29:50 tom Exp $ +# $Id: editbox4,v 1.2 2020/11/26 00:03:58 tom Exp $ . ./setup-vars DIALOG_ERROR=254 export DIALOG_ERROR . ./setup-edit cat << EOF > $input Hi, this is an edit box. It can be used to edit text from a file. It's like a simple text editor, with these keys implemented: PGDN - Move down one page PGUP - Move up one page DOWN - Move down one line UP - Move up one line DELETE - Delete the current character BACKSPC - Delete the previous character Unlike Xdialog, it does not do these: CTRL C - Copy text CTRL V - Paste text Because dialog normally uses TAB for moving between fields, this editbox uses CTRL/V as a literal-next character. You can enter TAB characters by first pressing CTRL/V. This example contains a few tab characters. It supports the mouse - but only for positioning in the editbox, or for clicking on buttons. Your terminal (emulator) may support cut/paste. Try to input some text below: EOF $DIALOG --title "EDIT BOX" \ --fixed-font "$@" --editbox $input 20 40 2>$output -retval=$? +returncode=$? . ./report-edit diff --git a/samples/form1 b/samples/form1 index 38e23649a591..b739196187bc 100755 --- a/samples/form1 +++ b/samples/form1 @@ -1,79 +1,71 @@ #! /bin/sh -# $Id: form1,v 1.15 2011/10/04 23:36:53 tom Exp $ +# $Id: form1,v 1.18 2020/11/26 00:34:39 tom Exp $ . ./setup-vars DIALOG_ERROR=254 export DIALOG_ERROR backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; $DIALOG_HELP) echo "Button 2 (Help) pressed." exit ;; $DIALOG_EXTRA) echo "Button 3 (Extra) pressed." exit ;; - $DIALOG_ERROR) - echo "ERROR!$value" - exit - ;; - $DIALOG_ESC) - echo "ESC pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form1-both b/samples/form1-both index f571830fc454..36aa560e36bb 100755 --- a/samples/form1-both +++ b/samples/form1-both @@ -1,69 +1,61 @@ #! /bin/sh -# $Id: form1-both,v 1.5 2010/01/13 10:47:35 tom Exp $ +# $Id: form1-both,v 1.8 2020/11/26 00:34:22 tom Exp $ . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --extra-button --help-button \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form1-extra b/samples/form1-extra index ca180a96ec1a..46018f808996 100755 --- a/samples/form1-extra +++ b/samples/form1-extra @@ -1,69 +1,61 @@ #! /bin/sh -# $Id: form1-extra,v 1.5 2010/01/13 10:47:35 tom Exp $ +# $Id: form1-extra,v 1.8 2020/11/26 00:34:05 tom Exp $ . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --extra-button \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form1-help b/samples/form1-help index 44c5543f60e3..9dcd3ca66de6 100755 --- a/samples/form1-help +++ b/samples/form1-help @@ -1,69 +1,61 @@ #! /bin/sh -# $Id: form1-help,v 1.5 2010/01/13 10:47:35 tom Exp $ +# $Id: form1-help,v 1.8 2020/11/26 00:33:42 tom Exp $ . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --help-button \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form1-utf8 b/samples/form1-utf8 index a2be4a6cf15e..21d655d61ae4 100755 --- a/samples/form1-utf8 +++ b/samples/form1-utf8 @@ -1,71 +1,63 @@ #! /bin/sh -# $Id: form1-utf8,v 1.7 2010/01/13 10:47:35 tom Exp $ +# $Id: form1-utf8,v 1.10 2020/11/26 00:33:23 tom Exp $ . ./setup-vars . ./setup-utf8 backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="DOG" home=/usr/home/$user returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --backtitle "$backtitle" \ --insecure "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form2 b/samples/form2 index a005be3c2bf1..ab2fe430501a 100755 --- a/samples/form2 +++ b/samples/form2 @@ -1,84 +1,84 @@ #! /bin/sh -# $Id: form2,v 1.9 2010/01/13 10:53:11 tom Exp $ +# $Id: form2,v 1.12 2020/11/26 00:33:02 tom Exp $ . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 0 0 10 \ "1 Username:" 1 1 "$user" 1 12 10 10 \ "1 UID:" 2 1 "$uid" 2 12 10 10 \ "1 GID:" 3 1 "$gid" 3 12 10 10 \ "1 HOME:" 4 1 "$home" 4 12 10 10 \ "2 Username:" 5 1 "$user" 5 12 10 10 \ "2 UID:" 6 1 "$uid" 6 12 10 10 \ "2 GID:" 7 1 "$gid" 7 12 10 10 \ "2 HOME:" 8 1 "$home" 8 12 10 10 \ "3 Username:" 9 1 "$user" 9 12 10 10 \ "3 UID:" 10 1 "$uid" 10 12 10 10 \ "3 GID:" 11 1 "$gid" 11 12 10 10 \ "3 HOME:" 12 1 "$home" 12 12 10 10 \ "4 Username:" 13 1 "$user" 13 12 10 10 \ "4 UID:" 14 1 "$uid" 14 12 10 10 \ "4 GID:" 15 1 "$gid" 15 12 10 10 \ "4 HOME:" 16 1 "$home" 16 12 10 10 \ "5 Username:" 17 1 "$user" 17 12 10 10 \ "5 UID:" 18 1 "$uid" 18 12 10 10 \ "5 GID:" 19 1 "$gid" 19 12 10 10 \ "5 HOME:" 20 1 "$home" 20 12 10 10 \ "6 Username:" 21 1 "$user" 21 12 10 10 \ "6 UID:" 22 1 "$uid" 22 12 10 10 \ "6 GID:" 23 1 "$gid" 23 12 10 10 \ "6 HOME:" 24 1 "$home" 24 12 10 10 \ "7 Username:" 25 1 "$user" 25 12 10 10 \ "7 UID:" 26 1 "$uid" 26 12 10 10 \ "7 GID:" 27 1 "$gid" 27 12 10 10 \ "7 HOME:" 28 1 "$home" 28 12 10 10 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 0 0 ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form3 b/samples/form3 index c3ac6d5306e5..9a6b256b363f 100755 --- a/samples/form3 +++ b/samples/form3 @@ -1,69 +1,69 @@ #! /bin/sh -# $Id: form3,v 1.6 2010/01/13 10:49:52 tom Exp $ +# $Id: form3,v 1.9 2020/11/26 00:32:45 tom Exp $ # form1 with --help-button . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --help-button \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; $DIALOG_HELP) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Help data:\n\ $show" 10 40 ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form4 b/samples/form4 index a733865015c6..1e5d5b0e7f3c 100755 --- a/samples/form4 +++ b/samples/form4 @@ -1,70 +1,70 @@ #! /bin/sh -# $Id: form4,v 1.6 2010/01/13 10:49:52 tom Exp $ +# $Id: form4,v 1.9 2020/11/26 00:32:31 tom Exp $ # form3 with --item-help . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --help-button \ --item-help \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 "Login name" \ "UID:" 2 1 "$uid" 2 10 8 0 "User ID" \ "GID:" 3 1 "$gid" 3 10 8 0 "Group ID" \ "HOME:" 4 1 "$home" 4 10 40 0 "User's home-directory" \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; $DIALOG_HELP) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Help data:\n\ $show" 10 40 ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form5 b/samples/form5 index 649c3872d12b..253434110b5e 100755 --- a/samples/form5 +++ b/samples/form5 @@ -1,71 +1,71 @@ #! /bin/sh -# $Id: form5,v 1.6 2010/01/13 10:49:52 tom Exp $ +# $Id: form5,v 1.9 2020/11/26 00:32:17 tom Exp $ # form4 with --help-status . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --help-status \ --help-button \ --item-help \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 "Login name" \ "UID:" 2 1 "$uid" 2 10 8 0 "User ID" \ "GID:" 3 1 "$gid" 3 10 8 0 "Group ID" \ "HOME:" 4 1 "$home" 4 10 40 0 "User's home-directory" \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; $DIALOG_HELP) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Help data:\n\ $show" 10 40 ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/form6 b/samples/form6 index 8b5483f4f4c1..29195b9f8322 100755 --- a/samples/form6 +++ b/samples/form6 @@ -1,71 +1,71 @@ #! /bin/sh -# $Id: form6,v 1.5 2010/01/13 10:49:52 tom Exp $ +# $Id: form6,v 1.8 2020/11/26 00:31:55 tom Exp $ # form4 with --help-status . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --help-status \ --help-button \ --item-help \ --backtitle "$backtitle" "$@" \ --form "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 -9 9 "Login name" \ "UID:" 2 1 "$uid" 2 10 8 0 "User ID" \ "GID:" 3 1 "$gid" 3 10 8 0 "Group ID" \ "HOME:" 4 1 "$home" 4 10 40 0 "User's home-directory" \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; $DIALOG_HELP) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Help data:\n\ $show" 10 40 ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/fselect b/samples/fselect index 20b8304331a1..45bb68da4874 100755 --- a/samples/fselect +++ b/samples/fselect @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: fselect,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: fselect,v 1.14 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect $HOME/ 14 48 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "Please choose a file" "$@" --fselect "$HOME/" 14 48 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/fselect-stdout b/samples/fselect-stdout index 02eefdb7b34c..0f2f5cbf21cf 100755 --- a/samples/fselect-stdout +++ b/samples/fselect-stdout @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: fselect-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: fselect-stdout,v 1.9 2020/11/26 00:09:12 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect $HOME/ 14 48` -retval=$? +returntext=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect "$HOME/" 14 48` +returncode=$? . ./report-string diff --git a/samples/fselect0 b/samples/fselect0 index 3bd5b6d962a8..49249b43a071 100755 --- a/samples/fselect0 +++ b/samples/fselect0 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: fselect0,v 1.1 2011/10/14 08:32:48 tom Exp $ +# $Id: fselect0,v 1.3 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect '' 14 48 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "Please choose a file" "$@" --fselect '' 14 48 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/fselect1 b/samples/fselect1 index 591379417176..4b312673c497 100755 --- a/samples/fselect1 +++ b/samples/fselect1 @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: fselect1,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: fselect1,v 1.12 2020/11/26 00:09:12 tom Exp $ . ./setup-vars FILE=$HOME for n in .cshrc .profile .bashrc do - if test -f $HOME/$n ; then + if test -f "$HOME/$n" ; then FILE=$HOME/$n break fi done exec 3>&1 -RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect $FILE 14 48 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "Please choose a file" "$@" --fselect "$FILE" 14 48 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/fselect1-stdout b/samples/fselect1-stdout index 01d1135622f7..b1406837ffee 100755 --- a/samples/fselect1-stdout +++ b/samples/fselect1-stdout @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: fselect1-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: fselect1-stdout,v 1.9 2020/11/26 00:09:12 tom Exp $ . ./setup-vars FILE=$HOME for n in .cshrc .profile .bashrc do - if test -f $HOME/$n ; then + if test -f "$HOME/$n" ; then FILE=$HOME/$n break fi done -RESULT=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect $FILE 14 48` -retval=$? +returntext=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect "$FILE" 14 48` +returncode=$? . ./report-string diff --git a/samples/fselect2 b/samples/fselect2 index 6480c753bb10..63526dce5a26 100755 --- a/samples/fselect2 +++ b/samples/fselect2 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: fselect2,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: fselect2,v 1.11 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect $HOME/ 0 0 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "Please choose a file" "$@" --fselect "$HOME/" 0 0 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/fselect2-stdout b/samples/fselect2-stdout index 644fb2a5bf7d..c2c188ac6584 100755 --- a/samples/fselect2-stdout +++ b/samples/fselect2-stdout @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: fselect2-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: fselect2-stdout,v 1.9 2020/11/26 00:09:12 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect $HOME/ 0 0` -retval=$? +returntext=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect "$HOME/" 0 0` +returncode=$? . ./report-string diff --git a/samples/gauge2 b/samples/gauge2 index 10455d144c62..f791410673af 100755 --- a/samples/gauge2 +++ b/samples/gauge2 @@ -1,28 +1,28 @@ #!/bin/sh -# $Id: gauge2,v 1.8 2010/01/13 10:26:52 tom Exp $ +# $Id: gauge2,v 1.9 2019/12/10 23:37:10 tom Exp $ # The original dialog program assumed the first line after the first "XXX" # was a percentage value (compare with "gauge" script). . ./setup-vars (echo "10" ; sleep 2 ; cat <<"EOF" XXX The new \n message XXX 20 EOF sleep 2; echo "75" ; sleep 1 echo "100") | \ $DIALOG --title "GAUGE" "$@" --gauge "Hi, this is a gauge widget" 10 40 0 -if [ "$?" = $DIALOG_ESC ] ; then +if [ "$?" = "$DIALOG_ESC" ] ; then echo "" echo "Box closed !" fi diff --git a/samples/infobox b/samples/infobox index 91dd5dd9e055..9f2da62c4a55 100755 --- a/samples/infobox +++ b/samples/infobox @@ -1,21 +1,21 @@ #! /bin/sh -# $Id: infobox,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: infobox,v 1.9 2019/12/10 23:37:10 tom Exp $ . ./setup-vars left=10 unit="seconds" while test $left != 0 do $DIALOG --sleep 1 \ --title "INFO BOX" "$@" \ --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by the sleep command within dialog. You have $left $unit to read this..." 10 52 left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done diff --git a/samples/infobox1 b/samples/infobox1 index 4ee6c9ff7993..3cc7f27ce350 100755 --- a/samples/infobox1 +++ b/samples/infobox1 @@ -1,21 +1,21 @@ #! /bin/sh -# $Id: infobox1,v 1.4 2010/01/13 10:20:03 tom Exp $ +# $Id: infobox1,v 1.5 2019/12/10 23:37:10 tom Exp $ . ./setup-vars left=10 unit="seconds" while test $left != 0 do sleep 1 $DIALOG --title "INFO BOX" "$@" \ --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by a sleep command in the shell script. You have $left $unit to read this..." 10 52 left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done diff --git a/samples/infobox2 b/samples/infobox2 index fdf64caa85f6..08deb71901ba 100755 --- a/samples/infobox2 +++ b/samples/infobox2 @@ -1,21 +1,21 @@ #! /bin/sh -# $Id: infobox2,v 1.5 2010/01/13 10:20:03 tom Exp $ +# $Id: infobox2,v 1.6 2019/12/10 23:37:10 tom Exp $ . ./setup-vars left=10 unit="seconds" while test $left != 0 do $DIALOG --sleep 1 \ --title "INFO BOX" "$@" \ --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by the sleep command within dialog. You have $left $unit to read this..." 0 0 left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done diff --git a/samples/infobox3 b/samples/infobox3 index edba1dfd98f4..3c773b8f69af 100755 --- a/samples/infobox3 +++ b/samples/infobox3 @@ -1,22 +1,22 @@ #! /bin/sh -# $Id: infobox3,v 1.5 2010/01/13 10:20:03 tom Exp $ +# $Id: infobox3,v 1.6 2019/12/10 23:37:10 tom Exp $ . ./setup-vars left=10 unit="seconds" while test $left != 0 do $DIALOG --sleep 1 \ --begin 5 0 \ --title "INFO BOX" "$@" \ --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by the sleep command within dialog. You have $left $unit to read this..." 0 0 left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done diff --git a/samples/infobox4 b/samples/infobox4 index 7c96d6b4e46d..816b8417a0d6 100755 --- a/samples/infobox4 +++ b/samples/infobox4 @@ -1,22 +1,22 @@ #! /bin/sh -# $Id: infobox4,v 1.5 2010/01/13 10:20:03 tom Exp $ +# $Id: infobox4,v 1.6 2019/12/10 23:37:10 tom Exp $ . ./setup-vars left=10 unit="seconds" while test $left != 0 do $DIALOG --sleep 1 \ --begin 0 5 \ --title "INFO BOX" "$@" \ --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by the sleep command within dialog. You have $left $unit to read this..." 0 0 left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done diff --git a/samples/infobox5 b/samples/infobox5 index 58512c90e572..b93e1de8b13b 100755 --- a/samples/infobox5 +++ b/samples/infobox5 @@ -1,39 +1,39 @@ #! /bin/sh -# $Id: infobox5,v 1.7 2011/01/18 09:19:09 tom Exp $ +# $Id: infobox5,v 1.8 2019/12/10 23:38:49 tom Exp $ # get rid of all flickering by constructing a script unroll the loop, leaving # us in curses-mode until we're done counting. . ./setup-vars . ./setup-tempfile left=10 unit="seconds" last='\' cat >>$tempfile <<EOF $DIALOG $last EOF while test $left != 0 do cat >>$tempfile <<EOF --sleep 1 \ --begin 0 5 \ --title "INFO BOX" $* \ --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by the sleep command within dialog. You have $left $unit to read this..." 0 0 $last EOF left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done echo >>$tempfile . $tempfile diff --git a/samples/infobox6 b/samples/infobox6 index a3a06cef2829..c81232d6e216 100755 --- a/samples/infobox6 +++ b/samples/infobox6 @@ -1,41 +1,41 @@ #! /bin/sh -# $Id: infobox6,v 1.7 2011/01/18 09:20:59 tom Exp $ +# $Id: infobox6,v 1.8 2019/12/10 23:38:49 tom Exp $ # get rid of all flickering by constructing a script unroll the loop, leaving # us in curses-mode until we're done counting. # # a little fancier than infobox5, this moves the widget at each step. . ./setup-vars . ./setup-tempfile left=10 unit="seconds" last='\' cat >>$tempfile <<EOF $DIALOG $last EOF while test $left != 0 do cat >>$tempfile <<EOF --sleep 1 \ --begin $left `expr $left + 5` \ --title "INFO BOX" $* $last --infobox "Hi, this is an information box. It is different from a message box: it will not pause waiting for input after displaying the message. The pause here is only introduced by the sleep command within dialog. You have $left $unit to read this..." 0 0 $last EOF left=`expr $left - 1` -test $left = 1 && unit="second" +test "$left" = 1 && unit="second" done echo >>$tempfile . $tempfile diff --git a/samples/inputbox b/samples/inputbox index 9975d441d75b..d249e83687f2 100755 --- a/samples/inputbox +++ b/samples/inputbox @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: inputbox,v 1.11 2010/01/13 10:06:01 tom Exp $ +# $Id: inputbox,v 1.12 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox-both b/samples/inputbox-both index 4103ccf811cf..2f8681be6398 100755 --- a/samples/inputbox-both +++ b/samples/inputbox-both @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: inputbox-both,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox-both,v 1.7 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear \ --extra-button \ --help-button "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox-extra b/samples/inputbox-extra index 9f2277c940a1..a297392bb505 100755 --- a/samples/inputbox-extra +++ b/samples/inputbox-extra @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: inputbox-extra,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox-extra,v 1.7 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear \ --extra-button "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox-help b/samples/inputbox-help index 0dfe7c81462f..9aa0517a969c 100755 --- a/samples/inputbox-help +++ b/samples/inputbox-help @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: inputbox-help,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox-help,v 1.7 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear \ --help-button "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox1 b/samples/inputbox1 index 487aa8c5edf9..44f408028b30 100755 --- a/samples/inputbox1 +++ b/samples/inputbox1 @@ -1,23 +1,23 @@ #!/bin/sh -# $Id: inputbox1,v 1.13 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox1,v 1.14 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --cr-wrap \ --title "INPUT BOX" --clear \ --inputbox "$@" \ "Hi, this is an input dialog box. You can use this to ask questions that require the user to input a string as the answer. You can input strings of length longer than the width of the input box, in that case, the input field will be automatically scrolled. You can use BACKSPACE to correct errors. Try entering your name below:" 0 0 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox2 b/samples/inputbox2 index f7b4b5f7df60..baa6605e33dd 100755 --- a/samples/inputbox2 +++ b/samples/inputbox2 @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: inputbox2,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox2,v 1.10 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox3 b/samples/inputbox3 index d343e0a64cc3..2f6623b61c03 100755 --- a/samples/inputbox3 +++ b/samples/inputbox3 @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: inputbox3,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox3,v 1.8 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --nocancel \ --title "INPUT BOX" --clear "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n\ this to ask questions that require the user \n\ to input a string as the answer. You can \n\ input strings of length longer than the \n\ width of the input box, in that case, the \n\ input field will be automatically scrolled. \n\ You can use BACKSPACE to correct errors. \n\n\ Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox4 b/samples/inputbox4 index 416bf86a8603..76bd8ae77f8f 100755 --- a/samples/inputbox4 +++ b/samples/inputbox4 @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: inputbox4,v 1.7 2010/01/13 10:28:12 tom Exp $ +# $Id: inputbox4,v 1.9 2020/11/26 00:09:12 tom Exp $ # An example which does not use temporary files, as suggested by Cary Evans: . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "INPUT BOX" --clear "$@" \ +returntext=`$DIALOG --title "INPUT BOX" --clear "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2>&1 1>&3` -retval=$? +returncode=$? exec 3>&- . ./report-string diff --git a/samples/inputbox5 b/samples/inputbox5 index ad7262341692..2c87f6944165 100755 --- a/samples/inputbox5 +++ b/samples/inputbox5 @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: inputbox5,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox5,v 1.8 2020/11/26 00:03:58 tom Exp $ # use --output-fd to write to a different output than stderr . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear --output-fd 4 "$@" \ --inputbox "Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 4> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox6-8bit b/samples/inputbox6-8bit index b7692e8826aa..15e084ae3f9c 100755 --- a/samples/inputbox6-8bit +++ b/samples/inputbox6-8bit @@ -1,17 +1,17 @@ #!/bin/sh -# $Id: inputbox6-8bit,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox6-8bit,v 1.8 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./testdata-8bit $DIALOG \ ---title `printf "$SAMPLE"` "$@" \ ---inputbox `printf "$SAMPLE"` \ -10 40 `printf "$SAMPLE"` 2>$tempfile +--title "`printf '%s' "$SAMPLE"`" "$@" \ +--inputbox "`printf '%s' "$SAMPLE"`" \ +10 40 "`printf '%s' "$SAMPLE"`" 2>$tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox6-utf8 b/samples/inputbox6-utf8 index 056757ed77e9..b2ccd34766f2 100755 --- a/samples/inputbox6-utf8 +++ b/samples/inputbox6-utf8 @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: inputbox6-utf8,v 1.9 2013/09/24 00:06:02 tom Exp $ +# $Id: inputbox6-utf8,v 1.10 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./setup-utf8 TITLE="ã‚ã„ã†ãˆãŠ" $DIALOG \ --title "$TITLE" "$@" \ --inputbox "$TITLE" 10 20 "D.O.G" 2>$tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/inputbox7 b/samples/inputbox7 index e79d9cc584b2..ed608cb927f1 100755 --- a/samples/inputbox7 +++ b/samples/inputbox7 @@ -1,29 +1,29 @@ #!/bin/sh -# $Id: inputbox7,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: inputbox7,v 1.9 2020/11/26 00:09:12 tom Exp $ # An example which produces two widget outputs. . ./setup-vars MSG='Hi, this is an input dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:' # separate with a line-break (newline) SEP=' ' exec 3>&1 -RESULT=`$DIALOG --title "INPUT BOX" --clear --separate-widget "$SEP" "$@" \ +returntext=`$DIALOG --title "INPUT BOX" --clear --separate-widget "$SEP" "$@" \ --inputbox "$MSG" 16 51 \ --title "ANOTHER INPUT BOX" \ --inputbox "$MSG" 16 51 \ 2>&1 1>&3` -retval=$? +returncode=$? exec 3>&- . ./report-string diff --git a/samples/inputmenu b/samples/inputmenu index 3c808111dc13..9f6d818ac2e1 100755 --- a/samples/inputmenu +++ b/samples/inputmenu @@ -1,65 +1,65 @@ #! /bin/sh -# $Id: inputmenu,v 1.15 2012/07/06 18:11:21 tom Exp $ +# $Id: inputmenu,v 1.19 2020/11/26 00:30:23 tom Exp $ # 2002 - written by Tobias Rittweiler <tobrit@freebits.de> . ./setup-vars user="$USER" uid=`id|sed -e 's/^uid=//' -e 's/(.*//'` gid=`id|sed -e 's/^.*gid=//' -e 's/(.*//'` home="$HOME" -while [ ${returncode:-99} -ne 1 -a ${returncode:-99} -ne 250 ]; do +while [ "${returncode:-99}" -ne 1 ] && [ "${returncode:-99}" -ne 250 ]; do exec 3>&1 - value=`$DIALOG \ + returntext=`$DIALOG \ --clear --ok-label "Create" \ --backtitle "An Example for the use of --inputmenu:" "$@" \ --inputmenu "Originally I designed --inputmenu for a \ configuration purpose. Here is a possible piece of a configuration program. \ " 20 50 10 \ "Username:" "$user" \ "UID:" "$uid" \ "GID:" "$gid" \ "HOME:" "$home" \ 2>&1 1>&3 ` returncode=$? exec 3>&- case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear --backtitle "An Example for the use of --inputmenu:" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break;; $DIALOG_CANCEL) returncode=99;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear --backtitle "An Example for the use of --inputmenu:" \ --msgbox "useradd \n\ -d $home \n\ -u $uid \n\ -g $gid \n\ $user" 10 40 ;; $DIALOG_EXTRA) - value=`echo "$value" | sed -e 's/^RENAMED //'` + value=`echo "$returntext" | sed -e 's/^RENAMED //'` tag=`echo "$value" | sed -e 's/:.*//'` item=`echo "$value" | sed -e 's/^[^:]*:[ ][ ]*//'` case "$tag" in Username) user="$item" ;; UID) uid="$item" ;; GID) gid="$item" ;; HOME) home="$item" ;; esac ;; - $DIALOG_ESC) - echo "ESC pressed." + *) + . ./report-button break ;; esac done diff --git a/samples/inputmenu-stdout b/samples/inputmenu-stdout index a778226b486d..35384d34f167 100755 --- a/samples/inputmenu-stdout +++ b/samples/inputmenu-stdout @@ -1,63 +1,63 @@ #! /bin/sh -# $Id: inputmenu-stdout,v 1.13 2012/07/06 18:11:12 tom Exp $ +# $Id: inputmenu-stdout,v 1.17 2020/11/26 00:30:01 tom Exp $ # 2002 - written by Tobias Rittweiler <tobrit@freebits.de> . ./setup-vars user="$USER" uid=`id|sed -e 's/^uid=//' -e 's/(.*//'` gid=`id|sed -e 's/^.*gid=//' -e 's/(.*//'` home="$HOME" -while [ ${returncode:-99} -ne 1 -a ${returncode:-99} -ne 250 ]; do - value=`$DIALOG \ +while [ "${returncode:-99}" -ne 1 ] && [ "${returncode:-99}" -ne 250 ]; do + returntext=`$DIALOG \ --stdout --clear --ok-label "Create" \ --backtitle "An Example for the use of --inputmenu:" "$@" \ --inputmenu "Originally I designed --inputmenu for a \ configuration purpose. Here is a possible piece of a configuration program. \ " 20 50 10 \ "Username:" "$user" \ "UID:" "$uid" \ "GID:" "$gid" \ "HOME:" "$home" \ ` returncode=$? case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear --backtitle "An Example for the use of --inputmenu:" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break;; $DIALOG_CANCEL) returncode=99;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear --backtitle "An Example for the use of --inputmenu:" \ --msgbox "useradd \n\ -d $home \n\ -u $uid \n\ -g $gid \n\ $user" 10 40 ;; $DIALOG_EXTRA) - value=`echo "$value" | sed -e 's/^RENAMED //'` + value=`echo "$returntext" | sed -e 's/^RENAMED //'` tag=`echo "$value" | sed -e 's/:.*//'` item=`echo "$value" | sed -e 's/^[^:]*:[ ][ ]*//'` case "$tag" in Username) user="$item" ;; UID) uid="$item" ;; GID) gid="$item" ;; HOME) home="$item" ;; esac ;; - $DIALOG_ESC) - echo "ESC pressed." + *) + . ./report-button break ;; esac done diff --git a/samples/inputmenu1 b/samples/inputmenu1 index 905c29226191..1d044c80bed6 100755 --- a/samples/inputmenu1 +++ b/samples/inputmenu1 @@ -1,85 +1,85 @@ #! /bin/sh -# $Id: inputmenu1,v 1.9 2012/07/01 00:59:54 tom Exp $ +# $Id: inputmenu1,v 1.12 2020/11/26 00:29:41 tom Exp $ # # "inputmenu" rewritten into Bourne shell. . ./setup-vars backtitle="An Example for the use of --inputmenu:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --clear --ok-label "Create" \ +returntext=`$DIALOG --clear --ok-label "Create" \ --backtitle "$backtitle" "$@" \ --inputmenu "Originally I designed --inputmenu for a \ configuration purpose. Here is a possible piece of a configuration program." \ 20 50 10 \ "Username:" "$user" \ "UID:" "$uid" \ "GID:" "$gid" \ "HOME:" "$home" \ 2>&1 1>&3` returncode=$? exec 3>&- case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --msgbox "useradd \n\ -d $home \n\ -u $uid \n\ -g $gid \n\ $user" 10 40 ;; $DIALOG_EXTRA) - tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*//'` - item=`echo "$value" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` + tag=`echo "$returntext" |sed -e 's/^RENAMED //' -e 's/:.*//'` + item=`echo "$returntext" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` case "$tag" in Username) user="$item" ;; UID) uid="$item" ;; GID) gid="$item" ;; HOME) home="$item" ;; esac ;; - $DIALOG_ESC) - echo "ESC pressed." + *) + . ./report-button break ;; esac done diff --git a/samples/inputmenu2 b/samples/inputmenu2 index ecef6742cbaa..1cb519d1c6c3 100755 --- a/samples/inputmenu2 +++ b/samples/inputmenu2 @@ -1,97 +1,97 @@ #! /bin/sh -# $Id: inputmenu2,v 1.9 2012/07/01 01:00:34 tom Exp $ +# $Id: inputmenu2,v 1.12 2020/11/26 00:29:26 tom Exp $ # # "inputmenu1" with defaultitem, help-button. . ./setup-vars backtitle="An Example for the use of --inputmenu:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 defaultitem="Username:" while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --clear --ok-label "Create" \ +returntext=`$DIALOG --clear --ok-label "Create" \ --backtitle "$backtitle" \ --help-button \ --help-label "Script" \ --default-item "$defaultitem" "$@" \ --inputmenu "Originally I designed --inputmenu for a \ configuration purpose. Here is a possible piece of a configuration program." \ 20 60 10 \ "Username:" "$user" \ "UID:" "$uid" \ "GID:" "$gid" \ "HOME:" "$home" \ 2>&1 1>&3` returncode=$? exec 3>&- case $returncode in $DIALOG_HELP) "$DIALOG" \ --textbox "$0" 0 0 ;; $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --msgbox "useradd \n\ -d $home \n\ -u $uid \n\ -g $gid \n\ $user" 10 40 ;; $DIALOG_EXTRA) - tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*/:/'` - item=`echo "$value" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` + tag=`echo "$returntext" |sed -e 's/^RENAMED //' -e 's/:.*/:/'` + item=`echo "$returntext" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` case "$tag" in Username:) user="$item" ;; UID:) uid="$item" ;; GID:) gid="$item" ;; HOME:) home="$item" ;; *) tag= ;; esac test -n "$tag" && defaultitem="$tag" ;; - $DIALOG_ESC) - echo "ESC pressed." + *) + . ./report-button break ;; esac done diff --git a/samples/inputmenu3 b/samples/inputmenu3 index 4b9d5229e1d2..58a3079a162c 100755 --- a/samples/inputmenu3 +++ b/samples/inputmenu3 @@ -1,106 +1,106 @@ #! /bin/sh -# $Id: inputmenu3,v 1.11 2012/07/01 01:00:34 tom Exp $ +# $Id: inputmenu3,v 1.14 2020/11/26 00:28:52 tom Exp $ # # "inputmenu1" with defaultitem, help-button and item-help. . ./setup-vars backtitle="An Example for the use of --inputmenu:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 defaultitem="Username:" while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --clear --ok-label "Create" \ +returntext=`$DIALOG --clear --ok-label "Create" \ --backtitle "$backtitle" \ --help-button \ --help-label "Script" \ --default-item "$defaultitem" \ --item-help "$@" \ --inputmenu "Originally I designed --inputmenu for a \ configuration purpose. Here is a possible piece of a configuration program." \ 20 60 10 \ "Username:" "$user" "User login-name" \ "UID:" "$uid" "User-ID (number)" \ "GID:" "$gid" "Group-ID (number)" \ "HOME:" "$home" "User's home-directory" \ 2>&1 1>&3` returncode=$? exec 3>&- case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) - case $value in + case $returntext in HELP*) "$DIALOG" \ --textbox "$0" 0 0 ;; *) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --msgbox "useradd \n\ -d $home \n\ -u $uid \n\ -g $gid \n\ $user" 10 40 ;; esac ;; $DIALOG_HELP) "$DIALOG" \ --textbox "$0" 0 0 ;; $DIALOG_EXTRA) - tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*/:/'` - item=`echo "$value" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` + tag=`echo "$returntext" |sed -e 's/^RENAMED //' -e 's/:.*/:/'` + item=`echo "$returntext" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` case "$tag" in Username:) user="$item" ;; UID:) uid="$item" ;; GID:) gid="$item" ;; HOME:) home="$item" ;; *) tag= ;; esac test -n "$tag" && defaultitem="$tag" ;; - $DIALOG_ESC) - echo "ESC pressed." + *) + . ./report-button break ;; esac done diff --git a/samples/inputmenu4 b/samples/inputmenu4 index 6688c9ccfc0d..876e7f647fdf 100755 --- a/samples/inputmenu4 +++ b/samples/inputmenu4 @@ -1,86 +1,86 @@ #! /bin/sh -# $Id: inputmenu4,v 1.9 2012/07/01 01:00:34 tom Exp $ +# $Id: inputmenu4,v 1.12 2020/11/26 00:28:24 tom Exp $ # # "inputmenu1" with a different label for the extra-button . ./setup-vars backtitle="An Example for the use of --inputmenu:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --clear --ok-label "Create" \ +returntext=`$DIALOG --clear --ok-label "Create" \ --extra-label "Edit" \ --backtitle "$backtitle" "$@" \ --inputmenu "Originally I designed --inputmenu for a \ configuration purpose. Here is a possible piece of a configuration program." \ 20 50 10 \ "Username:" "$user" \ "UID:" "$uid" \ "GID:" "$gid" \ "HOME:" "$home" \ 2>&1 1>&3` returncode=$? exec 3>&- case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --msgbox "useradd \n\ -d $home \n\ -u $uid \n\ -g $gid \n\ $user" 10 40 ;; $DIALOG_EXTRA) - tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*//'` - item=`echo "$value" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` + tag=`echo "$returntext" |sed -e 's/^RENAMED //' -e 's/:.*//'` + item=`echo "$returntext" |sed -e 's/^[^:]*:[ ]*//' -e 's/[ ]*$//'` case "$tag" in Username) user="$item" ;; UID) uid="$item" ;; GID) gid="$item" ;; HOME) home="$item" ;; esac ;; - $DIALOG_ESC) - echo "ESC pressed." + *) + . ./report-button break ;; esac done diff --git a/samples/install/setup.c b/samples/install/setup.c index ae569813e865..517255ab8e2a 100644 --- a/samples/install/setup.c +++ b/samples/install/setup.c @@ -1,371 +1,371 @@ /* Copyright (C) 1995 Florian La Roche */ /* Who wants to help coding? I don't like doing this... */ /* You can just start setup as normal user and see how far it is coded - right now. This will do a fake installation and won't actually chnage + right now. This will do a fake installation and won't actually change any data on your computer. */ /* TODO: write a good package selection code change functions to return better error code */ /* Show an extra text-box with the contents of all external commands, before they are executed. So you can abort the installation, if any wrong commands are to be executed. (So don't format wrong partition.) */ #define VERBOSE 1 /* If defined, don't actually execute any comands and don't actually modify any files. So you can test any possible installation without doing any damage to your computer. The file FDISK.TEST is used instead of real "fdisk -l" output, so that it can be started as normal user. */ #define DEBUG_THIS 1 #include <dialog.h> /* max length of a partition name like e.g. '/dev/hda1' */ #define MAX_DEV_NAME 25 /* max number of possible Linux/Swap/MsDos partitions */ #define MAX_PARTS 20 char *progname = NULL; static void error(const char *s) { fprintf(stderr, "%s: %s\n", progname, s); exit(1); } static int my_system(const char *s,...) { int ret, i; va_list ap; char sh[200]; va_start(ap, s); vsprintf(sh, s, ap); va_end(ap); #ifdef VERBOSE i = dialog_msgbox("I will run the following command:", sh, 10, 65, 1); dialog_clear(); #ifdef DEBUG_THIS return 0; #endif #endif ret = system(sh); if (!(ret >> 8)) return 0; i = dialog_msgbox("Error-Exit on the following command:", sh, 12, 73, 1); dialog_clear(); return 1; } /* We support to install from DOS/Linux-partitions. */ enum partition_type { MsDos, Linux, Swap }; struct partition { enum partition_type type; char name[MAX_DEV_NAME]; int blocks; int flag; } partitions[MAX_PARTS]; int num_partition = 0; int num_linux = 0; int num_swap = 0; int num_msdos = 0; static int get_line(char *line, int size, FILE * f) { char *ptr = line; int c; if (feof(f)) return -1; while (size-- && ((c = getc(f)) != EOF) && (c != '\n')) *ptr++ = c; *ptr++ = '\0'; return (int) (ptr - line); } static void read_partitions(void) { FILE *f; char line[200]; int length; #ifndef DEBUG_THIS int ret = system("fdisk -l 2>/dev/null 1>/tmp/fdisk.output"); if ((ret >> 8) != 0) { error("fdisk didn't run"); } if ((f = fopen("/tmp/fdisk.output", "r")) == NULL) #else if ((f = fopen("FDISK.TEST", "r")) == NULL) #endif error("cannot read fdisk output"); while (num_partition <= MAX_PARTS && (length = get_line(line, 200, f)) >= 0) { if (strncmp(line, "/dev/", 5) == 0) { int n = 0; char *s = line + 5; char *t = partitions[num_partition].name; strcpy(t, "/dev/"); t += 5; while (n < MAX_DEV_NAME && *s != '\0' && !isspace((unsigned char) *s)) { *t++ = *s++; n++; } *t = '\0'; /* Read the size of the partition. */ t = line + 37; while (isspace((unsigned char) *t)) t++; partitions[num_partition].blocks = atoi(t); if (strstr(line, "Linux native")) { partitions[num_partition].type = Linux; num_partition++; num_linux++; } else if (strstr(line, "Linux swap")) { partitions[num_partition].type = Swap; num_partition++; num_swap++; } else if (strstr(line, "DOS")) { partitions[num_partition].type = MsDos; num_partition++; num_msdos++; } } } fclose(f); #ifndef DEBUG_THIS unlink("/tmp/fdisk.output"); #endif } static int select_partition(const char *title, const char *prompt, int y, int x) { int i, num, ret; char info[MAX_PARTS][40]; char *items[MAX_PARTS * 2]; int num_pa[MAX_PARTS]; num = 0; for (i = 0; i < num_partition; i++) { if (partitions[i].type == Linux) { items[num * 2] = partitions[i].name; sprintf(info[num], "Linux partition with %d blocks", partitions[i].blocks); items[num * 2 + 1] = info[num]; num_pa[num] = i; num++; } } ret = dialog_menu(title, prompt, y + num, x, num, num, items); dialog_clear(); if (ret >= 0) /* item selected */ ret = num_pa[ret]; return ret; } static int select_install_partition(void) { return select_partition("Select Install Partition", "\\nWhere do you want to install Linux?\\n", 9, 60); } static int select_source_partition(void) { return select_partition("Select Source Partition", "\\nOn which partition is the source?\\n", 9, 60); } const char *null = ">/dev/null 2>/dev/null"; const char *install_partition = NULL; static void extract_packages(const char *source_path) { #ifndef DEBUG_THIS FILE *f; #endif if (my_system("mkdir -p /install/var/installed/packages %s", null)) return; if (my_system("cd /install; for i in /source%s/*.tgz; do " "tar xzplvvkf $i >> var/installed/packages/base " "2>>var/installed/packages/ERROR; done", source_path)) return; #ifndef DEBUG_THIS if ((f = fopen("/install/etc/fstab", "w")) == NULL) { /* i = */ dialog_msgbox("Error", "Cannot write /etc/fstab", 12, 40, 1); return; } fprintf(f, "%s / ext2 defaults 1 1\n", install_partition); fprintf(f, "none /proc proc defaults 0 2\n"); /* XXX write swap-partitions */ fclose(f); #endif } static void install_premounted(void) { extract_packages(""); } static void install_harddisk(void) { const char *name; int part, ret; if ((part = select_source_partition()) <= -1) return; name = partitions[part].name; if (my_system("mount -t ext2 %s /source %s", name, null)) return; ret = dialog_inputbox("Path in partition", "Please enter the directory in which the " "source files are.", 13, 50, "", FALSE); dialog_clear(); if (ret != 0) return; /* XXX strdup */ extract_packages(strdup(dialog_input_result)); if (my_system("umount /source %s", null)) return; } static void install_nfs(void) { if (my_system("ifconfig eth0 134.96.81.36 netmask 255.255.255.224 " "broadcast 134.96.81.63 %s", null)) return; if (my_system("route add -net 134.96.81.32 %s", null)) return; if (my_system("mount -t nfs 134.96.81.38:" "/local/ftp/pub/linux/ELF.binary/tar /source %s", null)) return; extract_packages("/base"); if (my_system("umount /source %s", null)) return; if (my_system("ifconfig eth0 down %s", null)) return; } static void main_install(void) { int part, ret; const char *name; char *items1[] = { "1", "Harddisk Install", "2", "Network Install(NFS)", "3", "Premounted on /source" }; if (num_linux == 0) { /* XXX */ return; } if ((part = select_install_partition()) <= -1) return; install_partition = name = partitions[part].name; if (my_system("mke2fs %s %s", name, null)) return; if (my_system("mount -t ext2 %s /install %s", name, null)) return; ret = dialog_menu("Choose install medium", "\\nPlease say from where you want to install.\\n", 12, 62, 3, 3, items1); dialog_clear(); switch (ret) { case 0: install_harddisk(); break; case 1: install_nfs(); break; case 2: install_premounted(); break; case -2: /* cancel */ case -1: break; /* esc */ } if (my_system("umount /install %s", null)) return; } int main(int argc, char **argv) { int stop = 0; int ret; char *items1[] = { "1", "Display a help text", "2", "Start an installation", "3", "Exit to the shell" }; progname = argv[0]; read_partitions(); if (num_linux == 0) { printf("\n\nPlease start \"fdisk\" or \"cfdisk\" and create a" "\nnative Linux-partition to install Linux on.\n\n"); exit(1); } init_dialog(); while (!stop) { ret = dialog_menu("Linux Install Utility", "\\nCopyright (C) 1995 Florian La Roche\\n" "\\nPre-Alpha version, be careful, read the doc!!!" "\\nemail: florian@jurix.jura.uni-sb.de, " "flla@stud.uni-sb.de\\n", 15, 64, 3, 3, items1); dialog_clear(); switch (ret) { case 0: ret = dialog_textbox("Help Text", "setup.help", 20, 70); dialog_clear(); break; case 1: main_install(); break; case 2: stop = 1; break; case -2: /* cancel */ case -1: stop = 1; /* esc */ } } end_dialog(); printf("\nExecute \"reboot\" to restart your computer...\n"); exit(0); } diff --git a/samples/install/setup.help b/samples/install/setup.help index 7ac8369d4e6e..614fef41ed82 100644 --- a/samples/install/setup.help +++ b/samples/install/setup.help @@ -1,49 +1,49 @@ At the moment, only installation from a harddisk is supported. All commands are shown to you on the screen before executing. This is just to make sure that nothing bad is done to your harddisk :-) You can also select to install from a premounted dir. Then the "tar/base" directory must be mounted on "/install", so that all tar-packages from the basic stuff are in "/install/*.tgz". (So you could be able to install via NFS...) Good luck..., anyone wants to help programming this tool?, Florian La Roche Contents: ========= - overview about what "setup" does. - creating a Linux-partition before starting "setup" - about lilo - how to use "setup", what keys are supported What does "setup" do on my computer? ==================================== Setup will ask you for a partition on your harddisk, where you would like to have Linux installed. You can then choose to install this distribution from your local harddisk or via network (NFS). setup will install a very basic system. At the end, you can install lilo, the Linux Loader. Rebooting your computer with this little linux system -and then runing the setup-program on it, will give +and then running the setup-program on it, will give the possibility to install more packages. Creating a Linux-partition: =========================== To install this Linux distribution, you need to create an extra partition on your harddisk for Linux. What is lilo and how should I install it? ========================================= Read the lilo-documentation for this... Florian La Roche diff --git a/samples/killall b/samples/killall index 7030fe22bf29..f8d573babdb6 100755 --- a/samples/killall +++ b/samples/killall @@ -1,16 +1,16 @@ #! /bin/sh -# $Id: killall,v 1.3 2012/06/29 09:39:19 tom Exp $ +# $Id: killall,v 1.4 2019/12/10 23:48:58 tom Exp $ # Linux has a program that does this correctly. . ./setup-vars -for prog in $* +for prog in "$@" do - pid=`ps -a |fgrep $prog |fgrep -v fgrep|sed -e 's/^[ ]*//' -e 's/ .*//' ` + pid=`ps -a |fgrep "$prog" |fgrep -v fgrep|sed -e 's/^[ ]*//' -e 's/ .*//' ` if test -n "$pid" ; then - echo killing pid=$pid, $prog - kill -$SIG_HUP $pid || \ - kill -$SIG_TERM $pid || \ - kill -$SIG_KILL $pid + echo "killing pid=$pid, $prog" + kill "-$SIG_HUP" "$pid" || \ + kill "-$SIG_TERM" "$pid" || \ + kill "-$SIG_KILL" "$pid" fi done diff --git a/samples/menubox b/samples/menubox index 0cea3bb00006..4a0118dc13f6 100755 --- a/samples/menubox +++ b/samples/menubox @@ -1,27 +1,27 @@ #!/bin/sh -# $Id: menubox,v 1.11 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox,v 1.13 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --clear --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" \ "NetBSD" "Another free Unix Clone for 386/486" \ "OS/2" "IBM OS/2" \ "WIN NT" "Microsoft Windows NT" \ - "PCDOS" "IBM PC DOS" \ - "MSDOS" "Microsoft DOS" 2> $tempfile + "PC-DOS" "IBM PC DOS" \ + "MS-DOS" "Microsoft DOS" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox-8bit b/samples/menubox-8bit index 91faa5cfea22..69b6bc712a52 100755 --- a/samples/menubox-8bit +++ b/samples/menubox-8bit @@ -1,29 +1,29 @@ #!/bin/sh -# $Id: menubox-8bit,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox-8bit,v 1.8 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./testdata-8bit $DIALOG --clear --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ - "`./rotated-data 0 $SAMPLE`" "The Great Unix Clone for 386/486" \ - "`./rotated-data 1 $SAMPLE`" "Another free Unix Clone for 386/486" \ - "`./rotated-data 2 $SAMPLE`" "IBM OS/2" \ - "`./rotated-data 3 $SAMPLE`" "Microsoft Windows NT" \ - "`./rotated-data 4 $SAMPLE`" "IBM PC DOS" \ - "`./rotated-data 5 $SAMPLE`" "Microsoft DOS" 2> $tempfile + "`./rotated-data 0 "$SAMPLE"`" "The Great Unix Clone for 386/486" \ + "`./rotated-data 1 "$SAMPLE"`" "Another free Unix Clone for 386/486" \ + "`./rotated-data 2 "$SAMPLE"`" "IBM OS/2" \ + "`./rotated-data 3 "$SAMPLE"`" "Microsoft Windows NT" \ + "`./rotated-data 4 "$SAMPLE"`" "IBM PC DOS" \ + "`./rotated-data 5 "$SAMPLE"`" "Microsoft DOS" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox-utf8 b/samples/menubox-utf8 index cd6e429c2c34..4c7f45a34b9e 100755 --- a/samples/menubox-utf8 +++ b/samples/menubox-utf8 @@ -1,29 +1,29 @@ #!/bin/sh -# $Id: menubox-utf8,v 1.10 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox-utf8,v 1.11 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile . ./setup-utf8 $DIALOG --clear --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" \ "NetBSD" "Another free Unix Clone for 386/486" \ "OS/ï¼’" "IBM OS/2" \ "WIN NT" "Microsoft Windows NT" \ "PCDOS" "IBM PC DOS" \ "MSDOS" "Microsoft DOS" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox1 b/samples/menubox1 index dc40d027e756..9df5ca3c0ec5 100755 --- a/samples/menubox1 +++ b/samples/menubox1 @@ -1,27 +1,27 @@ #!/bin/sh -# $Id: menubox1,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox1,v 1.9 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --default-item "OS/2" --clear --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" \ "NetBSD" "Another free Unix Clone for 386/486" \ "OS/2" "IBM OS/2" \ "WIN NT" "Microsoft Windows NT" \ - "PCDOS" "IBM PC DOS" \ - "MSDOS" "Microsoft DOS" 2> $tempfile + "PC-DOS" "IBM PC DOS" \ + "MS-DOS" "Microsoft DOS" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox10 b/samples/menubox10 index 86069342199c..1152223c4ccf 100755 --- a/samples/menubox10 +++ b/samples/menubox10 @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: menubox10,v 1.5 2010/01/13 10:34:12 tom Exp $ +# $Id: menubox10,v 1.7 2020/11/26 00:09:12 tom Exp $ # zero-width column . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --backtitle "Debian Configuration" \ +returntext=`$DIALOG --backtitle "Debian Configuration" \ --title "Configuring debconf" \ --default-item Dialog "$@" \ --menu "Packages that use debconf for co" 19 50 6 \ Dialog "" \ Readline "" \ Gnome "" \ Kde "" \ Editor "" \ Noninteractive "" \ 2>&1 1>&3` -retval=$? +returncode=$? exec 3>&- . ./report-string diff --git a/samples/menubox11 b/samples/menubox11 index 4f275226b4b4..9bd7960582c1 100755 --- a/samples/menubox11 +++ b/samples/menubox11 @@ -1,31 +1,31 @@ #!/bin/sh -# $Id: menubox11,v 1.2 2018/06/13 21:59:21 tom Exp $ +# $Id: menubox11,v 1.4 2020/11/26 00:09:12 tom Exp $ # zero-width column . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --backtitle "Debian Configuration" \ +returntext=`$DIALOG --backtitle "Debian Configuration" \ --title "Configuring debconf" \ --default-item Dialog "$@" \ --menu "Packages that use debconf for configuration share a common look and feel. You can select the type of user interface they use. \n\n\ The dialog frontend is a full-screen, character based interface, while the readline frontend uses a more traditional plain text interface, and both the gnome and kde frontends are modern X interfaces, fitting the respective desktops (but may be used in any X environment). The editor frontend lets you configure things using your favorite text editor. The noninteractive frontend never asks you any questions. \n\n\ Interface to use:" 0 0 6 \ Dialog "" \ Readline "" \ Gnome "" \ Kde "" \ Editor "" \ Noninteractive "" \ 2>&1 1>&3` -retval=$? +returncode=$? exec 3>&- . ./report-string diff --git a/samples/menubox12 b/samples/menubox12 index ee4b4747dd18..6723c0574425 100755 --- a/samples/menubox12 +++ b/samples/menubox12 @@ -1,43 +1,43 @@ #!/bin/sh -# $Id: menubox12,v 1.3 2012/12/23 22:28:26 tom Exp $ +# $Id: menubox12,v 1.6 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-edit case "x$DIALOGOPTS" in *--no-items*|*--noitem*) CUT="cut -d: -f1,3" ;; *) CUT="cat" ;; esac $CUT >$input <<-EOF Linux:The Great Unix Clone for 386/486 NetBSD:Another free Unix Clone for 386/486 OS/2:IBM OS/2 WIN NT:Microsoft Windows NT - PCDOS:IBM PC DOS - MSDOS:Microsoft DOS + PC-DOS:IBM PC DOS + MS-DOS:Microsoft DOS EOF -cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output +sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' <$input >$output cat $output >$input $DIALOG --clear --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ --file $input 2> $output -retval=$? +returncode=$? tempfile=$output . ./report-tempfile diff --git a/samples/menubox2 b/samples/menubox2 index d81ba792a76a..5ab68cca3d3a 100755 --- a/samples/menubox2 +++ b/samples/menubox2 @@ -1,27 +1,27 @@ #!/bin/sh -# $Id: menubox2,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox2,v 1.9 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile -$DIALOG --default-item "MSDOS" --clear --title "MENU BOX" "$@" \ +$DIALOG --default-item "MS-DOS" --clear --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" \ "NetBSD" "Another free Unix Clone for 386/486" \ - "OS/2" "IBM OS/2" \ + "OS/2" "IBM OS/2" \ "WIN NT" "Microsoft Windows NT" \ - "PCDOS" "IBM PC DOS" \ - "MSDOS" "Microsoft DOS" 2> $tempfile + "PC-DOS" "IBM PC DOS" \ + "MS-DOS" "Microsoft DOS" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox3 b/samples/menubox3 index d33b5d6fdef9..2f03505b5c2e 100755 --- a/samples/menubox3 +++ b/samples/menubox3 @@ -1,27 +1,27 @@ #!/bin/sh -# $Id: menubox3,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox3,v 1.10 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --clear --item-help --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" "Why use Linux?" \ "NetBSD" "Another free Unix Clone for 386/486" "Or NetBSD?" \ "OS/2" "IBM OS/2" "aka \"Warp\"" \ "WIN NT" "Microsoft Windows NT" "hmm" \ - "PCDOS" "IBM PC DOS" "clone of a clone" \ - "MSDOS" "Microsoft DOS" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + "PC-DOS" "IBM PC DOS" "clone of a clone" \ + "MS-DOS" "Microsoft DOS" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox4 b/samples/menubox4 index e95342de9d8e..a0b2f6bab682 100755 --- a/samples/menubox4 +++ b/samples/menubox4 @@ -1,27 +1,27 @@ #!/bin/sh -# $Id: menubox4,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox4,v 1.10 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --clear --item-help --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Why use Linux?" \ "NetBSD" "Another free Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Or NetBSD?" \ "OS/2" "IBM OS/2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "aka \"Warp\"" \ "WIN NT" "Microsoft Windows NT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "hmm" \ - "PCDOS" "IBM PC DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "clone of a clone" \ - "MSDOS" "Microsoft DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + "PC-DOS" "IBM PC DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "clone of a clone" \ + "MS-DOS" "Microsoft DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox5 b/samples/menubox5 index c89be3a0e74a..0ee6bd414d9a 100755 --- a/samples/menubox5 +++ b/samples/menubox5 @@ -1,30 +1,30 @@ #!/bin/sh -# $Id: menubox5,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox5,v 1.11 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --clear --help-button --item-help --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Why use Linux?" \ "NetBSD" "Another free Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Or NetBSD?" \ "OS/2" "IBM OS/2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "aka \"Warp\"" \ "WIN NT" "Microsoft Windows NT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "hmm" \ "WIN 2K" "Microsoft Windows 2000 xxxxxxxxxxxxxxxxxxxxxxxxxxxx" "hmm" \ "WIN XP" "Microsoft Windows XP (son of Windows 95) xxxxxxxxxx" "hmm" \ - "WIN 95" "Microsoft Windows 95 (son of MSDOS) xxxxxxxxxxxxxxx" "hmm" \ - "PCDOS" "IBM PC DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "clone of a clone" \ - "MSDOS" "Microsoft DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + "WIN 95" "Microsoft Windows 95 (son of MS-DOS) xxxxxxxxxxxxxx" "hmm" \ + "PC-DOS" "IBM PC DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "clone of a clone" \ + "MS-DOS" "Microsoft DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox6 b/samples/menubox6 index afcc90de2b08..a1b43d61bcb8 100755 --- a/samples/menubox6 +++ b/samples/menubox6 @@ -1,28 +1,28 @@ #!/bin/sh -# $Id: menubox6,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox6,v 1.10 2020/11/26 00:03:58 tom Exp $ # example showing the --colors option . ./setup-vars . ./setup-tempfile $DIALOG --clear --item-help --title "MENU BOX" --colors "$@" \ --menu "Hi, this is a \Zumenu\Zn box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the \Z4UP/DOWN\Zn arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ \Z2number\Zn keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for \Zu386/486" "Why use \ZbLinux?" \ "NetBSD" "Another free Unix Clone for \Zu386/486" "Or \ZbNetBSD?" \ "OS/2" "IBM OS/2" "aka \"Warp\"" \ "WIN NT" "Microsoft Windows NT" "hmm" \ - "PCDOS" "IBM PC \ZrDOS" "clone of a clone" \ - "MSDOS" "Microsoft \ZrDOS" "\ZbDOS\Zn: \Zb\Z3D\Znisk \Zb\Z3O\Znperating \Zb\Z3S\Znystem, originally for an IBM contract, hence using the same jargon" 2> $tempfile + "PC-DOS" "IBM PC \ZrDOS" "clone of a clone" \ + "MS-DOS" "Microsoft \ZrDOS" "\ZbDOS\Zn: \Zb\Z3D\Znisk \Zb\Z3O\Znperating \Zb\Z3S\Znystem, originally for an IBM contract, hence using the same jargon" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox7 b/samples/menubox7 index 2e85b435608f..421943bfcf80 100755 --- a/samples/menubox7 +++ b/samples/menubox7 @@ -1,29 +1,29 @@ #!/bin/sh -# $Id: menubox7,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox7,v 1.11 2020/11/26 00:03:58 tom Exp $ # example with --extra-button . ./setup-vars . ./setup-tempfile $DIALOG --clear --item-help --extra-button --extra-label "Choice" \ --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" "Why use Linux?" \ "NetBSD" "Another free Unix Clone for 386/486" "Or NetBSD?" \ "OS/2" "IBM OS/2" "aka \"Warp\"" \ "WIN NT" "Microsoft Windows NT" "hmm" \ - "PCDOS" "IBM PC DOS" "clone of a clone" \ - "MSDOS" "Microsoft DOS" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + "PC-DOS" "IBM PC DOS" "clone of a clone" \ + "MS-DOS" "Microsoft DOS" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/menubox8 b/samples/menubox8 index 85448d058418..eb90de0c8f9c 100755 --- a/samples/menubox8 +++ b/samples/menubox8 @@ -1,30 +1,30 @@ #!/bin/sh -# $Id: menubox8,v 1.7 2010/01/13 10:34:32 tom Exp $ +# $Id: menubox8,v 1.10 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --help-button \ - --default-item "MSDOS" \ +returntext=`$DIALOG --help-button \ + --default-item "MS-DOS" \ --clear \ --title "MENU BOX" "$@" \ --menu "Hi, this is a menu box. You can use this to \n\ present a list of choices for the user to \n\ choose. If there are more items than can fit \n\ on the screen, the menu will be scrolled. \n\ You can use the UP/DOWN arrow keys, the first \n\ letter of the choice as a hot key, or the \n\ number keys 1-9 to choose an option.\n\ Try it now!\n\n\ Choose the OS you like:" 20 51 4 \ "Linux" "The Great Unix Clone for 386/486" \ "NetBSD" "Another free Unix Clone for 386/486" \ "OS/2" "IBM OS/2" \ "WIN NT" "Microsoft Windows NT" \ - "PCDOS" "IBM PC DOS" \ - "MSDOS" "Microsoft DOS" \ + "PC-DOS" "IBM PC DOS" \ + "MS-DOS" "Microsoft DOS" \ 2>&1 1>&3` -retval=$? +returncode=$? exec 3>&- . ./report-string diff --git a/samples/menubox9 b/samples/menubox9 index 837393951893..5f0c8e9104ec 100755 --- a/samples/menubox9 +++ b/samples/menubox9 @@ -1,26 +1,26 @@ #!/bin/sh -# $Id: menubox9,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: menubox9,v 1.8 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --help-button \ +returntext=`$DIALOG --help-button \ --clear \ --title "Select Linux installation partition:" "$@" \ --menu \ "Please select a partition from the following list to use for your \ root (/) Linux partition." 13 70 5 \ "/dev/hda2" "Linux native 30724312K" \ "/dev/hda4" "Linux native 506047K" \ "/dev/hdb1" "Linux native 4096543K" \ "/dev/hdb2" "Linux native 2586465K" \ "---" "(add none, continue with setup)" \ "---" "(add none, continue with setup)" \ "---" "(add none, continue with setup)" \ "---" "(add none, continue with setup)" \ "---" "(add none, continue with setup)" \ 2>&1 1>&3` -retval=$? +returncode=$? exec 3>&- . ./report-string diff --git a/samples/mixedform b/samples/mixedform index 617847682ceb..ac4d625e5992 100755 --- a/samples/mixedform +++ b/samples/mixedform @@ -1,61 +1,53 @@ #! /bin/sh -# $Id: mixedform,v 1.6 2010/01/13 10:47:35 tom Exp $ +# $Id: mixedform,v 1.9 2020/11/26 00:27:07 tom Exp $ . ./setup-vars backtitle="An Example for the use of --mixedform:" returncode=0 while test $returncode != 1 && test $returncode != 250 do returncode=$? exec 3>&1 -value=`$DIALOG --title "Mixed form demonstration" --ok-label "Submit" \ +returntext=`$DIALOG --title "Mixed form demonstration" --ok-label "Submit" \ --backtitle "$backtitle" \ --insecure "$@" \ --mixedform "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username :" 1 1 "Kiran" 1 20 10 0 2 \ "Password :" 2 1 "" 2 20 8 0 1 \ "Retype Password :" 3 1 "" 3 20 8 0 1 \ "HOME :" 4 1 "Cisco" 4 20 40 0 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/mixedform2 b/samples/mixedform2 index 07f1d664617c..6a8f554c5dda 100755 --- a/samples/mixedform2 +++ b/samples/mixedform2 @@ -1,61 +1,53 @@ #! /bin/sh -# $Id: mixedform2,v 1.5 2010/01/13 10:47:35 tom Exp $ +# $Id: mixedform2,v 1.8 2020/11/26 00:26:50 tom Exp $ . ./setup-vars backtitle="An Example for the use of --mixedform:" returncode=0 while test $returncode != 1 && test $returncode != 250 do returncode=$? exec 3>&1 -value=`$DIALOG --title "Mixed form demonstration" --ok-label "Submit" \ +returntext=`$DIALOG --title "Mixed form demonstration" --ok-label "Submit" \ --backtitle "$backtitle" \ --insecure "$@" \ --mixedform "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username :" 1 1 "Kiran" 1 20 10 0 2 \ "Password :" 2 1 "pass" 2 20 8 0 3 \ "Retype Password :" 3 1 "pass" 3 20 8 0 3 \ "HOME :" 4 1 "Cisco" 4 20 40 0 2 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/msgbox b/samples/msgbox index adc204e11f73..7196e334166d 100755 --- a/samples/msgbox +++ b/samples/msgbox @@ -1,13 +1,13 @@ #!/bin/sh -# $Id: msgbox,v 1.7 2010/01/13 10:35:13 tom Exp $ +# $Id: msgbox,v 1.8 2020/11/26 00:03:58 tom Exp $ . ./setup-vars $DIALOG --title "MESSAGE BOX" --clear "$@" \ --msgbox "Hi, this is a simple message box. You can use this to \ display any message you like. The box will remain until \ you press the ENTER key." 10 41 -retval=$? +returncode=$? . ./report-button diff --git a/samples/msgbox-help b/samples/msgbox-help index 3825f6b9819f..8f46b7ca7a4a 100755 --- a/samples/msgbox-help +++ b/samples/msgbox-help @@ -1,14 +1,14 @@ #!/bin/sh -# $Id: msgbox-help,v 1.6 2010/01/13 10:53:11 tom Exp $ +# $Id: msgbox-help,v 1.7 2020/11/26 00:03:58 tom Exp $ . ./setup-vars $DIALOG --title "MESSAGE BOX" --clear \ --help-button "$@" \ --msgbox "Hi, this is a simple message box. You can use this to \ display any message you like. The box will remain until \ you press the ENTER key." 10 41 -retval=$? +returncode=$? . ./report-button diff --git a/samples/msgbox-utf8 b/samples/msgbox-utf8 index e7331502ad9b..df3af7f7b1bd 100755 --- a/samples/msgbox-utf8 +++ b/samples/msgbox-utf8 @@ -1,14 +1,14 @@ #!/bin/sh -# $Id: msgbox-utf8,v 1.1 2011/01/18 00:25:30 tom Exp $ +# $Id: msgbox-utf8,v 1.2 2020/11/26 00:03:58 tom Exp $ # from Debian #570634 . ./setup-vars . ./setup-utf8 ${DIALOG-dialog} "$@" \ --title "ทดสอบวรรณยุà¸à¸•à¹Œ" \ --msgbox "วรรณยุà¸à¸•à¹Œà¸­à¸¢à¸¹à¹ˆà¸—้ายบรรทัดได้หรือไม่" 8 23 -retval=$? +returncode=$? . ./report-button diff --git a/samples/msgbox1 b/samples/msgbox1 index b7ef8244bef9..adc811f7b10e 100755 --- a/samples/msgbox1 +++ b/samples/msgbox1 @@ -1,34 +1,34 @@ #!/bin/sh -# $Id: msgbox1,v 1.9 2010/01/13 10:26:52 tom Exp $ +# $Id: msgbox1,v 1.11 2019/12/11 01:56:43 tom Exp $ . ./setup-vars $DIALOG --title "MESSAGE BOX" --clear "$@" \ --msgbox "Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with dialogs default aspect ratio of 9." 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit $DIALOG --aspect 12 --title "MESSAGE BOX aspect=12" --clear "$@" \ --msgbox "Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 12." 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit $DIALOG --aspect 6 --title "MESSAGE BOX aspect=6" --clear "$@" \ --msgbox "Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 6." 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit $DIALOG --aspect 6 --cr-wrap --title "MESSAGE BOX aspect=6 with --cr-wrap" \ - --clear --msgbox " "$@" \ + --clear "$@" --msgbox " \ Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 6, and using --cr-wrap.\n" 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit diff --git a/samples/msgbox2 b/samples/msgbox2 index b39f65a634d3..f3bbb0410aa1 100755 --- a/samples/msgbox2 +++ b/samples/msgbox2 @@ -1,34 +1,34 @@ #!/bin/sh -# $Id: msgbox2,v 1.7 2010/01/13 10:26:52 tom Exp $ +# $Id: msgbox2,v 1.9 2019/12/11 01:56:17 tom Exp $ . ./setup-vars $DIALOG --title "MESSAGE BOX" --trim "$@" \ --msgbox "Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with dialogs default aspect ratio of 9." 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit $DIALOG --aspect 12 --title "MESSAGE BOX aspect=12" --trim "$@" \ --msgbox "Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 12." 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit $DIALOG --aspect 6 --title "MESSAGE BOX aspect=6" --trim "$@" \ --msgbox "Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 6." 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit $DIALOG --aspect 6 --cr-wrap --title "MESSAGE BOX aspect=6 with --cr-wrap" \ - --trim --msgbox " "$@" \ + --trim "$@" --msgbox " \ Hi, this is a simple message box. You can use this to display any message you like. The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 6, and using --cr-wrap.\n" 0 0 -test $? = $DIALOG_ESC && exit +test $? = "$DIALOG_ESC" && exit diff --git a/samples/msgbox3 b/samples/msgbox3 index d1ea1080f885..0157b1e14568 100755 --- a/samples/msgbox3 +++ b/samples/msgbox3 @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: msgbox3,v 1.7 2010/01/13 10:26:52 tom Exp $ +# $Id: msgbox3,v 1.8 2019/12/11 00:03:44 tom Exp $ . ./setup-vars width=35 while test $width != 61 do $DIALOG --title "MESSAGE BOX (width $width)" --clear --no-collapse "$@" \ --msgbox "\ H H EEEEE L L OOO H H E L L O O HHHHH EEEEE L L O O H H E L L O O H H EEEEE LLLLL LLLLL OOO Hi, this is a simple message box. You can use this to \ display any message you like. The box will remain until \ you press the ENTER key." 15 $width -test $? = $DIALOG_ESC && break +test $? = "$DIALOG_ESC" && break width=`expr $width + 1` done diff --git a/samples/msgbox4-8bit b/samples/msgbox4-8bit index 216ac8eccb50..ba703c6134b6 100755 --- a/samples/msgbox4-8bit +++ b/samples/msgbox4-8bit @@ -1,31 +1,33 @@ #!/bin/sh -# $Id: msgbox4-8bit,v 1.4 2010/01/13 10:20:03 tom Exp $ +# $Id: msgbox4-8bit,v 1.8 2020/11/26 00:26:09 tom Exp $ . ./setup-vars . ./testdata-8bit width=30 while test $width != 61 do $DIALOG --title "MESSAGE BOX (width $width)" --no-collapse --colors "$@" \ --msgbox "\ This sample uses characters which are non-printing in POSIX locale. -\Z1`./rotated-data 0 $SAMPLE` \Z2`./rotated-data 1 $SAMPLE` \Z3`./rotated-data 2 $SAMPLE` \Z4`./rotated-data 3 $SAMPLE`\Zn +\Z1`./rotated-data 0 "$SAMPLE"` \Z2`./rotated-data 1 "$SAMPLE"` \Z3`./rotated-data 2 "$SAMPLE"` \Z4`./rotated-data 3 "$SAMPLE"`\Zn Hi, this is a simple message box. You can use this to \ display any message you like. The box will remain until \ you press the ENTER key." 22 $width -retval=$? - -case $retval in - $DIALOG_CANCEL) - echo "Cancel pressed.";exit;; - $DIALOG_ESC) - echo "ESC pressed.";exit;; +returncode=$? + +case $returncode in + $DIALOG_OK) + ;; + *) + . ./report-button; + exit + ;; esac width=`expr $width + 1` done diff --git a/samples/msgbox4-utf8 b/samples/msgbox4-utf8 index acbbebe5eabb..00ac0698ff8b 100755 --- a/samples/msgbox4-utf8 +++ b/samples/msgbox4-utf8 @@ -1,37 +1,39 @@ #!/bin/sh -# $Id: msgbox4-utf8,v 1.10 2010/01/13 10:20:03 tom Exp $ +# $Id: msgbox4-utf8,v 1.13 2020/11/26 00:25:37 tom Exp $ . ./setup-vars . ./setup-utf8 width=30 while test $width != 61 do $DIALOG --title "MESSAGE BOX (width $width)" --no-collapse "$@" \ --msgbox "\ This sample is written in UTF-8. There are several checking points: (1) whether the fullwidth characters are displayed well or not, (2) whether the width of characters are evaluated properly, and (3) whether the character at line-folding is lost or not. ã‚ã„ã†ãˆãŠã‹ããã‘ã“ã•ã—ã™ã›ããŸã¡ã¤ã¦ã¨ãªã«ã¬ã­ã® 123456789ï¼ï¼‘23456789ï¼ï¼‘2345 ABCDEFGHIJKLMNOPQRSTUVWXY Hi, this is a simple message box. You can use this to \ display any message you like. The box will remain until \ you press the ENTER key." 22 $width -retval=$? - -case $retval in - $DIALOG_CANCEL) - echo "Cancel pressed.";exit;; - $DIALOG_ESC) - echo "ESC pressed.";exit;; +returncode=$? + +case $returncode in + $DIALOG_OK) + ;; + *) + . ./report-button; + exit + ;; esac width=`expr $width + 1` done diff --git a/samples/msgbox5 b/samples/msgbox5 index f5d942725d5c..e91dbe87f9c3 100755 --- a/samples/msgbox5 +++ b/samples/msgbox5 @@ -1,23 +1,23 @@ #!/bin/sh -# $Id: msgbox5,v 1.5 2010/01/13 10:26:52 tom Exp $ +# $Id: msgbox5,v 1.6 2019/12/11 00:03:34 tom Exp $ # this differs from msgbox3 by making a window small enough to force scrolling. . ./setup-vars width=35 while test $width != 61 do $DIALOG --title "MESSAGE BOX (width $width)" --clear --no-collapse "$@" \ --msgbox "\ H H EEEEE L L OOO H H E L L O O HHHHH EEEEE L L O O H H E L L O O H H EEEEE LLLLL LLLLL OOO Hi, this is a simple message box. You can use this to \ display any message you like. The box will remain until \ you press the ENTER key." 10 $width -test $? = $DIALOG_ESC && break +test $? = "$DIALOG_ESC" && break width=`expr $width + 1` done diff --git a/samples/msgbox6 b/samples/msgbox6 index 1d30f021897d..e2f22cb7d731 100755 --- a/samples/msgbox6 +++ b/samples/msgbox6 @@ -1,17 +1,17 @@ #!/bin/sh -# $Id: msgbox6,v 1.5 2010/01/13 10:26:52 tom Exp $ +# $Id: msgbox6,v 1.6 2019/12/11 00:03:24 tom Exp $ # this differs from msgbox3 by making a window small enough to force scrolling. . ./setup-vars width=35 while test $width != 61 do $DIALOG --title "MESSAGE BOX (width $width)" --clear "$@" \ --msgbox "\ a b c d e f g h j i j k l m n o p q r s t u v w x y z A B C D E F G H J I J K L M N O P Q R S T U V W X Y Z " 10 $width -test $? = $DIALOG_ESC && break +test $? = "$DIALOG_ESC" && break width=`expr $width + 1` done diff --git a/samples/msgbox6a b/samples/msgbox6a index e84edbf5f759..cbbfb6034ccf 100755 --- a/samples/msgbox6a +++ b/samples/msgbox6a @@ -1,17 +1,17 @@ #!/bin/sh -# $Id: msgbox6a,v 1.5 2010/01/13 10:26:52 tom Exp $ +# $Id: msgbox6a,v 1.6 2019/12/11 00:03:14 tom Exp $ # this differs from msgbox3 by making a window small enough to force scrolling. . ./setup-vars width=35 while test $width != 61 do $DIALOG --title "MESSAGE BOX (width $width)" --clear "$@" \ --msgbox "\ .a .b .c .d .e .f .g .h .j .i .j .k .l .m .n .o .p .q .r .s .t .u .v .w .x .y .z .A .B .C .D .E .F .G .H .J .I .J .K .L .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z " 10 $width -test $? = $DIALOG_ESC && break +test $? = "$DIALOG_ESC" && break width=`expr $width + 1` done diff --git a/samples/password b/samples/password index 4517043ac288..57b73bc04683 100755 --- a/samples/password +++ b/samples/password @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: password,v 1.7 2010/01/13 10:20:03 tom Exp $ +# $Id: password,v 1.8 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear "$@" \ --passwordbox "Hi, this is an password dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/password1 b/samples/password1 index adeabc09b1fe..c173e82384dc 100755 --- a/samples/password1 +++ b/samples/password1 @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: password1,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: password1,v 1.7 2020/11/26 00:03:58 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear \ --insecure "$@" \ --passwordbox "Hi, this is an password dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/password2 b/samples/password2 index 91a7e455fb3e..07a8c00afa2a 100755 --- a/samples/password2 +++ b/samples/password2 @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: password2,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: password2,v 1.7 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "INPUT BOX" --clear \ --insecure "$@" \ --passwordbox "Hi, this is an password dialog box. You can use \n this to ask questions that require the user \n to input a string as the answer. You can \n input strings of length longer than the \n width of the input box, in that case, the \n input field will be automatically scrolled. \n You can use BACKSPACE to correct errors. \n\n Try entering your name below:" 16 51 stupid 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/passwordform1 b/samples/passwordform1 index 7c3c1f03928a..07422e139d84 100755 --- a/samples/passwordform1 +++ b/samples/passwordform1 @@ -1,69 +1,61 @@ #! /bin/sh -# $Id: passwordform1,v 1.5 2010/01/13 10:47:35 tom Exp $ +# $Id: passwordform1,v 1.8 2020/11/26 00:23:09 tom Exp $ . ./setup-vars backtitle="An Example for the use of --form:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="$USER" home="$HOME" returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --backtitle "$backtitle" \ --insecure "$@" \ --passwordform "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/passwordform1-utf8 b/samples/passwordform1-utf8 index 3dda34c0e62e..b1cfb59de083 100755 --- a/samples/passwordform1-utf8 +++ b/samples/passwordform1-utf8 @@ -1,71 +1,63 @@ #! /bin/sh -# $Id: passwordform1-utf8,v 1.7 2010/01/13 10:47:35 tom Exp $ +# $Id: passwordform1-utf8,v 1.10 2020/11/26 00:22:47 tom Exp $ . ./setup-vars . ./setup-utf8 backtitle="An Example for the use of --passwordform:" ids=`id|sed -e 's/([^)]*)//g'` uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` user="DOG" home=/usr/home/$user returncode=0 while test $returncode != 1 && test $returncode != 250 do exec 3>&1 -value=`$DIALOG --ok-label "Submit" \ +returntext=`$DIALOG --ok-label "Submit" \ --backtitle "$backtitle" \ --insecure "$@" \ --passwordform "Here is a possible piece of a configuration program." \ 20 50 0 \ "Username:" 1 1 "$user" 1 10 10 0 \ "UID:" 2 1 "$uid" 2 10 8 0 \ "GID:" 3 1 "$gid" 3 10 8 0 \ "HOME:" 4 1 "$home" 4 10 40 0 \ 2>&1 1>&3` returncode=$? exec 3>&- -show=`echo "$value" |sed -e 's/^/ /'` +show=`echo "$returntext" |sed -e 's/^/ /'` case $returncode in $DIALOG_CANCEL) "$DIALOG" \ --clear \ --backtitle "$backtitle" \ --yesno "Really quit?" 10 30 case $? in $DIALOG_OK) break ;; $DIALOG_CANCEL) returncode=99 ;; esac ;; $DIALOG_OK) "$DIALOG" \ --clear \ --backtitle "$backtitle" --no-collapse --cr-wrap \ --msgbox "Resulting data:\n\ $show" 10 40 ;; - $DIALOG_HELP) - echo "Button 2 (Help) pressed." - exit - ;; - $DIALOG_EXTRA) - echo "Button 3 (Extra) pressed." - exit - ;; *) - echo "Return code was $returncode" + . ./report-button exit ;; esac done diff --git a/samples/pause b/samples/pause index 64e211b7f693..c524244843c4 100755 --- a/samples/pause +++ b/samples/pause @@ -1,10 +1,10 @@ #!/bin/sh -# $Id: pause,v 1.5 2010/01/14 00:27:23 tom Exp $ +# $Id: pause,v 1.6 2020/11/26 00:05:11 tom Exp $ . ./setup-vars $DIALOG --title "PAUSE" "$@" --pause "Hi, this is a pause widget" 20 70 10 -retval=$? +returncode=$? . ./report-button diff --git a/samples/pause-both b/samples/pause-both index aa729361497a..5e7564f58578 100755 --- a/samples/pause-both +++ b/samples/pause-both @@ -1,14 +1,14 @@ #!/bin/sh -# $Id: pause-both,v 1.1 2011/01/18 09:49:24 tom Exp $ +# $Id: pause-both,v 1.2 2020/11/26 00:05:11 tom Exp $ . ./setup-vars $DIALOG --title "PAUSE" \ --help-button \ --extra-button "$@" \ --pause "Hi, this is a pause widget" 20 70 10 -retval=$? -echo return $retval +returncode=$? +echo return $returncode . ./report-button diff --git a/samples/pause-extra b/samples/pause-extra index 846e10880799..a5e366d79d93 100755 --- a/samples/pause-extra +++ b/samples/pause-extra @@ -1,13 +1,13 @@ #!/bin/sh -# $Id: pause-extra,v 1.1 2011/01/18 09:49:07 tom Exp $ +# $Id: pause-extra,v 1.2 2020/11/26 00:05:11 tom Exp $ . ./setup-vars $DIALOG --title "PAUSE" \ --extra-button "$@" \ --pause "Hi, this is a pause widget" 20 70 10 -retval=$? -echo return $retval +returncode=$? +echo return $returncode . ./report-button diff --git a/samples/pause-help b/samples/pause-help index 2d3656e71963..6d45753da520 100755 --- a/samples/pause-help +++ b/samples/pause-help @@ -1,12 +1,12 @@ #!/bin/sh -# $Id: pause-help,v 1.5 2010/01/13 10:36:00 tom Exp $ +# $Id: pause-help,v 1.6 2020/11/26 00:05:11 tom Exp $ . ./setup-vars $DIALOG --title "PAUSE" \ --help-button "$@" \ --pause "Hi, this is a pause widget" 20 70 10 -retval=$? +returncode=$? . ./report-button diff --git a/samples/prgbox b/samples/prgbox index c06a6301c7a4..d830e79e878a 100755 --- a/samples/prgbox +++ b/samples/prgbox @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: prgbox,v 1.2 2012/07/02 09:46:24 tom Exp $ +# $Id: prgbox,v 1.3 2020/11/26 00:05:11 tom Exp $ . ./setup-vars $DIALOG --title "PRGBOX" "$@" --prgbox "./shortlist" 20 70 -retval=$? +returncode=$? . ./report-button diff --git a/samples/prgbox2 b/samples/prgbox2 index ba94622cd556..12239ce2ae0d 100755 --- a/samples/prgbox2 +++ b/samples/prgbox2 @@ -1,9 +1,9 @@ #!/bin/sh -# $Id: prgbox2,v 1.2 2012/07/02 09:46:24 tom Exp $ +# $Id: prgbox2,v 1.3 2020/11/26 00:05:11 tom Exp $ . ./setup-vars $DIALOG --title "PRGBOX" "$@" --prgbox "./shortlist 3" 20 70 -retval=$? +returncode=$? . ./report-button diff --git a/samples/programbox b/samples/programbox index afa29e1b3f9a..bc6421bf19e2 100755 --- a/samples/programbox +++ b/samples/programbox @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: programbox,v 1.3 2018/06/17 20:45:25 tom Exp $ +# $Id: programbox,v 1.4 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break ls -ld "$text" || break sleep 0.1 done <$tempfile ) | $DIALOG --title "PROGRAMBOX" "$@" --programbox 20 70 -retval=$? +returncode=$? . ./report-button diff --git a/samples/programbox2 b/samples/programbox2 index d55c497b64c1..fe1c826e0f05 100755 --- a/samples/programbox2 +++ b/samples/programbox2 @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: programbox2,v 1.3 2018/06/17 20:45:25 tom Exp $ +# $Id: programbox2,v 1.4 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break ls -ld "$text" || break sleep 0.1 done <$tempfile ) | $DIALOG --title "PROGRAMBOX" "$@" --programbox "ProgramBox" 20 70 -retval=$? +returncode=$? . ./report-button diff --git a/samples/programbox b/samples/programbox3 similarity index 60% copy from samples/programbox copy to samples/programbox3 index afa29e1b3f9a..1dc020c3d222 100755 --- a/samples/programbox +++ b/samples/programbox3 @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: programbox,v 1.3 2018/06/17 20:45:25 tom Exp $ +# $Id: programbox3,v 1.2 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break ls -ld "$text" || break sleep 0.1 done <$tempfile ) | -$DIALOG --title "PROGRAMBOX" "$@" --programbox 20 70 +$DIALOG --title "PROGRAMBOX" "$@" --programbox -1 -1 -retval=$? +returncode=$? . ./report-button diff --git a/samples/progress b/samples/progress index a416909cce35..e2bbe1752397 100755 --- a/samples/progress +++ b/samples/progress @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: progress,v 1.7 2018/06/17 20:45:25 tom Exp $ +# $Id: progress,v 1.8 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break ls -ld "$text" || break sleep 1 done <$tempfile ) | $DIALOG --title "PROGRESS" "$@" --progressbox 20 70 -retval=$? +returncode=$? . ./report-button diff --git a/samples/progress2 b/samples/progress2 index f4bdb3cae80b..f5d9e782bab0 100755 --- a/samples/progress2 +++ b/samples/progress2 @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: progress2,v 1.7 2018/06/17 20:45:25 tom Exp $ +# $Id: progress2,v 1.8 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break ls -ld "$text" || break sleep 1 done <$tempfile ) | $DIALOG --title "PROGRESS" "$@" --progressbox "This is a detailed description\nof the progress-box." 20 70 -retval=$? +returncode=$? . ./report-button diff --git a/samples/radiolist b/samples/radiolist index 602ad82044ac..93068d166700 100755 --- a/samples/radiolist +++ b/samples/radiolist @@ -1,28 +1,28 @@ #! /bin/sh -# $Id: radiolist,v 1.13 2010/01/13 10:20:03 tom Exp $ +# $Id: radiolist,v 1.14 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --backtitle "No Such Organization" \ --title "RADIOLIST BOX" --clear "$@" \ --radiolist "Hi, this is a radiolist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off \ "Dog" "No, that's not my dog." ON \ "Orange" "Yeah, that's juicy." off \ "Chicken" "Normally not a pet." off \ "Cat" "No, never put a dog and a cat together!" off \ "Fish" "Cats like fish." off \ "Lemon" "You know how it tastes." off 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/radiolist1 b/samples/radiolist1 index 77defa52ced0..da7ad8b56631 100755 --- a/samples/radiolist1 +++ b/samples/radiolist1 @@ -1,33 +1,33 @@ #! /bin/sh -# $Id: radiolist1,v 1.1 2010/01/17 23:05:14 tom Exp $ +# $Id: radiolist1,v 1.2 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --backtitle "No Such Organization" \ --title "RADIOLIST BOX" --clear "$@" \ --radiolist "Hi, this is a radiolist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off \ "Dog" "No, that's not my dog." ON \ "Dog2" "No2, that's not my dog." off \ "Dog3" "No3, that's not my dog." off \ "Dog4" "No4, that's not my dog." off \ "Dog5" "No5, that's not my dog." off \ "Dog6" "No6, that's not my dog." off \ "Orange" "Yeah, that's juicy." off \ "Chicken" "Normally not a pet." off \ "Cat" "No, never put a dog and a cat together!" off \ "Fish" "Cats like fish." off \ "Lemon" "You know how it tastes." off 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/radiolist10 b/samples/radiolist10 index 2953871c5f82..8e8f0d3463d9 100755 --- a/samples/radiolist10 +++ b/samples/radiolist10 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: radiolist10,v 1.6 2010/01/13 10:20:03 tom Exp $ +# $Id: radiolist10,v 1.7 2020/11/26 00:05:11 tom Exp $ # zero-width column . ./setup-vars . ./setup-tempfile $DIALOG \ --backtitle "No such organization" \ --title "RADIOLIST BOX" "$@" \ --radiolist "Hi, this is a radiolist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ Dialog "" on \ Readline "" off \ Gnome "" off \ Kde "" off \ Editor "" off \ Noninteractive "" on \ 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/radiolist2 b/samples/radiolist2 index e2965eac1eed..7ab31af59c9c 100755 --- a/samples/radiolist2 +++ b/samples/radiolist2 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: radiolist2,v 1.8 2010/01/13 10:20:03 tom Exp $ +# $Id: radiolist2,v 1.9 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --ok-label Okay \ --cancel-label 'Give Up' \ --backtitle "No Such Organization" \ --title "RADIOLIST BOX" --clear "$@" \ --radiolist "Hi, this is a radiolist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off \ "Dog" "No, that's not my dog." ON \ "Orange" "Yeah, that's juicy." off \ "Chicken" "Normally not a pet." off \ "Cat" "No, never put a dog and a cat together!" off \ "Fish" "Cats like fish." off \ "Lemon" "You know how it tastes." off 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/radiolist3 b/samples/radiolist3 index 6c695e7197ce..a1fd02e45f5b 100755 --- a/samples/radiolist3 +++ b/samples/radiolist3 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: radiolist3,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: radiolist3,v 1.10 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --item-help --ok-label Okay \ --cancel-label 'Give Up' \ --backtitle "No Such Organization" \ --title "RADIOLIST BOX" --clear "$@" \ --radiolist "Hi, this is a radiolist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off "Hint: this grows in a tree" \ "Dog" "No, that's not my dog." ON "Hint: this likes trees" \ "Orange" "Yeah, that's juicy." off "Hint: this is green when picked" \ "Chicken" "Normally not a pet." off "Hint: not often in trees" \ "Cat" "No, never put a dog and a cat together!" off "Hint: may be found in trees" \ "Fish" "Cats like fish." off "Hint: usually not close to cats" \ "Lemon" "You know how it tastes." off "Hint: like an orange" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/radiolist4 b/samples/radiolist4 index 67d920f32941..c2c47dca251b 100755 --- a/samples/radiolist4 +++ b/samples/radiolist4 @@ -1,30 +1,30 @@ #! /bin/sh -# $Id: radiolist4,v 1.9 2010/01/13 10:20:03 tom Exp $ +# $Id: radiolist4,v 1.10 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --help-button --help-label "Hints" --item-help --ok-label Okay \ --cancel-label 'Give Up' \ --backtitle "No Such Organization" \ --title "RADIOLIST BOX" --clear "$@" \ --radiolist "Hi, this is a radiolist box. You can use this to \n\ present a list of choices which can be turned on or \n\ off. If there are more items than can fit on the \n\ screen, the list will be scrolled. You can use the \n\ UP/DOWN arrow keys, the first letter of the choice as a \n\ hot key, or the number keys 1-9 to choose an option. \n\ Press SPACE to toggle an option on/off. \n\n\ Which of the following are fruits?" 20 61 5 \ "Apple" "It's an apple." off "Hint: this grows in a tree" \ "Dog" "No, that's not my dog." ON "Hint: this likes trees" \ "Orange" "Yeah, that's juicy." off "Hint: this is green when picked" \ "Chicken" "Normally not a pet." off "Hint: not often in trees" \ "Cat" "No, never put a dog and a cat together!" off "Hint: may be found in trees" \ "Fish" "Cats like fish." off "Hint: usually not close to cats" \ "Lemon" "You know how it tastes." off "Hint: like an orange" 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/rangebox b/samples/rangebox index d864026eb967..962607d26c19 100755 --- a/samples/rangebox +++ b/samples/rangebox @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: rangebox,v 1.3 2012/12/05 10:07:54 tom Exp $ +# $Id: rangebox,v 1.5 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 0 123 5 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 0 123 5 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/rangebox2 b/samples/rangebox2 index f67f02be254e..8a88dc05135a 100755 --- a/samples/rangebox2 +++ b/samples/rangebox2 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: rangebox2,v 1.1 2012/12/05 10:28:58 tom Exp $ +# $Id: rangebox2,v 1.3 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 0 6 5 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 0 6 5 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/rangebox3 b/samples/rangebox3 index 19dad64ad990..b854d9fb0993 100755 --- a/samples/rangebox3 +++ b/samples/rangebox3 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: rangebox3,v 1.1 2012/12/05 10:19:42 tom Exp $ +# $Id: rangebox3,v 1.3 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 -48 55 5 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 -48 55 5 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/rangebox4 b/samples/rangebox4 index b8b68c2c661c..0e05e9210f4b 100755 --- a/samples/rangebox4 +++ b/samples/rangebox4 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: rangebox4,v 1.1 2012/12/05 11:54:04 tom Exp $ +# $Id: rangebox4,v 1.3 2020/11/26 00:09:12 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 10 100 5 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 10 100 5 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/report-button b/samples/report-button index c6a173094573..0976c96a9d83 100644 --- a/samples/report-button +++ b/samples/report-button @@ -1,21 +1,25 @@ #!/bin/sh -# $Id: report-button,v 1.3 2012/06/29 09:29:36 tom Exp $ -# Report button-only, no $RESULT +# $Id: report-button,v 1.8 2020/11/26 00:17:40 tom Exp $ +# Report button-only, no $returntext # vile:shmode -case $retval in +case ${returncode:-0} in $DIALOG_OK) echo "OK";; $DIALOG_CANCEL) echo "Cancel pressed.";; $DIALOG_HELP) echo "Help pressed.";; $DIALOG_EXTRA) echo "Extra button pressed.";; $DIALOG_ITEM_HELP) echo "Item-help button pressed.";; + $DIALOG_TIMEOUT) + echo "Timeout expired.";; $DIALOG_ERROR) echo "ERROR!";; $DIALOG_ESC) echo "ESC pressed.";; + *) + echo "Return code was $returncode";; esac diff --git a/samples/report-edit b/samples/report-edit index 37e3eb088570..d2343b9ff52a 100644 --- a/samples/report-edit +++ b/samples/report-edit @@ -1,23 +1,27 @@ #!/bin/sh -# $Id: report-edit,v 1.4 2012/06/29 09:29:41 tom Exp $ +# $Id: report-edit,v 1.8 2020/11/26 00:18:32 tom Exp $ # Report results from editing. # vile:shmode -case $retval in +case ${returncode:-0} in $DIALOG_OK) - diff -c $input $output + diff -c "${input:-input}" "${output:-output}" echo "OK" ;; $DIALOG_CANCEL) echo "Cancel pressed";; $DIALOG_HELP) echo "Help pressed";; $DIALOG_EXTRA) echo "Extra pressed";; $DIALOG_ITEM_HELP) echo "Item-help button pressed.";; + $DIALOG_TIMEOUT) + echo "Timeout expired.";; $DIALOG_ERROR) echo "ERROR!";; $DIALOG_ESC) echo "ESC pressed.";; + *) + echo "Return code was $returncode";; esac diff --git a/samples/report-string b/samples/report-string index dc96c2fab2e2..e6ccb6433d2f 100644 --- a/samples/report-string +++ b/samples/report-string @@ -1,24 +1,28 @@ #!/bin/sh -# $Id: report-string,v 1.3 2012/06/29 09:32:17 tom Exp $ -# Report result passed in a string $RESULT +# $Id: report-string,v 1.8 2020/11/26 00:18:32 tom Exp $ +# Report result passed in a string $returntext # vile:shmode -case $retval in +case ${returncode:-0} in $DIALOG_OK) - echo "Result is $RESULT";; + echo "Result is $returntext";; $DIALOG_CANCEL) echo "Cancel pressed.";; $DIALOG_HELP) - echo "Help pressed ($RESULT).";; + echo "Help pressed ($returntext).";; $DIALOG_EXTRA) echo "Extra button pressed.";; $DIALOG_ITEM_HELP) echo "Item-help button pressed.";; + $DIALOG_TIMEOUT) + echo "Timeout expired.";; $DIALOG_ESC) - if test -n "$RESULT" ; then - echo "$RESULT" + if test -n "$returntext" ; then + echo "$returntext" else echo "ESC pressed." fi ;; + *) + echo "Return code was $returncode";; esac diff --git a/samples/report-tempfile b/samples/report-tempfile index 4c5f0994e8a6..c6f08c164523 100644 --- a/samples/report-tempfile +++ b/samples/report-tempfile @@ -1,24 +1,28 @@ #!/bin/sh -# $Id: report-tempfile,v 1.5 2013/09/02 18:03:13 tom Exp $ +# $Id: report-tempfile,v 1.9 2020/11/26 00:18:32 tom Exp $ # Report results in a temporary-file. # vile:shmode -case $retval in +case "${returncode:-0}" in $DIALOG_OK) - echo "Result: `cat $tempfile`";; + echo "Result: `cat "$tempfile"`";; $DIALOG_CANCEL) echo "Cancel pressed.";; $DIALOG_HELP) - echo "Help pressed: `cat $tempfile`";; + echo "Help pressed: `cat "$tempfile"`";; $DIALOG_EXTRA) echo "Extra button pressed.";; $DIALOG_ITEM_HELP) - echo "Item-help button pressed: `cat $tempfile`";; + echo "Item-help button pressed: `cat "$tempfile"`";; + $DIALOG_TIMEOUT) + echo "Timeout expired.";; $DIALOG_ESC) - if test -s $tempfile ; then - cat $tempfile + if test -s "$tempfile" ; then + cat "$tempfile" else echo "ESC pressed." fi ;; + *) + echo "Return code was $returncode";; esac diff --git a/samples/report-yesno b/samples/report-yesno index d22ebe4194e2..cf15458e5782 100644 --- a/samples/report-yesno +++ b/samples/report-yesno @@ -1,21 +1,25 @@ #!/bin/sh -# $Id: report-yesno,v 1.2 2012/06/29 09:32:12 tom Exp $ -# Report button-only, no $RESULT +# $Id: report-yesno,v 1.7 2020/11/26 00:18:32 tom Exp $ +# Report button-only, no $returntext # vile:shmode -case $retval in +case ${returncode:-0} in $DIALOG_OK) echo "YES";; $DIALOG_CANCEL) echo "NO";; $DIALOG_HELP) echo "Help pressed.";; $DIALOG_EXTRA) echo "Extra button pressed.";; $DIALOG_ITEM_HELP) echo "Item-help button pressed.";; + $DIALOG_TIMEOUT) + echo "Timeout expired.";; $DIALOG_ERROR) echo "ERROR!";; $DIALOG_ESC) echo "ESC pressed.";; + *) + echo "Return code was $returncode";; esac diff --git a/samples/rotated-data b/samples/rotated-data index dc407144e7e3..28e3f650f753 100755 --- a/samples/rotated-data +++ b/samples/rotated-data @@ -1,23 +1,23 @@ #!/bin/sh -# $Id: rotated-data,v 1.1 2004/12/19 16:43:47 tom Exp $ +# $Id: rotated-data,v 1.2 2019/12/10 23:59:24 tom Exp $ # Rotate the second parameter's data by the given shift count. if test $# != 0 then case $1 in [1-9]*) left=$1 - next=`expr $left + 1` + next=`expr "$left" + 1` shift 1 ;; *) left=1 next=2 ;; esac char=`echo "$@" | cut -b -${left}` data=`echo "$@" | cut -b ${next}-` - printf "%s%s\n" $data $char + printf "%s%s\n" "$data" "$char" else echo fi diff --git a/samples/run_test.sh b/samples/run_test.sh index ea9da2935293..2576d3e91f29 100755 --- a/samples/run_test.sh +++ b/samples/run_test.sh @@ -1,56 +1,56 @@ #!/bin/sh -# $Id: run_test.sh,v 1.4 2017/02/01 01:50:09 tom Exp $ +# $Id: run_test.sh,v 1.5 2019/12/10 23:54:52 tom Exp $ # vile:ts=4 sw=4 -THIS=`basename $0` +THIS=`basename "$0"` if [ -z "$DIALOG" ] then have= want=dialog for p in . .. ../bin do prog=$p/$want [ -f $prog ] || continue if [ -x $prog ] then have=$prog break fi done if [ -z "$have" ] then echo "? did not find $want" >&2 exit fi DIALOG=$have export DIALOG fi want=`basename $DIALOG` DIALOGOPTS="$DIALOGOPTS --trace $want.log" export DIALOGOPTS mylog=run_test.log cat >$mylog <<EOF ** `date` EOF for name in "$@" do [ -f "$name" ] || continue [ -x "$name" ] || continue # skip this script and known utility-scripts - case `basename $name` in + case `basename "$name"` in $THIS|dft-*|killall|listing|rotated-data|shortlist|with-*) echo "** skipping $name" >>$mylog continue ;; esac - rm -f trace $want.log $name.log + rm -f trace "$want.log" "$name.log" echo "** running $name" >>$mylog $name - [ -f $want.log ] && cp $want.log $name.log + [ -f "$want.log" ] && cp "$want.log" "$name.log" done diff --git a/samples/setup-vars b/samples/setup-vars index f0ea779c132e..6a6134b15ec7 100644 --- a/samples/setup-vars +++ b/samples/setup-vars @@ -1,23 +1,24 @@ #!/bin/sh -# $Id: setup-vars,v 1.3 2012/06/29 09:52:26 tom Exp $ +# $Id: setup-vars,v 1.5 2020/11/25 23:06:52 tom Exp $ # vile:shmode # These symbols are defined to use in the sample shell scripts to make them # more readable. But they are (intentionally) not exported. If they were # exported, they would also be visible in the dialog program (a subprocess). -: ${DIALOG=dialog} +: "${DIALOG=dialog}" -: ${DIALOG_OK=0} -: ${DIALOG_CANCEL=1} -: ${DIALOG_HELP=2} -: ${DIALOG_EXTRA=3} -: ${DIALOG_ITEM_HELP=4} -: ${DIALOG_ESC=255} +: "${DIALOG_OK=0}" +: "${DIALOG_CANCEL=1}" +: "${DIALOG_HELP=2}" +: "${DIALOG_EXTRA=3}" +: "${DIALOG_ITEM_HELP=4}" +: "${DIALOG_TIMEOUT=5}" +: "${DIALOG_ESC=255}" -: ${SIG_NONE=0} -: ${SIG_HUP=1} -: ${SIG_INT=2} -: ${SIG_QUIT=3} -: ${SIG_KILL=9} -: ${SIG_TERM=15} +: "${SIG_NONE=0}" +: "${SIG_HUP=1}" +: "${SIG_INT=2}" +: "${SIG_QUIT=3}" +: "${SIG_KILL=9}" +: "${SIG_TERM=15}" diff --git a/samples/tailbox b/samples/tailbox index 227104e2fcfb..e67c30c08156 100755 --- a/samples/tailbox +++ b/samples/tailbox @@ -1,16 +1,16 @@ #!/bin/sh -# $Id: tailbox,v 1.7 2010/01/13 10:36:18 tom Exp $ +# $Id: tailbox,v 1.8 2020/11/26 00:05:11 tom Exp $ . ./setup-vars ./killall listing ./listing >listing.out & $DIALOG --title "TAIL BOX" "$@" \ --tailbox listing.out 24 70 -retval=$? +returncode=$? . ./report-button ./killall listing diff --git a/samples/tailboxbg b/samples/tailboxbg index bcc3434d3473..dff1becf80a9 100755 --- a/samples/tailboxbg +++ b/samples/tailboxbg @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: tailboxbg,v 1.10 2012/06/29 09:48:28 tom Exp $ +# $Id: tailboxbg,v 1.11 2019/12/11 01:21:36 tom Exp $ . ./setup-vars . ./setup-tempfile ./killall listing ./listing >listing.out & $DIALOG --title "TAIL BOX" \ --no-kill "$@" \ --tailboxbg listing.out 24 70 2>$tempfile # wait a while for the background process to run sleep 10 # now kill it -kill -$SIG_QUIT `cat $tempfile` 2>&1 >/dev/null 2>/dev/null +kill "-$SIG_QUIT" "`cat "$tempfile"`" 2>&1 >/dev/null 2>/dev/null # ...and the process that is making the listing ./killall listing diff --git a/samples/tailboxbg1 b/samples/tailboxbg1 index f04567a92f6d..456e720969e5 100755 --- a/samples/tailboxbg1 +++ b/samples/tailboxbg1 @@ -1,32 +1,32 @@ #!/bin/sh -# $Id: tailboxbg1,v 1.10 2012/06/29 09:51:46 tom Exp $ +# $Id: tailboxbg1,v 1.11 2019/12/11 00:12:27 tom Exp $ . ./setup-vars . ./setup-tempfile ./killall listing ./listing >listing.out & $DIALOG --title "TAIL BOXES" \ --begin 10 10 "$@" --tailboxbg listing.out 8 58 \ --and-widget \ --begin 15 15 "$@" --tailboxbg listing.out 8 58 \ --and-widget \ --begin 3 10 "$@" --msgbox "Press OK " 5 30 \ 2>$tempfile # The --and-widget causes a tab to be emitted, but our example will only # write one number to stderr. -pid=`cat $tempfile |sed -e 's/ //g'` +pid=`sed -e 's/ //g' $tempfile` if test -n "$pid" ; then # wait a while for the background process to run sleep 10 # now kill it -kill -$SIG_QUIT $pid 2>&1 >/dev/null 2>/dev/null +kill "-$SIG_QUIT" "$pid "2>&1 >/dev/null 2>/dev/null echo "killed [$pid]" fi # ...and the process that is making the listing ./killall listing diff --git a/samples/tailboxbg2 b/samples/tailboxbg2 index 628cb0571540..b71a6c6c42fe 100755 --- a/samples/tailboxbg2 +++ b/samples/tailboxbg2 @@ -1,33 +1,33 @@ #!/bin/sh -# $Id: tailboxbg2,v 1.10 2012/06/29 09:51:11 tom Exp $ +# $Id: tailboxbg2,v 1.11 2019/12/11 00:11:51 tom Exp $ . ./setup-vars . ./setup-tempfile ./killall listing ./listing >listing.out & $DIALOG --title "TAIL BOXES" \ --no-kill \ --begin 10 10 "$@" --tailboxbg listing.out 8 58 \ --and-widget \ --begin 15 15 "$@" --tailboxbg listing.out 8 58 \ --and-widget \ --begin 3 10 "$@" --msgbox "Press OK " 5 30 \ 2>$tempfile # The --and-widget causes a tab to be emitted, but our example will only # write one number to stderr. -pid=`cat $tempfile |sed -e 's/ //g'` +pid=`sed -e 's/ //g' $tempfile` if test -n "$pid" ; then # wait a while for the background process to run sleep 10 # now kill it -kill -$SIG_QUIT $pid 2>&1 >/dev/null 2>/dev/null +kill "-$SIG_QUIT" "$pid" 2>&1 >/dev/null 2>/dev/null echo "killed [$pid]" fi # ...and the process that is making the listing ./killall listing diff --git a/samples/testdata-8bit b/samples/testdata-8bit old mode 100755 new mode 100644 diff --git a/samples/textbox b/samples/textbox index d3c7698c85ee..136fb7f51ebf 100755 --- a/samples/textbox +++ b/samples/textbox @@ -1,44 +1,44 @@ #!/bin/sh -# $Id: textbox,v 1.12 2010/01/13 10:36:35 tom Exp $ +# $Id: textbox,v 1.14 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile cat << EOF > $tempfile Hi, this is a text dialog box. It can be used to display text from a file. The file should not contain any 'tab' characters, so you should 'expand' the file first if it contains 'tab' characters. It's like a simple text file viewer, with these keys implemented: PGDN/SPACE - Move down one page PGUP/'b' - Move up one page ENTER/DOWN/'j' - Move down one line UP/'k' - Move up one line LEFT/'h' - Scroll left RIGHT/'l' - Scroll right '0' - Move to beginning of line HOME/'g' - Move to beginning of file END/'G' - Move to end of file '/' - Forward search '?' - Backward search 'n' - Repeat last search (forward) 'N' - Repeat last search (backward) The following is a sample text file: EOF TEXT=/usr/share/common-licenses/GPL test -f $TEXT || TEXT=../COPYING -cat $TEXT | expand >> $tempfile +expand < $TEXT >> $tempfile $DIALOG --clear --title "TEXT BOX" "$@" --textbox "$tempfile" 22 77 -retval=$? +returncode=$? . ./report-button diff --git a/samples/textbox-both b/samples/textbox-both index 787515312037..d84faf9e4977 100755 --- a/samples/textbox-both +++ b/samples/textbox-both @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: textbox-both,v 1.1 2011/01/18 09:59:47 tom Exp $ +# $Id: textbox-both,v 1.3 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile TEXT=/usr/share/common-licenses/GPL test -f $TEXT || TEXT=../COPYING -cat textbox.txt | expand > $tempfile -cat $TEXT | expand >> $tempfile +expand < textbox.txt > $tempfile +expand < $TEXT >> $tempfile $DIALOG --clear --title "TEXT BOX" \ --help-button \ --extra-button "$@" \ --textbox "$tempfile" 22 77 -retval=$? +returncode=$? . ./report-button diff --git a/samples/textbox-help b/samples/textbox-help index cb30253111b8..450c728c2c51 100755 --- a/samples/textbox-help +++ b/samples/textbox-help @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: textbox-help,v 1.1 2011/01/18 09:59:20 tom Exp $ +# $Id: textbox-help,v 1.3 2020/11/26 00:05:11 tom Exp $ . ./setup-vars . ./setup-tempfile TEXT=/usr/share/common-licenses/GPL test -f $TEXT || TEXT=../COPYING -cat textbox.txt | expand > $tempfile -cat $TEXT | expand >> $tempfile +expand < textbox.txt > $tempfile +expand < $TEXT >> $tempfile $DIALOG --clear --title "TEXT BOX" \ --help-button "$@" \ --textbox "$tempfile" 22 77 -retval=$? +returncode=$? . ./report-button diff --git a/samples/textbox2 b/samples/textbox2 index 7c97de8cb38a..d4149b3c6095 100755 --- a/samples/textbox2 +++ b/samples/textbox2 @@ -1,44 +1,44 @@ #!/bin/sh -# $Id: textbox2,v 1.8 2010/01/13 10:36:49 tom Exp $ +# $Id: textbox2,v 1.10 2020/11/26 00:05:52 tom Exp $ . ./setup-vars . ./setup-tempfile cat << EOF > $tempfile Hi, this is a text dialog box. It can be used to display text from a file. The file should not contain any 'tab' characters, so you should 'expand' the file first if it contains 'tab' characters. It's like a simple text file viewer, with these keys implemented: PGDN/SPACE - Move down one page PGUP/'b' - Move up one page ENTER/DOWN/'j' - Move down one line UP/'k' - Move up one line LEFT/'h' - Scroll left RIGHT/'l' - Scroll right '0' - Move to beginning of line HOME/'g' - Move to beginning of file END/'G' - Move to end of file '/' - Forward search '?' - Backward search 'n' - Repeat last search (forward) 'N' - Repeat last search (backward) The following is a sample text file: EOF TEXT=/usr/share/common-licenses/GPL test -f $TEXT || TEXT=../COPYING -cat $TEXT | expand >> $tempfile +expand < $TEXT >> $tempfile $DIALOG --clear --title "TEXT BOX" "$@" --textbox "$tempfile" 0 0 -retval=$? +returncode=$? . ./report-button diff --git a/samples/textbox3 b/samples/textbox3 index 2c076e955563..f3d6f8249849 100755 --- a/samples/textbox3 +++ b/samples/textbox3 @@ -1,20 +1,20 @@ #!/bin/sh -# $Id: textbox3,v 1.6 2010/01/13 10:37:01 tom Exp $ +# $Id: textbox3,v 1.8 2020/11/26 00:05:52 tom Exp $ . ./setup-vars . ./setup-tempfile TEXT=/usr/share/common-licenses/GPL test -f $TEXT || TEXT=../COPYING -cat textbox.txt | expand > $tempfile -cat $TEXT | expand >> $tempfile +expand < textbox.txt > $tempfile +expand < $TEXT >> $tempfile $DIALOG --clear --title "TEXT BOX" \ --extra-button "$@" \ --textbox "$tempfile" 22 77 -retval=$? +returncode=$? . ./report-button diff --git a/samples/timebox b/samples/timebox index cb6bf5c6f4f1..de5b4377a7dd 100755 --- a/samples/timebox +++ b/samples/timebox @@ -1,14 +1,14 @@ #!/bin/sh -# $Id: timebox,v 1.9 2010/01/13 10:23:10 tom Exp $ +# $Id: timebox,v 1.11 2020/11/26 00:09:31 tom Exp $ . ./setup-vars DIALOG_ERROR=254 export DIALOG_ERROR exec 3>&1 -RESULT=`$DIALOG --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 12 34 56 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 12 34 56 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/timebox-stdout b/samples/timebox-stdout index 10a00262bbd4..4ed0d9a23da7 100755 --- a/samples/timebox-stdout +++ b/samples/timebox-stdout @@ -1,10 +1,10 @@ #!/bin/sh -# $Id: timebox-stdout,v 1.5 2010/01/13 10:37:19 tom Exp $ +# $Id: timebox-stdout,v 1.7 2020/11/26 00:09:31 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --stdout --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 12 34 56` +returntext=`$DIALOG --stdout --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 12 34 56` -retval=$? +returncode=$? . ./report-string diff --git a/samples/timebox2 b/samples/timebox2 index 088acdff39b8..f734421b1cc4 100755 --- a/samples/timebox2 +++ b/samples/timebox2 @@ -1,11 +1,11 @@ #!/bin/sh -# $Id: timebox2,v 1.7 2010/01/13 10:37:35 tom Exp $ +# $Id: timebox2,v 1.9 2020/11/26 00:09:31 tom Exp $ . ./setup-vars exec 3>&1 -RESULT=`$DIALOG --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 2>&1 1>&3` -retval=$? +returntext=`$DIALOG --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 2>&1 1>&3` +returncode=$? exec 3>&- . ./report-string diff --git a/samples/timebox2-stdout b/samples/timebox2-stdout index 922921fc2e2a..71a4fa443814 100755 --- a/samples/timebox2-stdout +++ b/samples/timebox2-stdout @@ -1,10 +1,10 @@ #!/bin/sh -# $Id: timebox2-stdout,v 1.5 2010/01/13 10:37:55 tom Exp $ +# $Id: timebox2-stdout,v 1.7 2020/11/26 00:09:31 tom Exp $ . ./setup-vars -RESULT=`$DIALOG --stdout --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0` +returntext=`$DIALOG --stdout --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0` -retval=$? +returncode=$? . ./report-string diff --git a/samples/treeview b/samples/treeview index 34212184d4de..fec3cddf9f69 100755 --- a/samples/treeview +++ b/samples/treeview @@ -1,22 +1,22 @@ #!/bin/sh -# $Id: treeview,v 1.2 2012/12/04 10:53:09 tom Exp $ +# $Id: treeview,v 1.3 2020/11/26 00:05:52 tom Exp $ . ./setup-vars . ./setup-tempfile $DIALOG --title "TREE VIEW DIALOG" \ --treeview "TreeView demo" 0 0 0 \ tag1 one off 0 \ tag2 two off 1 \ tag3 three on 2 \ tag4 four off 1 \ tag5 five off 2 \ tag6 six off 3 \ tag7 seven off 3 \ tag8 eight off 4 \ tag9 nine off 1 2> $tempfile -retval=$? +returncode=$? . ./report-tempfile diff --git a/samples/treeview2 b/samples/treeview2 index b3dde4159483..ba5e948f5fa2 100755 --- a/samples/treeview2 +++ b/samples/treeview2 @@ -1,52 +1,52 @@ #!/bin/sh -# $Id: treeview2,v 1.3 2012/12/23 22:28:00 tom Exp $ +# $Id: treeview2,v 1.5 2020/11/26 00:05:52 tom Exp $ . ./setup-vars . ./setup-edit case "x$DIALOGOPTS" in *--no-items*|*--noitem*) CUT="cut -d: -f1,3,4" ;; *) CUT="cat" ;; esac $CUT >$input <<-EOF tag1:one:off:0 tag2:two:off:1 tag3:three:on:2 tag4:four:off:1 tag5:five:off:2 tag6:six:off:3 tag7:seven:off:3 tag8:eight:off:4 tag11:1one:off:0 tag12:1two:off:1 tag13:1three:on:2 tag14:1four:off:1 tag15:1five:off:2 tag16:1six:off:3 tag17:1seven:off:3 tag18:1eight:off:4 tag21:2one:off:0 tag22:2two:off:1 tag23:2three:on:2 tag24:2four:off:1 tag25:2five:off:2 tag26:2six:off:3 tag27:2seven:off:3 tag28:2eight:off:4 tag9:nine:off:1 EOF $DIALOG --title "TREE VIEW DIALOG" \ --scrollbar \ - --treeview "TreeView demo" 0 0 10 `cat $input | sed -e 's/:/ /g'` 2> $output + --treeview "TreeView demo" 0 0 10 `sed -e 's/:/ /g' "$input"` 2> $output -retval=$? +returncode=$? tempfile=$output . ./report-tempfile diff --git a/samples/treeview4 b/samples/treeview4 new file mode 100755 index 000000000000..4b1f65eef457 --- /dev/null +++ b/samples/treeview4 @@ -0,0 +1,24 @@ +#!/bin/sh +# $Id: treeview4,v 1.3 2020/11/26 00:05:52 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "TREE VIEW DIALOG" \ + --help-button \ + --item-help \ + --treeview "TreeView demo" 0 0 0 \ + tag1 one off 0 first \ + tag2 two off 1 second \ + tag3 three on 2 third \ + tag4 four off 1 fourth \ + tag5 five off 2 fifth \ + tag6 six off 3 sixth \ + tag7 seven off 3 seventh \ + tag8 eight off 4 eighth \ + tag9 nine off 1 ninth 2> $tempfile + +returncode=$? + +. ./report-tempfile diff --git a/samples/wheel b/samples/wheel index 4adef26e8e09..13e084a405fc 100755 --- a/samples/wheel +++ b/samples/wheel @@ -1,64 +1,65 @@ #!/bin/sh -# $Id: wheel,v 1.8 2012/06/29 09:59:40 tom Exp $ +# $Id: wheel,v 1.10 2019/12/11 01:43:03 tom Exp $ . ./setup-vars . ./setup-tempfile TITLE="This screen was taken from ComeOn Point Installer! v0.9 by ComeOn Linux!" $DIALOG --print-maxsize 2>$tempfile -ROWS="`cut $tempfile -f1 -d, | cut -f2 -d:`" -COLS="`cut $tempfile -f2 -d,`" +ROWS="`sed -e 's/^[^:]*:[ ]*//' -e 's/,.*//' $tempfile`" +COLS="`sed -e 's/^[^,]*,[ ]*//' $tempfile`" rm $tempfile # account for widest labels -COLS=`expr $COLS - 30` +COLS=`expr "$COLS" - 30` # Takes an integer, multiplies it for COLS, divides for 132 scalex() { - expr $1 \* $COLS / 132 + expr "$1" \* "$COLS" / 132 } scaley() { - expr $1 \* $ROWS / 60 + expr "$1" \* "$ROWS" / 60 } $DIALOG --backtitle "$TITLE" --no-shadow \ ---begin `scaley 27` `scalex 98` --infobox "pushd /var/log >/dev/null" 0 0 --and-widget \ ---begin `scaley 35` `scalex 95` --infobox "mkdir -p news -m 755" 0 0 --and-widget \ ---begin `scaley 45` `scalex 86` --infobox "chown news.news news" 0 0 --and-widget \ ---begin `scaley 48` `scalex 78` --infobox "cd /var/log/news" 0 0 --and-widget \ ---begin `scaley 51` `scalex 61` --infobox "mkdir -p OLD -m 755" 0 0 --and-widget \ ---begin `scaley 52` `scalex 47` --infobox "chown news.news OLD" 0 0 --and-widget \ ---begin `scaley 51` `scalex 40` --infobox "cd /var/spool" 0 0 --and-widget \ ---begin `scaley 48` `scalex 25` --infobox "mkdir -p news -m 775" 0 0 --and-widget \ ---begin `scaley 42` `scalex 13` --infobox "chown news.news news" 0 0 --and-widget \ ---begin `scaley 35` `scalex 4` --infobox "cd /var/spool/news" 0 0 --and-widget \ ---begin `scaley 27` `scalex 2` --infobox "CURMASK=`umask`" 0 0 --and-widget \ ---begin `scaley 19` `scalex 4` --infobox "umask 02" 0 0 --and-widget \ ---begin `scaley 11` `scalex 13` --infobox "mkdir -p out.going control junk in.coming" 0 0 --and-widget \ ---begin `scaley 5` `scalex 25` --infobox "chown news.news out.going control junk in.coming" 0 0 --and-widget \ ---begin `scaley 2` `scalex 37` --infobox "cd in.coming" 0 0 --and-widget \ ---begin `scaley 1` `scalex 46` --infobox "mkdir -p bad tmp" 0 0 --and-widget \ ---begin `scaley 2` `scalex 61` --infobox "chown news.news bad tmp" 0 0 --and-widget \ ---begin `scaley 5` `scalex 76` --infobox "umask $CURMASK" 0 0 --and-widget \ ---begin `scaley 11` `scalex 87` --infobox "ln -sf ~news /usr/local/lib/" 0 0 --and-widget \ ---begin `scaley 18` `scalex 95` --infobox "ln -sf ~news/inews /usr/bin/" 0 0 --and-widget \ ---begin `scaley 26` `scalex 97` --infobox "chmod 1777 /var/tmp" 0 0 --and-widget \ ---begin `scaley 34` `scalex 95` --infobox "cd ~news" 0 0 --and-widget \ ---begin `scaley 42` `scalex 87` --infobox "touch history history.dir history.pag errlog log" 0 0 --and-widget \ ---begin `scaley 47` `scalex 76` --infobox "chown news.news history* log errlog" 0 0 --and-widget \ +--begin "`scaley 27`" "`scalex 98`" --infobox "pushd /var/log >/dev/null" 0 0 --and-widget \ +--begin "`scaley 35`" "`scalex 95`" --infobox "mkdir -p news -m 755" 0 0 --and-widget \ +--begin "`scaley 45`" "`scalex 86`" --infobox "chown news.news news" 0 0 --and-widget \ +--begin "`scaley 48`" "`scalex 78`" --infobox "cd /var/log/news" 0 0 --and-widget \ +--begin "`scaley 51`" "`scalex 61`" --infobox "mkdir -p OLD -m 755" 0 0 --and-widget \ +--begin "`scaley 52`" "`scalex 47`" --infobox "chown news.news OLD" 0 0 --and-widget \ +--begin "`scaley 51`" "`scalex 40`" --infobox "cd /var/spool" 0 0 --and-widget \ +--begin "`scaley 48`" "`scalex 25`" --infobox "mkdir -p news -m 775" 0 0 --and-widget \ +--begin "`scaley 42`" "`scalex 13`" --infobox "chown news.news news" 0 0 --and-widget \ +--begin "`scaley 35`" "`scalex 4`" --infobox "cd /var/spool/news" 0 0 --and-widget \ +--begin "`scaley 27`" "`scalex 2`" --infobox "CURMASK=`umask`" 0 0 --and-widget \ +--begin "`scaley 19`" "`scalex 4`" --infobox "umask 02" 0 0 --and-widget \ +--begin "`scaley 11`" "`scalex 13`" --infobox "mkdir -p out.going control junk in.coming" 0 0 --and-widget \ +--begin "`scaley 5`" "`scalex 25`" --infobox "chown news.news out.going control junk in.coming" 0 0 --and-widget \ +--begin "`scaley 2`" "`scalex 37`" --infobox "cd in.coming" 0 0 --and-widget \ +--begin "`scaley 1`" "`scalex 46`" --infobox "mkdir -p bad tmp" 0 0 --and-widget \ +--begin "`scaley 2`" "`scalex 61`" --infobox "chown news.news bad tmp" 0 0 --and-widget \ +--begin "`scaley 5`" "`scalex 76`" --infobox "umask $CURMASK" 0 0 --and-widget \ +--begin "`scaley 11`" "`scalex 87`" --infobox "ln -sf ~news /usr/local/lib/" 0 0 --and-widget \ +--begin "`scaley 18`" "`scalex 95`" --infobox "ln -sf ~news/inews /usr/bin/" 0 0 --and-widget \ +--begin "`scaley 26`" "`scalex 97`" --infobox "chmod 1777 /var/tmp" 0 0 --and-widget \ +--begin "`scaley 34`" "`scalex 95`" --infobox "cd ~news" 0 0 --and-widget \ +--begin "`scaley 42`" "`scalex 87`" --infobox "touch history history.dir history.pag errlog log" 0 0 --and-widget \ +--begin "`scaley 47`" "`scalex 76`" --infobox "chown news.news history* log errlog" 0 0 --and-widget \ --infobox "Creating spooling and logging directories and files..." 0 0 --and-widget \ ---begin `scaley 51` `scalex 78` --infobox "chmod 664 history* log errlog" 0 0 --and-widget \ ---begin `scaley 52` `scalex 60` --infobox "echo \"control 0000000000 0000000001 y\" > active" 0 0 --and-widget \ ---begin `scaley 51` `scalex 42` --infobox "echo \"junk 0000000000 0000000001 y\" >> active" 0 0 --and-widget \ ---begin `scaley 48` `scalex 26` --infobox "chown news.news active" 0 0 --and-widget \ ---begin `scaley 42` `scalex 13` --infobox "echo \"control 814573260 usenet\" > active.times" 0 0 --and-widget \ ---begin `scaley 35` `scalex 4` --infobox "echo \"junk 814573260 usenet\" >> active.times" 0 0 --and-widget \ ---begin `scaley 27` `scalex 2` --infobox "chown news.news active.times" 0 0 --and-widget \ ---begin `scaley 19` `scalex 4` --infobox ":>newsgroups" 0 0 --and-widget \ ---begin `scaley 11` `scalex 12` --infobox "chown news.news newsgroups" 0 0 --and-widget \ ---sleep 2 --begin `scaley 6` `scalex 25` --infobox "popd >/dev/null" 0 0 --and-widget \ +--begin "`scaley 51`" "`scalex 78`" --infobox "chmod 664 history* log errlog" 0 0 --and-widget \ +--begin "`scaley 52`" "`scalex 60`" --infobox "echo \"control 0000000000 0000000001 y\" > active" 0 0 --and-widget \ +--begin "`scaley 51`" "`scalex 42`" --infobox "echo \"junk 0000000000 0000000001 y\" >> active" 0 0 --and-widget \ +--begin "`scaley 48`" "`scalex 26`" --infobox "chown news.news active" 0 0 --and-widget \ +--begin "`scaley 42`" "`scalex 13`" --infobox "echo \"control 814573260 usenet\" > active.times" 0 0 --and-widget \ +--begin "`scaley 35`" "`scalex 4`" --infobox "echo \"junk 814573260 usenet\" >> active.times" 0 0 --and-widget \ +--begin "`scaley 27`" "`scalex 2`" --infobox "chown news.news active.times" 0 0 --and-widget \ +--begin "`scaley 19`" "`scalex 4`" --infobox ":>newsgroups" 0 0 --and-widget \ +--begin "`scaley 11`" "`scalex 12`" --infobox "chown news.news newsgroups" 0 0 --and-widget \ +--sleep 2 \ +--begin "`scaley 6`" "`scalex 25`" --infobox "popd >/dev/null" 0 0 --and-widget \ --beep --msgbox "ComeOn Linux! :-)" 0 0 --and-widget \ --begin 2 0 --title "/var/adm/debug. This is running while that down runs also" --tailboxbg /var/adm/debug 6 80 --and-widget \ --begin 8 0 --title "/var/adm/messages. It tails the file in multitasking with /var/adm/debug" --tailbox /var/adm/messages -1 -1 diff --git a/samples/yesno b/samples/yesno index fa1ea444ce4b..917c0ae3d30c 100755 --- a/samples/yesno +++ b/samples/yesno @@ -1,21 +1,21 @@ #!/bin/sh -# $Id: yesno,v 1.9 2010/01/14 01:11:11 tom Exp $ +# $Id: yesno,v 1.10 2020/11/26 00:05:52 tom Exp $ . ./setup-vars DIALOG_ERROR=254 export DIALOG_ERROR $DIALOG --title "YES/NO BOX" --clear "$@" \ --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ questions that have an answer of either yes or no. \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 15 61 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno-both b/samples/yesno-both index a408bdba4b54..b2cb504167ef 100755 --- a/samples/yesno-both +++ b/samples/yesno-both @@ -1,24 +1,24 @@ #!/bin/sh -# $Id: yesno-both,v 1.5 2010/01/13 10:40:39 tom Exp $ +# $Id: yesno-both,v 1.6 2020/11/26 00:05:52 tom Exp $ . ./setup-vars $DIALOG --title "YES/NO/MAYBE BOX" \ --clear \ --ok-label "Next" \ --no-label "Cancel" \ --extra-label "Previous" --extra-button \ --help-button "$@" \ --yesno "Hi, this is a yes/no dialog box with its labels changed. \ You can use this to ask \ questions that have an answer of either yes or no (or maybe). \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 15 61 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno-extra b/samples/yesno-extra index ce31b8107941..d01b74a16182 100755 --- a/samples/yesno-extra +++ b/samples/yesno-extra @@ -1,23 +1,23 @@ #!/bin/sh -# $Id: yesno-extra,v 1.5 2010/01/13 10:40:39 tom Exp $ +# $Id: yesno-extra,v 1.6 2020/11/26 00:05:52 tom Exp $ . ./setup-vars $DIALOG --title "YES/NO/MAYBE BOX" \ --clear \ --ok-label "Next" \ --no-label "Cancel" \ --extra-label "Previous" --extra-button "$@" \ --yesno "Hi, this is a yes/no dialog box with its labels changed. \ You can use this to ask \ questions that have an answer of either yes or no (or maybe). \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 15 61 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno-help b/samples/yesno-help index 1333f1cbc09e..1b0a816df940 100755 --- a/samples/yesno-help +++ b/samples/yesno-help @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: yesno-help,v 1.5 2010/01/13 10:40:39 tom Exp $ +# $Id: yesno-help,v 1.6 2020/11/26 00:05:52 tom Exp $ . ./setup-vars $DIALOG --title "YES/NO BOX" --clear --help-button "$@" \ --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ questions that have an answer of either yes or no. \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 15 61 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno-utf8 b/samples/yesno-utf8 index 4a6be30eb801..a10eba7605bc 100755 --- a/samples/yesno-utf8 +++ b/samples/yesno-utf8 @@ -1,14 +1,14 @@ #! /bin/sh -# $Id: yesno-utf8,v 1.7 2010/01/14 01:11:23 tom Exp $ +# $Id: yesno-utf8,v 1.8 2020/11/26 00:05:52 tom Exp $ . ./setup-vars . ./setup-utf8 DIALOG_ERROR=254 export DIALOG_ERROR $DIALOG "$@" --yesno "Are you a DOG?" 0 0 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno2 b/samples/yesno2 index d022352e6308..ba4e7f4e0fc2 100755 --- a/samples/yesno2 +++ b/samples/yesno2 @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: yesno2,v 1.7 2010/01/13 10:40:39 tom Exp $ +# $Id: yesno2,v 1.8 2020/11/26 00:05:52 tom Exp $ . ./setup-vars $DIALOG --title "YES/NO BOX" "$@" \ --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ questions that have an answer of either yes or no. \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 0 0 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno3 b/samples/yesno3 index f67fb85b600f..336c41c90670 100755 --- a/samples/yesno3 +++ b/samples/yesno3 @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: yesno3,v 1.6 2010/01/13 10:40:39 tom Exp $ +# $Id: yesno3,v 1.7 2020/11/26 00:05:52 tom Exp $ . ./setup-vars $DIALOG --timeout 20 --title "YES/NO BOX" "$@" \ --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ questions that have an answer of either yes or no. \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 0 0 -retval=$? +returncode=$? . ./report-yesno diff --git a/samples/yesno4 b/samples/yesno4 index 99f65e86125e..4c54160d0043 100755 --- a/samples/yesno4 +++ b/samples/yesno4 @@ -1,18 +1,18 @@ #!/bin/sh -# $Id: yesno4,v 1.1 2010/01/14 10:26:40 tom Exp $ +# $Id: yesno4,v 1.2 2020/11/26 00:05:52 tom Exp $ . ./setup-vars $DIALOG --title "YES/NO BOX" "$@" \ --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ questions that have an answer of either yes or no. \ BTW, do you notice that long lines will be automatically \ wrapped around so that they can fit in the box? You can \ also control line breaking explicitly by inserting \ 'backslash n' at any place you like, but in this case, \ auto wrap around will be disabled and you will have to \ control line breaking yourself." 6 30 -retval=$? +returncode=$? . ./report-yesno diff --git a/tailbox.c b/tailbox.c index 137355b252ef..a6a505f6a332 100644 --- a/tailbox.c +++ b/tailbox.c @@ -1,425 +1,433 @@ /* - * $Id: tailbox.c,v 1.72 2018/06/19 22:57:01 tom Exp $ + * $Id: tailbox.c,v 1.79 2020/11/21 21:31:49 tom Exp $ * * tailbox.c -- implements the tail box * - * Copyright 2000-2012,2018 Thomas E. Dickey + * Copyright 2000-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Pasquale De Marco (demarco_p@abramo.it) */ #include <dialog.h> #include <dlg_keys.h> #include <sys/stat.h> typedef struct { DIALOG_CALLBACK obj; WINDOW *text; const char **buttons; int hscroll; int old_hscroll; char line[MAX_LEN + 2]; off_t last_pos; } MY_OBJ; /* * Return current line of text. */ static char * get_line(MY_OBJ * obj) { FILE *fp = obj->obj.input; int col = -(obj->hscroll); int j, tmpint, ch; do { if (((ch = getc(fp)) == EOF) && !feof(fp)) dlg_exiterr("Error moving file pointer in get_line()."); else if (!feof(fp) && (ch != '\n')) { if ((ch == TAB) && (dialog_vars.tab_correct)) { tmpint = dialog_state.tab_len - ((col + obj->hscroll) % dialog_state.tab_len); for (j = 0; j < tmpint; j++) { if (col >= 0 && col < MAX_LEN) obj->line[col] = ' '; ++col; } } else { if (col >= 0) obj->line[col] = (char) ch; ++col; } if (col >= MAX_LEN) break; } } while (!feof(fp) && (ch != '\n')); if (col < 0) col = 0; obj->line[col] = '\0'; return obj->line; } /* * Print a new line of text. */ static void print_line(MY_OBJ * obj, WINDOW *win, int row, int width) { int i, y, x; char *line = get_line(obj); (void) wmove(win, row, 0); /* move cursor to correct line */ (void) waddch(win, ' '); (void) waddnstr(win, line, MIN((int) strlen(line), width - 2)); getyx(win, y, x); (void) y; /* Clear 'residue' of previous line */ for (i = 0; i < width - x; i++) (void) waddch(win, ' '); } /* * Go back 'target' lines in text file. BUFSIZ has to be in 'size_t' range. */ static void last_lines(MY_OBJ * obj, int target) { FILE *fp = obj->obj.input; - size_t inx; - int count = 0; - char buf[BUFSIZ + 1]; - size_t size_to_read; - size_t size_as_read; - long offset = 0; long fpos = 0; if (fseek(fp, 0L, SEEK_END) == -1 || (fpos = ftell(fp)) < 0) dlg_exiterr("Error moving file pointer in last_lines()."); if (fpos != 0) { + long offset = 0; + ++target; for (;;) { + size_t inx; + size_t size_to_read; + size_t size_as_read; + int count = 0; + char buf[BUFSIZ + 1]; + if (fpos >= BUFSIZ) { size_to_read = BUFSIZ; } else { size_to_read = (size_t) fpos; } fpos = fpos - (long) size_to_read; if (fseek(fp, fpos, SEEK_SET) == -1) dlg_exiterr("Error moving file pointer in last_lines()."); size_as_read = fread(buf, sizeof(char), size_to_read, fp); if (ferror(fp)) dlg_exiterr("Error reading file in last_lines()."); if (size_as_read == 0) { fpos = 0; offset = 0; break; } offset += (long) size_as_read; for (inx = size_as_read - 1; inx != 0; --inx) { if (buf[inx] == '\n') { if (++count > target) break; offset = (long) (inx + 1); } } if (count > target) { break; } else if (fpos == 0) { offset = 0; break; } } if (fseek(fp, fpos + offset, SEEK_SET) == -1) dlg_exiterr("Error moving file pointer in last_lines()."); } } /* * Print a new page of text. */ static void print_page(MY_OBJ * obj, int height, int width) { int i; for (i = 0; i < height; i++) { print_line(obj, obj->text, i, width); } (void) wnoutrefresh(obj->text); } static void print_last_page(MY_OBJ * obj) { int high = getmaxy(obj->obj.win) - (2 * MARGIN + (obj->obj.bg_task ? 1 : 3)); int wide = getmaxx(obj->text); last_lines(obj, high); print_page(obj, high, wide); } static void repaint_text(MY_OBJ * obj) { FILE *fp = obj->obj.input; int cur_y, cur_x; getyx(obj->obj.win, cur_y, cur_x); obj->old_hscroll = obj->hscroll; print_last_page(obj); obj->last_pos = ftell(fp); (void) wmove(obj->obj.win, cur_y, cur_x); /* Restore cursor position */ wrefresh(obj->obj.win); } static bool handle_input(DIALOG_CALLBACK * cb) { MY_OBJ *obj = (MY_OBJ *) cb; FILE *fp = obj->obj.input; struct stat sb; if (fstat(fileno(fp), &sb) == 0 && sb.st_size != obj->last_pos) { repaint_text(obj); } return TRUE; } static bool valid_callback(DIALOG_CALLBACK * cb) { bool valid = FALSE; DIALOG_CALLBACK *p; for (p = dialog_state.getc_callbacks; p != 0; p = p->next) { if (p == cb) { valid = TRUE; break; } } return valid; } static bool handle_my_getc(DIALOG_CALLBACK * cb, int ch, int fkey, int *result) { MY_OBJ *obj = (MY_OBJ *) cb; bool done = FALSE; if (!valid_callback(cb)) return FALSE; if (!fkey && dlg_char_to_button(ch, obj->buttons) == 0) { ch = DLGK_ENTER; fkey = TRUE; } if (fkey) { switch (ch) { case DLGK_ENTER: *result = DLG_EXIT_OK; done = TRUE; break; case DLGK_BEGIN: /* Beginning of line */ obj->hscroll = 0; break; case DLGK_GRID_LEFT: /* Scroll left */ if (obj->hscroll > 0) { obj->hscroll -= 1; } break; case DLGK_GRID_RIGHT: /* Scroll right */ if (obj->hscroll < MAX_LEN) obj->hscroll += 1; break; default: - beep(); + if (is_DLGK_MOUSE(ch)) { + *result = dlg_ok_buttoncode(ch - M_EVENT); + if (*result != DLG_EXIT_ERROR) { + done = TRUE; + } else { + beep(); + } + } else { + beep(); + } break; } if ((obj->hscroll != obj->old_hscroll)) repaint_text(obj); } else { switch (ch) { case ERR: clearerr(cb->input); ch = getc(cb->input); (void) ungetc(ch, cb->input); if (ch != EOF) { handle_input(cb); } break; case ESC: done = TRUE; *result = DLG_EXIT_ESC; break; default: beep(); break; } } return !done; } /* * Display text from a file in a dialog box, like in a "tail -f". */ int dialog_tailbox(const char *title, const char *filename, int height, int width, int bg_task) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, DLG_KEYS_DATA( DLGK_BEGIN, '0' ), DLG_KEYS_DATA( DLGK_BEGIN, KEY_BEG ), DLG_KEYS_DATA( DLGK_GRID_LEFT, 'H' ), DLG_KEYS_DATA( DLGK_GRID_LEFT, 'h' ), DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'L' ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'l' ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif int fkey; - int x, y, result, thigh; + int x, y, result = DLG_EXIT_UNKNOWN, thigh; WINDOW *dialog, *text; const char **buttons = 0; MY_OBJ *obj; FILE *fd; int min_width = 12; DLG_TRACE(("# tailbox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("filename", filename); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("bg_task", bg_task); /* Open input file for reading */ if ((fd = fopen(filename, "rb")) == NULL) dlg_exiterr("Can't open input file in dialog_tailbox()."); #ifdef KEY_RESIZE retry: #endif dlg_auto_sizefile(title, filename, &height, &width, 2, min_width); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); thigh = height - ((2 * MARGIN) + (bg_task ? 0 : 2)); dialog = dlg_new_window(height, width, y, x); dlg_mouse_setbase(x, y); /* Create window for text region, used for scrolling text */ text = dlg_sub_window(dialog, thigh, width - (2 * MARGIN), y + MARGIN, x + MARGIN); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_draw_helpline(dialog, FALSE); if (!bg_task) { buttons = dlg_exit_label(); dlg_button_layout(buttons, &min_width); dlg_draw_buttons(dialog, height - (2 * MARGIN), 0, buttons, FALSE, FALSE, width); } (void) wmove(dialog, thigh, (MARGIN + 1)); (void) wnoutrefresh(dialog); obj = dlg_calloc(MY_OBJ, 1); assert_ptr(obj, "dialog_tailbox"); obj->obj.input = fd; obj->obj.win = dialog; obj->obj.handle_getc = handle_my_getc; obj->obj.handle_input = bg_task ? handle_input : 0; obj->obj.keep_bg = bg_task && dialog_vars.cant_kill; - obj->obj.bg_task = bg_task; + obj->obj.bg_task = (bool) bg_task; obj->text = text; obj->buttons = buttons; dlg_add_callback(&(obj->obj)); dlg_register_window(dialog, "tailbox", binding); dlg_register_buttons(dialog, "tailbox", buttons); /* Print last page of text */ dlg_attr_clear(text, thigh, getmaxx(text), dialog_attr); repaint_text(obj); dlg_trace_win(dialog); if (bg_task) { result = DLG_EXIT_OK; } else { int ch; do { - ch = dlg_getc(dialog, &fkey); + ch = dlg_mouse_wgetch(dialog, &fkey); #ifdef KEY_RESIZE if (fkey && ch == KEY_RESIZE) { dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; /* repaint */ - dlg_clear(); - dlg_del_window(dialog); - refresh(); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); dlg_button_layout(buttons, &min_width); goto retry; } #endif } while (handle_my_getc(&(obj->obj), ch, fkey, &result)); } dlg_mouse_free_regions(); return result; } diff --git a/textbox.c b/textbox.c index eb06eecf3721..ed1405097e74 100644 --- a/textbox.c +++ b/textbox.c @@ -1,984 +1,1004 @@ /* - * $Id: textbox.c,v 1.117 2018/06/19 22:57:01 tom Exp $ + * $Id: textbox.c,v 1.127 2021/01/17 22:19:19 tom Exp $ * * textbox.c -- implements the text box * - * Copyright 2000-2017,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors: * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> #include <dlg_keys.h> #define PAGE_LENGTH (height - 4) #define PAGE_WIDTH (width - 2) typedef struct { DIALOG_CALLBACK obj; WINDOW *text; const char **buttons; int hscroll; char line[MAX_LEN + 1]; int fd; long file_size; long fd_bytes_read; long bytes_read; long buffer_len; bool begin_reached; bool buffer_first; bool end_reached; long page_length; /* lines on the page which is shown */ long in_buf; /* ending index into buf[] for page */ char *buf; } MY_OBJ; static long lseek_obj(MY_OBJ * obj, long offset, int mode) { long fpos; if ((fpos = (long) lseek(obj->fd, (off_t) offset, mode)) == -1) { switch (mode) { default: case SEEK_CUR: dlg_exiterr("Cannot get file position"); break; case SEEK_END: dlg_exiterr("Cannot seek to end of file"); break; case SEEK_SET: dlg_exiterr("Cannot set file position to %ld", offset); break; } } return fpos; } static long ftell_obj(MY_OBJ * obj) { return lseek_obj(obj, 0L, SEEK_CUR); } static void lseek_set(MY_OBJ * obj, long offset) { long actual = lseek_obj(obj, offset, SEEK_SET); if (actual != offset) { dlg_exiterr("Cannot set file position to %ld (actual %ld)\n", offset, actual); } } static void lseek_end(MY_OBJ * obj, long offset) { long actual = lseek_obj(obj, offset, SEEK_END); if (offset == 0L && actual > offset) { obj->file_size = actual; } } static void lseek_cur(MY_OBJ * obj, long offset) { long actual = lseek_obj(obj, offset, SEEK_CUR); if (actual != offset) { DLG_TRACE(("# Lseek returned %ld, expected %ld\n", actual, offset)); } } static char * xalloc(size_t size) { char *result = dlg_malloc(char, size); assert_ptr(result, "xalloc"); return result; } /* * read_high() substitutes read() for tab->spaces conversion * * buffer_len, fd_bytes_read, bytes_read are modified * buf is allocated * * fd_bytes_read is the effective number of bytes read from file * bytes_read is the length of buf, that can be different if tab_correct */ static void read_high(MY_OBJ * obj, size_t size_read) { - char *buftab, ch; - int i = 0, j, n, tmpint; - long begin_line; + char *buftab; /* Allocate space for read buffer */ buftab = xalloc(size_read + 1); if ((obj->fd_bytes_read = read(obj->fd, buftab, size_read)) != -1) { + int j; + long begin_line; buftab[obj->fd_bytes_read] = '\0'; /* mark end of valid data */ if (dialog_vars.tab_correct) { /* calculate bytes_read by buftab and fd_bytes_read */ obj->bytes_read = begin_line = 0; for (j = 0; j < obj->fd_bytes_read; j++) if (buftab[j] == TAB) obj->bytes_read += dialog_state.tab_len - ((obj->bytes_read - begin_line) % dialog_state.tab_len); else if (buftab[j] == '\n') { obj->bytes_read++; begin_line = obj->bytes_read; } else obj->bytes_read++; if (obj->bytes_read > obj->buffer_len) { if (obj->buffer_first) obj->buffer_first = FALSE; /* disp = 0 */ else { free(obj->buf); } obj->buffer_len = obj->bytes_read; /* Allocate space for read buffer */ obj->buf = xalloc((size_t) obj->buffer_len + 1); } } else { if (obj->buffer_first) { obj->buffer_first = FALSE; /* Allocate space for read buffer */ obj->buf = xalloc(size_read + 1); } obj->bytes_read = obj->fd_bytes_read; } j = 0; begin_line = 0; - while (j < obj->fd_bytes_read) - if (((ch = buftab[j++]) == TAB) && (dialog_vars.tab_correct != 0)) { - tmpint = (dialog_state.tab_len - - ((int) ((long) i - begin_line) % dialog_state.tab_len)); - for (n = 0; n < tmpint; n++) - obj->buf[i++] = ' '; - } else { - if (ch == '\n') - begin_line = i + 1; - obj->buf[i++] = ch; + if (obj->buf != NULL) { + int i = 0; + + while (j < obj->fd_bytes_read) { + char ch; + + if (((ch = buftab[j++]) == TAB) + && (dialog_vars.tab_correct != 0)) { + int n; + int tmpint = (dialog_state.tab_len + - ((int) ((long) i - begin_line) % dialog_state.tab_len)); + for (n = 0; n < tmpint; n++) + obj->buf[i++] = ' '; + } else { + if (ch == '\n') + begin_line = i + 1; + obj->buf[i++] = ch; + } } - obj->buf[i] = '\0'; /* mark end of valid data */ + obj->buf[i] = '\0'; /* mark end of valid data */ + } } if (obj->bytes_read == -1) dlg_exiterr("Error reading file"); free(buftab); } static long find_first(MY_OBJ * obj, char *buffer, long length) { - long recount = obj->page_length; long result = 0; - while (length > 0) { - if (buffer[length] == '\n') { - if (--recount < 0) { - result = length; - break; + if (buffer != NULL) { + long recount = obj->page_length; + while (length > 0) { + if (buffer[length] == '\n') { + if (--recount < 0) { + result = length; + break; + } } + --length; } - --length; } return result; } static long tabize(MY_OBJ * obj, long val, long *first_pos) { long fpos; long i, count, begin_line; char *buftab; if (!dialog_vars.tab_correct) return val; fpos = ftell_obj(obj); lseek_set(obj, fpos - obj->fd_bytes_read); /* Allocate space for read buffer */ buftab = xalloc((size_t) val + 1); if ((read(obj->fd, buftab, (size_t) val)) == -1) dlg_exiterr("Error reading file in tabize()."); begin_line = count = 0; if (first_pos != 0) *first_pos = 0; for (i = 0; i < val; i++) { if ((first_pos != 0) && (count >= val)) { *first_pos = find_first(obj, buftab, i); break; } if (buftab[i] == TAB) count += dialog_state.tab_len - ((count - begin_line) % dialog_state.tab_len); else if (buftab[i] == '\n') { count++; begin_line = count; } else count++; } lseek_set(obj, fpos); free(buftab); return count; } /* * Return current line of text. * 'page' should point to start of current line before calling, and will be * updated to point to start of next line. */ static char * get_line(MY_OBJ * obj) { int i = 0; - long fpos; obj->end_reached = FALSE; - while (obj->buf[obj->in_buf] != '\n') { - if (obj->buf[obj->in_buf] == '\0') { /* Either end of file or end of buffer reached */ - fpos = ftell_obj(obj); - - if (fpos < obj->file_size) { /* Not end of file yet */ - /* We've reached end of buffer, but not end of file yet, so - * read next part of file into buffer - */ - read_high(obj, BUF_SIZE); - obj->in_buf = 0; - } else { - if (!obj->end_reached) - obj->end_reached = TRUE; - break; + if (obj->buf != NULL) { + while (obj->buf[obj->in_buf] != '\n') { + if (obj->buf[obj->in_buf] == '\0') { /* Either end of file or end of buffer reached */ + long fpos = ftell_obj(obj); + + if (fpos < obj->file_size) { /* Not end of file yet */ + /* We've reached end of buffer, but not end of file yet, so + * read next part of file into buffer + */ + read_high(obj, BUF_SIZE); + obj->in_buf = 0; + } else { + if (!obj->end_reached) + obj->end_reached = TRUE; + break; + } + } else if (i < MAX_LEN) + obj->line[i++] = obj->buf[obj->in_buf++]; + else { + if (i == MAX_LEN) /* Truncate lines longer than MAX_LEN characters */ + obj->line[i++] = '\0'; + obj->in_buf++; } - } else if (i < MAX_LEN) - obj->line[i++] = obj->buf[obj->in_buf++]; - else { - if (i == MAX_LEN) /* Truncate lines longer than MAX_LEN characters */ - obj->line[i++] = '\0'; - obj->in_buf++; } } if (i <= MAX_LEN) obj->line[i] = '\0'; if (!obj->end_reached) obj->in_buf++; /* move past '\n' */ return obj->line; } static bool match_string(MY_OBJ * obj, char *string) { char *match = get_line(obj); return strstr(match, string) != 0; } /* * Go back 'n' lines in text file. Called by dialog_textbox(). * 'in_buf' will be updated to point to the desired line in 'buf'. */ static void back_lines(MY_OBJ * obj, long n) { int i; long fpos; long val_to_tabize; obj->begin_reached = FALSE; /* We have to distinguish between end_reached and !end_reached since at end * of file, the line is not ended by a '\n'. The code inside 'if' * basically does a '--in_buf' to move one character backward so as to * skip '\n' of the previous line */ if (!obj->end_reached) { /* Either beginning of buffer or beginning of file reached? */ if (obj->in_buf == 0) { fpos = ftell_obj(obj); if (fpos > obj->fd_bytes_read) { /* Not beginning of file yet */ /* We've reached beginning of buffer, but not beginning of file * yet, so read previous part of file into buffer. Note that * we only move backward for BUF_SIZE/2 bytes, but not BUF_SIZE * bytes to avoid re-reading again in print_page() later */ /* Really possible to move backward BUF_SIZE/2 bytes? */ if (fpos < BUF_SIZE / 2 + obj->fd_bytes_read) { /* No, move less than */ lseek_set(obj, 0L); val_to_tabize = fpos - obj->fd_bytes_read; } else { /* Move backward BUF_SIZE/2 bytes */ lseek_cur(obj, -(BUF_SIZE / 2 + obj->fd_bytes_read)); val_to_tabize = BUF_SIZE / 2; } read_high(obj, BUF_SIZE); obj->in_buf = tabize(obj, val_to_tabize, (long *) 0); } else { /* Beginning of file reached */ obj->begin_reached = TRUE; return; } } obj->in_buf--; - if (obj->buf[obj->in_buf] != '\n') + if (obj->buf == NULL + || obj->in_buf < 0 + || obj->in_buf >= obj->bytes_read + || obj->buf[obj->in_buf] != '\n') /* Something's wrong... */ dlg_exiterr("Internal error in back_lines()."); } /* Go back 'n' lines */ for (i = 0; i < n; i++) { do { if (obj->in_buf == 0) { fpos = ftell_obj(obj); if (fpos > obj->fd_bytes_read) { /* Really possible to move backward BUF_SIZE/2 bytes? */ if (fpos < BUF_SIZE / 2 + obj->fd_bytes_read) { /* No, move less than */ lseek_set(obj, 0L); val_to_tabize = fpos - obj->fd_bytes_read; } else { /* Move backward BUF_SIZE/2 bytes */ lseek_cur(obj, -(BUF_SIZE / 2 + obj->fd_bytes_read)); val_to_tabize = BUF_SIZE / 2; } read_high(obj, BUF_SIZE); obj->in_buf = tabize(obj, val_to_tabize, (long *) 0); } else { /* Beginning of file reached */ obj->begin_reached = TRUE; return; } } } while (obj->buf[--(obj->in_buf)] != '\n'); } obj->in_buf++; } /* * Print a new line of text. */ static void print_line(MY_OBJ * obj, int row, int width) { if (wmove(obj->text, row, 0) != ERR) { int i, y, x; char *line = get_line(obj); const int *cols = dlg_index_columns(line); const int *indx = dlg_index_wchars(line); int limit = dlg_count_wchars(line); int first = 0; int last = limit; if (width > getmaxx(obj->text)) width = getmaxx(obj->text); --width; /* for the leading ' ' */ for (i = 0; i <= limit && cols[i] < obj->hscroll; ++i) first = i; for (i = first; (i <= limit) && ((cols[i] - cols[first]) < width); ++i) last = i; (void) waddch(obj->text, ' '); (void) waddnstr(obj->text, line + indx[first], indx[last] - indx[first]); getyx(obj->text, y, x); if (y == row) { /* Clear 'residue' of previous line */ for (i = 0; i <= width - x; i++) { (void) waddch(obj->text, ' '); } } } } /* * Print a new page of text. */ static void print_page(MY_OBJ * obj, int height, int width) { int i, passed_end = 0; obj->page_length = 0; for (i = 0; i < height; i++) { print_line(obj, i, width); if (!passed_end) obj->page_length++; if (obj->end_reached && !passed_end) passed_end = 1; } (void) wnoutrefresh(obj->text); dlg_trace_win(obj->text); } /* * Print current position */ static void print_position(MY_OBJ * obj, WINDOW *win, int height, int width) { long fpos; long size; long first = -1; fpos = ftell_obj(obj); if (dialog_vars.tab_correct) size = tabize(obj, obj->in_buf, &first); else first = find_first(obj, obj->buf, size = obj->in_buf); dlg_draw_scrollbar(win, first, fpos - obj->fd_bytes_read + size, fpos - obj->fd_bytes_read + size, obj->file_size, 0, PAGE_WIDTH, 0, PAGE_LENGTH + 1, border_attr, border_attr); } /* * Display a dialog box and get the search term from user. */ static int get_search_term(WINDOW *dialog, char *input, int height, int width) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { INPUTSTR_BINDINGS, HELPKEY_BINDINGS, ENTERKEY_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ int old_x, old_y; int box_x, box_y; int box_height, box_width; int offset = 0; int key = 0; int fkey = 0; bool first = TRUE; int result = DLG_EXIT_UNKNOWN; const char *caption = _("Search"); int len_caption = dlg_count_columns(caption); const int *indx; int limit; WINDOW *widget; getbegyx(dialog, old_y, old_x); box_height = 1 + (2 * MARGIN); box_width = len_caption + (2 * (MARGIN + 2)); box_width = MAX(box_width, 30); box_width = MIN(box_width, getmaxx(dialog) - 2 * MARGIN); len_caption = MIN(len_caption, box_width - (2 * (MARGIN + 1))); box_x = (width - box_width) / 2; box_y = (height - box_height) / 2; widget = dlg_new_modal_window(dialog, box_height, box_width, old_y + box_y, old_x + box_x); keypad(widget, TRUE); dlg_register_window(widget, "searchbox", binding); dlg_draw_box2(widget, 0, 0, box_height, box_width, searchbox_attr, searchbox_border_attr, searchbox_border2_attr); dlg_attrset(widget, searchbox_title_attr); (void) wmove(widget, 0, (box_width - len_caption) / 2); indx = dlg_index_wchars(caption); limit = dlg_limit_columns(caption, len_caption, 0); (void) waddnstr(widget, caption + indx[0], indx[limit] - indx[0]); box_width -= 2; offset = dlg_count_columns(input); while (result == DLG_EXIT_UNKNOWN) { if (!first) { key = dlg_getc(widget, &fkey); if (fkey) { switch (fkey) { #ifdef KEY_RESIZE case KEY_RESIZE: result = DLG_EXIT_CANCEL; continue; #endif case DLGK_ENTER: result = DLG_EXIT_OK; continue; } } else if (key == ESC) { result = DLG_EXIT_ESC; continue; } else if (key == ERR) { napms(50); continue; } } if (dlg_edit_string(input, &offset, key, fkey, first)) { dlg_show_string(widget, input, offset, searchbox_attr, 1, 1, box_width, FALSE, first); first = FALSE; } } dlg_del_window(widget); return result; } static bool perform_search(MY_OBJ * obj, int height, int width, int key, char *search_term) { int dir; - long tempinx; - long fpos; - int result; - bool found; - bool temp, temp1; bool moved = FALSE; /* set search direction */ dir = (key == '/' || key == 'n') ? 1 : 0; if (dir ? !obj->end_reached : !obj->begin_reached) { + long tempinx; + long fpos; + int result; + bool found; + bool temp, temp1; + if (key == 'n' || key == 'N') { if (search_term[0] == '\0') { /* No search term yet */ (void) beep(); return FALSE; } /* Get search term from user */ } else if ((result = get_search_term(obj->text, search_term, PAGE_LENGTH, PAGE_WIDTH)) != DLG_EXIT_OK || search_term[0] == '\0') { #ifdef KEY_RESIZE if (result == DLG_EXIT_CANCEL) { ungetch(key); ungetch(KEY_RESIZE); /* FALLTHRU */ } +#else + (void) result; #endif /* ESC pressed, or no search term, reprint page to clear box */ dlg_attrset(obj->text, dialog_attr); back_lines(obj, obj->page_length); return TRUE; } /* Save variables for restoring in case search term can't be found */ tempinx = obj->in_buf; temp = obj->begin_reached; temp1 = obj->end_reached; fpos = ftell_obj(obj) - obj->fd_bytes_read; /* update 'in_buf' to point to next (previous) line before forward (backward) searching */ back_lines(obj, (dir ? obj->page_length - 1 : obj->page_length + 1)); if (dir) { /* Forward search */ while ((found = match_string(obj, search_term)) == FALSE) { if (obj->end_reached) break; } } else { /* Backward search */ while ((found = match_string(obj, search_term)) == FALSE) { if (obj->begin_reached) break; back_lines(obj, 2L); } } if (found == FALSE) { /* not found */ (void) beep(); /* Restore program state to that before searching */ lseek_set(obj, fpos); read_high(obj, BUF_SIZE); obj->in_buf = tempinx; obj->begin_reached = temp; obj->end_reached = temp1; /* move 'in_buf' to point to start of current page to * re-print current page. Note that 'in_buf' always points * to start of next page, so this is necessary */ back_lines(obj, obj->page_length); } else { /* Search term found */ back_lines(obj, 1L); } /* Reprint page */ dlg_attrset(obj->text, dialog_attr); moved = TRUE; } else { /* no need to find */ (void) beep(); } return moved; } /* * Display text from a file in a dialog box. */ int dialog_textbox(const char *title, const char *filename, int height, int width) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, DLG_KEYS_DATA( DLGK_GRID_DOWN, 'J' ), DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), DLG_KEYS_DATA( DLGK_GRID_LEFT, 'H' ), DLG_KEYS_DATA( DLGK_GRID_LEFT, 'h' ), DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'L' ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'l' ), DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_GRID_UP, 'K' ), DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), DLG_KEYS_DATA( DLGK_PAGE_LAST, 'G' ), DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, CHR_SPACE ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), DLG_KEYS_DATA( DLGK_PAGE_PREV, 'B' ), DLG_KEYS_DATA( DLGK_PAGE_PREV, 'b' ), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_BEGIN, '0' ), DLG_KEYS_DATA( DLGK_BEGIN, KEY_BEG ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif long fpos; int x, y, cur_x, cur_y; - int key = 0, fkey; + int key, fkey; int next = 0; - int i, code, passed_end; + int i, passed_end; char search_term[MAX_LEN + 1]; MY_OBJ obj; WINDOW *dialog; bool moved; int result = DLG_EXIT_UNKNOWN; int button = dlg_default_button(); int min_width = 12; DLG_TRACE(("# textbox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("filename", filename); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); search_term[0] = '\0'; /* no search term entered yet */ memset(&obj, 0, sizeof(obj)); obj.begin_reached = TRUE; obj.buffer_first = TRUE; obj.end_reached = FALSE; obj.buttons = dlg_exit_label(); /* Open input file for reading */ if ((obj.fd = open(filename, O_RDONLY)) == -1) dlg_exiterr("Can't open input file %s", filename); /* Get file size. Actually, 'file_size' is the real file size - 1, since it's only the last byte offset from the beginning */ lseek_end(&obj, 0L); /* Restore file pointer to beginning of file after getting file size */ lseek_set(&obj, 0L); read_high(&obj, BUF_SIZE); dlg_button_layout(obj.buttons, &min_width); #ifdef KEY_RESIZE retry: #endif moved = TRUE; dlg_auto_sizefile(title, filename, &height, &width, 2, min_width); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); dlg_register_window(dialog, "textbox", binding); dlg_register_buttons(dialog, "textbox", obj.buttons); dlg_mouse_setbase(x, y); /* Create window for text region, used for scrolling text */ obj.text = dlg_sub_window(dialog, PAGE_LENGTH, PAGE_WIDTH, y + 1, x + 1); /* register the new window, along with its borders */ dlg_mouse_mkbigregion(0, 0, PAGE_LENGTH + 2, width, KEY_MAX, 1, 1, 1 /* lines */ ); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_draw_buttons(dialog, PAGE_LENGTH + 2, 0, obj.buttons, button, FALSE, width); (void) wnoutrefresh(dialog); getyx(dialog, cur_y, cur_x); /* Save cursor position */ dlg_attr_clear(obj.text, PAGE_LENGTH, PAGE_WIDTH, dialog_attr); while (result == DLG_EXIT_UNKNOWN) { + int code; /* * Update the screen according to whether we shifted up/down by a line * or not. */ if (moved) { if (next < 0) { (void) scrollok(obj.text, TRUE); (void) scroll(obj.text); /* Scroll text region up one line */ (void) scrollok(obj.text, FALSE); print_line(&obj, PAGE_LENGTH - 1, PAGE_WIDTH); (void) wnoutrefresh(obj.text); } else if (next > 0) { /* * We don't call print_page() here but use scrolling to ensure * faster screen update. However, 'end_reached' and * 'page_length' should still be updated, and 'in_buf' should * point to start of next page. This is done by calling * get_line() in the following 'for' loop. */ (void) scrollok(obj.text, TRUE); (void) wscrl(obj.text, -1); /* Scroll text region down one line */ (void) scrollok(obj.text, FALSE); obj.page_length = 0; passed_end = 0; for (i = 0; i < PAGE_LENGTH; i++) { if (!i) { print_line(&obj, 0, PAGE_WIDTH); /* print first line of page */ (void) wnoutrefresh(obj.text); } else (void) get_line(&obj); /* Called to update 'end_reached' and 'in_buf' */ if (!passed_end) obj.page_length++; if (obj.end_reached && !passed_end) passed_end = 1; } } else { print_page(&obj, PAGE_LENGTH, PAGE_WIDTH); } print_position(&obj, dialog, height, width); (void) wmove(dialog, cur_y, cur_x); /* Restore cursor position */ wrefresh(dialog); } moved = FALSE; /* assume we'll not move */ next = 0; /* ...but not scroll by a line */ key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_ok_button_key(result, &button, &key, &fkey)) + break; + } if (!fkey && (code = dlg_char_to_button(key, obj.buttons)) >= 0) { result = dlg_ok_buttoncode(code); break; } if (fkey) { switch (key) { default: if (is_DLGK_MOUSE(key)) { result = dlg_exit_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } else { beep(); } break; case DLGK_FIELD_NEXT: button = dlg_next_button(obj.buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, obj.buttons, button, FALSE, width); break; case DLGK_FIELD_PREV: button = dlg_prev_button(obj.buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, obj.buttons, button, FALSE, width); break; case DLGK_ENTER: - if (dialog_vars.nook) - result = DLG_EXIT_OK; - else - result = dlg_exit_buttoncode(button); + result = dlg_enter_buttoncode(button); + break; + case DLGK_LEAVE: + result = dlg_ok_buttoncode(button); break; case DLGK_PAGE_FIRST: if (!obj.begin_reached) { obj.begin_reached = 1; /* First page not in buffer? */ fpos = ftell_obj(&obj); if (fpos > obj.fd_bytes_read) { /* Yes, we have to read it in */ lseek_set(&obj, 0L); read_high(&obj, BUF_SIZE); } obj.in_buf = 0; moved = TRUE; } break; case DLGK_PAGE_LAST: obj.end_reached = TRUE; /* Last page not in buffer? */ fpos = ftell_obj(&obj); if (fpos < obj.file_size) { /* Yes, we have to read it in */ lseek_end(&obj, -BUF_SIZE); read_high(&obj, BUF_SIZE); } obj.in_buf = obj.bytes_read; back_lines(&obj, (long) PAGE_LENGTH); moved = TRUE; break; case DLGK_GRID_UP: /* Previous line */ if (!obj.begin_reached) { back_lines(&obj, obj.page_length + 1); next = 1; moved = TRUE; } break; case DLGK_PAGE_PREV: /* Previous page */ case DLGK_MOUSE(KEY_PPAGE): if (!obj.begin_reached) { back_lines(&obj, obj.page_length + PAGE_LENGTH); moved = TRUE; } break; case DLGK_GRID_DOWN: /* Next line */ if (!obj.end_reached) { obj.begin_reached = 0; next = -1; moved = TRUE; } break; case DLGK_PAGE_NEXT: /* Next page */ case DLGK_MOUSE(KEY_NPAGE): if (!obj.end_reached) { obj.begin_reached = 0; moved = TRUE; } break; case DLGK_BEGIN: /* Beginning of line */ if (obj.hscroll > 0) { obj.hscroll = 0; /* Reprint current page to scroll horizontally */ back_lines(&obj, obj.page_length); moved = TRUE; } break; case DLGK_GRID_LEFT: /* Scroll left */ if (obj.hscroll > 0) { obj.hscroll--; /* Reprint current page to scroll horizontally */ back_lines(&obj, obj.page_length); moved = TRUE; } break; case DLGK_GRID_RIGHT: /* Scroll right */ if (obj.hscroll < MAX_LEN) { obj.hscroll++; /* Reprint current page to scroll horizontally */ back_lines(&obj, obj.page_length); moved = TRUE; } break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; back_lines(&obj, obj.page_length); /* repaint */ - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); goto retry; #endif } } else { switch (key) { case '/': /* Forward search */ case 'n': /* Repeat forward search */ case '?': /* Backward search */ case 'N': /* Repeat backward search */ moved = perform_search(&obj, height, width, key, search_term); fkey = FALSE; break; default: beep(); break; } } } + dlg_add_last_key(-1); dlg_del_window(dialog); free(obj.buf); (void) close(obj.fd); dlg_mouse_free_regions(); return result; } diff --git a/timebox.c b/timebox.c index 288e76735d24..73b057ada815 100644 --- a/timebox.c +++ b/timebox.c @@ -1,431 +1,430 @@ /* - * $Id: timebox.c,v 1.59 2018/06/19 22:57:01 tom Exp $ + * $Id: timebox.c,v 1.69 2020/11/23 09:04:00 tom Exp $ * * timebox.c -- implements the timebox dialog * - * Copyright 2001-2016,2018 Thomas E. Dickey + * Copyright 2001-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> #include <time.h> #define ONE_HIGH 1 #define ONE_WIDE 2 #define BTN_HIGH 2 #define MIN_HIGH (ONE_HIGH + BTN_HIGH + (4 * MARGIN)) #define MIN_WIDE ((3 * (ONE_WIDE + 2 * MARGIN)) + 2 + (2 * MARGIN)) typedef enum { sHR = -3 ,sMN = -2 ,sSC = -1 } STATES; struct _box; typedef struct _box { WINDOW *parent; WINDOW *window; int x; int y; int width; int height; int period; int value; } BOX; static int next_or_previous(int key) { int result = 0; switch (key) { case DLGK_ITEM_PREV: result = -1; break; case DLGK_ITEM_NEXT: result = 1; break; default: beep(); break; } return result; } /* * Draw the hour-of-month selection box */ static int draw_cell(BOX * data) { werase(data->window); dlg_draw_box(data->parent, data->y - MARGIN, data->x - MARGIN, data->height + (2 * MARGIN), data->width + (2 * MARGIN), menubox_border_attr, menubox_border2_attr); dlg_attrset(data->window, item_attr); wprintw(data->window, "%02d", data->value); return 0; } static int init_object(BOX * data, WINDOW *parent, int x, int y, int width, int height, int period, int value, int code) { (void) code; data->parent = parent; data->x = x; data->y = y; data->width = width; data->height = height; data->period = period; data->value = value % period; - data->window = derwin(data->parent, - data->height, data->width, - data->y, data->x); + data->window = dlg_der_window(data->parent, + data->height, data->width, + data->y, data->x); if (data->window == 0) return -1; - (void) keypad(data->window, TRUE); dlg_mouse_setbase(getbegx(parent), getbegy(parent)); dlg_mouse_mkregion(y, x, height, width, code); return 0; } static int CleanupResult(int code, WINDOW *dialog, char *prompt, DIALOG_VARS * save_vars) { dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); dlg_restore_vars(save_vars); return code; } #define DrawObject(data) draw_cell(data) /* * Display a dialog box for entering a date */ int dialog_timebox(const char *title, const char *subtitle, int height, int width, int hour, int minute, int second) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { DLG_KEYS_DATA( DLGK_DELETE_RIGHT,KEY_DC ), HELPKEY_BINDINGS, ENTERKEY_BINDINGS, TOGGLEKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_FIRST,KEY_HOME ), DLG_KEYS_DATA( DLGK_FIELD_LAST, KEY_END ), DLG_KEYS_DATA( DLGK_FIELD_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, CHR_BACKSPACE ), DLG_KEYS_DATA( DLGK_FIELD_PREV, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+'), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NEXT), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NPAGE), DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_PREVIOUS ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif BOX hr_box, mn_box, sc_box; - int key = 0, key2, fkey; + int key, fkey; int button; int result = DLG_EXIT_UNKNOWN; WINDOW *dialog; - time_t now_time = time((time_t *) 0); + time_t now_time; struct tm current; int state = dlg_default_button(); const char **buttons = dlg_ok_labels(); char *prompt; char buffer[MAX_LEN]; DIALOG_VARS save_vars; DLG_TRACE(("# timebox args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", subtitle); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("hour", hour); DLG_TRACE2N("minute", minute); DLG_TRACE2N("second", second); now_time = time((time_t *) 0); current = *localtime(&now_time); dlg_save_vars(&save_vars); dialog_vars.separate_output = TRUE; dlg_does_output(); #ifdef KEY_RESIZE retry: #endif prompt = dlg_strclone(subtitle); - dlg_auto_size(title, prompt, &height, &width, 0, 0); + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); - height += MIN_HIGH; - if (width < MIN_WIDE) - width = MIN_WIDE; dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); dialog = dlg_new_window(height, width, dlg_box_y_ordinate(height), dlg_box_x_ordinate(width)); if (hour >= 24 || minute >= 60 || second >= 60) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } dlg_register_window(dialog, "timebox", binding); dlg_register_buttons(dialog, "timebox", buttons); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_draw_helpline(dialog, FALSE); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); /* compute positions of hour, month and year boxes */ memset(&hr_box, 0, sizeof(hr_box)); memset(&mn_box, 0, sizeof(mn_box)); memset(&sc_box, 0, sizeof(sc_box)); if (init_object(&hr_box, dialog, (width - MIN_WIDE + 1) / 2 + MARGIN, (height - MIN_HIGH + MARGIN), ONE_WIDE, ONE_HIGH, 24, hour >= 0 ? hour : current.tm_hour, 'H') < 0 || DrawObject(&hr_box) < 0) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } mvwprintw(dialog, hr_box.y, hr_box.x + ONE_WIDE + MARGIN, ":"); if (init_object(&mn_box, dialog, hr_box.x + (ONE_WIDE + 2 * MARGIN + 1), hr_box.y, hr_box.width, hr_box.height, 60, minute >= 0 ? minute : current.tm_min, 'M') < 0 || DrawObject(&mn_box) < 0) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } mvwprintw(dialog, mn_box.y, mn_box.x + ONE_WIDE + MARGIN, ":"); if (init_object(&sc_box, dialog, mn_box.x + (ONE_WIDE + 2 * MARGIN + 1), mn_box.y, mn_box.width, mn_box.height, 60, second >= 0 ? second : current.tm_sec, 'S') < 0 || DrawObject(&sc_box) < 0) { return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); } dlg_trace_win(dialog); while (result == DLG_EXIT_UNKNOWN) { BOX *obj = (state == sHR ? &hr_box : (state == sMN ? &mn_box : (state == sSC ? &sc_box : 0))); + int key2; button = (state < 0) ? 0 : state; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); if (obj != 0) dlg_set_focus(dialog, obj->window); key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } if ((key2 = dlg_char_to_button(key, buttons)) >= 0) { result = key2; } else { /* handle function-keys */ if (fkey) { switch (key) { case DLGK_MOUSE('H'): state = sHR; break; case DLGK_MOUSE('M'): state = sMN; break; case DLGK_MOUSE('S'): state = sSC; break; case DLGK_TOGGLE: case DLGK_ENTER: + result = dlg_enter_buttoncode(button); + break; + case DLGK_LEAVE: result = dlg_ok_buttoncode(button); break; case DLGK_FIELD_PREV: state = dlg_prev_ok_buttonindex(state, sHR); break; case DLGK_FIELD_NEXT: state = dlg_next_ok_buttonindex(state, sHR); break; case DLGK_FIELD_FIRST: if (obj != 0) { obj->value = 0; (void) DrawObject(obj); } break; case DLGK_FIELD_LAST: if (obj != 0) { switch (state) { case sHR: obj->value = 23; break; case sMN: case sSC: obj->value = 59; break; } (void) DrawObject(obj); } break; case DLGK_DELETE_RIGHT: if (obj != 0) { obj->value /= 10; (void) DrawObject(obj); } break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; hour = hr_box.value; minute = mn_box.value; second = sc_box.value; /* repaint */ free(prompt); - dlg_clear(); - dlg_del_window(dialog); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); goto retry; #endif default: if (is_DLGK_MOUSE(key)) { result = dlg_ok_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } else if (obj != 0) { int step = next_or_previous(key); if (step != 0) { obj->value += step; while (obj->value < 0) obj->value += obj->period; obj->value %= obj->period; (void) DrawObject(obj); } } break; } } else if (isdigit(key)) { if (obj != 0) { int digit = (key - '0'); int value = (obj->value * 10) + digit; if (value < obj->period) { obj->value = value; (void) DrawObject(obj); } else { beep(); } } - } else { + } else if (key > 0) { beep(); } } } #define DefaultFormat(dst, src) \ sprintf(dst, "%02d:%02d:%02d", \ hr_box.value, mn_box.value, sc_box.value) #if defined(HAVE_STRFTIME) if (dialog_vars.time_format != 0) { size_t used; time_t now = time((time_t *) 0); struct tm *parts = localtime(&now); parts->tm_sec = sc_box.value; parts->tm_min = mn_box.value; parts->tm_hour = hr_box.value; used = strftime(buffer, sizeof(buffer) - 1, dialog_vars.time_format, parts); if (used == 0 || *buffer == '\0') DefaultFormat(buffer, hr_box); } else #endif DefaultFormat(buffer, hr_box); dlg_add_result(buffer); - dlg_add_separator(); - dlg_add_last_key(-1); + AddLastKey(); return CleanupResult(result, dialog, prompt, &save_vars); } diff --git a/trace.c b/trace.c index 067288e775b5..e564d58b327f 100644 --- a/trace.c +++ b/trace.c @@ -1,268 +1,280 @@ /* - * $Id: trace.c,v 1.26 2018/06/13 00:06:48 tom Exp $ + * $Id: trace.c,v 1.33 2020/11/23 23:32:43 tom Exp $ * * trace.c -- implements screen-dump and keystroke-logging * - * Copyright 2007-2017,2018 Thomas E. Dickey + * Copyright 2007-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #ifdef HAVE_DLG_TRACE #ifdef NEED_WCHAR_H #include <wchar.h> #endif #include <dlg_keys.h> #include <time.h> #define myFP dialog_state.trace_output static void dlg_trace_time(const char *tag) { time_t now = time((time_t *) 0); fprintf(myFP, "%s %s", tag, ctime(&now)); } void -dlg_trace_msg(const char *fmt,...) +dlg_trace_msg(const char *fmt, ...) { if (myFP != 0) { va_list ap; va_start(ap, fmt); vfprintf(myFP, fmt, ap); va_end(ap); fflush(myFP); } } +void +dlg_trace_va_msg(const char *fmt, va_list ap) +{ + if (myFP != 0) { + vfprintf(myFP, fmt, ap); + fflush(myFP); + } +} + void dlg_trace_2s(const char *name, const char *value) { bool first = TRUE; - const char *next; int left, right = 0; if (value == 0) value = "<NULL>"; while (value[right] != '\0') { + const char *next; + value += right; if ((next = strchr(value, '\n')) != 0) { left = (int) (next - value); right = left + 1; } else { left = (int) strlen(value); right = left; } if (first) { first = FALSE; - dlg_trace_msg("#%14s=%.*s\n", name, left, value); + dlg_trace_msg("#%14s = %.*s\n", name, left, value); } else { - dlg_trace_msg("#+\t\t%.*s\n", left, value); + dlg_trace_msg("#+%13s%.*s\n", " ", left, value); } } } void dlg_trace_2n(const char *name, int value) { - dlg_trace_msg("#\t%7s=%d\n", name, value); + dlg_trace_msg("#%14s = %d\n", name, value); } void dlg_trace_win(WINDOW *win) { if (myFP != 0) { - int y, x; - int j, k; WINDOW *top = wgetparent(win); while (top != 0 && top != stdscr) { win = top; top = wgetparent(win); } if (win != 0) { int rc = getmaxy(win); int cc = getmaxx(win); chtype ch, c2; + int y, x; + int j, k; fprintf(myFP, "window %dx%d at %d,%d\n", rc, cc, getbegy(win), getbegx(win)); getyx(win, y, x); for (j = 0; j < rc; ++j) { fprintf(myFP, "%3d:", j); for (k = 0; k < cc; ++k) { #ifdef USE_WIDE_CURSES char buffer[80]; ch = mvwinch(win, j, k) & (A_CHARTEXT | A_ALTCHARSET); if (ch & A_ALTCHARSET) { c2 = dlg_asciibox(ch); if (c2 != 0) { ch = c2; } buffer[0] = (char) ch; buffer[1] = '\0'; } else { cchar_t cch; - wchar_t *uc; + const wchar_t *uc; if (win_wch(win, &cch) == ERR || (uc = wunctrl((&cch))) == 0 || uc[1] != 0 || wcwidth(uc[0]) <= 0) { buffer[0] = '.'; buffer[1] = '\0'; } else { mbstate_t state; const wchar_t *ucp = uc; memset(&state, 0, sizeof(state)); wcsrtombs(buffer, &ucp, sizeof(buffer), &state); k += wcwidth(uc[0]) - 1; } } fputs(buffer, myFP); #else ch = mvwinch(win, j, k) & (A_CHARTEXT | A_ALTCHARSET); c2 = dlg_asciibox(ch); if (c2 != 0) { ch = c2; } else if (unctrl(ch) == 0 || strlen(unctrl(ch)) > 1) { ch = '.'; } fputc((int) (ch & 0xff), myFP); #endif } fputc('\n', myFP); } wmove(win, y, x); fflush(myFP); } } } void dlg_trace_chr(int ch, int fkey) { static int last_err = 0; /* * Do not bother to trace ERR's indefinitely, since those are usually due * to relatively short polling timeouts. */ if (last_err && !fkey && ch == ERR) { ++last_err; } else if (myFP != 0) { const char *fkey_name = "?"; if (last_err) { fprintf(myFP, "skipped %d ERR's\n", last_err); last_err = 0; } if (fkey) { if (fkey > KEY_MAX || (fkey_name = keyname(fkey)) == 0) { #define CASE(name) case name: fkey_name = #name; break switch ((DLG_KEYS_ENUM) fkey) { CASE(DLGK_MIN); CASE(DLGK_OK); CASE(DLGK_CANCEL); CASE(DLGK_EXTRA); CASE(DLGK_HELP); CASE(DLGK_ESC); CASE(DLGK_PAGE_FIRST); CASE(DLGK_PAGE_LAST); CASE(DLGK_PAGE_NEXT); CASE(DLGK_PAGE_PREV); CASE(DLGK_ITEM_FIRST); CASE(DLGK_ITEM_LAST); CASE(DLGK_ITEM_NEXT); CASE(DLGK_ITEM_PREV); CASE(DLGK_FIELD_FIRST); CASE(DLGK_FIELD_LAST); CASE(DLGK_FIELD_NEXT); CASE(DLGK_FIELD_PREV); CASE(DLGK_FORM_FIRST); CASE(DLGK_FORM_LAST); CASE(DLGK_FORM_NEXT); CASE(DLGK_FORM_PREV); CASE(DLGK_GRID_UP); CASE(DLGK_GRID_DOWN); CASE(DLGK_GRID_LEFT); CASE(DLGK_GRID_RIGHT); CASE(DLGK_DELETE_LEFT); CASE(DLGK_DELETE_RIGHT); CASE(DLGK_DELETE_ALL); CASE(DLGK_ENTER); CASE(DLGK_BEGIN); CASE(DLGK_FINAL); CASE(DLGK_SELECT); CASE(DLGK_HELPFILE); CASE(DLGK_TRACE); CASE(DLGK_TOGGLE); + CASE(DLGK_LEAVE); } } } else if (ch == ERR) { fkey_name = "ERR"; last_err = 1; } else { fkey_name = unctrl((chtype) ch); if (fkey_name == 0) fkey_name = "UNKNOWN"; } if (ch >= 0) { fprintf(myFP, "chr %s (ch=%#x, fkey=%d)\n", fkey_name, ch, fkey); } else { fprintf(myFP, "chr %s (ch=%d, fkey=%d)\n", fkey_name, ch, fkey); } fflush(myFP); } } void dlg_trace(const char *fname) { if (fname != 0) { if (myFP == 0) { myFP = fopen(fname, "a"); if (myFP != 0) { dlg_trace_time("## opened at"); DLG_TRACE(("## dialog %s\n", dialog_version())); DLG_TRACE(("## vile: confmode\n")); } } } else if (myFP != 0) { dlg_trace_time("## closed at"); fclose(myFP); myFP = 0; } } #else #undef dlg_trace extern void dlg_trace(const char *); void dlg_trace(const char *fname) { (void) fname; } #endif diff --git a/treeview.c b/treeview.c index 934761ee2049..9853a16f539a 100644 --- a/treeview.c +++ b/treeview.c @@ -1,672 +1,674 @@ /* - * $Id: treeview.c,v 1.32 2018/06/19 22:57:01 tom Exp $ + * $Id: treeview.c,v 1.43 2020/11/23 00:38:31 tom Exp $ * * treeview.c -- implements the treeview dialog * - * Copyright 2012-2016,2018 Thomas E. Dickey + * Copyright 2012-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ -#include <dialog.h> +#include <dlg_internals.h> #include <dlg_keys.h> #define INDENT 3 #define MIN_HIGH (1 + (5 * MARGIN)) typedef struct { /* the outer-window */ WINDOW *dialog; bool is_check; int box_y; int box_x; int check_x; int item_x; int use_height; int use_width; /* the inner-window */ WINDOW *list; DIALOG_LISTITEM *items; int item_no; int *depths; const char *states; } ALL_DATA; /* * Print list item. The 'selected' parameter is true if 'choice' is the * current item. That one is colored differently from the other items. */ static void print_item(ALL_DATA * data, DIALOG_LISTITEM * item, const char *states, int depths, int choice, int selected) { WINDOW *win = data->list; chtype save = dlg_get_attrs(win); int i; bool first = TRUE; int climit = (getmaxx(win) - data->check_x + 1); const char *show = (dialog_vars.no_items ? item->name : item->text); /* Clear 'residue' of last item */ dlg_attrset(win, menubox_attr); (void) wmove(win, choice, 0); for (i = 0; i < data->use_width; i++) (void) waddch(win, ' '); (void) wmove(win, choice, data->check_x); dlg_attrset(win, selected ? check_selected_attr : check_attr); (void) wprintw(win, data->is_check ? "[%c]" : "(%c)", states[item->state]); dlg_attrset(win, menubox_attr); dlg_attrset(win, selected ? item_selected_attr : item_attr); for (i = 0; i < depths; ++i) { int j; (void) wmove(win, choice, data->item_x + INDENT * i); (void) waddch(win, ACS_VLINE); for (j = INDENT - 1; j > 0; --j) (void) waddch(win, ' '); } (void) wmove(win, choice, data->item_x + INDENT * depths); dlg_print_listitem(win, show, climit, first, selected); if (selected) { dlg_item_help(item->help); } dlg_attrset(win, save); } static void print_list(ALL_DATA * data, int choice, int scrollamt, int max_choice) { int i; int cur_y, cur_x; getyx(data->dialog, cur_y, cur_x); for (i = 0; i < max_choice; i++) { print_item(data, &data->items[scrollamt + i], data->states, data->depths[scrollamt + i], i, i == choice); } (void) wnoutrefresh(data->list); dlg_draw_scrollbar(data->dialog, (long) (scrollamt), (long) (scrollamt), (long) (scrollamt + max_choice), (long) (data->item_no), data->box_x + data->check_x, data->box_x + data->use_width, data->box_y, data->box_y + data->use_height + 1, menubox_border2_attr, menubox_border_attr); (void) wmove(data->dialog, cur_y, cur_x); } static bool check_hotkey(DIALOG_LISTITEM * items, int choice) { bool result = FALSE; if (dlg_match_char(dlg_last_getc(), (dialog_vars.no_tags ? items[choice].text : items[choice].name))) { result = TRUE; } return result; } /* * This is an alternate interface to 'treeview' which allows the application * to read the list item states back directly without putting them in the * output buffer. */ int dlg_treeview(const char *title, const char *cprompt, int height, int width, int list_height, int item_no, DIALOG_LISTITEM * items, const char *states, int *depths, int flag, int *current_item) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_END ), DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_LL ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+' ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE) ), DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ), TOGGLEKEY_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ #ifdef KEY_RESIZE int old_height = height; int old_width = width; #endif ALL_DATA all; int i, j, key2, found, x, y, cur_y, box_x, box_y; - int key = 0, fkey; + int key, fkey; int button = dialog_state.visit_items ? -1 : dlg_default_button(); int choice = dlg_default_listitem(items); int scrollamt = 0; int max_choice; - int was_mouse; int use_height; int use_width, name_width, text_width, tree_width; int result = DLG_EXIT_UNKNOWN; int num_states; WINDOW *dialog, *list; char *prompt = dlg_strclone(cprompt); const char **buttons = dlg_ok_labels(); const char *widget_name; /* we need at least two states */ if (states == 0 || strlen(states) < 2) states = " *"; num_states = (int) strlen(states); dialog_state.plain_buttons = TRUE; memset(&all, 0, sizeof(all)); all.items = items; all.item_no = item_no; all.states = states; all.depths = depths; dlg_does_output(); dlg_tab_correct_str(prompt); /* * If this is a radiobutton list, ensure that no more than one item is * selected initially. Allow none to be selected, since some users may * wish to provide this flavor. */ if (flag == FLAG_RADIO) { bool first = TRUE; for (i = 0; i < item_no; i++) { if (items[i].state) { if (first) { first = FALSE; } else { items[i].state = 0; } } } } else { all.is_check = TRUE; } widget_name = "treeview"; #ifdef KEY_RESIZE retry: #endif use_height = list_height; use_width = dlg_calc_list_width(item_no, items) + 10; use_width = MAX(26, use_width); if (use_height == 0) { /* calculate height without items (4) */ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width); dlg_calc_listh(&height, &use_height, item_no); } else { dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, use_width); } dlg_button_layout(buttons, &width); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); dialog = dlg_new_window(height, width, y, x); dlg_register_window(dialog, widget_name, binding); dlg_register_buttons(dialog, widget_name, buttons); dlg_mouse_setbase(x, y); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); all.use_width = width - 4; cur_y = getcury(dialog); box_y = cur_y + 1; box_x = (width - all.use_width) / 2 - 1; /* * After displaying the prompt, we know how much space we really have. * Limit the list to avoid overwriting the ok-button. */ - if (use_height + MIN_HIGH > height - cur_y) - use_height = height - MIN_HIGH - cur_y; + use_height = height - MIN_HIGH - cur_y; if (use_height <= 0) use_height = 1; max_choice = MIN(use_height, item_no); /* create new window for the list */ list = dlg_sub_window(dialog, use_height, all.use_width, y + box_y + 1, x + box_x + 1); /* draw a box around the list items */ dlg_draw_box(dialog, box_y, box_x, use_height + 2 * MARGIN, all.use_width + 2 * MARGIN, menubox_border_attr, menubox_border2_attr); text_width = 0; name_width = 0; tree_width = 0; /* Find length of longest item to center treeview */ for (i = 0; i < item_no; i++) { tree_width = MAX(tree_width, INDENT * depths[i]); text_width = MAX(text_width, dlg_count_columns(items[i].text)); name_width = MAX(name_width, dlg_count_columns(items[i].name)); } if (dialog_vars.no_tags && !dialog_vars.no_items) { tree_width += text_width; } else if (dialog_vars.no_items) { tree_width += name_width; } else { tree_width += (text_width + name_width); } use_width = (all.use_width - 4); tree_width = MIN(tree_width, all.use_width); all.check_x = (use_width - tree_width) / 2; all.item_x = ((dialog_vars.no_tags ? 0 : (dialog_vars.no_items ? 0 : (2 + name_width))) + all.check_x + 4); /* ensure we are scrolled to show the current choice */ if (choice >= (max_choice + scrollamt)) { scrollamt = choice - max_choice + 1; choice = max_choice - 1; } /* register the new window, along with its borders */ dlg_mouse_mkbigregion(box_y + 1, box_x, use_height, all.use_width + 2, KEY_MAX, 1, 1, 1 /* by lines */ ); all.dialog = dialog; all.box_x = box_x; all.box_y = box_y; all.use_height = use_height; all.list = list; print_list(&all, choice, scrollamt, max_choice); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); dlg_trace_win(dialog); + while (result == DLG_EXIT_UNKNOWN) { + int was_mouse; + if (button < 0) /* --visit-items */ wmove(dialog, box_y + choice + 1, box_x + all.check_x + 2); key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } was_mouse = (fkey && is_DLGK_MOUSE(key)); if (was_mouse) key -= M_EVENT; if (was_mouse && (key >= KEY_MAX)) { i = (key - KEY_MAX); if (i < max_choice) { choice = (key - KEY_MAX); print_list(&all, choice, scrollamt, max_choice); key = DLGK_TOGGLE; /* force the selected item to toggle */ } else { beep(); continue; } fkey = FALSE; } else if (was_mouse && key >= KEY_MIN) { key = dlg_lookup_key(dialog, key, &fkey); } /* * A space toggles the item status. */ if (key == DLGK_TOGGLE) { int current = scrollamt + choice; int next = items[current].state + 1; if (next >= num_states) next = 0; if (flag == FLAG_CHECK) { /* checklist? */ items[current].state = next; } else { for (i = 0; i < item_no; i++) { if (i != current) { items[i].state = 0; } } if (items[current].state) { items[current].state = next ? next : 1; } else { items[current].state = 1; } } print_list(&all, choice, scrollamt, max_choice); continue; /* wait for another key press */ } /* * Check if key pressed matches first character of any item tag in * list. If there is more than one match, we will cycle through * each one as the same key is pressed repeatedly. */ found = FALSE; if (!fkey) { if (button < 0 || !dialog_state.visit_items) { for (j = scrollamt + choice + 1; j < item_no; j++) { if (check_hotkey(items, j)) { found = TRUE; i = j - scrollamt; break; } } if (!found) { for (j = 0; j <= scrollamt + choice; j++) { if (check_hotkey(items, j)) { found = TRUE; i = j - scrollamt; break; } } } if (found) dlg_flush_getc(); } else if ((j = dlg_char_to_button(key, buttons)) >= 0) { button = j; ungetch('\n'); continue; } } /* * A single digit (1-9) positions the selection to that line in the * current screen. */ if (!found && (key <= '9') && (key > '0') && (key - '1' < max_choice)) { found = TRUE; i = key - '1'; } if (!found) { if (fkey) { found = TRUE; switch (key) { case DLGK_ITEM_FIRST: i = -scrollamt; break; case DLGK_ITEM_LAST: i = item_no - 1 - scrollamt; break; case DLGK_PAGE_PREV: if (choice) i = 0; else if (scrollamt != 0) i = -MIN(scrollamt, max_choice); else continue; break; case DLGK_PAGE_NEXT: i = MIN(choice + max_choice, item_no - scrollamt - 1); break; case DLGK_ITEM_PREV: i = choice - 1; if (choice == 0 && scrollamt == 0) continue; break; case DLGK_ITEM_NEXT: i = choice + 1; if (scrollamt + choice >= item_no - 1) continue; break; default: found = FALSE; break; } } } if (found) { if (i != choice) { if (i < 0 || i >= max_choice) { if (i < 0) { scrollamt += i; choice = 0; } else { choice = max_choice - 1; scrollamt += (i - max_choice + 1); } print_list(&all, choice, scrollamt, max_choice); } else { choice = i; print_list(&all, choice, scrollamt, max_choice); } } continue; /* wait for another key press */ } if (fkey) { switch (key) { case DLGK_ENTER: result = dlg_enter_buttoncode(button); break; + case DLGK_LEAVE: + result = dlg_ok_buttoncode(button); + break; case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); /* reset data */ height = old_height; width = old_width; /* repaint */ - dlg_clear(); - dlg_del_window(dialog); - refresh(); - dlg_mouse_free_regions(); + _dlg_resize_cleanup(dialog); goto retry; #endif default: if (was_mouse) { if ((key2 = dlg_ok_buttoncode(key)) >= 0) { result = key2; break; } beep(); } } - } else { + } else if (key > 0) { beep(); } } dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); *current_item = (scrollamt + choice); return result; } /* * Display a set of items as a tree. */ int dialog_treeview(const char *title, const char *cprompt, int height, int width, int list_height, int item_no, char **items, int flag) { int result; int i, j; DIALOG_LISTITEM *listitems; int *depths; bool show_status = FALSE; int current = 0; char *help_result; DLG_TRACE(("# treeview args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); DLG_TRACE2N("lheight", list_height); DLG_TRACE2N("llength", item_no); /* FIXME dump the items[][] too */ DLG_TRACE2N("flag", flag); listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); assert_ptr(listitems, "dialog_treeview"); depths = dlg_calloc(int, (size_t) item_no + 1); assert_ptr(depths, "dialog_treeview"); for (i = j = 0; i < item_no; ++i) { listitems[i].name = items[j++]; listitems[i].text = (dialog_vars.no_items ? dlg_strempty() : items[j++]); listitems[i].state = !dlg_strcmp(items[j++], "on"); depths[i] = atoi(items[j++]); listitems[i].help = ((dialog_vars.item_help) ? items[j++] : dlg_strempty()); } dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); result = dlg_treeview(title, cprompt, height, width, list_height, item_no, listitems, NULL, depths, flag, ¤t); switch (result) { case DLG_EXIT_OK: /* FALLTHRU */ case DLG_EXIT_EXTRA: show_status = TRUE; break; case DLG_EXIT_HELP: dlg_add_help_listitem(&result, &help_result, &listitems[current]); if ((show_status = dialog_vars.help_status)) { if (dialog_vars.separate_output) { dlg_add_string(help_result); dlg_add_separator(); } else { dlg_add_quoted(help_result); } } else { dlg_add_string(help_result); } break; } if (show_status) { for (i = 0; i < item_no; i++) { if (listitems[i].state) { + if (dlg_need_separator()) + dlg_add_separator(); if (dialog_vars.separate_output) { dlg_add_string(listitems[i].name); - dlg_add_separator(); } else { - if (dlg_need_separator()) - dlg_add_separator(); if (flag == FLAG_CHECK) dlg_add_quoted(listitems[i].name); else dlg_add_string(listitems[i].name); } } } - dlg_add_last_key(-1); + AddLastKey(); } dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); free(depths); free(listitems); return result; } diff --git a/ttysize.c b/ttysize.c index f38708908ed8..fd9a97227187 100644 --- a/ttysize.c +++ b/ttysize.c @@ -1,87 +1,87 @@ /* - * $Id: ttysize.c,v 1.1 2018/06/09 02:03:03 tom Exp $ + * $Id: ttysize.c,v 1.2 2019/07/25 00:07:15 tom Exp $ * * ttysize.c -- obtain terminal-size for dialog * - * Copyright 2018 Thomas E. Dickey + * Copyright 2018,2019 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> /* * This is based on work I did for ncurses in 1997, and improved/extended for * other terminal-based programs. The comments are from my original version -TD */ #ifdef HAVE_TERMIOS_H #include <termios.h> #endif #ifdef HAVE_SYS_IOCTL_H # include <sys/ioctl.h> #endif #ifdef NEED_PTEM_H /* On SCO, they neglected to define struct winsize in termios.h -- it's only * in termio.h and ptem.h (the former conflicts with other definitions). */ # include <sys/stream.h> # include <sys/ptem.h> #endif /* * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, * Solaris, IRIX) define TIOCGWINSZ and struct winsize. */ #if defined(TIOCGSIZE) # define IOCTL_WINSIZE TIOCGSIZE # define STRUCT_WINSIZE struct ttysize # define WINSIZE_ROWS(n) (int)n.ts_lines # define WINSIZE_COLS(n) (int)n.ts_cols #elif defined(TIOCGWINSZ) # define IOCTL_WINSIZE TIOCGWINSZ # define STRUCT_WINSIZE struct winsize # define WINSIZE_ROWS(n) (int)n.ws_row # define WINSIZE_COLS(n) (int)n.ws_col #else # undef HAVE_SIZECHANGE #endif int dlg_ttysize(int fd, int *high, int *wide) { int rc = -1; #ifdef HAVE_SIZECHANGE if (isatty(fd)) { STRUCT_WINSIZE size; if (ioctl(fd, IOCTL_WINSIZE, &size) >= 0) { *high = WINSIZE_ROWS(size); *wide = WINSIZE_COLS(size); rc = 0; } } #else - high = 24; - wide = 80; + *high = 24; + *wide = 80; #endif /* HAVE_SIZECHANGE */ return rc; } diff --git a/ui_getc.c b/ui_getc.c index 9d3c76df530d..5be01b88626b 100644 --- a/ui_getc.c +++ b/ui_getc.c @@ -1,668 +1,681 @@ /* - * $Id: ui_getc.c,v 1.70 2018/06/14 00:05:05 tom Exp $ + * $Id: ui_getc.c,v 1.80 2020/11/25 01:08:30 tom Exp $ * * ui_getc.c - user interface glue for getc() * - * Copyright 2001-2013,2018 Thomas E. Dickey + * Copyright 2001-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #include <dlg_keys.h> +#include <dlg_internals.h> #ifdef NEED_WCHAR_H #include <wchar.h> #endif #if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> #else # if HAVE_SYS_TIME_H # include <sys/time.h> # else # include <time.h> # endif #endif #ifdef HAVE_SYS_WAIT_H #include <sys/wait.h> #endif #ifdef __QNX__ #include <sys/select.h> #endif #ifndef WEXITSTATUS # ifdef HAVE_TYPE_UNIONWAIT # define WEXITSTATUS(status) (status.w_retcode) # else # define WEXITSTATUS(status) (((status) & 0xff00) >> 8) # endif #endif #ifndef WTERMSIG # ifdef HAVE_TYPE_UNIONWAIT # define WTERMSIG(status) (status.w_termsig) # else # define WTERMSIG(status) ((status) & 0x7f) # endif #endif void dlg_add_callback(DIALOG_CALLBACK * p) { p->next = dialog_state.getc_callbacks; dialog_state.getc_callbacks = p; - wtimeout(p->win, WTIMEOUT_VAL); + dlg_set_timeout(p->win, TRUE); } /* * Like dlg_add_callback(), but providing for cleanup of caller's associated * state. */ void dlg_add_callback_ref(DIALOG_CALLBACK ** p, DIALOG_FREEBACK freeback) { (*p)->caller = p; (*p)->freeback = freeback; dlg_add_callback(*p); } void dlg_remove_callback(DIALOG_CALLBACK * p) { DIALOG_CALLBACK *q; if (p->input != 0) { FILE *input = p->input; fclose(input); if (p->input == dialog_state.pipe_input) dialog_state.pipe_input = 0; /* more than one callback can have the same input */ for (q = dialog_state.getc_callbacks; q != 0; q = q->next) { if (q->input == input) { q->input = 0; } } } if (!(p->keep_win)) dlg_del_window(p->win); if ((q = dialog_state.getc_callbacks) == p) { dialog_state.getc_callbacks = p->next; } else { while (q != 0) { if (q->next == p) { q->next = p->next; break; } q = q->next; } } /* handle dlg_add_callback_ref cleanup */ if (p->freeback != 0) p->freeback(p); if (p->caller != 0) *(p->caller) = 0; free(p); } /* * A select() might find more than one input ready for service. Handle them * all. */ static bool handle_inputs(WINDOW *win) { bool result = FALSE; DIALOG_CALLBACK *p; DIALOG_CALLBACK *q; int cur_y, cur_x; int state = ERR; getyx(win, cur_y, cur_x); for (p = dialog_state.getc_callbacks, q = 0; p != 0; p = q) { q = p->next; if ((p->handle_input != 0) && p->input_ready) { p->input_ready = FALSE; if (state == ERR) { state = curs_set(0); } if (p->handle_input(p)) { result = TRUE; } } } - if (result) { + if (result && _dlg_find_window(win)) { (void) wmove(win, cur_y, cur_x); /* Restore cursor position */ wrefresh(win); + } else { + result = FALSE; } if (state != ERR) curs_set(state); return result; } static bool may_handle_inputs(void) { bool result = FALSE; DIALOG_CALLBACK *p; for (p = dialog_state.getc_callbacks; p != 0; p = p->next) { if (p->input != 0) { result = TRUE; break; } } return result; } /* * Check any any inputs registered via callbacks, to see if there is any input * available. If there is, return a file-descriptor which should be read. * Otherwise, return -1. */ static int check_inputs(void) { DIALOG_CALLBACK *p; fd_set read_fds; struct timeval test; - int last_fd = -1; - int fd; - int found; int result = -1; if ((p = dialog_state.getc_callbacks) != 0) { + int last_fd = -1; + int found; + int fd; + FD_ZERO(&read_fds); while (p != 0) { + p->input_ready = FALSE; if (p->input != 0 && (fd = fileno(p->input)) >= 0) { FD_SET(fd, &read_fds); if (last_fd < fd) last_fd = fd; } p = p->next; } test.tv_sec = 0; test.tv_usec = WTIMEOUT_VAL * 1000; found = select(last_fd + 1, &read_fds, (fd_set *) 0, (fd_set *) 0, &test); if (found > 0) { for (p = dialog_state.getc_callbacks; p != 0; p = p->next) { if (p->input != 0 && (fd = fileno(p->input)) >= 0 && FD_ISSET(fd, &read_fds)) { p->input_ready = TRUE; result = fd; } } } } return result; } int dlg_getc_callbacks(int ch, int fkey, int *result) { int code = FALSE; DIALOG_CALLBACK *p, *q; if ((p = dialog_state.getc_callbacks) != 0) { if (check_inputs() >= 0) { do { q = p->next; if (p->input_ready) { if (!(p->handle_getc(p, ch, fkey, result))) { dlg_remove_callback(p); } } } while ((p = q) != 0); } code = (dialog_state.getc_callbacks != 0); } return code; } static void dlg_raise_window(WINDOW *win) { - touchwin(win); - wmove(win, getcury(win), getcurx(win)); - wnoutrefresh(win); - doupdate(); + if (_dlg_find_window(win)) { + touchwin(win); + wmove(win, getcury(win), getcurx(win)); + wnoutrefresh(win); + doupdate(); + } } /* * This is a work-around for the case where we actually need the wide-character * code versus a byte stream. */ static int last_getc = ERR; #ifdef USE_WIDE_CURSES static char last_getc_bytes[80]; static int have_last_getc; static int used_last_getc; #endif int dlg_last_getc(void) { #ifdef USE_WIDE_CURSES if (used_last_getc != 1) return ERR; /* not really an error... */ #endif return last_getc; } void dlg_flush_getc(void) { last_getc = ERR; #ifdef USE_WIDE_CURSES have_last_getc = 0; used_last_getc = 0; #endif } /* * Report the last key entered by the user. The 'mode' parameter controls * the way it is separated from other results: * -2 (no separator) * -1 (separator after the key name) * 0 (separator is optionally before the key name) * 1 (same as -1) */ void dlg_add_last_key(int mode) { if (dialog_vars.last_key) { if (mode >= 0) { if (mode > 0) { dlg_add_last_key(-1); } else { if (dlg_need_separator()) dlg_add_separator(); dlg_add_last_key(-2); } } else { char temp[80]; sprintf(temp, "%d", last_getc); + DLG_TRACE(("# dlg_add_last_key(%s)\n", temp)); dlg_add_string(temp); if (mode == -1) dlg_add_separator(); } } } /* * Check if the stream has been unexpectedly closed, returning false in that * case. */ static bool valid_file(FILE *fp) { bool code = FALSE; int fd = fileno(fp); if (fd >= 0) { if (fcntl(fd, F_GETFL, 0) >= 0) { code = TRUE; } } return code; } static int really_getch(WINDOW *win, int *fkey) { int ch; #ifdef USE_WIDE_CURSES - int code; mbstate_t state; - wchar_t my_wchar; wint_t my_wint; /* * We get a wide character, translate it to multibyte form to avoid * having to change the rest of the code to use wide-characters. */ if (used_last_getc >= have_last_getc) { + int code; + wchar_t my_wchar; + used_last_getc = 0; have_last_getc = 0; ch = ERR; *fkey = 0; code = wget_wch(win, &my_wint); my_wchar = (wchar_t) my_wint; switch (code) { case KEY_CODE_YES: ch = *fkey = my_wchar; last_getc = my_wchar; break; case OK: memset(&state, 0, sizeof(state)); have_last_getc = (int) wcrtomb(last_getc_bytes, my_wchar, &state); if (have_last_getc < 0) { have_last_getc = used_last_getc = 0; last_getc_bytes[0] = (char) my_wchar; } ch = (int) CharOf(last_getc_bytes[used_last_getc++]); last_getc = my_wchar; break; case ERR: ch = ERR; last_getc = ERR; break; default: break; } } else { ch = (int) CharOf(last_getc_bytes[used_last_getc++]); } #else ch = wgetch(win); last_getc = ch; *fkey = (ch > KEY_MIN && ch < KEY_MAX); #endif return ch; } static DIALOG_CALLBACK * next_callback(DIALOG_CALLBACK * p) { if ((p = dialog_state.getc_redirect) != 0) { p = p->next; } else { p = dialog_state.getc_callbacks; } return p; } static DIALOG_CALLBACK * prev_callback(DIALOG_CALLBACK * p) { DIALOG_CALLBACK *q; if ((p = dialog_state.getc_redirect) != 0) { if (p == dialog_state.getc_callbacks) { for (p = dialog_state.getc_callbacks; p->next != 0; p = p->next) ; } else { for (q = dialog_state.getc_callbacks; q->next != p; q = q->next) ; p = q; } } else { p = dialog_state.getc_callbacks; } return p; } #define isBeforeChr(chr) ((chr) == before_chr && !before_fkey) #define isBeforeFkey(chr) ((chr) == before_chr && before_fkey) /* * Read a character from the given window. Handle repainting here (to simplify * things in the calling application). Also, if input-callback(s) are set up, * poll the corresponding files and handle the updates, e.g., for displaying a * tailbox. */ int dlg_getc(WINDOW *win, int *fkey) { WINDOW *save_win = win; int ch = ERR; int before_chr; int before_fkey; int result; bool done = FALSE; bool literal = FALSE; DIALOG_CALLBACK *p = 0; - int interval = (dialog_vars.timeout_secs * 1000); + int interval = dlg_set_timeout(win, may_handle_inputs()); time_t expired = time((time_t *) 0) + dialog_vars.timeout_secs; time_t current; - if (may_handle_inputs()) - wtimeout(win, WTIMEOUT_VAL); - else if (interval > 0) - wtimeout(win, interval); - while (!done) { bool handle_others = FALSE; + if (_dlg_find_window(win) == NULL) + break; + /* * If there was no pending file-input, check the keyboard. */ ch = really_getch(win, fkey); if (literal) { done = TRUE; continue; } before_chr = ch; before_fkey = *fkey; ch = dlg_lookup_key(win, ch, fkey); dlg_trace_chr(ch, *fkey); current = time((time_t *) 0); /* * If we acquired a fkey value, then it is one of dialog's builtin * codes such as DLGK_HELPFILE. */ if (!*fkey || *fkey != before_fkey) { switch (ch) { case CHR_LITERAL: literal = TRUE; keypad(win, FALSE); continue; case CHR_REPAINT: - (void) touchwin(win); - (void) wrefresh(curscr); + if (_dlg_find_window(win)) { + (void) touchwin(win); + (void) wrefresh(curscr); + } break; case ERR: /* wtimeout() in effect; check for file I/O */ if (interval > 0 && current >= expired) { + int status; DLG_TRACE(("# dlg_getc: timeout expired\n")); + if (dlg_getenv_num("DIALOG_TIMEOUT", &status)) { + dlg_exiterr("timeout"); + } ch = ESC; done = TRUE; } else if (!valid_file(stdin) || !valid_file(dialog_state.screen_output)) { DLG_TRACE(("# dlg_getc: input or output is invalid\n")); ch = ESC; done = TRUE; } else if (check_inputs()) { - if (handle_inputs(win)) + if (_dlg_find_window(win) && handle_inputs(win)) dlg_raise_window(win); else done = TRUE; } else { done = (interval <= 0); } break; case DLGK_HELPFILE: - if (dialog_vars.help_file) { + if (dialog_vars.help_file && _dlg_find_window(win)) { int yold, xold; getyx(win, yold, xold); dialog_helpfile("HELP", dialog_vars.help_file, 0, 0); dlg_raise_window(win); wmove(win, yold, xold); } continue; case DLGK_FIELD_PREV: /* FALLTHRU */ case KEY_BTAB: /* FALLTHRU */ case DLGK_FIELD_NEXT: /* FALLTHRU */ case TAB: /* Handle tab/backtab as a special case for traversing between * the nominal "current" window, and other windows having * callbacks. If the nominal (control) window closes, we'll * close the windows with callbacks. */ if (dialog_state.getc_callbacks != 0 && (isBeforeChr(TAB) || isBeforeFkey(KEY_BTAB))) { p = (isBeforeChr(TAB) ? next_callback(p) : prev_callback(p)); if ((dialog_state.getc_redirect = p) != 0) { win = p->win; } else { win = save_win; } dlg_raise_window(win); break; } /* FALLTHRU */ default: #ifdef NO_LEAKS if (isBeforeChr(DLG_CTRL('P'))) { /* for testing, ^P closes the connection */ close(0); close(1); close(2); break; } #endif handle_others = TRUE; break; #ifdef HAVE_DLG_TRACE case CHR_TRACE: dlg_trace_win(win); break; #endif } } else { handle_others = TRUE; } if (handle_others) { if ((p = dialog_state.getc_redirect) != 0) { if (!(p->handle_getc(p, ch, *fkey, &result))) { done = (p->win == save_win) && (!p->keep_win); dlg_remove_callback(p); dialog_state.getc_redirect = 0; win = save_win; } } else { done = TRUE; } } } - if (literal) + if (literal && _dlg_find_window(win)) keypad(win, TRUE); return ch; } static void finish_bg(int sig GCC_UNUSED) { end_dialog(); dlg_exit(DLG_EXIT_ERROR); } /* * If we have callbacks active, purge the list of all that are not marked * to keep in the background. If any remain, run those in a background * process. */ void dlg_killall_bg(int *retval) { DIALOG_CALLBACK *cb; - int pid; #ifdef HAVE_TYPE_UNIONWAIT union wait wstatus; #else int wstatus; #endif if ((cb = dialog_state.getc_callbacks) != 0) { while (cb != 0) { if (cb->keep_bg) { cb = cb->next; } else { dlg_remove_callback(cb); cb = dialog_state.getc_callbacks; } } if (dialog_state.getc_callbacks != 0) { + int pid; refresh(); fflush(stdout); fflush(stderr); reset_shell_mode(); if ((pid = fork()) != 0) { _exit(pid > 0 ? DLG_EXIT_OK : DLG_EXIT_ERROR); - } else if (pid == 0) { /* child */ + } else { /* child, pid==0 */ if ((pid = fork()) != 0) { /* * Echo the process-id of the grandchild so a shell script * can read that, and kill that process. We'll wait around * until then. Our parent has already left, leaving us * temporarily orphaned. */ if (pid > 0) { /* parent */ fprintf(stderr, "%d\n", pid); fflush(stderr); } /* wait for child */ #ifdef HAVE_WAITPID while (-1 == waitpid(pid, &wstatus, 0)) { #ifdef EINTR if (errno == EINTR) continue; #endif /* EINTR */ #ifdef ERESTARTSYS if (errno == ERESTARTSYS) continue; #endif /* ERESTARTSYS */ break; } #else while (wait(&wstatus) != pid) /* do nothing */ ; #endif _exit(WEXITSTATUS(wstatus)); - } else if (pid == 0) { + } else { /* child, pid==0 */ if (!dialog_vars.cant_kill) (void) signal(SIGHUP, finish_bg); (void) signal(SIGINT, finish_bg); (void) signal(SIGQUIT, finish_bg); (void) signal(SIGSEGV, finish_bg); while (dialog_state.getc_callbacks != 0) { int fkey = 0; dlg_getc_callbacks(ERR, fkey, retval); napms(1000); } } } } } } diff --git a/util.c b/util.c index 5b0efb74fcb1..992be3f433f5 100644 --- a/util.c +++ b/util.c @@ -1,2779 +1,3045 @@ /* - * $Id: util.c,v 1.272 2018/06/21 23:47:10 tom Exp $ + * $Id: util.c,v 1.300 2021/01/17 22:10:56 tom Exp $ * * util.c -- miscellaneous utilities for dialog * - * Copyright 2000-2016,2018 Thomas E. Dickey + * Copyright 2000-2020,2021 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> #include <dlg_keys.h> +#include <dlg_internals.h> + +#include <sys/time.h> #ifdef HAVE_SETLOCALE #include <locale.h> #endif #ifdef NEED_WCHAR_H #include <wchar.h> #endif -#ifdef NCURSES_VERSION -#if defined(HAVE_NCURSESW_TERM_H) +#ifdef HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif + +#if defined(NCURSES_VERSION) +#define CAN_KEEP_TITE 1 +#elif defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 800000000) +#define CAN_KEEP_TITE 1 +#else +#define CAN_KEEP_TITE 0 +#endif + +#if CAN_KEEP_TITE +#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include <ncursesw/term.h> -#elif defined(HAVE_NCURSES_TERM_H) +#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include <ncurses/term.h> #else #include <term.h> #endif #endif #if defined(HAVE_WCHGAT) # if defined(NCURSES_VERSION_PATCH) # if NCURSES_VERSION_PATCH >= 20060715 # define USE_WCHGAT 1 # else # define USE_WCHGAT 0 # endif # else # define USE_WCHGAT 1 # endif #else # define USE_WCHGAT 0 #endif /* globals */ DIALOG_STATE dialog_state; DIALOG_VARS dialog_vars; #if !(defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT)) #define NEED_WGETPARENT 1 #else #undef NEED_WGETPARENT #endif #define concat(a,b) a##b #ifdef HAVE_RC_FILE #define RC_DATA(name,comment) , #name "_color", comment " color" #else #define RC_DATA(name,comment) /*nothing */ #endif #ifdef HAVE_COLOR #include <dlg_colors.h> +#ifdef HAVE_RC_FILE2 +#define COLOR_DATA(upr) , \ + concat(DLGC_FG_,upr), \ + concat(DLGC_BG_,upr), \ + concat(DLGC_HL_,upr), \ + concat(DLGC_UL_,upr), \ + concat(DLGC_RV_,upr) +#else /* HAVE_RC_FILE2 */ #define COLOR_DATA(upr) , \ concat(DLGC_FG_,upr), \ concat(DLGC_BG_,upr), \ concat(DLGC_HL_,upr) -#else +#endif /* HAVE_RC_FILE2 */ +#else /* HAVE_COLOR */ #define COLOR_DATA(upr) /*nothing */ -#endif - -#define DATA(atr,upr,lwr,cmt) { atr COLOR_DATA(upr) RC_DATA(lwr,cmt) } +#endif /* HAVE_COLOR */ #define UseShadow(dw) ((dw) != 0 && (dw)->normal != 0 && (dw)->shadow != 0) /* * Table of color and attribute values, default is for mono display. * The order matches the DIALOG_ATR() values. */ +#define DATA(atr,upr,lwr,cmt) { atr COLOR_DATA(upr) RC_DATA(lwr,cmt) } /* *INDENT-OFF* */ DIALOG_COLORS dlg_color_table[] = { DATA(A_NORMAL, SCREEN, screen, "Screen"), DATA(A_NORMAL, SHADOW, shadow, "Shadow"), DATA(A_REVERSE, DIALOG, dialog, "Dialog box"), DATA(A_REVERSE, TITLE, title, "Dialog box title"), DATA(A_REVERSE, BORDER, border, "Dialog box border"), DATA(A_BOLD, BUTTON_ACTIVE, button_active, "Active button"), DATA(A_DIM, BUTTON_INACTIVE, button_inactive, "Inactive button"), DATA(A_UNDERLINE, BUTTON_KEY_ACTIVE, button_key_active, "Active button key"), DATA(A_UNDERLINE, BUTTON_KEY_INACTIVE, button_key_inactive, "Inactive button key"), DATA(A_NORMAL, BUTTON_LABEL_ACTIVE, button_label_active, "Active button label"), DATA(A_NORMAL, BUTTON_LABEL_INACTIVE, button_label_inactive, "Inactive button label"), DATA(A_REVERSE, INPUTBOX, inputbox, "Input box"), DATA(A_REVERSE, INPUTBOX_BORDER, inputbox_border, "Input box border"), DATA(A_REVERSE, SEARCHBOX, searchbox, "Search box"), DATA(A_REVERSE, SEARCHBOX_TITLE, searchbox_title, "Search box title"), DATA(A_REVERSE, SEARCHBOX_BORDER, searchbox_border, "Search box border"), DATA(A_REVERSE, POSITION_INDICATOR, position_indicator, "File position indicator"), DATA(A_REVERSE, MENUBOX, menubox, "Menu box"), DATA(A_REVERSE, MENUBOX_BORDER, menubox_border, "Menu box border"), DATA(A_REVERSE, ITEM, item, "Item"), DATA(A_NORMAL, ITEM_SELECTED, item_selected, "Selected item"), DATA(A_REVERSE, TAG, tag, "Tag"), DATA(A_REVERSE, TAG_SELECTED, tag_selected, "Selected tag"), DATA(A_NORMAL, TAG_KEY, tag_key, "Tag key"), DATA(A_BOLD, TAG_KEY_SELECTED, tag_key_selected, "Selected tag key"), DATA(A_REVERSE, CHECK, check, "Check box"), DATA(A_REVERSE, CHECK_SELECTED, check_selected, "Selected check box"), DATA(A_REVERSE, UARROW, uarrow, "Up arrow"), DATA(A_REVERSE, DARROW, darrow, "Down arrow"), DATA(A_NORMAL, ITEMHELP, itemhelp, "Item help-text"), DATA(A_BOLD, FORM_ACTIVE_TEXT, form_active_text, "Active form text"), DATA(A_REVERSE, FORM_TEXT, form_text, "Form text"), DATA(A_NORMAL, FORM_ITEM_READONLY, form_item_readonly, "Readonly form item"), DATA(A_REVERSE, GAUGE, gauge, "Dialog box gauge"), DATA(A_REVERSE, BORDER2, border2, "Dialog box border2"), DATA(A_REVERSE, INPUTBOX_BORDER2, inputbox_border2, "Input box border2"), DATA(A_REVERSE, SEARCHBOX_BORDER2, searchbox_border2, "Search box border2"), DATA(A_REVERSE, MENUBOX_BORDER2, menubox_border2, "Menu box border2") }; +#undef DATA /* *INDENT-ON* */ /* * Maintain a list of subwindows so that we can delete them to cleanup. * More important, this provides a fallback when wgetparent() is not available. */ static void add_subwindow(WINDOW *parent, WINDOW *child) { DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1); if (p != 0) { p->normal = parent; p->shadow = child; + p->getc_timeout = WTIMEOUT_OFF; p->next = dialog_state.all_subwindows; dialog_state.all_subwindows = p; } } static void del_subwindows(WINDOW *parent) { DIALOG_WINDOWS *p = dialog_state.all_subwindows; DIALOG_WINDOWS *q = 0; DIALOG_WINDOWS *r; while (p != 0) { if (p->normal == parent) { delwin(p->shadow); r = p->next; if (q == 0) { dialog_state.all_subwindows = r; } else { q->next = r; } free(p); p = r; } else { q = p; p = p->next; } } } /* * Display background title if it exists ... */ void dlg_put_backtitle(void) { - int i; if (dialog_vars.backtitle != NULL) { chtype attr = A_NORMAL; int backwidth = dlg_count_columns(dialog_vars.backtitle); + int i; dlg_attrset(stdscr, screen_attr); (void) wmove(stdscr, 0, 1); dlg_print_text(stdscr, dialog_vars.backtitle, COLS - 2, &attr); for (i = 0; i < COLS - backwidth; i++) (void) waddch(stdscr, ' '); (void) wmove(stdscr, 1, 1); for (i = 0; i < COLS - 2; i++) (void) waddch(stdscr, dlg_boxchar(ACS_HLINE)); } (void) wnoutrefresh(stdscr); } /* * Set window to attribute 'attr'. There are more efficient ways to do this, * but will not work on older/buggy ncurses versions. */ void dlg_attr_clear(WINDOW *win, int height, int width, chtype attr) { int i, j; dlg_attrset(win, attr); for (i = 0; i < height; i++) { (void) wmove(win, i, 0); for (j = 0; j < width; j++) (void) waddch(win, ' '); } (void) touchwin(win); } void dlg_clear(void) { dlg_attr_clear(stdscr, LINES, COLS, screen_attr); } +#ifdef KEY_RESIZE +void +_dlg_resize_cleanup(WINDOW *w) +{ + dlg_clear(); + dlg_put_backtitle(); + dlg_del_window(w); + dlg_mouse_free_regions(); +} +#endif /* KEY_RESIZE */ + #define isprivate(s) ((s) != 0 && strstr(s, "\033[?") != 0) #define TTY_DEVICE "/dev/tty" /* * If $DIALOG_TTY exists, allow the program to try to open the terminal * directly when stdout is redirected. By default we require the "--stdout" * option to be given, but some scripts were written making use of the * behavior of dialog which tried opening the terminal anyway. */ -static char * -dialog_tty(void) -{ - char *result = getenv("DIALOG_TTY"); - if (result != 0 && atoi(result) == 0) - result = 0; - return result; -} +#define dialog_tty() (dlg_getenv_num("DIALOG_TTY", (int *)0) > 0) /* * Open the terminal directly. If one of stdin, stdout or stderr really points * to a tty, use it. Otherwise give up and open /dev/tty. */ static int open_terminal(char **result, int mode) { const char *device = TTY_DEVICE; if (!isatty(fileno(stderr)) || (device = ttyname(fileno(stderr))) == 0) { if (!isatty(fileno(stdout)) || (device = ttyname(fileno(stdout))) == 0) { if (!isatty(fileno(stdin)) || (device = ttyname(fileno(stdin))) == 0) { device = TTY_DEVICE; } } } *result = dlg_strclone(device); return open(device, mode); } -#ifdef NCURSES_VERSION +#if CAN_KEEP_TITE static int my_putc(int ch) { char buffer[2]; int fd = fileno(dialog_state.screen_output); buffer[0] = (char) ch; return (int) write(fd, buffer, (size_t) 1); } #endif /* * Do some initialization for dialog. * * 'input' is the real tty input of dialog. Usually it is stdin, but if * --input-fd option is used, it may be anything. * * 'output' is where dialog will send its result. Usually it is stderr, but * if --stdout or --output-fd is used, it may be anything. We are concerned * mainly with the case where it happens to be the same as stdout. */ void init_dialog(FILE *input, FILE *output) { int fd1, fd2; char *device = 0; setlocale(LC_ALL, ""); dialog_state.output = output; - dialog_state.tab_len = TAB_LEN; - dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO; + if (dialog_state.tab_len == 0) + dialog_state.tab_len = TAB_LEN; + if (dialog_state.aspect_ratio == 0) + dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO; #ifdef HAVE_COLOR dialog_state.use_colors = USE_COLORS; /* use colors by default? */ dialog_state.use_shadow = USE_SHADOW; /* shadow dialog boxes by default? */ #endif #ifdef HAVE_RC_FILE if (dlg_parse_rc() == -1) /* Read the configuration file */ dlg_exiterr("init_dialog: dlg_parse_rc"); #endif /* * Some widgets (such as gauge) may read from the standard input. Pipes * only connect stdout/stdin, so there is not much choice. But reading a * pipe would get in the way of curses' normal reading stdin for getch. * * As in the --stdout (see below), reopening the terminal does not always * work properly. dialog provides a --pipe-fd option for this purpose. We * test that case first (differing fileno's for input/stdin). If the * fileno's are equal, but we're not reading from a tty, see if we can open * /dev/tty. */ dialog_state.pipe_input = stdin; if (fileno(input) != fileno(stdin)) { if ((fd1 = dup(fileno(input))) >= 0 && (fd2 = dup(fileno(stdin))) >= 0) { (void) dup2(fileno(input), fileno(stdin)); dialog_state.pipe_input = fdopen(fd2, "r"); if (fileno(stdin) != 0) /* some functions may read fd #0 */ (void) dup2(fileno(stdin), 0); } else { dlg_exiterr("cannot open tty-input"); } close(fd1); } else if (!isatty(fileno(stdin))) { if ((fd1 = open_terminal(&device, O_RDONLY)) >= 0) { if ((fd2 = dup(fileno(stdin))) >= 0) { dialog_state.pipe_input = fdopen(fd2, "r"); if (freopen(device, "r", stdin) == 0) dlg_exiterr("cannot open tty-input"); if (fileno(stdin) != 0) /* some functions may read fd #0 */ (void) dup2(fileno(stdin), 0); } close(fd1); } free(device); } /* * If stdout is not a tty and dialog is called with the --stdout option, we * have to provide for a way to write to the screen. * * The curses library normally writes its output to stdout, leaving stderr * free for scripting. Scripts are simpler when stdout is redirected. The * newterm function is useful; it allows us to specify where the output * goes. Reopening the terminal is not portable since several * configurations do not allow this to work properly: * * a) some getty implementations (and possibly broken tty drivers, e.g., on * HPUX 10 and 11) cause stdin to act as if it is still in cooked mode * even though results from ioctl's state that it is successfully * altered to raw mode. Broken is the proper term. * * b) the user may not have permissions on the device, e.g., if one su's * from the login user to another non-privileged user. */ if (!isatty(fileno(stdout)) && (fileno(stdout) == fileno(output) || dialog_tty())) { if ((fd1 = open_terminal(&device, O_WRONLY)) >= 0 && (dialog_state.screen_output = fdopen(fd1, "w")) != 0) { if (newterm(NULL, dialog_state.screen_output, stdin) == 0) { dlg_exiterr("cannot initialize curses"); } free(device); } else { dlg_exiterr("cannot open tty-output"); } } else { dialog_state.screen_output = stdout; (void) initscr(); } -#ifdef NCURSES_VERSION - /* - * Cancel xterm's alternate-screen mode. - */ - if (!dialog_vars.keep_tite - && (fileno(dialog_state.screen_output) != fileno(stdout) - || isatty(fileno(dialog_state.screen_output))) - && key_mouse != 0 /* xterm and kindred */ - && isprivate(enter_ca_mode) - && isprivate(exit_ca_mode)) { - /* - * initscr() or newterm() already wrote enter_ca_mode as a side - * effect of initializing the screen. It would be nice to not even - * do that, but we do not really have access to the correct copy of - * the terminfo description until those functions have been invoked. - */ - (void) refresh(); - (void) tputs(exit_ca_mode, 0, my_putc); - (void) tputs(clear_screen, 0, my_putc); - /* - * Prevent ncurses from switching "back" to the normal screen when - * exiting from dialog. That would move the cursor to the original - * location saved in xterm. Normally curses sets the cursor position - * to the first line after the display, but the alternate screen - * switching is done after that point. - * - * Cancelling the strings altogether also works around the buggy - * implementation of alternate-screen in rxvt, etc., which clear - * more of the display than they should. - */ - enter_ca_mode = 0; - exit_ca_mode = 0; - } -#endif + dlg_keep_tite(dialog_state.screen_output); #ifdef HAVE_FLUSHINP (void) flushinp(); #endif (void) keypad(stdscr, TRUE); (void) cbreak(); (void) noecho(); if (!dialog_state.no_mouse) { mouse_open(); } dialog_state.screen_initialized = TRUE; #ifdef HAVE_COLOR if (dialog_state.use_colors || dialog_state.use_shadow) dlg_color_setup(); /* Set up colors */ #endif /* Set screen to screen attribute */ dlg_clear(); } +void +dlg_keep_tite(FILE *output) +{ + if (!dialog_vars.keep_tite) { +#if CAN_KEEP_TITE + /* + * Cancel xterm's alternate-screen mode. + */ + if ((fileno(output) != fileno(stdout) + || isatty(fileno(output))) + && key_mouse != 0 /* xterm and kindred */ + && isprivate(enter_ca_mode) + && isprivate(exit_ca_mode)) { + FILE *save = dialog_state.screen_output; + + /* + * initscr() or newterm() already wrote enter_ca_mode as a side + * effect of initializing the screen. It would be nice to not even + * do that, but we do not really have access to the correct copy of + * the terminfo description until those functions have been + * invoked. + */ + (void) refresh(); + dialog_state.screen_output = output; + (void) tputs(exit_ca_mode, 0, my_putc); + (void) tputs(clear_screen, 0, my_putc); + dialog_state.screen_output = save; + + /* + * Prevent ncurses from switching "back" to the normal screen when + * exiting from dialog. That would move the cursor to the original + * location saved in xterm. Normally curses sets the cursor + * position to the first line after the display, but the alternate + * screen switching is done after that point. + * + * Cancelling the strings altogether also works around the buggy + * implementation of alternate-screen in rxvt, etc., which clear + * more of the display than they should. + */ + enter_ca_mode = 0; + exit_ca_mode = 0; + } +#else + /* + * For other implementations, there are no useful answers: + * + SVr4 curses "could" support a similar approach, but the clue about + * xterm is absent from its terminal database. + * + PDCurses does not provide terminfo. + */ + (void) output; +#endif + } +} + #ifdef HAVE_COLOR static int defined_colors = 1; /* pair-0 is reserved */ /* * Setup for color display */ void dlg_color_setup(void) { - unsigned i; - if (has_colors()) { /* Terminal supports color? */ + unsigned i; + (void) start_color(); #if defined(HAVE_USE_DEFAULT_COLORS) use_default_colors(); #endif #if defined(__NetBSD__) && defined(_CURSES_) #define C_ATTR(x,y) (((x) != 0 ? A_BOLD : 0) | COLOR_PAIR((y))) /* work around bug in NetBSD curses */ for (i = 0; i < sizeof(dlg_color_table) / sizeof(dlg_color_table[0]); i++) { /* Initialize color pairs */ (void) init_pair(i + 1, dlg_color_table[i].fg, dlg_color_table[i].bg); /* Setup color attributes */ dlg_color_table[i].atr = C_ATTR(dlg_color_table[i].hilite, i + 1); } defined_colors = i + 1; #else for (i = 0; i < sizeof(dlg_color_table) / sizeof(dlg_color_table[0]); i++) { /* Initialize color pairs */ - chtype color = dlg_color_pair(dlg_color_table[i].fg, - dlg_color_table[i].bg); + chtype atr = dlg_color_pair(dlg_color_table[i].fg, + dlg_color_table[i].bg); - /* Setup color attributes */ - dlg_color_table[i].atr = ((dlg_color_table[i].hilite - ? A_BOLD - : 0) - | color); + atr |= (dlg_color_table[i].hilite ? A_BOLD : 0); +#ifdef HAVE_RC_FILE2 + atr |= (dlg_color_table[i].ul ? A_UNDERLINE : 0); + atr |= (dlg_color_table[i].rv ? A_REVERSE : 0); +#endif /* HAVE_RC_FILE2 */ + + dlg_color_table[i].atr = atr; } #endif } else { dialog_state.use_colors = FALSE; dialog_state.use_shadow = FALSE; } } int dlg_color_count(void) { - return sizeof(dlg_color_table) / sizeof(dlg_color_table[0]); + return TableSize(dlg_color_table); } /* * Wrapper for getattrs(), or the more cumbersome X/Open wattr_get(). */ chtype dlg_get_attrs(WINDOW *win) { chtype result; #ifdef HAVE_GETATTRS result = (chtype) getattrs(win); #else attr_t my_result; short my_pair; wattr_get(win, &my_result, &my_pair, NULL); result = my_result; #endif return result; } /* * Reuse color pairs (they are limited), returning a COLOR_PAIR() value if we * have (or can) define a pair with the given color as foreground on the * window's defined background. */ chtype dlg_color_pair(int foreground, int background) { chtype result = 0; int pair; short fg, bg; bool found = FALSE; for (pair = 1; pair < defined_colors; ++pair) { if (pair_content((short) pair, &fg, &bg) != ERR && fg == foreground && bg == background) { result = (chtype) COLOR_PAIR(pair); found = TRUE; break; } } if (!found && (defined_colors + 1) < COLOR_PAIRS) { pair = defined_colors++; (void) init_pair((short) pair, (short) foreground, (short) background); result = (chtype) COLOR_PAIR(pair); } return result; } /* * Reuse color pairs (they are limited), returning a COLOR_PAIR() value if we * have (or can) define a pair with the given color as foreground on the * window's defined background. */ static chtype define_color(WINDOW *win, int foreground) { - int pair; short fg, bg, background; if (dialog_state.text_only) { background = COLOR_BLACK; } else { chtype attrs = dlg_get_attrs(win); + int pair; if ((pair = PAIR_NUMBER(attrs)) != 0 && pair_content((short) pair, &fg, &bg) != ERR) { background = bg; } else { background = COLOR_BLACK; } } return dlg_color_pair(foreground, background); } #endif /* * End using dialog functions. */ void end_dialog(void) { if (dialog_state.screen_initialized) { dialog_state.screen_initialized = FALSE; + if (dialog_vars.erase_on_exit) { + /* + * Clear the screen to the native background color, and leave the + * terminal cursor at the lower-left corner of the screen. + */ + werase(stdscr); + wrefresh(stdscr); + } mouse_close(); (void) endwin(); (void) fflush(stdout); } } #define ESCAPE_LEN 3 #define isOurEscape(p) (((p)[0] == '\\') && ((p)[1] == 'Z') && ((p)[2] != 0)) int dlg_count_real_columns(const char *text) { int result = 0; if (*text) { result = dlg_count_columns(text); if (result && dialog_vars.colors) { int hidden = 0; while (*text) { if (dialog_vars.colors && isOurEscape(text)) { hidden += ESCAPE_LEN; text += ESCAPE_LEN; } else { ++text; } } result -= hidden; } } return result; } static int centered(int width, const char *string) { int need = dlg_count_real_columns(string); int left; left = (width - need) / 2 - 1; if (left < 0) left = 0; return left; } #ifdef USE_WIDE_CURSES static bool is_combining(const char *txt, int *combined) { bool result = FALSE; if (*combined == 0) { if (UCH(*txt) >= 128) { wchar_t wch; mbstate_t state; size_t given = strlen(txt); size_t len; memset(&state, 0, sizeof(state)); len = mbrtowc(&wch, txt, given, &state); if ((int) len > 0 && wcwidth(wch) == 0) { *combined = (int) len - 1; result = TRUE; } } } else { result = TRUE; *combined -= 1; } return result; } #endif /* * Print the name (tag) or text from a DIALOG_LISTITEM, highlighting the * first character if selected. */ void dlg_print_listitem(WINDOW *win, const char *text, int climit, bool first, int selected) { chtype attr = A_NORMAL; int limit; - const int *cols; chtype attrs[4]; if (text == 0) text = ""; - if (first) { + if (first && !dialog_vars.no_hot_list) { const int *indx = dlg_index_wchars(text); attrs[3] = tag_key_selected_attr; attrs[2] = tag_key_attr; attrs[1] = tag_selected_attr; attrs[0] = tag_attr; dlg_attrset(win, selected ? attrs[3] : attrs[2]); - (void) waddnstr(win, text, indx[1]); - - if ((int) strlen(text) > indx[1]) { - limit = dlg_limit_columns(text, climit, 1); - if (limit > 1) { - dlg_attrset(win, selected ? attrs[1] : attrs[0]); - (void) waddnstr(win, - text + indx[1], - indx[limit] - indx[1]); + if (*text != '\0') { + (void) waddnstr(win, text, indx[1]); + + if ((int) strlen(text) > indx[1]) { + limit = dlg_limit_columns(text, climit, 1); + if (limit > 1) { + dlg_attrset(win, selected ? attrs[1] : attrs[0]); + (void) waddnstr(win, + text + indx[1], + indx[limit] - indx[1]); + } } } } else { + const int *cols; + attrs[1] = item_selected_attr; attrs[0] = item_attr; cols = dlg_index_columns(text); limit = dlg_limit_columns(text, climit, 0); if (limit > 0) { dlg_attrset(win, selected ? attrs[1] : attrs[0]); dlg_print_text(win, text, cols[limit], &attr); } } } /* * Print up to 'cols' columns from 'text', optionally rendering our escape * sequence for attributes and color. */ void dlg_print_text(WINDOW *win, const char *txt, int cols, chtype *attr) { int y_origin, x_origin; int y_before, x_before = 0; int y_after, x_after; int tabbed = 0; - bool thisTab; bool ended = FALSE; - chtype useattr; #ifdef USE_WIDE_CURSES int combined = 0; #endif if (dialog_state.text_only) { y_origin = y_after = 0; x_origin = x_after = 0; } else { + y_after = 0; + x_after = 0; getyx(win, y_origin, x_origin); } while (cols > 0 && (*txt != '\0')) { + bool thisTab; + chtype useattr; + if (dialog_vars.colors) { while (isOurEscape(txt)) { int code; txt += 2; switch (code = CharOf(*txt)) { #ifdef HAVE_COLOR case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': *attr &= ~A_COLOR; *attr |= define_color(win, code - '0'); break; #endif case 'B': *attr &= ~A_BOLD; break; case 'b': *attr |= A_BOLD; break; case 'R': *attr &= ~A_REVERSE; break; case 'r': *attr |= A_REVERSE; break; case 'U': *attr &= ~A_UNDERLINE; break; case 'u': *attr |= A_UNDERLINE; break; case 'n': *attr = A_NORMAL; break; + default: + break; } ++txt; } } if (ended || *txt == '\n' || *txt == '\0') break; useattr = (*attr) & A_ATTRIBUTES; #ifdef HAVE_COLOR /* * Prevent this from making text invisible when the foreground and * background colors happen to be the same, and there's no bold * attribute. */ if ((useattr & A_COLOR) != 0 && (useattr & A_BOLD) == 0) { short pair = (short) PAIR_NUMBER(useattr); short fg, bg; if (pair_content(pair, &fg, &bg) != ERR && fg == bg) { useattr &= ~A_COLOR; useattr |= dlg_color_pair(fg, ((bg == COLOR_BLACK) ? COLOR_WHITE : COLOR_BLACK)); } } #endif /* * Write the character, using curses to tell exactly how wide it * is. If it is a tab, discount that, since the caller thinks * tabs are nonprinting, and curses will expand tabs to one or * more blanks. */ thisTab = (CharOf(*txt) == TAB); if (dialog_state.text_only) { - y_before = y_after; x_before = x_after; } else { if (thisTab) { getyx(win, y_before, x_before); (void) y_before; } } if (dialog_state.text_only) { int ch = CharOf(*txt++); if (thisTab) { while ((x_after++) % 8) { fputc(' ', dialog_state.output); } } else { fputc(ch, dialog_state.output); x_after++; /* FIXME: handle meta per locale */ } } else { (void) waddch(win, CharOf(*txt++) | useattr); getyx(win, y_after, x_after); } if (thisTab && (y_after == y_origin)) tabbed += (x_after - x_before); if ((y_after != y_origin) || (x_after >= (cols + tabbed + x_origin) #ifdef USE_WIDE_CURSES && !is_combining(txt, &combined) #endif )) { ended = TRUE; } } if (dialog_state.text_only) { fputc('\n', dialog_state.output); } } /* * Print one line of the prompt in the window within the limits of the * specified right margin. The line will end on a word boundary and a pointer * to the start of the next line is returned, or a NULL pointer if the end of * *prompt is reached. */ const char * dlg_print_line(WINDOW *win, chtype *attr, const char *prompt, int lm, int rm, int *x) { const char *wrap_ptr; const char *test_ptr; const char *hide_ptr = 0; const int *cols = dlg_index_columns(prompt); const int *indx = dlg_index_wchars(prompt); int wrap_inx = 0; int test_inx = 0; int cur_x = lm; int hidden = 0; int limit = dlg_count_wchars(prompt); int n; int tabbed = 0; *x = 1; /* * Set *test_ptr to the end of the line or the right margin (rm), whichever * is less, and set wrap_ptr to the end of the last word in the line. */ for (n = 0; n < limit; ++n) { int ch = *(test_ptr = prompt + indx[test_inx]); if (ch == '\n' || ch == '\0' || cur_x >= (rm + hidden)) break; if (ch == TAB && n == 0) { tabbed = 8; /* workaround for leading tabs */ } else if (isblank(UCH(ch)) && n != 0 && !isblank(UCH(prompt[indx[n - 1]]))) { wrap_inx = n; *x = cur_x; } else if (dialog_vars.colors && isOurEscape(test_ptr)) { hide_ptr = test_ptr; hidden += ESCAPE_LEN; n += (ESCAPE_LEN - 1); } cur_x = lm + tabbed + cols[n + 1]; if (cur_x > (rm + hidden)) break; test_inx = n + 1; } /* * If the line doesn't reach the right margin in the middle of a word, then * we don't have to wrap it at the end of the previous word. */ test_ptr = prompt + indx[test_inx]; if (*test_ptr == '\n' || isblank(UCH(*test_ptr)) || *test_ptr == '\0') { wrap_inx = test_inx; while (wrap_inx > 0 && isblank(UCH(prompt[indx[wrap_inx - 1]]))) { wrap_inx--; } *x = lm + indx[wrap_inx]; } else if (*x == 1 && cur_x >= rm) { /* * If the line has no spaces, then wrap it anyway at the right margin */ *x = rm; wrap_inx = test_inx; } wrap_ptr = prompt + indx[wrap_inx]; #ifdef USE_WIDE_CURSES if (UCH(*wrap_ptr) >= 128) { int combined = 0; while (is_combining(wrap_ptr, &combined)) { ++wrap_ptr; } } #endif /* * If we found hidden text past the last point that we will display, * discount that from the displayed length. */ if ((hide_ptr != 0) && (hide_ptr >= wrap_ptr)) { hidden -= ESCAPE_LEN; test_ptr = wrap_ptr; while (test_ptr < wrap_ptr) { if (dialog_vars.colors && isOurEscape(test_ptr)) { hidden -= ESCAPE_LEN; test_ptr += ESCAPE_LEN; } else { ++test_ptr; } } } /* * Print the line if we have a window pointer. Otherwise this routine * is just being called for sizing the window. */ if (dialog_state.text_only || win) { dlg_print_text(win, prompt, (cols[wrap_inx] - hidden), attr); } /* *x tells the calling function how long the line was */ if (*x == 1) { *x = rm; } *x -= hidden; /* Find the start of the next line and return a pointer to it */ test_ptr = wrap_ptr; while (isblank(UCH(*test_ptr))) test_ptr++; if (*test_ptr == '\n') test_ptr++; dlg_finish_string(prompt); return (test_ptr); } static void justify_text(WINDOW *win, const char *prompt, int limit_y, int limit_x, int *high, int *wide) { chtype attr = A_NORMAL; - int x = (2 * MARGIN); + int x; int y = MARGIN; int max_x = 2; int lm = (2 * MARGIN); /* left margin (box-border plus a space) */ int rm = limit_x; /* right margin */ int bm = limit_y; /* bottom margin */ int last_y = 0, last_x = 0; dialog_state.text_height = 0; dialog_state.text_width = 0; if (dialog_state.text_only || win) { rm -= (2 * MARGIN); bm -= (2 * MARGIN); } if (prompt == 0) prompt = ""; if (win != 0) getyx(win, last_y, last_x); while (y <= bm && *prompt) { x = lm; if (*prompt == '\n') { while (*prompt == '\n' && y < bm) { if (*(prompt + 1) != '\0') { ++y; if (win != 0) (void) wmove(win, y, lm); } prompt++; } } else if (win != 0) (void) wmove(win, y, lm); if (*prompt) { prompt = dlg_print_line(win, &attr, prompt, lm, rm, &x); if (win != 0) getyx(win, last_y, last_x); } if (*prompt) { ++y; if (win != 0) (void) wmove(win, y, lm); } max_x = MAX(max_x, x); } /* Move back to the last position after drawing prompt, for msgbox. */ if (win != 0) (void) wmove(win, last_y, last_x); /* Set the final height and width for the calling function */ if (high != 0) *high = y; if (wide != 0) *wide = max_x; } /* * Print a string of text in a window, automatically wrap around to the next * line if the string is too long to fit on one line. Note that the string may * contain embedded newlines. */ void dlg_print_autowrap(WINDOW *win, const char *prompt, int height, int width) { justify_text(win, prompt, height, width, (int *) 0, (int *) 0); } /* * Display the message in a scrollable window. Actually the way it works is * that we create a "tall" window of the proper width, let the text wrap within * that, and copy a slice of the result to the dialog. * * It works for ncurses. Other curses implementations show only blanks (Tru64) * or garbage (NetBSD). */ int dlg_print_scrolled(WINDOW *win, const char *prompt, int offset, int height, int width, int pauseopt) { int oldy, oldx; int last = 0; (void) pauseopt; /* used only for ncurses */ getyx(win, oldy, oldx); #ifdef NCURSES_VERSION if (pauseopt) { int wide = width - (2 * MARGIN); int high = LINES; - int y, x; int len; - int percent; WINDOW *dummy; - char buffer[5]; #if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH >= 20040417 /* * If we're not limited by the screensize, allow text to possibly be * one character per line. */ if ((len = dlg_count_columns(prompt)) > high) high = len; #endif dummy = newwin(high, width, 0, 0); if (dummy == 0) { dlg_attrset(win, dialog_attr); dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width); last = 0; } else { + int y, x; + wbkgdset(dummy, dialog_attr | ' '); dlg_attrset(dummy, dialog_attr); werase(dummy); dlg_print_autowrap(dummy, prompt, high, width); getyx(dummy, y, x); (void) x; copywin(dummy, /* srcwin */ win, /* dstwin */ offset + MARGIN, /* sminrow */ MARGIN, /* smincol */ MARGIN, /* dminrow */ MARGIN, /* dmincol */ height, /* dmaxrow */ wide, /* dmaxcol */ FALSE); delwin(dummy); /* if the text is incomplete, or we have scrolled, show the percentage */ if (y > 0 && wide > 4) { - percent = (int) ((height + offset) * 100.0 / y); + int percent = (int) ((height + offset) * 100.0 / y); + if (percent < 0) percent = 0; if (percent > 100) percent = 100; + if (offset != 0 || percent != 100) { + char buffer[5]; + dlg_attrset(win, position_indicator_attr); (void) wmove(win, MARGIN + height, wide - 4); (void) sprintf(buffer, "%d%%", percent); (void) waddstr(win, buffer); if ((len = (int) strlen(buffer)) < 4) { dlg_attrset(win, border_attr); whline(win, dlg_boxchar(ACS_HLINE), 4 - len); } } } last = (y - height); } } else #endif { (void) offset; dlg_attrset(win, dialog_attr); dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width); last = 0; } wmove(win, oldy, oldx); return last; } int dlg_check_scrolled(int key, int last, int page, bool * show, int *offset) { int code = 0; *show = FALSE; switch (key) { case DLGK_PAGE_FIRST: if (*offset > 0) { *offset = 0; *show = TRUE; } break; case DLGK_PAGE_LAST: if (*offset < last) { *offset = last; *show = TRUE; } break; case DLGK_GRID_UP: if (*offset > 0) { --(*offset); *show = TRUE; } break; case DLGK_GRID_DOWN: if (*offset < last) { ++(*offset); *show = TRUE; } break; case DLGK_PAGE_PREV: if (*offset > 0) { *offset -= page; if (*offset < 0) *offset = 0; *show = TRUE; } break; case DLGK_PAGE_NEXT: if (*offset < last) { *offset += page; if (*offset > last) *offset = last; *show = TRUE; } break; default: code = -1; break; } return code; } /* * Calculate the window size for preformatted text. This will calculate box * dimensions that are at or close to the specified aspect ratio for the prompt * string with all spaces and newlines preserved and additional newlines added * as necessary. */ static void auto_size_preformatted(const char *prompt, int *height, int *width) { int high = 0, wide = 0; float car; /* Calculated Aspect Ratio */ - float diff; int max_y = SLINES - 1; int max_x = SCOLS - 2; int max_width = max_x; int ar = dialog_state.aspect_ratio; /* Get the initial dimensions */ justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide); car = (float) (wide / high); /* * If the aspect ratio is greater than it should be, then decrease the * width proportionately. */ if (car > ar) { - diff = car / (float) ar; + float diff = car / (float) ar; max_x = (int) ((float) wide / diff + 4); justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide); car = (float) wide / (float) high; } /* * If the aspect ratio is too small after decreasing the width, then * incrementally increase the width until the aspect ratio is equal to or * greater than the specified aspect ratio. */ while (car < ar && max_x < max_width) { max_x += 4; justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide); car = (float) (wide / high); } *height = high; *width = wide; } /* * Find the length of the longest "word" in the given string. By setting the * widget width at least this long, we can avoid splitting a word on the * margin. */ static int longest_word(const char *string) { - int length, result = 0; + int result = 0; while (*string != '\0') { - length = 0; + int length = 0; while (*string != '\0' && !isspace(UCH(*string))) { length++; string++; } result = MAX(result, length); if (*string != '\0') string++; } return result; } /* * if (height or width == -1) Maximize() * if (height or width == 0), justify and return actual limits. */ static void real_auto_size(const char *title, const char *prompt, int *height, int *width, int boxlines, int mincols) { int x = (dialog_vars.begin_set ? dialog_vars.begin_x : 2); int y = (dialog_vars.begin_set ? dialog_vars.begin_y : 1); int title_length = title ? dlg_count_columns(title) : 0; int high; - int wide; int save_high = *height; int save_wide = *width; int max_high; int max_wide; if (prompt == 0) { if (*height == 0) *height = -1; if (*width == 0) *width = -1; } max_high = (*height < 0); max_wide = (*width < 0); if (*height > 0) { high = *height; } else { high = SLINES - y; } if (*width <= 0) { + int wide; + if (prompt != 0) { wide = MAX(title_length, mincols); if (strchr(prompt, '\n') == 0) { double val = (dialog_state.aspect_ratio * dlg_count_real_columns(prompt)); double xxx = sqrt(val); int tmp = (int) xxx; wide = MAX(wide, tmp); wide = MAX(wide, longest_word(prompt)); justify_text((WINDOW *) 0, prompt, high, wide, height, width); } else { auto_size_preformatted(prompt, height, width); } } else { wide = SCOLS - x; justify_text((WINDOW *) 0, prompt, high, wide, height, width); } } if (*width < title_length) { justify_text((WINDOW *) 0, prompt, high, title_length, height, width); *width = title_length; } dialog_state.text_height = *height; dialog_state.text_width = *width; if (*width < mincols && save_wide == 0) *width = mincols; if (prompt != 0) { *width += ((2 * MARGIN) + SHADOW_COLS); *height += boxlines + (2 * MARGIN); } if (save_high > 0) *height = save_high; if (save_wide > 0) *width = save_wide; if (max_high) *height = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0); if (max_wide) *width = SCOLS - (dialog_vars.begin_set ? dialog_vars.begin_x : 0); } /* End of real_auto_size() */ void dlg_auto_size(const char *title, const char *prompt, int *height, int *width, int boxlines, int mincols) { DLG_TRACE(("# dlg_auto_size(%d,%d) limits %d,%d\n", *height, *width, boxlines, mincols)); real_auto_size(title, prompt, height, width, boxlines, mincols); if (*width > SCOLS) { (*height)++; *width = SCOLS; } if (*height > SLINES) { *height = SLINES; } DLG_TRACE(("# ...dlg_auto_size(%d,%d) also %d,%d\n", *height, *width, dialog_state.text_height, dialog_state.text_width)); } /* * if (height or width == -1) Maximize() * if (height or width == 0) * height=MIN(SLINES, num.lines in fd+n); * width=MIN(SCOLS, MAX(longer line+n, mincols)); */ void dlg_auto_sizefile(const char *title, const char *file, int *height, int *width, int boxlines, int mincols) { int count = 0; int len = title ? dlg_count_columns(title) : 0; int nc = 4; int numlines = 2; - long offset; - int ch; FILE *fd; /* Open input file for reading */ if ((fd = fopen(file, "rb")) == NULL) dlg_exiterr("dlg_auto_sizefile: Cannot open input file %s", file); if ((*height == -1) || (*width == -1)) { *height = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0); *width = SCOLS - (dialog_vars.begin_set ? dialog_vars.begin_x : 0); } if ((*height != 0) && (*width != 0)) { (void) fclose(fd); if (*width > SCOLS) *width = SCOLS; if (*height > SLINES) *height = SLINES; return; } while (!feof(fd)) { + int ch; + long offset; + if (ferror(fd)) break; + offset = 0; while (((ch = getc(fd)) != '\n') && !feof(fd)) { if ((ch == TAB) && (dialog_vars.tab_correct)) { offset += dialog_state.tab_len - (offset % dialog_state.tab_len); } else { offset++; } } if (offset > len) len = (int) offset; count++; } /* now 'count' has the number of lines of fd and 'len' the max length */ *height = MIN(SLINES, count + numlines + boxlines); *width = MIN(SCOLS, MAX((len + nc), mincols)); /* here width and height can be maximized if > SCOLS|SLINES because textbox-like widgets don't put all <file> on the screen. Msgbox-like widget instead have to put all <text> correctly. */ (void) fclose(fd); } /* * Draw a rectangular box with line drawing characters. * * borderchar is used to color the upper/left edges. * * boxchar is used to color the right/lower edges. It also is fill-color used * for the box contents. * * Normally, if you are drawing a scrollable box, use menubox_border_attr for * boxchar, and menubox_attr for borderchar since the scroll-arrows are drawn * with menubox_attr at the top, and menubox_border_attr at the bottom. That * also (given the default color choices) produces a recessed effect. * * If you want a raised effect (and are not going to use the scroll-arrows), * reverse this choice. */ void dlg_draw_box2(WINDOW *win, int y, int x, int height, int width, chtype boxchar, chtype borderchar, chtype borderchar2) { int i, j; chtype save = dlg_get_attrs(win); dlg_attrset(win, 0); for (i = 0; i < height; i++) { (void) wmove(win, y + i, x); for (j = 0; j < width; j++) if (!i && !j) (void) waddch(win, borderchar | dlg_boxchar(ACS_ULCORNER)); else if (i == height - 1 && !j) (void) waddch(win, borderchar | dlg_boxchar(ACS_LLCORNER)); else if (!i && j == width - 1) (void) waddch(win, borderchar2 | dlg_boxchar(ACS_URCORNER)); else if (i == height - 1 && j == width - 1) (void) waddch(win, borderchar2 | dlg_boxchar(ACS_LRCORNER)); else if (!i) (void) waddch(win, borderchar | dlg_boxchar(ACS_HLINE)); else if (i == height - 1) (void) waddch(win, borderchar2 | dlg_boxchar(ACS_HLINE)); else if (!j) (void) waddch(win, borderchar | dlg_boxchar(ACS_VLINE)); else if (j == width - 1) (void) waddch(win, borderchar2 | dlg_boxchar(ACS_VLINE)); else (void) waddch(win, boxchar | ' '); } dlg_attrset(win, save); } void dlg_draw_box(WINDOW *win, int y, int x, int height, int width, chtype boxchar, chtype borderchar) { dlg_draw_box2(win, y, x, height, width, boxchar, borderchar, boxchar); } +/* + * Search the given 'list' for the given window 'win'. Typically 'win' is an + * input-window, i.e., a window where we might use wgetch. + * + * The all-windows list has normal- and shadow-windows. Since we never use the + * shadow as an input window, normally we just look for the normal-window. + * + * However, the all-subwindows list stores parent/child windows rather than + * normal/shadow windows. When searching that list, we look for the child + * window (in the .shadow field). + */ static DIALOG_WINDOWS * -find_window(WINDOW *win) +find_window(DIALOG_WINDOWS * list, WINDOW *win, bool normal) { DIALOG_WINDOWS *result = 0; DIALOG_WINDOWS *p; - for (p = dialog_state.all_windows; p != 0; p = p->next) { - if (p->normal == win) { + for (p = list; p != 0; p = p->next) { + WINDOW *check = normal ? p->normal : p->shadow; + if (check == win) { result = p; break; } } return result; } +#define SearchTopWindows(win) find_window(dialog_state.all_windows, win, TRUE) +#define SearchSubWindows(win) find_window(dialog_state.all_subwindows, win, FALSE) + +/* + * Check for the existence of a window, e.g., when used for input or updating + * the display. This is used in dlg_getc() and related functions, to guard + * against an asynchronous window-deletion that might invalidate the input + * window used in dlg_getc(). + */ +DIALOG_WINDOWS * +_dlg_find_window(WINDOW *win) +{ + DIALOG_WINDOWS *result = 0; + + if ((result = SearchTopWindows(win)) == NULL) + result = SearchSubWindows(win); + return result; +} + #ifdef HAVE_COLOR /* * If we have wchgat(), use that for updating shadow attributes, to work with * wide-character data. */ /* * Check if the given point is "in" the given window. If so, return the window * pointer, otherwise null. */ static WINDOW * in_window(WINDOW *win, int y, int x) { WINDOW *result = 0; int y_base = getbegy(win); int x_base = getbegx(win); int y_last = getmaxy(win) + y_base; int x_last = getmaxx(win) + x_base; if (y >= y_base && y <= y_last && x >= x_base && x <= x_last) result = win; return result; } static WINDOW * window_at_cell(DIALOG_WINDOWS * dw, int y, int x) { WINDOW *result = 0; DIALOG_WINDOWS *p; int y_want = y + getbegy(dw->shadow); int x_want = x + getbegx(dw->shadow); for (p = dialog_state.all_windows; p != 0; p = p->next) { if (dw->normal != p->normal && dw->shadow != p->normal && (result = in_window(p->normal, y_want, x_want)) != 0) { break; } } if (result == 0) { result = stdscr; } return result; } static bool in_shadow(WINDOW *normal, WINDOW *shadow, int y, int x) { bool result = FALSE; int ybase = getbegy(normal); int ylast = getmaxy(normal) + ybase; int xbase = getbegx(normal); int xlast = getmaxx(normal) + xbase; y += getbegy(shadow); x += getbegx(shadow); if (y >= ybase + SHADOW_ROWS && y < ylast + SHADOW_ROWS && x >= xlast && x < xlast + SHADOW_COLS) { /* in the right-side */ result = TRUE; } else if (y >= ylast && y < ylast + SHADOW_ROWS && x >= ybase + SHADOW_COLS && x < ylast + SHADOW_COLS) { /* check the bottom */ result = TRUE; } return result; } /* * When erasing a shadow, check each cell to make sure that it is not part of * another box's shadow. This is a little complicated since most shadows are * merged onto stdscr. */ static bool last_shadow(DIALOG_WINDOWS * dw, int y, int x) { DIALOG_WINDOWS *p; bool result = TRUE; for (p = dialog_state.all_windows; p != 0; p = p->next) { if (p->normal != dw->normal && in_shadow(p->normal, dw->shadow, y, x)) { result = FALSE; break; } } return result; } static void repaint_cell(DIALOG_WINDOWS * dw, bool draw, int y, int x) { WINDOW *win = dw->shadow; WINDOW *cellwin; int y2, x2; if ((cellwin = window_at_cell(dw, y, x)) != 0 && (draw || last_shadow(dw, y, x)) && (y2 = (y + getbegy(win) - getbegy(cellwin))) >= 0 && (x2 = (x + getbegx(win) - getbegx(cellwin))) >= 0 && wmove(cellwin, y2, x2) != ERR) { chtype the_cell = dlg_get_attrs(cellwin); chtype the_attr = (draw ? shadow_attr : the_cell); if (winch(cellwin) & A_ALTCHARSET) { the_attr |= A_ALTCHARSET; } #if USE_WCHGAT wchgat(cellwin, 1, the_attr & (chtype) (~A_COLOR), (short) PAIR_NUMBER(the_attr), NULL); #else { chtype the_char = ((winch(cellwin) & A_CHARTEXT) | the_attr); (void) waddch(cellwin, the_char); } #endif wnoutrefresh(cellwin); } } #define RepaintCell(dw, draw, y, x) repaint_cell(dw, draw, y, x) static void repaint_shadow(DIALOG_WINDOWS * dw, bool draw, int y, int x, int height, int width) { - int i, j; - if (UseShadow(dw)) { + int i, j; + #if !USE_WCHGAT chtype save = dlg_get_attrs(dw->shadow); dlg_attrset(dw->shadow, draw ? shadow_attr : screen_attr); #endif for (i = 0; i < SHADOW_ROWS; ++i) { for (j = 0; j < width; ++j) { RepaintCell(dw, draw, i + y + height, j + x + SHADOW_COLS); } } for (i = 0; i < height; i++) { for (j = 0; j < SHADOW_COLS; ++j) { RepaintCell(dw, draw, i + y + SHADOW_ROWS, j + x + width); } } (void) wnoutrefresh(dw->shadow); #if !USE_WCHGAT dlg_attrset(dw->shadow, save); #endif } } /* * Draw a shadow on the parent window corresponding to the right- and * bottom-edge of the child window, to give a 3-dimensional look. */ static void draw_childs_shadow(DIALOG_WINDOWS * dw) { if (UseShadow(dw)) { repaint_shadow(dw, TRUE, getbegy(dw->normal) - getbegy(dw->shadow), getbegx(dw->normal) - getbegx(dw->shadow), getmaxy(dw->normal), getmaxx(dw->normal)); } } /* * Erase a shadow on the parent window corresponding to the right- and * bottom-edge of the child window. */ static void erase_childs_shadow(DIALOG_WINDOWS * dw) { if (UseShadow(dw)) { repaint_shadow(dw, FALSE, getbegy(dw->normal) - getbegy(dw->shadow), getbegx(dw->normal) - getbegx(dw->shadow), getmaxy(dw->normal), getmaxx(dw->normal)); } } /* * Draw shadows along the right and bottom edge to give a more 3D look * to the boxes. */ void dlg_draw_shadow(WINDOW *win, int y, int x, int height, int width) { - repaint_shadow(find_window(win), TRUE, y, x, height, width); + repaint_shadow(SearchTopWindows(win), TRUE, y, x, height, width); } #endif /* HAVE_COLOR */ /* * Allow shell scripts to remap the exit codes so they can distinguish ESC * from ERROR. */ void dlg_exit(int code) { /* *INDENT-OFF* */ static const struct { int code; const char *name; } table[] = { { DLG_EXIT_CANCEL, "DIALOG_CANCEL" }, { DLG_EXIT_ERROR, "DIALOG_ERROR" }, { DLG_EXIT_ESC, "DIALOG_ESC" }, { DLG_EXIT_EXTRA, "DIALOG_EXTRA" }, { DLG_EXIT_HELP, "DIALOG_HELP" }, { DLG_EXIT_OK, "DIALOG_OK" }, { DLG_EXIT_ITEM_HELP, "DIALOG_ITEM_HELP" }, + { DLG_EXIT_TIMEOUT, "DIALOG_TIMEOUT" }, }; /* *INDENT-ON* */ unsigned n; - char *name; - char *temp; - long value; bool overridden = FALSE; retry: - for (n = 0; n < sizeof(table) / sizeof(table[0]); n++) { + for (n = 0; n < TableSize(table); n++) { if (table[n].code == code) { - if ((name = getenv(table[n].name)) != 0) { - value = strtol(name, &temp, 0); - if (temp != 0 && temp != name && *temp == '\0') { - code = (int) value; - overridden = TRUE; - } + if (dlg_getenv_num(table[n].name, &code)) { + overridden = TRUE; } break; } } /* * Prior to 2004/12/19, a widget using --item-help would exit with "OK" * if the help button were selected. Now we want to exit with "HELP", * but allow the environment variable to override. */ if (code == DLG_EXIT_ITEM_HELP && !overridden) { code = DLG_EXIT_HELP; goto retry; } #ifdef HAVE_DLG_TRACE dlg_trace((const char *) 0); /* close it */ #endif #ifdef NO_LEAKS _dlg_inputstr_leaks(); -#if defined(NCURSES_VERSION) && defined(HAVE__NC_FREE_AND_EXIT) - _nc_free_and_exit(code); +#if defined(NCURSES_VERSION) && (defined(HAVE_CURSES_EXIT) || defined(HAVE__NC_FREE_AND_EXIT)) + curses_exit(code); #endif #endif if (dialog_state.input == stdin) { exit(code); } else { /* * Just in case of using --input-fd option, do not * call atexit functions of ncurses which may hang. */ if (dialog_state.input) { fclose(dialog_state.input); dialog_state.input = 0; } if (dialog_state.pipe_input) { if (dialog_state.pipe_input != stdin) { fclose(dialog_state.pipe_input); dialog_state.pipe_input = 0; } } _exit(code); } } +#define DATA(name) { DLG_EXIT_ ## name, #name } +/* *INDENT-OFF* */ +static struct { + int code; + const char *name; +} exit_codenames[] = { + DATA(ESC), + DATA(UNKNOWN), + DATA(ERROR), + DATA(OK), + DATA(CANCEL), + DATA(HELP), + DATA(EXTRA), + DATA(ITEM_HELP), +}; +#undef DATA +/* *INDENT-ON* */ + +const char * +dlg_exitcode2s(int code) +{ + const char *result = "?"; + size_t n; + + for (n = 0; n < TableSize(exit_codenames); ++n) { + if (exit_codenames[n].code == code) { + result = exit_codenames[n].name; + break; + } + } + return result; +} + +int +dlg_exitname2n(const char *name) +{ + int result = DLG_EXIT_UNKNOWN; + size_t n; + + for (n = 0; n < TableSize(exit_codenames); ++n) { + if (!dlg_strcmp(exit_codenames[n].name, name)) { + result = exit_codenames[n].code; + break; + } + } + return result; +} + /* quit program killing all tailbg */ void -dlg_exiterr(const char *fmt,...) +dlg_exiterr(const char *fmt, ...) { int retval; va_list ap; end_dialog(); (void) fputc('\n', stderr); va_start(ap, fmt); (void) vfprintf(stderr, fmt, ap); va_end(ap); (void) fputc('\n', stderr); +#ifdef HAVE_DLG_TRACE + va_start(ap, fmt); + dlg_trace_msg("## Error: "); + dlg_trace_va_msg(fmt, ap); + va_end(ap); +#endif + dlg_killall_bg(&retval); (void) fflush(stderr); (void) fflush(stdout); - dlg_exit(DLG_EXIT_ERROR); + dlg_exit(strcmp(fmt, "timeout") == 0 ? DLG_EXIT_TIMEOUT : DLG_EXIT_ERROR); +} + +/* + * Get a string from the environment, rejecting those which are entirely blank. + */ +char * +dlg_getenv_str(const char *name) +{ + char *result = getenv(name); + if (result != NULL) { + while (*result != '\0' && isspace(UCH(*result))) + ++result; + if (*result == '\0') + result = NULL; + } + return result; +} + +/* + * Get a number from the environment: + * + If the caller provides a pointer in the second parameter, return + * success/failure for the function return, and the actual value via the + * pointer. Use this for decoding arbitrary numbers, e.g., negative or zero. + * + If the caller does not provide a pointer, return the decoded value for + * the function-return. Use this when only values greater than zero are + * useful. + */ +int +dlg_getenv_num(const char *name, int *value) +{ + int result = 0; + char *data = getenv(name); + if (data != NULL) { + char *temp = NULL; + long check = strtol(data, &temp, 0); + if (temp != 0 && temp != data && *temp == '\0') { + result = (int) check; + if (value != NULL) { + *value = result; + result = 1; + } + } + } + return result; } void dlg_beeping(void) { if (dialog_vars.beep_signal) { (void) beep(); dialog_vars.beep_signal = 0; } } void dlg_print_size(int height, int width) { if (dialog_vars.print_siz) { fprintf(dialog_state.output, "Size: %d, %d\n", height, width); DLG_TRACE(("# print size: %dx%d\n", height, width)); } } void dlg_ctl_size(int height, int width) { if (dialog_vars.size_err) { if ((width > COLS) || (height > LINES)) { dlg_exiterr("Window too big. (height, width) = (%d, %d). Max allowed (%d, %d).", height, width, LINES, COLS); } #ifdef HAVE_COLOR else if ((dialog_state.use_shadow) && ((width > SCOLS || height > SLINES))) { if ((width <= COLS) && (height <= LINES)) { /* try again, without shadows */ dialog_state.use_shadow = 0; } else { dlg_exiterr("Window+Shadow too big. (height, width) = (%d, %d). Max allowed (%d, %d).", height, width, SLINES, SCOLS); } } #endif } } /* * If the --tab-correct was not selected, convert tabs to single spaces. */ void dlg_tab_correct_str(char *prompt) { char *ptr; if (dialog_vars.tab_correct) { while ((ptr = strchr(prompt, TAB)) != NULL) { *ptr = ' '; prompt = ptr; } } } void dlg_calc_listh(int *height, int *list_height, int item_no) { /* calculate new height and list_height */ int rows = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0); if (rows - (*height) > 0) { if (rows - (*height) > item_no) *list_height = item_no; else *list_height = rows - (*height); } (*height) += (*list_height); } /* obsolete */ int dlg_calc_listw(int item_no, char **items, int group) { - int n, i, len1 = 0, len2 = 0; + int i, len1 = 0, len2 = 0; + for (i = 0; i < (item_no * group); i += group) { + int n; + if ((n = dlg_count_columns(items[i])) > len1) len1 = n; if ((n = dlg_count_columns(items[i + 1])) > len2) len2 = n; } return len1 + len2; } int dlg_calc_list_width(int item_no, DIALOG_LISTITEM * items) { int n, i, len1 = 0, len2 = 0; int bits = ((dialog_vars.no_tags ? 1 : 0) + (dialog_vars.no_items ? 2 : 0)); for (i = 0; i < item_no; ++i) { switch (bits) { case 0: /* FALLTHRU */ case 1: if ((n = dlg_count_columns(items[i].name)) > len1) len1 = n; if ((n = dlg_count_columns(items[i].text)) > len2) len2 = n; break; case 2: /* FALLTHRU */ case 3: if ((n = dlg_count_columns(items[i].name)) > len1) len1 = n; break; } } return len1 + len2; } char * dlg_strempty(void) { static char empty[] = ""; return empty; } char * dlg_strclone(const char *cprompt) { char *prompt = 0; if (cprompt != 0) { prompt = dlg_malloc(char, strlen(cprompt) + 1); assert_ptr(prompt, "dlg_strclone"); strcpy(prompt, cprompt); } return prompt; } chtype dlg_asciibox(chtype ch) { chtype result = 0; if (ch == ACS_ULCORNER) result = '+'; else if (ch == ACS_LLCORNER) result = '+'; else if (ch == ACS_URCORNER) result = '+'; else if (ch == ACS_LRCORNER) result = '+'; else if (ch == ACS_HLINE) result = '-'; else if (ch == ACS_VLINE) result = '|'; else if (ch == ACS_LTEE) result = '+'; else if (ch == ACS_RTEE) result = '+'; else if (ch == ACS_UARROW) result = '^'; else if (ch == ACS_DARROW) result = 'v'; return result; } chtype dlg_boxchar(chtype ch) { chtype result = dlg_asciibox(ch); if (result != 0) { if (dialog_vars.ascii_lines) ch = result; else if (dialog_vars.no_lines) ch = ' '; } return ch; } int dlg_box_x_ordinate(int width) { int x; if (dialog_vars.begin_set == 1) { x = dialog_vars.begin_x; } else { /* center dialog box on screen unless --begin-set */ x = (SCOLS - width) / 2; } return x; } int dlg_box_y_ordinate(int height) { int y; if (dialog_vars.begin_set == 1) { y = dialog_vars.begin_y; } else { /* center dialog box on screen unless --begin-set */ y = (SLINES - height) / 2; } return y; } void dlg_draw_title(WINDOW *win, const char *title) { if (title != NULL) { chtype attr = A_NORMAL; chtype save = dlg_get_attrs(win); int x = centered(getmaxx(win), title); dlg_attrset(win, title_attr); wmove(win, 0, x); dlg_print_text(win, title, getmaxx(win) - x, &attr); dlg_attrset(win, save); dlg_finish_string(title); } } void dlg_draw_bottom_box2(WINDOW *win, chtype on_left, chtype on_right, chtype on_inside) { int width = getmaxx(win); int height = getmaxy(win); int i; dlg_attrset(win, on_left); (void) wmove(win, height - 3, 0); (void) waddch(win, dlg_boxchar(ACS_LTEE)); for (i = 0; i < width - 2; i++) (void) waddch(win, dlg_boxchar(ACS_HLINE)); dlg_attrset(win, on_right); (void) waddch(win, dlg_boxchar(ACS_RTEE)); dlg_attrset(win, on_inside); (void) wmove(win, height - 2, 1); for (i = 0; i < width - 2; i++) (void) waddch(win, ' '); } void dlg_draw_bottom_box(WINDOW *win) { dlg_draw_bottom_box2(win, border_attr, dialog_attr, dialog_attr); } /* * Remove a window, repainting everything else. This would be simpler if we * used the panel library, but that is not _always_ available. */ void dlg_del_window(WINDOW *win) { DIALOG_WINDOWS *p, *q, *r; /* * If --keep-window was set, do not delete/repaint the windows. */ if (dialog_vars.keep_window) return; /* Leave the main window untouched if there are no background windows. * We do this so the current window will not be cleared on exit, allowing * things like the infobox demo to run without flicker. */ if (dialog_state.getc_callbacks != 0) { touchwin(stdscr); wnoutrefresh(stdscr); } for (p = dialog_state.all_windows, q = r = 0; p != 0; r = p, p = p->next) { if (p->normal == win) { q = p; /* found a match - should be only one */ if (r == 0) { dialog_state.all_windows = p->next; } else { r->next = p->next; } } else { if (p->shadow != 0) { touchwin(p->shadow); wnoutrefresh(p->shadow); } touchwin(p->normal); wnoutrefresh(p->normal); } } if (q) { if (dialog_state.all_windows != 0) erase_childs_shadow(q); del_subwindows(q->normal); dlg_unregister_window(q->normal); delwin(q->normal); free(q); } doupdate(); } /* * Create a window, optionally with a shadow. */ WINDOW * dlg_new_window(int height, int width, int y, int x) { return dlg_new_modal_window(stdscr, height, width, y, x); } /* * "Modal" windows differ from normal ones by having a shadow in a window * separate from the standard screen. */ WINDOW * dlg_new_modal_window(WINDOW *parent, int height, int width, int y, int x) { WINDOW *win; DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1); (void) parent; if (p == 0 || (win = newwin(height, width, y, x)) == 0) { dlg_exiterr("Can't make new window at (%d,%d), size (%d,%d).\n", y, x, height, width); } p->next = dialog_state.all_windows; p->normal = win; + p->getc_timeout = WTIMEOUT_OFF; dialog_state.all_windows = p; #ifdef HAVE_COLOR if (dialog_state.use_shadow) { p->shadow = parent; draw_childs_shadow(p); } #endif (void) keypad(win, TRUE); return win; } +/* + * dlg_getc() uses the return-value to determine how to handle an ERR return + * from a non-blocking read: + * a) if greater than zero, there was an expired timeout (blocking for a short + * time), or + * b) if zero, it was a non-blocking read, or + * c) if negative, an error occurred on a blocking read. + */ +int +dlg_set_timeout(WINDOW *win, bool will_getc) +{ + DIALOG_WINDOWS *p; + int result = 0; + + if ((p = SearchTopWindows(win)) != NULL) { + int interval = (dialog_vars.timeout_secs * 1000); + + if (will_getc || dialog_vars.pause_secs) { + interval = WTIMEOUT_VAL; + } else { + result = interval; + if (interval <= 0) { + interval = WTIMEOUT_OFF; + } + } + wtimeout(win, interval); + p->getc_timeout = interval; + } + return result; +} + +void +dlg_reset_timeout(WINDOW *win) +{ + DIALOG_WINDOWS *p; + + if ((p = SearchTopWindows(win)) != NULL) { + wtimeout(win, p->getc_timeout); + } else { + wtimeout(win, WTIMEOUT_OFF); + } +} + /* * Move/Resize a window, optionally with a shadow. */ #ifdef KEY_RESIZE void dlg_move_window(WINDOW *win, int height, int width, int y, int x) { - DIALOG_WINDOWS *p; - if (win != 0) { + DIALOG_WINDOWS *p; + dlg_ctl_size(height, width); - if ((p = find_window(win)) != 0) { + if ((p = SearchTopWindows(win)) != 0) { (void) wresize(win, height, width); (void) mvwin(win, y, x); #ifdef HAVE_COLOR if (p->shadow != 0) { if (dialog_state.use_shadow) { (void) mvwin(p->shadow, y + SHADOW_ROWS, x + SHADOW_COLS); } else { p->shadow = 0; } } #endif (void) refresh(); #ifdef HAVE_COLOR draw_childs_shadow(p); #endif } } } /* * Having just received a KEY_RESIZE, wait a short time to ignore followup * KEY_RESIZE events. */ void dlg_will_resize(WINDOW *win) { - int n, ch, base; + int n, base; int caught = 0; + dialog_state.had_resize = TRUE; dlg_trace_win(win); - wtimeout(win, 20); + wtimeout(win, WTIMEOUT_VAL * 5); + for (n = base = 0; n < base + 10; ++n) { + int ch; + if ((ch = wgetch(win)) != ERR) { if (ch == KEY_RESIZE) { base = n; ++caught; - } else { + } else if (ch != ERR) { ungetch(ch); break; } } } - dlg_trace_msg("# caught %d KEY_RESIZE key%s\n", - 1 + caught, - caught == 1 ? "" : "s"); + dlg_reset_timeout(win); + DLG_TRACE(("# caught %d KEY_RESIZE key%s\n", + 1 + caught, + caught == 1 ? "" : "s")); } #endif /* KEY_RESIZE */ +WINDOW * +dlg_der_window(WINDOW *parent, int height, int width, int y, int x) +{ + WINDOW *win; + + /* existing uses of derwin are (almost) guaranteed to succeed, and the + * caller has to allow for failure. + */ + if ((win = derwin(parent, height, width, y, x)) != 0) { + add_subwindow(parent, win); + (void) keypad(win, TRUE); + } + return win; +} + WINDOW * dlg_sub_window(WINDOW *parent, int height, int width, int y, int x) { WINDOW *win; if ((win = subwin(parent, height, width, y, x)) == 0) { dlg_exiterr("Can't make sub-window at (%d,%d), size (%d,%d).\n", y, x, height, width); } add_subwindow(parent, win); (void) keypad(win, TRUE); return win; } /* obsolete */ int dlg_default_item(char **items, int llen) { int result = 0; if (dialog_vars.default_item != 0) { int count = 0; while (*items != 0) { if (!strcmp(dialog_vars.default_item, *items)) { result = count; break; } items += llen; count++; } } return result; } int dlg_default_listitem(DIALOG_LISTITEM * items) { int result = 0; if (dialog_vars.default_item != 0) { int count = 0; while (items->name != 0) { if (!strcmp(dialog_vars.default_item, items->name)) { result = count; break; } ++items; count++; } } return result; } /* * Draw the string for item_help */ void dlg_item_help(const char *txt) { if (USE_ITEM_HELP(txt)) { chtype attr = A_NORMAL; - int y, x; dlg_attrset(stdscr, itemhelp_attr); (void) wmove(stdscr, LINES - 1, 0); (void) wclrtoeol(stdscr); (void) addch(' '); dlg_print_text(stdscr, txt, COLS - 1, &attr); + if (itemhelp_attr & A_COLOR) { + int y, x; /* fill the remainder of the line with the window's attributes */ getyx(stdscr, y, x); (void) y; while (x < COLS) { (void) addch(' '); ++x; } } (void) wnoutrefresh(stdscr); } } #ifndef HAVE_STRCASECMP int dlg_strcmp(const char *a, const char *b) { int ac, bc, cmp; for (;;) { ac = UCH(*a++); bc = UCH(*b++); if (isalpha(ac) && islower(ac)) ac = _toupper(ac); if (isalpha(bc) && islower(bc)) bc = _toupper(bc); cmp = ac - bc; if (ac == 0 || bc == 0 || cmp != 0) break; } return cmp; } #endif /* * Returns true if 'dst' points to a blank which follows another blank which * is not a leading blank on a line. */ static bool trim_blank(char *base, char *dst) { - int count = isblank(UCH(*dst)); + int count = !!isblank(UCH(*dst)); while (dst-- != base) { if (*dst == '\n') { break; } else if (isblank(UCH(*dst))) { count++; } else { break; } } return (count > 1); } /* * Change embedded "\n" substrings to '\n' characters and tabs to single * spaces. If there are no "\n"s, it will strip all extra spaces, for * justification. If it has "\n"'s, it will preserve extra spaces. If cr_wrap * is set, it will preserve '\n's. */ void dlg_trim_string(char *s) { char *base = s; char *p1; char *p = s; int has_newlines = !dialog_vars.no_nl_expand && (strstr(s, "\\n") != 0); while (*p != '\0') { if (*p == TAB && !dialog_vars.nocollapse) *p = ' '; if (has_newlines) { /* If prompt contains "\n" strings */ if (*p == '\\' && *(p + 1) == 'n') { *s++ = '\n'; p += 2; p1 = p; /* * Handle end of lines intelligently. If '\n' follows "\n" * then ignore the '\n'. This eliminates the need to escape * the '\n' character (no need to use "\n\"). */ while (isblank(UCH(*p1))) p1++; if (*p1 == '\n') p = p1 + 1; } else if (*p == '\n') { if (dialog_vars.cr_wrap) *s++ = *p++; else { /* Replace the '\n' with a space if cr_wrap is not set */ if (!trim_blank(base, p)) *s++ = ' '; p++; } } else /* If *p != '\n' */ *s++ = *p++; } else if (dialog_vars.trim_whitespace) { if (isblank(UCH(*p))) { if (!isblank(UCH(*(s - 1)))) { *s++ = ' '; p++; } else p++; } else if (*p == '\n') { if (dialog_vars.cr_wrap) *s++ = *p++; else if (!isblank(UCH(*(s - 1)))) { /* Strip '\n's if cr_wrap is not set. */ *s++ = ' '; p++; } else p++; } else *s++ = *p++; } else { /* If there are no "\n" strings */ if (isblank(UCH(*p)) && !dialog_vars.nocollapse) { if (!trim_blank(base, p)) *s++ = *p; p++; } else *s++ = *p++; } } *s = '\0'; } void dlg_set_focus(WINDOW *parent, WINDOW *win) { if (win != 0) { (void) wmove(parent, getpary(win) + getcury(win), getparx(win) + getcurx(win)); (void) wnoutrefresh(win); (void) doupdate(); } } /* * Returns the nominal maximum buffer size. */ int dlg_max_input(int max_len) { if (dialog_vars.max_input != 0 && dialog_vars.max_input < MAX_LEN) max_len = dialog_vars.max_input; return max_len; } /* * Free storage used for the result buffer. */ void dlg_clr_result(void) { if (dialog_vars.input_length) { dialog_vars.input_length = 0; if (dialog_vars.input_result) free(dialog_vars.input_result); } dialog_vars.input_result = 0; } /* * Setup a fixed-buffer for the result. */ char * dlg_set_result(const char *string) { unsigned need = string ? (unsigned) strlen(string) + 1 : 0; /* inputstr.c needs a fixed buffer */ if (need < MAX_LEN) need = MAX_LEN; /* * If the buffer is not big enough, allocate a new one. */ if (dialog_vars.input_length != 0 || dialog_vars.input_result == 0 || need > MAX_LEN) { dlg_clr_result(); dialog_vars.input_length = need; dialog_vars.input_result = dlg_malloc(char, need); assert_ptr(dialog_vars.input_result, "dlg_set_result"); } strcpy(dialog_vars.input_result, string ? string : ""); return dialog_vars.input_result; } /* * Accumulate results in dynamically allocated buffer. * If input_length is zero, it is a MAX_LEN buffer belonging to the caller. */ void dlg_add_result(const char *string) { unsigned have = (dialog_vars.input_result ? (unsigned) strlen(dialog_vars.input_result) : 0); unsigned want = (unsigned) strlen(string) + 1 + have; if ((want >= MAX_LEN) || (dialog_vars.input_length != 0) || (dialog_vars.input_result == 0)) { if (dialog_vars.input_length == 0 || dialog_vars.input_result == 0) { char *save_result = dialog_vars.input_result; dialog_vars.input_length = want * 2; dialog_vars.input_result = dlg_malloc(char, dialog_vars.input_length); assert_ptr(dialog_vars.input_result, "dlg_add_result malloc"); dialog_vars.input_result[0] = '\0'; if (save_result != 0) strcpy(dialog_vars.input_result, save_result); } else if (want >= dialog_vars.input_length) { dialog_vars.input_length = want * 2; dialog_vars.input_result = dlg_realloc(char, dialog_vars.input_length, dialog_vars.input_result); assert_ptr(dialog_vars.input_result, "dlg_add_result realloc"); } } strcat(dialog_vars.input_result, string); } /* * These are characters that (aside from the quote-delimiter) will have to * be escaped in a single- or double-quoted string. */ #define FIX_SINGLE "\n\\" #define FIX_DOUBLE FIX_SINGLE "[]{}?*;`~#$^&()|<>" /* * Returns the quote-delimiter. */ static const char * quote_delimiter(void) { return dialog_vars.single_quoted ? "'" : "\""; } /* * Returns true if we should quote the given string. */ static bool must_quote(char *string) { bool code = FALSE; if (*string != '\0') { size_t len = strlen(string); if (strcspn(string, quote_delimiter()) != len) code = TRUE; else if (strcspn(string, "\n\t ") != len) code = TRUE; else code = (strcspn(string, FIX_DOUBLE) != len); } else { code = TRUE; } return code; } /* * Add a quoted string to the result buffer. */ void dlg_add_quoted(char *string) { char temp[2]; const char *my_quote = quote_delimiter(); const char *must_fix = (dialog_vars.single_quoted ? FIX_SINGLE : FIX_DOUBLE); if (must_quote(string)) { temp[1] = '\0'; dlg_add_result(my_quote); while (*string != '\0') { temp[0] = *string++; if ((strchr) (my_quote, *temp) || (strchr) (must_fix, *temp)) dlg_add_result("\\"); dlg_add_result(temp); } dlg_add_result(my_quote); } else { dlg_add_result(string); } } /* * When adding a result, make that depend on whether "--quoted" is used. */ void dlg_add_string(char *string) { if (dialog_vars.quoted) { dlg_add_quoted(string); } else { dlg_add_result(string); } } bool dlg_need_separator(void) { bool result = FALSE; if (dialog_vars.output_separator) { result = TRUE; } else if (dialog_vars.input_result && *(dialog_vars.input_result)) { result = TRUE; } return result; } void dlg_add_separator(void) { const char *separator = (dialog_vars.separate_output) ? "\n" : " "; if (dialog_vars.output_separator) separator = dialog_vars.output_separator; dlg_add_result(separator); } #define HELP_PREFIX "HELP " void dlg_add_help_listitem(int *result, char **tag, DIALOG_LISTITEM * item) { dlg_add_result(HELP_PREFIX); if (USE_ITEM_HELP(item->help)) { *tag = dialog_vars.help_tags ? item->name : item->help; *result = DLG_EXIT_ITEM_HELP; } else { *tag = item->name; } } void dlg_add_help_formitem(int *result, char **tag, DIALOG_FORMITEM * item) { dlg_add_result(HELP_PREFIX); if (USE_ITEM_HELP(item->help)) { *tag = dialog_vars.help_tags ? item->name : item->help; *result = DLG_EXIT_ITEM_HELP; } else { *tag = item->name; } } /* * Some widgets support only one value of a given variable - save/restore the * global dialog_vars so we can override it consistently. */ void dlg_save_vars(DIALOG_VARS * vars) { *vars = dialog_vars; } /* * Most of the data in DIALOG_VARS is normally set by command-line options. * The input_result member is an exception; it is normally set by the dialog * library to return result values. */ void dlg_restore_vars(DIALOG_VARS * vars) { char *save_result = dialog_vars.input_result; unsigned save_length = dialog_vars.input_length; dialog_vars = *vars; dialog_vars.input_result = save_result; dialog_vars.input_length = save_length; } /* * Called each time a widget is invoked which may do output, increment a count. */ void dlg_does_output(void) { dialog_state.output_count += 1; } /* * Compatibility for different versions of curses. */ #if !(defined(HAVE_GETBEGX) && defined(HAVE_GETBEGY)) int dlg_getbegx(WINDOW *win) { int y, x; getbegyx(win, y, x); return x; } int dlg_getbegy(WINDOW *win) { int y, x; getbegyx(win, y, x); return y; } #endif #if !(defined(HAVE_GETCURX) && defined(HAVE_GETCURY)) int dlg_getcurx(WINDOW *win) { int y, x; getyx(win, y, x); return x; } int dlg_getcury(WINDOW *win) { int y, x; getyx(win, y, x); return y; } #endif #if !(defined(HAVE_GETMAXX) && defined(HAVE_GETMAXY)) int dlg_getmaxx(WINDOW *win) { int y, x; getmaxyx(win, y, x); return x; } int dlg_getmaxy(WINDOW *win) { int y, x; getmaxyx(win, y, x); return y; } #endif #if !(defined(HAVE_GETPARX) && defined(HAVE_GETPARY)) int dlg_getparx(WINDOW *win) { int y, x; getparyx(win, y, x); return x; } int dlg_getpary(WINDOW *win) { int y, x; getparyx(win, y, x); return y; } #endif #ifdef NEED_WGETPARENT WINDOW * dlg_wgetparent(WINDOW *win) { #undef wgetparent WINDOW *result = 0; DIALOG_WINDOWS *p; for (p = dialog_state.all_subwindows; p != 0; p = p->next) { if (p->shadow == win) { result = p->normal; break; } } return result; } #endif diff --git a/yesno.c b/yesno.c index 3605f67aee45..58acc8ae763d 100644 --- a/yesno.c +++ b/yesno.c @@ -1,173 +1,171 @@ /* - * $Id: yesno.c,v 1.62 2018/06/19 22:57:01 tom Exp $ + * $Id: yesno.c,v 1.71 2020/11/23 00:48:08 tom Exp $ * * yesno.c -- implements the yes/no box * - * Copyright 1999-2012,2018 Thomas E. Dickey + * Copyright 1999-2019,2020 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * 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, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. * * An earlier version of this program lists as authors * Savio Lam (lam836@cs.cuhk.hk) */ #include <dialog.h> #include <dlg_keys.h> /* * Display a dialog box with two buttons - Yes and No. */ int dialog_yesno(const char *title, const char *cprompt, int height, int width) { /* *INDENT-OFF* */ static DLG_KEYS_BINDING binding[] = { HELPKEY_BINDINGS, ENTERKEY_BINDINGS, SCROLLKEY_BINDINGS, TRAVERSE_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ int x, y; - int key = 0, fkey; - int code; + int key, fkey; int button = dlg_default_button(); WINDOW *dialog = 0; int result = DLG_EXIT_UNKNOWN; char *prompt; const char **buttons = dlg_yes_labels(); int min_width = 25; bool show = TRUE; int page, last = 0, offset = 0; #ifdef KEY_RESIZE int req_high = height; int req_wide = width; #endif DLG_TRACE(("# yesno args:\n")); DLG_TRACE2S("title", title); DLG_TRACE2S("message", cprompt); DLG_TRACE2N("height", height); DLG_TRACE2N("width", width); #ifdef KEY_RESIZE restart: #endif prompt = dlg_strclone(cprompt); dlg_tab_correct_str(prompt); dlg_button_layout(buttons, &min_width); dlg_auto_size(title, prompt, &height, &width, 2, min_width); dlg_print_size(height, width); dlg_ctl_size(height, width); x = dlg_box_x_ordinate(width); y = dlg_box_y_ordinate(height); -#ifdef KEY_RESIZE - if (dialog != 0) - dlg_move_window(dialog, height, width, y, x); - else -#endif - { - dialog = dlg_new_window(height, width, y, x); - dlg_register_window(dialog, "yesno", binding); - dlg_register_buttons(dialog, "yesno", buttons); - } + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "yesno", binding); + dlg_register_buttons(dialog, "yesno", buttons); dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); dlg_draw_title(dialog, title); dlg_draw_helpline(dialog, FALSE); dlg_attrset(dialog, dialog_attr); page = height - (1 + 3 * MARGIN); dlg_draw_buttons(dialog, height - 2 * MARGIN, 0, buttons, button, FALSE, width); while (result == DLG_EXIT_UNKNOWN) { + int code; + if (show) { last = dlg_print_scrolled(dialog, prompt, offset, page, width, TRUE); dlg_trace_win(dialog); show = FALSE; } key = dlg_mouse_wgetch(dialog, &fkey); - if (dlg_result_key(key, fkey, &result)) - break; + if (dlg_result_key(key, fkey, &result)) { + if (!dlg_button_key(result, &button, &key, &fkey)) + break; + } if ((code = dlg_char_to_button(key, buttons)) >= 0) { result = dlg_ok_buttoncode(code); break; } /* handle function keys */ if (fkey) { switch (key) { case DLGK_FIELD_NEXT: button = dlg_next_button(buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_FIELD_PREV: button = dlg_prev_button(buttons, button); if (button < 0) button = 0; dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); break; case DLGK_ENTER: + case DLGK_LEAVE: result = dlg_yes_buttoncode(button); break; #ifdef KEY_RESIZE case KEY_RESIZE: dlg_will_resize(dialog); - dlg_clear(); - free(prompt); height = req_high; width = req_wide; show = TRUE; + free(prompt); + _dlg_resize_cleanup(dialog); goto restart; #endif default: if (is_DLGK_MOUSE(key)) { result = dlg_yes_buttoncode(key - M_EVENT); if (result < 0) result = DLG_EXIT_OK; } else if (dlg_check_scrolled(key, last, page, &show, &offset) != 0) { beep(); } break; } - } else { + } else if (key > 0) { beep(); } } + dlg_add_last_key(-1); dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); return result; }