Index: vendor/dialog/dist/CHANGES =================================================================== --- vendor/dialog/dist/CHANGES (revision 339481) +++ vendor/dialog/dist/CHANGES (revision 339482) @@ -1,1929 +1,2248 @@ --- $Id: CHANGES,v 1.476 2013/09/24 00:06:47 tom Exp $ +-- $Id: CHANGES,v 1.619 2018/06/21 09:19:45 tom Exp $ -- Thomas E. Dickey This version of dialog was originally from a Debian snapshot. I've done this to it: +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. + 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 Martín Moro + > 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 Index: vendor/dialog/dist/VERSION =================================================================== --- vendor/dialog/dist/VERSION (revision 339481) +++ vendor/dialog/dist/VERSION (revision 339482) @@ -1 +1 @@ -11:1:0 1.2 20130923 +15:0:0 1.3 20180621 Index: vendor/dialog/dist/aclocal.m4 =================================================================== --- vendor/dialog/dist/aclocal.m4 (revision 339481) +++ vendor/dialog/dist/aclocal.m4 (revision 339482) @@ -1,5101 +1,6536 @@ dnl macros used for DIALOG configure script -dnl $Id: aclocal.m4,v 1.94 2013/09/22 14:26:24 tom Exp $ +dnl $Id: aclocal.m4,v 1.120 2018/06/21 00:30:26 tom Exp $ dnl --------------------------------------------------------------------------- -dnl Copyright 1999-2012,2013 -- Thomas E. Dickey +dnl Copyright 1999-2017,2018 -- 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 --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- -dnl AM_GNU_GETTEXT version: 13 updated: 2012/11/09 05:47:26 +dnl AM_GNU_GETTEXT version: 14 updated: 2015/04/15 19:08:48 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;; + ("$presentlang"*) useit=yes;; esac done 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: 3 updated: 2002/10/27 23:21:42 +dnl AM_LANGINFO_CODESET version: 4 updated: 2015/04/18 08:56:57 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 ], - [char* cs = nl_langinfo(CODESET);], - am_cv_langinfo_codeset=yes, - am_cv_langinfo_codeset=no) - ]) - if test $am_cv_langinfo_codeset = yes; then - AC_DEFINE(HAVE_LANGINFO_CODESET, 1, - [Define if you have and nl_langinfo(CODESET).]) - fi +AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi ])dnl dnl --------------------------------------------------------------------------- -dnl AM_LC_MESSAGES version: 4 updated: 2002/10/27 23:21:42 +dnl AM_LC_MESSAGES version: 5 updated: 2015/05/10 19:52:14 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 . dnl Ulrich Drepper , 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 - AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, - [AC_TRY_LINK([#include ], [return LC_MESSAGES], - am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) - if test $am_cv_val_LC_MESSAGES = yes; then - AC_DEFINE(HAVE_LC_MESSAGES, 1, - [Define if your file defines LC_MESSAGES.]) - fi - fi])dnl +[if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi +fi])dnl dnl --------------------------------------------------------------------------- -dnl AM_PATH_PROG_WITH_TEST version: 8 updated: 2009/01/11 20:31:12 +dnl AM_PATH_PROG_WITH_TEST version: 9 updated: 2015/04/15 19:08:48 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 , 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 [$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: 25 updated: 2012/10/06 08:57:51 +dnl AM_WITH_NLS version: 29 updated: 2018/02/21 21:26:03 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 , 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 have + 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_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], :) + + 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) - AC_CACHE_CHECK([for libintl.h and gettext()], cf_cv_func_gettext,[ - CF_FIND_LINKAGE(CF__INTL_HEAD, - CF__INTL_BODY, + + 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" - 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_PATH_PROG(GMSGFMT, gmsgfmt, $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], :) - 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=yes + nls_cv_use_gnu_gettext=maybe fi fi - if test "$nls_cv_use_gnu_gettext" = "yes"; then - if test ! -d $srcdir/intl ; then - AC_MSG_ERROR(no NLS library is packaged with this application) - fi - dnl Mark actions used to generate GNU NLS library. - INTLOBJS="\$(GETTOBJS)" - AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) - AC_SUBST(MSGFMT) - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes + if test "$nls_cv_use_gnu_gettext" != "no"; then CATOBJEXT=.gmo - 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/ $//'` + 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 This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then - dnl If it is no GNU msgfmt we define it as : so that the - dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then : ; else - AC_MSG_RESULT( - [found msgfmt program is not GNU msgfmt; ignore it]) - GMSGFMT=":" + AC_MSG_WARN([found msgfmt program is not GNU msgfmt]) fi fi - dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then - dnl If it is no GNU xgettext we define it as : so that the - dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then : ; else - AC_MSG_RESULT( - [found xgettext program is not GNU xgettext; ignore it]) - XGETTEXT=":" + AC_MSG_WARN([found xgettext program is not GNU xgettext]) fi fi - - dnl We need to process the po/ directory. - POSUB=po fi - AC_OUTPUT_COMMANDS( - [for ac_file in $CONFIG_FILES; do + 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 + # 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_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - 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" + # 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_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + 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" ;; + 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]) - 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 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]) + 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 - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) + 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].*) 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]) + 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 + INTLBISON=: + fi fi - if test $ac_verc_fail = yes; then - INTLBISON=: - 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 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 - 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: 4 updated: 2013/03/04 19:52:56 +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], ,[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])dnl +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: 10 updated: 2010/05/26 05:38:42 +dnl CF_ADD_CFLAGS version: 13 updated: 2017/02/25 18:57:40 dnl ------------- dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS dnl The second parameter 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 -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) continue elif test "${cf_tst_cflags}" = "\"'" ; then - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) continue fi ;; esac case "$CPPFLAGS" in - *$cf_add_cflags) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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_new_cppflags="$cf_new_cppflags $cf_add_cflags" + CF_APPEND_TEXT(cf_new_cppflags,$cf_add_cflags) ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + CF_APPEND_TEXT(cf_new_cflags,$cf_add_cflags) ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(yes) + CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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)]) - CFLAGS="$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)]) - CPPFLAGS="$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)]) - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + CF_APPEND_TEXT(EXTRA_CPPFLAGS,$cf_new_extra_cppflags) fi AC_SUBST(EXTRA_CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_INCDIR version: 13 updated: 2010/05/26 16:44:57 +dnl CF_ADD_INCDIR version: 15 updated: 2018/06/20 20:23:13 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 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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + CF_APPEND_TEXT(CPPFLAGS,-I$cf_add_incdir) AC_TRY_COMPILE([#include ], [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%'` 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: 9 updated: 2010/05/26 16:44:57 +dnl CF_ADD_LIBDIR version: 10 updated: 2015/04/18 08:56:57 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 - : - 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 + for cf_add_libdir in $1 + 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 + 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: 1 updated: 2010/06/02 05:03:05 +dnl CF_ADD_LIBS version: 2 updated: 2014/07/13 14:33:27 dnl ----------- -dnl Add one or more libraries, used to enforce consistency. +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],[ifelse($2,,LIBS,[$2])="$1 [$]ifelse($2,,LIBS,[$2])"])dnl +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +ifelse($2,,LIBS,[$2])="$cf_add_libs" +])dnl dnl --------------------------------------------------------------------------- -dnl CF_ADD_OPTIONAL_PATH version: 1 updated: 2007/07/29 12:33:33 +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 #(vi - no) #(vi - ;; - yes) #(vi - ;; - *) - CF_ADD_SEARCHPATH([$1], [AC_MSG_ERROR(cannot find $2 under $1)]) - ;; - esac +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 ----------------- 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 CF_ADD_INCDIR($cf_searchpath/include) 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 CF_ADD_LIBDIR($cf_searchpath/lib) elif test -d $cf_searchpath ; then CF_ADD_LIBDIR($cf_searchpath) ifelse([$2],,,[else $2]) fi done ]) dnl --------------------------------------------------------------------------- -dnl CF_ADD_SUBDIR_PATH version: 3 updated: 2010/07/03 20:58:12 +dnl CF_ADD_SUBDIR_PATH version: 4 updated: 2013/10/08 17:47:05 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 "$4" != "$5" && \ +test "x$4" != "x$5" && \ test -d "$4" && \ -ifelse([$5],NONE,,[(test $5 = NONE || test "$4" != "$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" } ])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_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: 4 updated: 2010/05/26 05:38:42 +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 + if test "$enableval" != "$5" ; then ifelse([$3],,[ :]dnl ,[ $3]) ifelse([$4],,,[ - else - $4]) - fi],[enableval=$5 ifelse([$4],,,[ - $4 + else + $4]) + fi],[enableval=$5 ifelse([$4],,,[ + $4 ])dnl - ])])dnl +])])dnl dnl --------------------------------------------------------------------------- -dnl CF_BUNDLED_INTL version: 17 updated: 2012/10/06 08:57:51 +dnl CF_AR_FLAGS version: 6 updated: 2015/10/10 15:25:05 +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 + + # 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 + + rm -f conftest.$ac_cv_objext + rm -f conftest.a + + cat >conftest.$ac_ext <&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 + done + rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext +]) + +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 --------------- 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/*//'` # 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` 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 + 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 - CPPFLAGS="$CPPFLAGS -I../intl" + 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: 1 updated: 2012/10/03 05:25:49 +dnl CF_CC_ENV_FLAGS version: 8 updated: 2017/09/23 08:50:24 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 with -dnl options, but eliminates a more common category of user confusion. +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} AC_MSG_CHECKING(\$CC variable) -case "$CC" in #(vi -*[[\ \ ]]-[[IUD]]*) +case "$CC" in +(*[[\ \ ]]-*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... - cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'` - CC=`echo "$CC" | sed -e 's/[[ ]].*//'` - CF_ADD_CFLAGS($cf_flags) + 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 -------------- 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 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 --------------- +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 ],[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"]) +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: 1 updated: 2012/06/16 14:55:39 +dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35 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 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS +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 ]) dnl --------------------------------------------------------------------------- dnl CF_CURSES_CHTYPE version: 8 updated: 2012/10/06 08:57:51 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], [cf_cv_chtype_decl=yes], [cf_cv_chtype_decl=no])]) 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], [cf_cv_chtype_type=scalar], [cf_cv_chtype_type=struct])]) 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: 11 updated: 2011/04/09 14:51:08 +dnl CF_CURSES_CPPFLAGS version: 13 updated: 2018/06/20 20:23:13 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 #(vi -hpux10.*) #(vi +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*) +(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 ]) -test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir" +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: 17 updated: 2011/05/14 16:07:29 +dnl CF_CURSES_FUNCS version: 19 updated: 2018/01/03 04:47:33 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}); -if (foo + 1234 > 5678) - ${cf_cv_main_return:-return}(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' ]) # 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 AC_DEFINE_UNQUOTED(HAVE_${cf_tr_func}) fi done ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_HEADER version: 3 updated: 2011/05/01 19:47:45 +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 ifelse($1,,,[ \ - $1/ncurses.h \ - $1/curses.h]) \ - ncurses.h \ - curses.h ifelse($1,,[ncurses/ncurses.h ncurses/curses.h]) +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: 37 updated: 2013/02/09 17:33:50 +dnl CF_CURSES_LIBS version: 42 updated: 2018/06/20 20:23:13 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) + [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 #(vi -freebsd*) #(vi - AC_CHECK_LIB(mytinfo,tgoto,[CF_ADD_LIBS(-lmytinfo)]) - ;; -hpux10.*) #(vi +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) - CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES" + CF_APPEND_TEXT(CPPFLAGS,-D__HP_CURSES -D_HP_CURSES) ac_cv_func_initscr=yes ])]) fi ;; -linux*) +(linux*) case `arch 2>/dev/null` in - x86_64) + (x86_64) if test -d /lib64 then CF_ADD_LIBDIR(/lib64) else CF_ADD_LIBDIR(/lib) fi ;; - *) + (*) CF_ADD_LIBDIR(/lib) ;; esac ;; -sunos3*|sunos4*) +(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 - ;; + 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,[break]) + AC_CHECK_LIB($cf_term_lib,tgoto,[ + : ${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 - AC_CHECK_LIB($cf_curs_lib,initscr,[break]) + 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 + 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 + fi done fi test $cf_curs_lib = unknown && AC_MSG_ERROR(no curses library found) - - LIBS="-l$cf_curs_lib $cf_save_LIBS" - if test "$cf_term_lib" = unknown ; 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 = no && AC_MSG_ERROR(Cannot link curses library) - elif test "$cf_curs_lib" = "$cf_term_lib" ; then - : - 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) - fi fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_CURSES_TERM_H version: 10 updated: 2012/10/06 08:57:51 +dnl CF_CURSES_TERM_H version: 11 updated: 2015/04/15 19:08:48 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 , look for , but always look # for 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 #(vi -*/*) +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_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], [cf_cv_term_header=$cf_header break], [cf_cv_term_header=no]) done -case $cf_cv_term_header in #(vi -no) +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], [cf_cv_term_header=$cf_header break], [cf_cv_term_header=no]) done ;; esac ]) -case $cf_cv_term_header in #(vi -term.h) #(vi +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) #(vi +(ncurses/term.h) AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h]) ;; -ncursesw/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: 2 updated: 2012/10/06 08:57:51 +dnl CF_CURSES_UNCTRL_H version: 4 updated: 2015/04/15 19:08:48 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 , look for , but always look # for 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 #(vi -*/*) +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_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], [cf_cv_unctrl_header=$cf_header break], [cf_cv_unctrl_header=no]) done +]) -case $cf_cv_unctrl_header in #(vi -no) +case $cf_cv_unctrl_header in +(no) AC_MSG_WARN(unctrl.h header not found) ;; esac -]) -case $cf_cv_unctrl_header in #(vi -unctrl.h) #(vi +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) #(vi +(ncurses/unctrl.h) AC_DEFINE(HAVE_NCURSES_UNCTRL_H,1,[Define to 1 if we have ncurses/unctrl.h]) ;; -ncursesw/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 ------------------ 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'])], [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 ---------------------- 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_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], [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 -------------------- 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], [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 ---------- dnl "dirname" is not portable, so we fake it with a shell script. AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl dnl --------------------------------------------------------------------------- -dnl CF_DISABLE_ECHO version: 12 updated: 2012/10/06 16:30:28 +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='--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='' + 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: 1 updated: 2010/05/15 15:45:59 +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 --------------------- 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]) AC_MSG_RESULT($cf_disable_rpath_hack) if test "$cf_disable_rpath_hack" = no ; 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 --------------- 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' cf_libdir="" AC_CHECK_FUNC($5, 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' ], [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' break], [AC_MSG_RESULT(no) LIBS="$cf_save_LIBS"]) done ]) ]) eval 'cf_found_library=[$]cf_cv_have_lib_'$1 ifelse($6,,[ if test $cf_found_library = no ; then AC_MSG_ERROR(Cannot link $1 library) fi ]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_FIND_LINKAGE version: 19 updated: 2010/05/29 16:31:02 +dnl CF_FIND_LINKAGE version: 21 updated: 2018/06/20 20:23:13 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_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_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 - CF_VERBOSE(... testing $cf_cv_header_path_$3) - CPPFLAGS="$cf_save_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 + 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 + 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 + if test "$cf_cv_find_linkage_$3" = maybe ; then - CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) + CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" + 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" - ]) + 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 - 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 + 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 + 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) + 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_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 ------------ dnl Test for the presence of , '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 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]) 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]) fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GCC_ATTRIBUTES version: 16 updated: 2012/10/02 20:55:03 +dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00 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 then cat > conftest.i < conftest.$ac_ext <&AC_FD_CC - case $cf_attribute in #(vi - printf) #(vi + case $cf_attribute in + (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <>confdefs.h - case $cf_attribute in #(vi - noreturn) #(vi + case $cf_attribute in + (noreturn) AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc]) ;; - printf) #(vi + (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) #(vi + (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) #(vi + (unused) AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc]) ;; esac fi done else fgrep define conftest.i >>confdefs.h fi rm -rf conftest* fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33 dnl -------------- dnl Find version of gcc 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 ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GCC_WARNINGS version: 29 updated: 2012/06/16 14:55:39 +dnl CF_GCC_WARNINGS version: 33 updated: 2018/06/20 20:23:13 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 -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 <],[ -#ifndef _XOPEN_SOURCE -make an error -#endif], - [cf_cv_gnu_source=no], - [cf_save="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" - AC_TRY_COMPILE([#include ],[ -#ifdef _XOPEN_SOURCE -make an error -#endif], - [cf_cv_gnu_source=no], - [cf_cv_gnu_source=yes]) - CPPFLAGS="$cf_save" - ]) + #if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0 + return 0; + #else + # error not GNU C library + #endif], + [cf_cv_gnu_library=yes], + [cf_cv_gnu_library=no]) ]) -test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" + +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... + 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 ],[ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2) + 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 + #include + ],[ + #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 ],[ + #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 ],[ + #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 ],[ + #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: 12 updated: 2010/05/05 05:22:40 +dnl CF_HEADER_PATH version: 13 updated: 2015/04/15 19:08:48 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 #(vi - -I*) + 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 "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { 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: 5 updated: 2013/02/10 10:41:05 +dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00 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 - linux*|gnu*) + (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 -no-gcc" +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: 8 updated: 2012/10/06 08:57:51 +dnl CF_LARGEFILE version: 11 updated: 2018/06/20 20:23:13 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_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 - test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " - test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " - test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " + 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 #include ],[ /* 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; ], [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 + fi ]) ]) dnl --------------------------------------------------------------------------- -dnl CF_LD_RPATH_OPT version: 5 updated: 2011/07/17 14:48:41 +dnl CF_LD_RPATH_OPT version: 7 updated: 2016/02/20 18:01:19 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 #(vi -irix*) #(vi +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) #(vi +(linux*|gnu*|k*bsd*-gnu|freebsd*) LD_RPATH_OPT="-Wl,-rpath," ;; -openbsd[[2-9]].*|mirbsd*) #(vi +(openbsd[[2-9]].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; -dragonfly*|freebsd*) #(vi +(dragonfly*) LD_RPATH_OPT="-rpath " ;; -netbsd*) #(vi +(netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; -osf*|mls+*) #(vi +(osf*|mls+*) LD_RPATH_OPT="-rpath " ;; -solaris2*) #(vi +(solaris2*) LD_RPATH_OPT="-R" ;; -*) +(*) ;; esac AC_MSG_RESULT($LD_RPATH_OPT) -case "x$LD_RPATH_OPT" in #(vi -x-R*) +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 ])dnl dnl --------------------------------------------------------------------------- -dnl CF_LIBRARY_PATH version: 9 updated: 2010/03/28 12:52:50 +dnl CF_LIBRARY_PATH version: 10 updated: 2015/04/15 19:08:48 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 #(vi - -L*) + 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: 9 updated: 2012/01/21 19:28:10 +dnl CF_LIB_PREFIX version: 12 updated: 2015/10/17 19:03:33 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 #(vi - OS/2*|os2*) #(vi - LIB_PREFIX='' - ;; - *) LIB_PREFIX='lib' - ;; + case $cf_cv_system_name in + (OS/2*|os2*) + if test "$DFT_LWR_MODEL" = libtool; then + LIB_PREFIX='lib' + else + LIB_PREFIX='' + fi + ;; + (*) LIB_PREFIX='lib' + ;; esac ifelse($1,,,[$1=$LIB_PREFIX]) AC_SUBST(LIB_PREFIX) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_LIB_SUFFIX version: 22 updated: 2013/09/07 13:54:05 +dnl CF_LIB_SUFFIX version: 25 updated: 2015/04/17 21:13:04 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 #(vi - Xlibtool) #(vi + case X$1 in + (Xlibtool) $2='.la' $3=[$]$2 ;; - Xdebug) #(vi + (Xdebug) $2='_g.a' $3=[$]$2 ;; - Xprofile) #(vi + (Xprofile) $2='_p.a' $3=[$]$2 ;; - Xshared) #(vi + (Xshared) case $cf_cv_system_name in - aix[[5-7]]*) #(vi - $2='.a' + (aix[[5-7]]*) + $2='.so' $3=[$]$2 ;; - cygwin*|msys*|mingw*) #(vi + (cygwin*|msys*|mingw*) $2='.dll' $3='.dll.a' ;; - darwin*) #(vi + (darwin*) $2='.dylib' $3=[$]$2 ;; - hpux*) #(vi + (hpux*) case $target in - ia64*) #(vi + (ia64*) $2='.so' $3=[$]$2 ;; - *) #(vi + (*) $2='.sl' $3=[$]$2 ;; esac ;; - *) #(vi + (*) $2='.so' $3=[$]$2 ;; esac ;; - *) + (*) $2='.a' $3=[$]$2 ;; esac - test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}" - test -n "$LIB_SUFFIX" && $3="${LIB_SUFFIX}[$]{$3}" + 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: 14 updated: 2011/03/31 19:29:46 +dnl CF_MAKEFLAGS version: 18 updated: 2018/02/21 21:26:03 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_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[ cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp </dev/null | fgrep -v "ing directory" | sed -e 's,[[ ]]*$,,'` case "$cf_result" in - .*k) + (.*k|.*kw) cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` case "$cf_result" in - .*CC=*) cf_cv_makeflags= + (.*CC=*) cf_cv_makeflags= ;; - *) cf_cv_makeflags=$cf_option + (*) cf_cv_makeflags=$cf_option ;; esac break ;; - .-) ;; - *) echo "given option \"$cf_option\", no match \"$cf_result\"" + (.-) ;; + (*) + 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: 8 updated: 2010/05/29 16:31:02 +dnl CF_MATH_LIB version: 9 updated: 2017/01/21 11:06:25 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 + #include #include ], [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 ------------ 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 #include #ifdef HAVE_LIBUTF8_H #include #endif], [mbstate_t state], [cf_cv_mbstate_t=no], [AC_TRY_COMPILE([ #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif], [mbstate_t 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: 5 updated: 2013/09/07 13:54:05 +dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00 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 #(vi - *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw32*|*-uwin*) #(vi + case $target_alias in + (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) 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 ------------------- 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); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ] ,[$1=$2] ,[$1=no]) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NCURSES_CONFIG version: 10 updated: 2012/10/06 08:57:51 +dnl CF_NCURSES_CONFIG version: 21 updated: 2018/06/20 20:23:13 dnl ----------------- -dnl Tie together the configure-script macros for ncurses. -dnl Prefer the "-config" script from ncurses 6.x, to simplify analysis. -dnl Allow that to be overridden using the $NCURSES_CONFIG environment variable. +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_DEFUN([CF_NCURSES_CONFIG],[ +AC_REQUIRE([CF_PKG_CONFIG]) cf_ncuconfig_root=ifelse($1,,ncurses,$1) +cf_have_ncuconfig=no -echo "Looking for ${cf_ncuconfig_root}-config" +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) -CF_ACVERSION_CHECK(2.52, - [AC_CHECK_TOOLS(NCURSES_CONFIG, ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)], - [AC_PATH_PROGS(NCURSES_CONFIG, ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)]) + AC_MSG_CHECKING(if the $cf_ncuconfig_root package files work) + cf_have_ncuconfig=unknown -if test "$NCURSES_CONFIG" != none ; then + cf_save_CPPFLAGS="$CPPFLAGS" + cf_save_LIBS="$LIBS" -CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" -CF_ADD_LIBS(`$NCURSES_CONFIG --libs`) + CF_ADD_CFLAGS(`$PKG_CONFIG --cflags $cf_ncuconfig_root`) + CF_ADD_LIBS(`$PKG_CONFIG --libs $cf_ncuconfig_root`) -# even with config script, some packages use no-override for curses.h -CF_CURSES_HEADER(ifelse($1,,ncurses,$1)) + AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], + [initscr(); mousemask(0,0); tgoto((char *)0, 0, 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 -dnl like CF_NCURSES_CPPFLAGS -AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) + else + AC_MSG_RESULT(no) + NCURSES_CONFIG_PKG=none + fi +else + NCURSES_CONFIG_PKG=none +fi -dnl like CF_NCURSES_LIBS -CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_ncuconfig_root) -AC_DEFINE_UNQUOTED($cf_nculib_ROOT) +if test "x$cf_have_ncuconfig" = "xno"; then + cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}" -dnl like CF_NCURSES_VERSION -cf_cv_ncurses_version=`$NCURSES_CONFIG --version` + 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)]) -else + if test "$NCURSES_CONFIG" != none ; then -CF_NCURSES_CPPFLAGS(ifelse($1,,ncurses,$1)) -CF_NCURSES_LIBS(ifelse($1,,ncurses,$1)) + 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` + + 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 ------------------- 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 . 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" 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: 3 updated: 2012/10/06 08:57:51 +dnl CF_NCURSES_HEADER version: 4 updated: 2015/04/15 19:08:48 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 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 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 fi CF_ADD_INCDIR($cf_1st_incdir) fi # Set definitions to allow ifdef'ing for ncurses.h -case $cf_cv_ncurses_header in # (vi -*ncurses.h) +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 # (vi -ncurses/curses.h|ncurses/ncurses.h) +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) +(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: 16 updated: 2010/11/20 17:02:38 +dnl CF_NCURSES_LIBS version: 17 updated: 2015/04/15 19:08:48 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 #(vi -freebsd*) +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" ) 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$%%"` 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);], [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_VERSION version: 14 updated: 2012/10/06 08:57:51 +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 ------------------ 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 AC_TRY_RUN([ #include <${cf_cv_ncurses_header:-curses.h}> #include -int main() +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); }],[ 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 < #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%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi ]) 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_NO_LEAKS_OPTION version: 5 updated: 2012/10/02 20:55:03 +dnl CF_NL_LANGINFO_1STDAY version: 1 updated: 2016/02/08 19:06:25 +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 +#include +],[ + int first_weekday = nl_langinfo (_NL_TIME_FIRST_WEEKDAY)[0]; + long week_1stday_l = (long) nl_langinfo (_NL_TIME_WEEK_1STDAY); +],[cf_nl_langinfo_1stday=yes +],[cf_nl_langinfo_1stday=no +]) +]) +test "x$cf_nl_langinfo_1stday" = xyes && AC_DEFINE(HAVE_NL_LANGINFO_1STDAY) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00 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_$1=yes], [with_$1=]) AC_MSG_RESULT(${with_$1:-no}) -case .$with_cflags in #(vi -.*-g*) - case .$CFLAGS in #(vi - .*-g*) #(vi +case .$with_cflags in +(.*-g*) + case .$CFLAGS in + (.*-g*) ;; - *) + (*) CF_ADD_CFLAGS([-g]) ;; esac ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_NUMBER_SYNTAX version: 1 updated: 2003/09/20 18:12:49 +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 #(vi - [[0-9]]*) #(vi + 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 --------------- 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 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: 6 updated: 2012/09/29 18:38:12 +dnl CF_PATHSEP version: 7 updated: 2015/04/12 15:39:00 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 - os2*) PATH_SEPARATOR=';' ;; - *) ${PATH_SEPARATOR:=':'} ;; + (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: 14 updated: 2012/06/19 20:58:54 +dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57 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" + cf_path_syntax="$prefix" else - cf_path_syntax="$ac_default_prefix" + cf_path_syntax="$ac_default_prefix" fi -case ".[$]$1" in #(vi -.\[$]\(*\)*|.\'*\'*) #(vi - ;; -..|./*|.\\*) #(vi - ;; -.[[a-zA-Z]]:[[\\/]]*) #(vi OS/2 EMX - ;; -.\[$]{*prefix}*|.\[$]{*dir}*) #(vi - eval $1="[$]$1" - case ".[$]$1" in #(vi - .NONE/*) - $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` - ;; - esac - ;; #(vi -.no|.NONE/*) - $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` - ;; -*) - ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) - ;; +case ".[$]$1" in +(.\[$]\(*\)*|.\'*\'*) + ;; +(..|./*|.\\*) + ;; +(.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX + ;; +(.\[$]{*prefix}*|.\[$]{*dir}*) + eval $1="[$]$1" + case ".[$]$1" in + (.NONE/*) + $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; +(.no|.NONE/*) + $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_PKG_CONFIG version: 7 updated: 2011/04/29 04:53:22 +dnl CF_PDCURSES_X11 version: 14 updated: 2018/06/20 20:23:13 +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 +char *XCursesProgramName = "test"; +],[XCursesExit();], +[cf_cv_lib_XCurses=yes], +[cf_cv_lib_XCurses=no]) +]) + +fi + +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 ------------- 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 #(vi -no) #(vi +case $cf_pkg_config in +(no) PKG_CONFIG=none ;; -yes) #(vi +(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: 8 updated: 2010/05/26 05:38:42 +dnl CF_POSIX_C_SOURCE version: 10 updated: 2018/06/20 20:23:13 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], [ 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 ],[ #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 #(vi - .[[12]]??*) #(vi + case .$cf_POSIX_C_SOURCE in + (.[[12]]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; - .2) #(vi + (.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 ],[ #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_cv_posix_c_source" + 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 ],[ #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 ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PROG_CC version: 3 updated: 2012/10/06 15:31:55 +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 ---------- 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],[ 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 +CF_CC_ENV_FLAGS ])dnl dnl --------------------------------------------------------------------------- -dnl CF_PROG_EXT version: 11 updated: 2012/10/06 08:57:51 +dnl CF_PROG_EXT version: 14 updated: 2018/06/20 20:23:13 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 -os2*) - CFLAGS="$CFLAGS -Zmt" - 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 - ;; +(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_LINT version: 2 updated: 2009/08/12 04:43:14 +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 ------------ AC_DEFUN([CF_PROG_LINT], [ -AC_CHECK_PROGS(LINT, tdlint lint alint splint lclint) +AC_CHECK_PROGS(LINT, lint cppcheck splint) 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 ------------- AC_DEFUN([CF_RPATH_HACK], [ AC_REQUIRE([CF_LD_RPATH_OPT]) 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 ], [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`]) # 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 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: 6 updated: 2010/04/17 16:31:24 +dnl CF_RPATH_HACK_2 version: 7 updated: 2015/04/12 15:39:00 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 #(vi - -L*) #(vi + 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: 83 updated: 2013/09/21 17:34:53 +dnl CF_SHARED_OPTS version: 92 updated: 2017/12/30 17:26:05 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..dylib) or postfix dnl (ex: libncurses.so.). 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 #(vi - yes) #(vi + case $withval in + (yes) cf_cv_shlib_version=auto ;; - rel|abi|auto|no) #(vi + (rel|abi|auto) cf_cv_shlib_version=$withval ;; - *) - AC_MSG_ERROR([option value must be one of: rel, abi, auto or no]) + (*) + 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 + (*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 ],[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 #(vi - aix4.[3-9]*|aix[[5-7]]*) #(vi + case $cf_cv_system_name in + (aix4.[3-9]*|aix[[5-7]]*) if test "$GCC" = yes; then - CC_SHARED_OPTS= - MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' + 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='-qpic=large -G' - # perhaps "-bM:SRE -bnoentry -bexpall" - MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' + 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*) #(vi - MK_SHARED_LIB='${CC} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' + (beos*) + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' ;; - cygwin*) #(vi + (cygwin*) CC_SHARED_OPTS= - MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' + 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 - #!/bin/sh + #!$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 \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} + exec \[$]* ${LDFLAGS} -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; - msys*) #(vi + (msys*) CC_SHARED_OPTS= - MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' + 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 - #!/bin/sh + #!$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 \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} + exec \[$]* ${LDFLAGS} -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; - darwin*) #(vi + (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" - MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $[@]` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $[@]' + 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 LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi ;; - hpux[[7-8]]*) #(vi - # HP-UX 8.07 ld lacks "+b" option used for libdir search-list + (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} -b -o $[@]' + MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $[@]' INSTALL_LIB="-m 555" ;; - hpux*) #(vi + (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} +b ${libdir} -b -o $[@]' + 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*) + (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}' + cf_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}' else - cf_shared_soname='`basename $@`' + cf_shared_soname='`basename $[@]`' fi CC_SHARED_OPTS= - MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $[@]' ;; - irix*) #(vi + (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} -shared -rdata_shared -soname `basename $[@]` -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $[@]` -o $[@]' else - MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $[@]` -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $[@]` -o $[@]' fi cf_cv_rm_so_locs=yes ;; - linux*|gnu*|k*bsd*-gnu) #(vi + (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 CF_SHARED_SONAME - MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; - mingw*) #(vi + (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='sh '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' + 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 - #!/bin/sh + #!$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 \[$]* -shared -Wl,--enable-auto-import,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} + 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*) #(vi + (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" CF_SHARED_SONAME - MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; - nto-qnx*|openbsd*|freebsd[[12]].*) #(vi + (nto-qnx*|openbsd*|freebsd[[12]].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" - MK_SHARED_LIB='${LD} -Bshareable -o $[@]' + MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; - dragonfly*|freebsd*) #(vi + (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='${LD} -shared -Bshareable -soname=`basename $[@]` -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; - netbsd*) #(vi + (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} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]' else - MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -Wl,-shared -Wl,-Bshareable -o $[@]' fi ;; - osf*|mls+*) #(vi + (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} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $[@]`' - case $host_os in #(vi - osf4*) + 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 + (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} -dy -G -h `basename $[@] .${REL_VERSION}`.${ABI_VERSION} -o [$]@' + 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*) #(vi + (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} -assert pure-text -o $[@]' + MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; - solaris2*) #(vi + (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 ],[printf("Hello\n");],[break]) done CFLAGS="$cf_save_CFLAGS" CC_SHARED_OPTS=$cf_shared_opts - MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $[@]' else - MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]' fi ;; - sysv5uw7*|unix_sv*) #(vi + (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} -d y -G -o [$]@' + 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 #(vi - rel|abi) - case "$MK_SHARED_LIB" in #(vi - *'-o $[@]') #(vi + 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 < 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" 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" 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_SUBDIR_PATH version: 6 updated: 2010/04/21 06:20:50 +dnl CF_SIZECHANGE version: 14 updated: 2018/06/20 20:23:13 +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 +#ifdef HAVE_TERMIOS_H +#include +#else +#ifdef HAVE_TERMIO_H +#include +#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 +#include +#endif + +#ifdef HAVE_SYS_IOCTL_H +#include +#endif +],[ +#ifdef TIOCGSIZE + struct ttysize win; /* SunOS 3.0... */ + int y = win.ts_lines; + int x = win.ts_cols; +#else +#ifdef TIOCGWINSZ + struct winsize win; /* everything else */ + int y = win.ws_row; + int x = win.ws_col; +#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 + (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 ----------------- +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 ], + [struct termios foo; int x = foo.c_iflag], + termios_bad=no, [ + AC_TRY_COMPILE([ +#define _POSIX_SOURCE +#include ], + [struct termios foo; int x = foo.c_iflag], + 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,/usr,$prefix) CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE) -CF_ADD_SUBDIR_PATH($1,$2,$3,/usr/local,$prefix) -CF_ADD_SUBDIR_PATH($1,$2,$3,/opt,$prefix) -CF_ADD_SUBDIR_PATH($1,$2,$3,[$]HOME,$prefix) + +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: 3 updated: 2012/10/06 08:57:51 +dnl CF_TERM_HEADER version: 4 updated: 2015/04/15 19:08:48 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 #(vi -*/ncurses.h|*/ncursesw.h) #(vi +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 #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> ],[int x = auto_left_margin],[ 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 # (vi -*term.h) +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 # (vi -ncurses/term.h) #(vi +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) +(ncursesw/term.h) AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- -dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50 +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 ----------------- +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 $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 + 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_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 #include #include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_save="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + CF_APPEND_TEXT(CPPFLAGS,-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE) AC_TRY_COMPILE([ #include #include #include ],[ #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 ------------- 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); ], [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); ], [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]) ])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 ],[putwc(0,0);], [cf_cv_utf8_lib=yes], [CF_FIND_LINKAGE([ #include ],[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: 6 updated: 2013/06/16 10:25:53 +dnl CF_VERSION_INFO version: 7 updated: 2015/04/17 21:13: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 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` # 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]]) + (.[[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 --------------- 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 and , but allow SVr4 variation dnl with . AC_DEFUN([CF_WAIT_HEADERS], [ AC_HAVE_HEADERS(sys/wait.h) cf_wait_headers="#include " if test $ac_cv_header_sys_wait_h = yes; then cf_wait_headers="$cf_wait_headers #include " else AC_HAVE_HEADERS(wait.h) AC_HAVE_HEADERS(waitstatus.h) if test $ac_cv_header_wait_h = yes; then cf_wait_headers="$cf_wait_headers #include " fi if test $ac_cv_header_waitstatus_h = yes; then cf_wait_headers="$cf_wait_headers #include " fi fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_ABI_VERSION version: 1 updated: 2003/09/20 18:12:49 +dnl CF_WIDEC_CURSES version: 5 updated: 2012/11/08 20:57:52 +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 +#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 +#include <${cf_cv_ncurses_header:-curses.h}>], +[mbstate_t state], +[cf_cv_widec_mbstate=no], +[AC_TRY_COMPILE([ +#include +#include +#include <${cf_cv_ncurses_header:-curses.h}>], +[mbstate_t 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 ------------------- 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], -[AC_MSG_WARN(overriding ABI version $cf_cv_abi_version to $withval) - cf_cv_abi_version=$withval]) - CF_NUMBER_SYNTAX($cf_cv_abi_version,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 + (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 ------------------ 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" ) 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_LIBTOOL version: 30 updated: 2013/09/07 13:54:05 +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 --------------- 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 5 15 +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 ${DESTDIR}${libdir} ${LIBTOOL_VERSION} `cut -f1 ${srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' + 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 #(vi - cygwin*|msys*|mingw32*|uwin*|aix[[4-7]]) #(vi + 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 #(vi - 1.[[5-9]]*|[[2-9]].[[0-9.a-z]]*) #(vi + 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: 2 updated: 2007/04/08 18:14:54 +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|.) +(.yes|.no|.) ;; -*) - LIBTOOL_OPTS=$with_libtool_opts +(*) + LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" ;; esac AC_SUBST(LIBTOOL_OPTS) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_WITH_NO_LEAKS version: 2 updated: 2012/10/06 08:57:51 +dnl CF_WITH_MAN2HTML version: 7 updated: 2018/01/07 13:16:19 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]) + +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 <>$MAN2HTML_TEMP <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_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 <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 + + rm -rf conftest* + AC_MSG_RESULT($cf_man2html_page) + + cat >>$MAN2HTML_TEMP <conftest.ver <conftest.$ac_ext <conftest.mk <&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]][[ ]]'` + 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: 11 updated: 2011/01/18 18:15:30 +dnl CF_XOPEN_CURSES version: 14 updated: 2018/06/20 20:23:13 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(if we must define _XOPEN_SOURCE_EXTENDED,cf_cv_need_xopen_extension,[ +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 #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 - long x = winnstr(stdscr, "", 0); - int x1, y1; - getbegyx(stdscr, y1, x1)], - [cf_cv_need_xopen_extension=no], - [AC_TRY_LINK([ -#define _XOPEN_SOURCE_EXTENDED -#include -#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)], - [cf_cv_need_xopen_extension=yes], - [cf_cv_need_xopen_extension=unknown])])]) -test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" + [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 +#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)], + [cf_cv_need_xopen_extension=$cf_try_xopen_extension; break]) + done + ]) +]) + +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: 45 updated: 2013/09/07 14:06:25 +dnl CF_XOPEN_SOURCE version: 53 updated: 2018/06/16 18:58:58 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]) cf_XOPEN_SOURCE=ifelse([$1],,500,[$1]) cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2]) cf_xopen_source= -case $host_os in #(vi -aix[[4-7]]*) #(vi +case $host_os in +(aix[[4-7]]*) cf_xopen_source="-D_ALL_SOURCE" ;; -cygwin|msys) #(vi +(msys) cf_XOPEN_SOURCE=600 ;; -darwin[[0-8]].*) #(vi +(darwin[[0-8]].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; -darwin*) #(vi +(darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; -freebsd*|dragonfly*) #(vi +(freebsd*|dragonfly*) # 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*) #(vi +(hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; -hpux*) #(vi +(hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; -irix[[56]].*) #(vi +(irix[[56]].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; -linux*|gnu*|mint*|k*bsd*-gnu) #(vi - CF_GNU_SOURCE +(linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin) + CF_GNU_SOURCE($cf_XOPEN_SOURCE) ;; -mirbsd*) #(vi +(minix*) + cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... + ;; +(mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; -netbsd*) #(vi +(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]]*) #(vi +(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*) #(vi +(openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; -osf[[45]]*) #(vi +(osf[[45]]*) cf_xopen_source="-D_OSF_SOURCE" ;; -nto-qnx*) #(vi +(nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; -sco*) #(vi +(sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; -solaris2.*) #(vi +(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) + 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 ],[ #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 then AC_TRY_COMPILE([#include ],[ #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 then AC_MSG_WARN(_XOPEN_SOURCE is lower than requested) fi else CF_TRY_XOPEN_SOURCE fi fi ]) dnl --------------------------------------------------------------------------- -dnl CF__ADD_SHLIB_RULES version: 4 updated: 2013/07/22 18:49:24 +dnl CF_X_ATHENA version: 23 updated: 2015/04/12 15:39:00 +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 +],[ +int check = XmuCompareISOLatin1("big", "small") +],[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 -------------------- +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], +[ +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_test=X11/$cf_x_athena_root/SimpleMenu.h + if test $cf_path != default ; then + CPPFLAGS="$cf_save" + 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 +#include <$cf_test>],[], + [cf_result=yes], + [cf_result=no]) + AC_MSG_RESULT($cf_result) + if test "$cf_result" = yes ; then + cf_x_athena_inc=$cf_path + 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]) +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 ---------------- +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([ +#include +#include +],[ +$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" + 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_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 ------------ +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 +# 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)]) +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 +],[ + 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 +],[int num = IceConnectionNumber(0) +],[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])]) + + 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])]) +]) + +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) #(vi +(xlibtool|xshared) cf_libdeps="ifelse($4,,,[$4])" ;; -x*) +(x*) cf_libdeps= ;; esac cat >>$1 <>$1 <>$1 <>$1 <>$1 <>$1 <>$1 <>$1 <>$1 <>$1 <>$1 <>$1 < and when they dnl are both available. define([CF__CURSES_HEAD],[ #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif ]) dnl --------------------------------------------------------------------------- -dnl CF__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49 -dnl --------------- -dnl Define a reusable chunk which includes and when they -dnl are both available. -define([CF__CURSES_HEAD],[ -#ifdef HAVE_XCURSES -#include -char * XCursesProgramName = "test"; -#else -#include <${cf_cv_ncurses_header:-curses.h}> -#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) -#include -#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) -#include -#elif defined(HAVE_TERM_H) -#include -#endif -#endif -]) -dnl --------------------------------------------------------------------------- -dnl CF__DEFINE_LIB_TARGET version: 1 updated: 2013/07/22 18:27:50 +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 #(vi - xrel) #(vi + case "x$cf_cv_shlib_version" in + (xrel) cf_liblink="\${LIB_ABI_NAME}" cf_libname="\${LIB_REL_NAME}" ;; - xabi) + (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: 2 updated: 2013/07/27 17:38:32 +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_PREFI - "lib" +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_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 #include ] )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: 1 updated: 2007/07/26 17:35:47 +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)], []) - [ + _nl_msg_cat_cntr] + 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 extern int _nl_msg_cat_cntr; ])dnl dnl --------------------------------------------------------------------------- -dnl jm_GLIBC21 version: 3 updated: 2002/10/27 23:21:42 +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], +[ +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 #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" - ] -) + ac_cv_gnu_library_2_1=no)]) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" +]) Index: vendor/dialog/dist/argv.c =================================================================== --- vendor/dialog/dist/argv.c (revision 339481) +++ vendor/dialog/dist/argv.c (revision 339482) @@ -1,122 +1,165 @@ /* - * $Id: argv.c,v 1.2 2012/11/30 20:28:23 tom Exp $ + * $Id: argv.c,v 1.12 2018/06/12 22:47:23 tom Exp $ * * argv - Reusable functions for argv-parsing. * - * Copyright 2011,2012 Thomas E. Dickey + * Copyright 2011-2017,2018 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 #include /* * 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; + 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 (quoted && blob[n] == '"') { + if (escape) { + ; + } else if (quoted && blob[n] == '"') { quoted = FALSE; } else if (blob[n] == '"') { quoted = TRUE; if (!inparm) { if (pass) result[count] = param; ++count; inparm = TRUE; } - } else if (blob[n] == '\\') { - if (quoted && !isspace(UCH(blob[n + 1]))) { + } else if (!quoted && isspace(UCH(blob[n]))) { + if (inparm) { if (pass) { - *param++ = blob[n]; - *param++ = blob[n + 1]; + *param++ = '\0'; } + inparm = FALSE; } - ++n; - } else if (!quoted && isspace(UCH(blob[n]))) { - inparm = FALSE; - if (pass) { - *param++ = '\0'; - } } else { + if (blob[n] == '\\') { + if (n + 1 == length) { + break; /* The string is terminated by a backslash */ + } else if ((blob[n + 1] == '\\') || + (blob[n + 1] == '"') || + (!quoted && blob[n + 1] == '\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; + } + } + } if (!inparm) { if (pass) result[count] = param; ++count; inparm = TRUE; } if (pass) { *param++ = blob[n]; } } + escape = FALSE; } if (!pass) { 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; } Index: vendor/dialog/dist/arrows.c =================================================================== --- vendor/dialog/dist/arrows.c (revision 339481) +++ vendor/dialog/dist/arrows.c (revision 339482) @@ -1,275 +1,275 @@ /* - * $Id: arrows.c,v 1.51 2013/09/02 15:10:09 tom Exp $ + * $Id: arrows.c,v 1.52 2018/06/18 22:10:54 tom Exp $ * * arrows.c -- draw arrows to indicate end-of-range for lists * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2013,2018 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 #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) { 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) { - (void) wattrset(win, merge_colors(uarrow_attr, attr)); + dlg_attrset(win, merge_colors(uarrow_attr, attr)); (void) add_acs(win, ACS_UARROW); (void) waddstr(win, "(-)"); } else { - (void) wattrset(win, attr); + 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) { - (void) wattrset(win, merge_colors(darrow_attr, borderattr)); + dlg_attrset(win, merge_colors(darrow_attr, borderattr)); (void) add_acs(win, ACS_DARROW); (void) waddstr(win, "(+)"); } else { - (void) wattrset(win, borderattr); + 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); - (void) wattrset(win, save); + 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) { percent = (!total_data ? 100 : (int) ((next_data * 100) / total_data)); if (percent < 0) percent = 0; else if (percent > 100) percent = 100; - (void) wattrset(win, position_indicator_attr); + 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) { - (void) wattrset(win, border_attr); + 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); wmove(win, top + 1, right); - (void) wattrset(win, save); + 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); - (void) wattrset(win, position_indicator_attr); - wattron(win, A_REVERSE); + 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); - (void) wattrset(win, save); + 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); } Index: vendor/dialog/dist/buildlist.c =================================================================== --- vendor/dialog/dist/buildlist.c (revision 339481) +++ vendor/dialog/dist/buildlist.c (revision 339482) @@ -1,1097 +1,1265 @@ /* - * $Id: buildlist.c,v 1.59 2013/09/02 17:01:02 tom Exp $ + * $Id: buildlist.c,v 1.83 2018/06/19 22:57:01 tom Exp $ * * buildlist.c -- implements the buildlist dialog * - * Copyright 2012,2013 Thomas E. Dickey + * Copyright 2012-2017,2018 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 #include /* * Visually like menubox, but two columns. */ #define sLEFT (-2) #define sRIGHT (-1) -#define KEY_TOGGLE ' ' #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; + 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)) { + 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 * data, +print_item(ALL_DATA * all, WINDOW *win, DIALOG_LISTITEM * item, - int choice, + 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 = (data->item_x - data->check_x - 1); + 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 */ - (void) wattrset(win, menubox_attr); - (void) wmove(win, choice, 0); + dlg_attrset(win, menubox_attr); + (void) wmove(win, row, 0); for (i = 0; i < getmaxx(win); i++) (void) waddch(win, ' '); - (void) wmove(win, choice, data->check_x); - (void) wattrset(win, menubox_attr); + (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, choice, data->item_x); - climit = (getmaxx(win) - data->item_x + 1); + (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); } - (void) wattrset(win, save); + dlg_attrset(win, save); } /* * Prints either the left (unselected) or right (selected) list. */ static void -print_1_list(ALL_DATA * data, +print_1_list(ALL_DATA * all, int choice, int selected) { - MY_DATA *moi = data->list + selected; - WINDOW *win = moi->win; + 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 + moi->top_index; - if (ii >= data->item_no) { - break; - } else if (!(selected ^ (data->items[ii].state != 0))) { - print_item(data, + int ii = i + top_row; + if (ii < 0) { + continue; + } else if (myItem(data, ii)) { + print_item(all, win, - &data->items[ii], - j, ii == choice); + myItem(data, ii), + j, myItem(data, ii) == target); last = ++j; + } else { + break; } } - if (wmove(win, last, 0) != ERR) - wclrtobot(win); + 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 * data, int choice, int selected) +prev_item(ALL_DATA * all, int choice, int selected) { int result = choice; - int n; - - for (n = choice - 1; n >= 0; --n) { - if ((data->items[n].state != 0) == selected) { - result = n; - break; - } + 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 * data, int choice, int selected) +stop_prev(ALL_DATA * all, int choice, int selected) { - return (prev_item(data, choice, selected) == choice); + 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 * data, int choice, int selected) +next_item(ALL_DATA * all, int choice, int selected) { + MY_DATA *data = all->list + selected; int result = choice; - int n; - - for (n = choice + 1; n < data->item_no; ++n) { - if ((data->items[n].state != 0) == selected) { - result = n; - break; - } + 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); } - dlg_trace_msg("next_item(%d) ->%d\n", choice, result); + TRACE(("! next_item(%d, %s) ->%d\n", choice, mySide(selected), result)); return result; } /* - * Translate a choice from items[] to a row-number in an unbounded column, - * starting at zero. - */ -static int -index2row(ALL_DATA * data, int choice, int selected) -{ - int result = -1; - int n; - for (n = 0; n < data->item_no; ++n) { - if ((data->items[n].state != 0) == selected) { - ++result; - } - if (n == choice) - break; - } - return result; -} - -/* * Return the first choice from items[] for the given column. */ static int -first_item(ALL_DATA * data, int selected) +first_item(ALL_DATA * all, int selected) { + MY_DATA *data = all->list + selected; int result = -1; int n; - for (n = 0; n < data->item_no; ++n) { - if ((data->items[n].state != 0) == selected) { - result = n; - break; + if (myItem(data, 0) != 0) { + 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 * data, int selected) +last_item(ALL_DATA * all, int selected) { + MY_DATA *data = all->list + selected; int result = -1; int n; - for (n = data->item_no - 1; n >= 0; --n) { - if ((data->items[n].state != 0) == selected) { - result = n; - break; - } + for (n = 0; myItem(data, n) != 0; ++n) { + result = n; } - return result; -} - -/* - * Convert a row-number back to an item number, i.e., index into items[]. - */ -static int -row2index(ALL_DATA * data, int row, int selected) -{ - int result = -1; - int n; - for (n = 0; n < data->item_no; ++n) { - if ((data->items[n].state != 0) == selected) { - if (row-- <= 0) { - result = n; - break; - } - } + 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 * data, int row, int skip, int selected) +skip_rows(ALL_DATA * all, int row, int skip, int selected) { - int choice = row2index(data, row, selected); + MY_DATA *data = all->list + selected; int result = row; int n; + if (skip > 0) { - for (n = choice + 1; n < data->item_no; ++n) { - if ((data->items[n].state != 0) == selected) { - ++result; - if (--skip <= 0) - break; - } + for (n = row + 1; (n < all->item_no) && (n <= row + skip); ++n) { + if (myItem(data, n) == 0) + break; + result = n; } } else if (skip < 0) { - for (n = choice - 1; n >= 0; --n) { - if ((data->items[n].state != 0) == selected) { - --result; - if (++skip >= 0) - break; - } - } + 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 * data, int choice, int selected) +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 ((data->items[n].state != 0) == selected) { + if ((all->items[n].state != 0) == selected) { prev = n; break; } } - for (n = choice; n < data->item_no; ++n) { - if ((data->items[n].state != 0) == selected) { + 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 * data, +print_both(ALL_DATA * all, int choice) { int selected; int cur_y, cur_x; - WINDOW *dialog = wgetparent(data->list[0].win); + 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 *moi = data->list + selected; - WINDOW *win = moi->win; - int thumb_top = index2row(data, moi->top_index, selected); - int thumb_max = index2row(data, -1, 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(data, choice, selected); + print_1_list(all, choice, selected); dlg_mouse_setcode(selected * KEY_MAX); dlg_draw_scrollbar(dialog, - (long) (moi->top_index), + (long) (data->top_index), (long) (thumb_top), (long) MIN(thumb_end, thumb_max), (long) thumb_max, - moi->box_x + data->check_x, - moi->box_x + getmaxx(win), - moi->box_y, - moi->box_y + getmaxy(win) + 1, + 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 * data, int value, int selected) +set_top_item(ALL_DATA * all, int choice, int selected) { - if (value != data->list[selected].top_index) { - dlg_trace_msg("set top of %s column to %d\n", - selected ? "right" : "left", - value); - data->list[selected].top_index = value; + 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 * data, int cur_item, int selected) +fix_top_item(ALL_DATA * all, int cur_item, int selected) { - int top_item = data->list[selected].top_index; - int cur_row = index2row(data, cur_item, selected); - int top_row = index2row(data, top_item, 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) > data->use_height) { - top_item = row2index(data, cur_row + 1 - data->use_height, selected); + } else if ((cur_row - top_row) >= all->use_height) { + top_item = row2index(all, cur_row + 1 - all->use_height, selected); } - if (cur_row < data->use_height) { - top_item = row2index(data, 0, selected); + if (cur_row < all->use_height) { + top_item = row2index(all, 0, selected); } - dlg_trace_msg("fix_top_item(cur_item %d, selected %d) ->top_item %d\n", - cur_item, selected, top_item); - set_top_item(data, top_item, 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; 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 = dlg_strclone(cprompt); + char *prompt; const char **buttons = dlg_ok_labels(); const char *widget_name = "buildlist"; - (void) order_mode; + 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(); - dlg_tab_correct_str(prompt); #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); - (void) wattrset(dialog, dialog_attr); + 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; 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) { - int top_item = 0; if ((items[cur_item].state != 0) == i) { - top_item = cur_item - j + 1; + 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); - dlg_trace_msg("\t** state %d:%d top %d (%d:%d:%d) %d\n", - cur_item, item_no - 1, - moi->top_index, - at_top, at_bot, at_end, - which); + 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_msg("\t...visit row %d (%d,%d)\n", cur_row, cur_y, cur_x); + 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; 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_msg("MOUSE column %d, row %d ->item %d\n", j, i, k); + 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 = KEY_TOGGLE; /* force the selected item to toggle */ + 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 == KEY_TOGGLE) { + 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_msg("cur_item %d, new_choice:%d\n", cur_item, new_choice); + 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: - i = closest_item(&all, cur_item, 1); + 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_msg("<--CHOICE %d\n", i); - dlg_trace_msg("<--topITM %d\n", moi->top_index); - dlg_trace_msg("<--now_at %d\n", now_at); - dlg_trace_msg("<--at_top %d\n", at_top); - dlg_trace_msg("<--at_bot %d\n", at_bot); + 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_msg("...at_bot %d (now %d vs %d)\n", - at_bot, now_at, at_end); - dlg_trace_msg("...topITM %d\n", moi->top_index); - dlg_trace_msg("...at_top %d (diff %d)\n", at_top, - at_bot - at_top); + 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_msg("OOPS-forward\n"); + 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_msg("...at_top %d (now %d)\n", at_top, now_at); - dlg_trace_msg("...topITM %d\n", moi->top_index); + 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_msg("OOPS-backward\n"); + DLG_TRACE(("# OOPS-backward\n")); break; } } } - dlg_trace_msg("-->now_at %d\n", now_at); + 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; #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); - refresh(); dlg_mouse_free_regions(); + /* repaint */ + first = TRUE; goto retry; #endif default: if (was_mouse) { if ((key2 = dlg_ok_buttoncode(key)) >= 0) { result = key2; break; } beep(); } } } else { 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, "dialog_buildlist"); + 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 (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); } dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); free(listitems); return result; +#undef THIS_FUNC } Index: vendor/dialog/dist/buttons.c =================================================================== --- vendor/dialog/dist/buttons.c (revision 339481) +++ vendor/dialog/dist/buttons.c (revision 339482) @@ -1,789 +1,800 @@ /* - * $Id: buttons.c,v 1.94 2012/12/30 20:51:01 tom Exp $ + * $Id: buttons.c,v 1.99 2018/06/18 22:11:16 tom Exp $ * * buttons.c -- draw buttons, e.g., OK/Cancel * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2017,2018 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 #include #ifdef NEED_WCHAR_H #include #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; *buffer = 0; if (len < longest) { 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) { 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) { 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; - int state = 0; + 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); - (void) wattrset(win, selected - ? button_active_attr - : button_inactive_attr); + dlg_attrset(win, selected + ? button_active_attr + : button_inactive_attr); (void) waddstr(win, "<"); - (void) wattrset(win, label_attr); + 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 0: + 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) { - (void) wattrset(win, key_attr); - state = 1; + dlg_attrset(win, key_attr); + state = sHAVE_KEY; } break; - case 1: - wattrset(win, label_attr); - state = 2; + case sHAVE_KEY: + dlg_attrset(win, label_attr); + state = sHAD_KEY; break; + default: + break; } waddnstr(win, label + first, last - first); } - (void) wattrset(win, selected - ? button_active_attr - : button_inactive_attr); + dlg_attrset(win, selected + ? button_active_attr + : button_inactive_attr); (void) waddstr(win, ">"); - (void) wmove(win, y, x + ((int) strspn(label, " ")) + 1); + (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) { 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)) { 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) { 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, hotkeys[n], y, x, + 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); - (void) wattrset(win, save); + 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); #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)) 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)) { 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) { 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; } const char ** dlg_ok_label(void) { static const char *labels[4]; int n = 0; 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 a list of button labels for the OK/Cancel group. */ 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; } /* * 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_msg("# dlg_ok_buttoncode(%d) = %d\n", button, result); + DLG_TRACE(("# dlg_ok_buttoncode(%d) = %d\n", button, 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_msg("# dlg_defaultno_button() = %d\n", 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) { for (i = 0; (n = dlg_ok_buttoncode(i)) >= 0; i++) { if (n == dialog_vars.default_button) { result = i; break; } } } - dlg_trace_msg("# dlg_default_button() = %d\n", result); + 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; } Index: vendor/dialog/dist/calendar.c =================================================================== --- vendor/dialog/dist/calendar.c (revision 339481) +++ vendor/dialog/dist/calendar.c (revision 339482) @@ -1,687 +1,1017 @@ /* - * $Id: calendar.c,v 1.67 2013/03/17 15:03:41 tom Exp $ + * $Id: calendar.c,v 1.97 2018/06/19 22:57:01 tom Exp $ * * calendar.c -- implements the calendar box * - * Copyright 2001-2012,2013 Thomas E. Dickey + * Copyright 2001-2017,2018 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 #include #include +#ifdef HAVE_STDINT_H +#include +#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 + (7 * MARGIN)) +#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 const char *table[7] -#ifndef ENABLE_NLS - = + static bool shown[MAX_DAYS]; + static const char *posix_days[MAX_DAYS] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" - } -#endif - ; - const char *result = 0; + }; - if (n >= 0 && n < 7) { + while (n < 0) { + n += MAX_DAYS; + } + n %= MAX_DAYS; #ifdef ENABLE_NLS - if (table[n] == 0) { - nl_item items[7] = - { - ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7 - }; - table[n] = nl_langinfo(items[n]); - } + 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 - result = table[n]; + if (cached_days[n] == 0) { + size_t len, 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) + value[limit] = '\0'; + cached_days[n] = value; } - if (result == 0) { - result = "?"; + if (!shown[n]) { + DLG_TRACE(("# DAY(%d) = '%s'\n", n, cached_days[n])); + shown[n] = TRUE; } - return result; + return cached_days[n]; } static const char * nameOfMonth(int n) { - static const char *table[12] -#ifndef ENABLE_NLS - = + static bool shown[MAX_MONTHS]; + static const char *posix_mons[MAX_MONTHS] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" - } -#endif - ; - const char *result = 0; + }; - if (n >= 0 && n < 12) { + while (n < 0) { + n += MAX_MONTHS; + } + n %= MAX_MONTHS; #ifdef ENABLE_NLS - if (table[n] == 0) { - nl_item items[12] = - { - MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, - MON_7, MON_8, MON_9, MON_10, MON_11, MON_12 - }; - table[n] = nl_langinfo(items[n]); - } + 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 - result = table[n]; + if (cached_months[n] == 0) { + cached_months[n] = dlg_strclone(posix_mons[n]); } - if (result == 0) { - result = "?"; + if (!shown[n]) { + DLG_TRACE(("# MON(%d) = '%s'\n", n, cached_months[n])); + shown[n] = TRUE; } - return result; + return cached_months[n]; } +/* + * Algorithm for Gregorian calendar. + */ static int -days_in_month(struct tm *current, int offset /* -1, 0, 1 */ ) +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 year = current->tm_year; - int month = current->tm_mon + offset; int result; - while (month < 0) { - month += 12; - year -= 1; - } - while (month >= 12) { - month -= 12; - year += 1; - } + adjust_year_month(&year, &month); result = nominal[month]; if (month == 1) - result += ((year % 4) == 0); + 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 */ ) { - int year = current->tm_year + 1900 + offset; + return days_per_year(current->tm_year + 1900 + offset); +} - return ((year % 4) == 0) ? 366 : 365; +/* + * 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) % 7); - if ((current->tm_mday - 1) % 7 != current->tm_wday) + 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 ? -7 : -1; + result = two_d ? -MAX_DAYS : -1; break; case DLGK_GRID_LEFT: result = -1; break; case DLGK_GRID_DOWN: - result = two_d ? 7 : 1; + 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 save_y = 0, save_x = 0; int day = current->tm_mday; int mday; - int week; + 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); - (void) wattrset(data->window, menubox_attr); /* daynames headline */ - for (x = 0; x < 7; x++) { + 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)); + nameOfDayOfWeek(x + data->week_start)); } - mday = ((6 + current->tm_mday - current->tm_wday) % 7) - 7; - if (mday <= -7) - mday += 7; - /* mday is now in the range -6 to 0. */ - week = (current->tm_yday + 6 + mday - current->tm_mday) / 7; + 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++) { - (void) wattrset(data->window, menubox_attr); /* weeknumbers headline */ + dlg_attrset(data->window, menubox_attr); /* weeknumbers headline */ mvwprintw(data->window, y, 0, "%*d ", cell_wide - 1, - ++week); - for (x = 0; x < 7; x++) { + 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; - (void) wattrset(data->window, item_attr); /* not selected days */ + dlg_attrset(data->window, item_attr); /* not selected days */ if (mday == day) { - (void) wattrset(data->window, item_selected_attr); /* selected 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; - (void) wattrset(data->parent, dialog_attr); /* Headline "Month" */ + 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); - (void) wattrset(data->window, item_attr); /* color the month selection */ + 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; - (void) wattrset(data->parent, dialog_attr); /* Headline "Year" */ + 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); - (void) wattrset(data->window, item_attr); /* color the year selection */ + 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); 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, 1, MON_WIDE, 3); + 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, - DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + 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 step; int button; int result = DLG_EXIT_UNKNOWN; + int week_start; WINDOW *dialog; time_t now_time = time((time_t *) 0); struct tm current; int state = dlg_default_button(); const char **buttons = dlg_ok_labels(); - char *prompt = dlg_strclone(subtitle); + 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. + */ 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); - (void) wattrset(dialog, dialog_attr); /* text mainbox */ + 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 (init_object(&dy_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, - 'D') < 0 - || DrawObject(&dy_box) < 0) { + 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) { 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; +#define Mouse2Key(key) (key - M_EVENT) if (fkey && (key >= DLGK_MOUSE(KEY_MIN) && key <= DLGK_MOUSE(KEY_MAX))) { - key = dlg_lookup_key(dialog, key - M_EVENT, &fkey); + 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_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; - /* repaint */ + free(prompt); dlg_clear(); dlg_del_window(dialog); - refresh(); dlg_mouse_free_regions(); + /* repaint */ goto retry; #endif default: step = 0; key2 = -1; if (is_DLGK_MOUSE(key)) { - if ((key2 = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { + 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) + 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); return CleanupResult(result, dialog, prompt, &save_vars); } Index: vendor/dialog/dist/checklist.c =================================================================== --- vendor/dialog/dist/checklist.c (revision 339481) +++ vendor/dialog/dist/checklist.c (revision 339482) @@ -1,680 +1,698 @@ /* - * $Id: checklist.c,v 1.153 2013/09/02 17:01:02 tom Exp $ + * $Id: checklist.c,v 1.160 2018/06/19 22:57:01 tom Exp $ * * checklist.c -- implements the checklist box * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2016,2018 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 #include #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 */ - (void) wattrset(win, menubox_attr); + 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); - (void) wattrset(win, selected ? check_selected_attr : check_attr); + dlg_attrset(win, selected ? check_selected_attr : check_attr); (void) wprintw(win, (data->checkflag == FLAG_CHECK) ? "[%c]" : "(%c)", states[item->state]); - (void) wattrset(win, menubox_attr); + 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); } - (void) wattrset(win, save); + 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 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 = dlg_strclone(cprompt); + 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(); - 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; } } } 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); - (void) wattrset(dialog, dialog_attr); + 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; 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) { 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; 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 = ' '; /* force the selected item to toggle */ + 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 == ' ') { + 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_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 */ + free(prompt); dlg_clear(); dlg_del_window(dialog); - refresh(); dlg_mouse_free_regions(); + /* repaint */ goto retry; #endif default: if (was_mouse) { if ((key2 = dlg_ok_buttoncode(key)) >= 0) { result = key2; break; } beep(); } } } else { 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; } Index: vendor/dialog/dist/config.guess =================================================================== --- vendor/dialog/dist/config.guess (revision 339481) +++ vendor/dialog/dist/config.guess (revision 339482) @@ -1,1558 +1,1476 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2013-06-10' +timestamp='2018-05-19' # 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 . +# along with this program; if not, see . # # 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. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +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 ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2018 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 ; +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 + if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + eval "$set_cc_for_build" + cat <<-EOF > "$dummy.c" #include #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'` + 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 +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + 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 ;; - *) machine=${UNAME_MACHINE_ARCH}-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. - case "${UNAME_MACHINE_ARCH}" in + # 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 + eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac + # 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 + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + 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}" + echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + 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} + 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} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + 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" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + 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'` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + 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} + 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/[^.]*//'` + 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/[^.]*//'` + 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/[^.]*//'` + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" + eval "$set_cc_for_build" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$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) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + 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/[^.]*//'` + 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/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + 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 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + 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} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* 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); + 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); + 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); + 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` && + $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} + 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 [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + 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'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include 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` + 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 + 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/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + 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 + 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 ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 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 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if [ "$HP_ARCH" = "" ]; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include 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` + (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 [ "$HP_ARCH" = hppa2.0w ] then - eval $set_cc_for_build + eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + 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} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include 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` && + $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:*:* ) + 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:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + 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/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + 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/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + 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/ /_/'` + 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/ /_/'` + 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} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + 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 + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; - i*:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + 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,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + 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 + echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + 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 + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + 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} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + 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} ;; + 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} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + 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} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + 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} + 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 + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-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} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + 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} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + 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' /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 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # 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 + 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 + 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; } + && { 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; } ;; + && { 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; } + && { 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; } + && { 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; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + 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} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + 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 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # 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 + 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} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + 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} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + 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} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build + eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - 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 + 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 fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + 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} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + 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} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + 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} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + 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/ .*$//' + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; esac -eval $set_cc_for_build -cat >$dummy.c < -# include -#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 - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif +echo "$0: unable to guess system type" >&2 -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&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 -# 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 - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} +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 -$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; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 < in order to provide the needed -information to handle your system. +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} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Index: vendor/dialog/dist/config.sub =================================================================== --- vendor/dialog/dist/config.sub (revision 339481) +++ vendor/dialog/dist/config.sub (revision 339482) @@ -1,1791 +1,1808 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2013-09-05' +timestamp='2018-05-24' # 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 . +# along with this program; if not, see . # # 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 with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# 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 - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +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 ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +IFS="-" read -r field1 field2 field3 field4 <&2 + exit 1 ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 ;; - -bluegene*) - os=-cnk + *-*-*) + # 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* \ + | 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 + ;; + android-linux) + basic_machine=$field1-unknown + os=linux-android + ;; + *) + basic_machine=$field1-$field2 + os=$field3 + ;; + esac ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 + *-*) + # 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 + ;; + esac ;; - -scout) + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + os=bsd + ;; + a29khif) + basic_machine=a29k-amd + os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=scout + ;; + am29k) + basic_machine=a29k-none + os=bsd + ;; + amdahl) + basic_machine=580-amdahl + os=sysv + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=bsd + ;; + aros) + basic_machine=i386-pc + os=aros + ;; + aux) + basic_machine=m68k-apple + os=aux + ;; + balance) + basic_machine=ns32k-sequent + os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=linux + ;; + cegcc) + basic_machine=arm-unknown + os=cegcc + ;; + cray) + basic_machine=j90-cray + os=unicos + ;; + craynv) + basic_machine=craynv-cray + os=unicosmp + ;; + delta88) + basic_machine=m88k-motorola + os=sysv3 + ;; + dicos) + basic_machine=i686-pc + os=dicos + ;; + djgpp) + basic_machine=i586-pc + os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=ose + ;; + gmicro) + basic_machine=tron-gmicro + os=sysv + ;; + go32) + basic_machine=i386-pc + os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=hms + ;; + harris) + basic_machine=m88k-harris + os=sysv3 + ;; + hp300bsd) + basic_machine=m68k-hp + os=bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=hpux + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=proelf + ;; + i386mach) + basic_machine=i386-mach + os=mach + ;; + vsta) + basic_machine=i386-unknown + os=vsta + ;; + isi68 | isi) + basic_machine=m68k-isi + os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=sysv + ;; + merlin) + basic_machine=ns32k-utek + os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + os=coff + ;; + morphos) + basic_machine=powerpc-unknown + os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=moxiebox + ;; + msdos) + basic_machine=i386-pc + os=msdos + ;; + msys) + basic_machine=i686-pc + os=msys + ;; + mvs) + basic_machine=i370-ibm + os=mvs + ;; + nacl) + basic_machine=le32-unknown + os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=newsos + ;; + news1000) + basic_machine=m68030-sony + os=newsos + ;; + necv70) + basic_machine=v70-nec + os=sysv + ;; + nh3000) + basic_machine=m68k-harris + os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=cxux + ;; + nindy960) + basic_machine=i960-intel + os=nindy + ;; + mon960) + basic_machine=i960-intel + os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=ose + ;; + os68k) + basic_machine=m68k-none + os=os68k + ;; + paragon) + basic_machine=i860-intel + os=osf + ;; + parisc) + basic_machine=hppa-unknown + os=linux + ;; + pw32) + basic_machine=i586-unknown + os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=rdos + ;; + rdos32) + basic_machine=i386-pc + os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=coff + ;; + sa29200) + basic_machine=a29k-amd + os=udi + ;; + sei) + basic_machine=mips-sei + os=seiux + ;; + sps7) + basic_machine=m68k-bull + os=sysv2 + ;; + stratus) + basic_machine=i860-stratus + os=sysv4 + ;; + sun2os3) + basic_machine=m68000-sun + os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=solaris2 + ;; + sv1) + basic_machine=sv1-cray + os=unicos + ;; + symmetry) + basic_machine=i386-sequent + os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=unicos + ;; + t90) + basic_machine=t90-cray + os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + os=tpf + ;; + udi29k) + basic_machine=a29k-amd + os=udi + ;; + ultra3) + basic_machine=a29k-nyu + os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=none + ;; + vaxv) + basic_machine=vax-dec + os=sysv + ;; + vms) + basic_machine=vax-dec + os=vms + ;; + vxworks960) + basic_machine=i960-wrs + os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=vxworks + ;; + xbox) + basic_machine=i686-pc + os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + os=unicos + ;; + *) + basic_machine=$1 + os= + ;; + esac ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | 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 \ + | c4x | c8051 | clipper | csky \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ - | i370 | i860 | i960 | ia64 \ + | 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 | or32 \ - | pdp10 | pdp11 | pj | pjl \ + | 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[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | 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 \ - | we32k \ + | 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=-none + os=${os:-none} ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; + m9s12z | m68hcs12z | hcs12z | s12z) + basic_machine=s12z-unknown + os=${os:-none} + ;; ms1) basic_machine=mt-unknown ;; - strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown - os=-none + os=${os:-none} ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | 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-* | ia64-* \ + | 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?-* \ + | 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. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; abacus) basic_machine=abacus-unknown ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; amd64) basic_machine=x86_64-pc ;; amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; amiga | amiga-*) basic_machine=m68k-unknown ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos + asmjs) + basic_machine=asmjs-unknown ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=linux ;; bluegene*) basic_machine=powerpc-ibm - os=-cnk + os=cnk ;; c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray - os=-unicos + os=${os:-unicos} ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; convex-c1) basic_machine=c1-convex - os=-bsd + os=bsd ;; convex-c2) basic_machine=c2-convex - os=-bsd + os=bsd ;; convex-c32) basic_machine=c32-convex - os=-bsd + os=bsd ;; convex-c34) basic_machine=c34-convex - os=-bsd + os=bsd ;; convex-c38) basic_machine=c38-convex - os=-bsd + os=bsd ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; cr16 | cr16-*) basic_machine=cr16-unknown - os=-elf + 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=-elf + os=${os:-elf} ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec - os=-tops10 + os=tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec - os=-tops20 + os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; dpx20 | dpx20-*) basic_machine=rs6000-bull - os=-bosx + os=${os:-bosx} ;; - dpx2* | dpx2*-bull) + dpx2*) basic_machine=m68k-bull - os=-sysv3 + os=sysv3 ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + e500v[12]-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=$os"spe" ;; encore | umax | mmax) basic_machine=ns32k-encore ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose + elxsi) + basic_machine=elxsi-elxsi + os=${os:-bsd} ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi - os=-hiuxwe2 + os=hiuxwe2 ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; hp300-*) basic_machine=m68k-hp ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=solaris2 ;; - i386mach) - basic_machine=i386-mach - os=-mach + j90 | j90-cray) + basic_machine=j90-cray + os=${os:-unicos} ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; iris | iris4d) basic_machine=mips-sgi case $os in - -irix*) + irix*) ;; *) - os=-irix4 + os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=linux ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; microblaze*) basic_machine=microblaze-xilinx ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) basic_machine=m68000-convergent ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari - os=-mint + os=mint ;; mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; news-3600 | risc-news) basic_machine=mips-sony - os=-newsos + os=newsos ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) + next | m*-next) basic_machine=m68k-next case $os in - -nextstep* ) + nextstep* ) ;; - -ns2*) - os=-nextstep2 + ns2*) + os=nextstep2 ;; *) - os=-nextstep3 + os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki - os=-proelf + os=proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; pa-hitachi) basic_machine=hppa1.1-hitachi - os=-hiuxwe2 + os=hiuxwe2 ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde - os=-elf + os=${os:-elf} ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; sequent) basic_machine=i386-sequent ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; sh5el) basic_machine=sh5le-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) + simso-wrs) basic_machine=sparclite-wrs - os=-vxworks + os=vxworks ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; tile*) basic_machine=$basic_machine-unknown - os=-linux-gnu + os=linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; tower | tower-32) basic_machine=m68k-ncr ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; w65*) basic_machine=w65-wdc - os=-none + os=none ;; w89k-*) basic_machine=hppa1.1-winbond - os=-proelf + os=proelf ;; - xbox) - basic_machine=i686-pc - os=-mingw32 + x64) + basic_machine=x86_64-pc ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; none) basic_machine=none-none - os=-none + os=${os:-none} ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if [ x$os != x ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux + # First match some system type aliases that might get confused + # with valid system types. + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux ;; - -solaris1 | -solaris1.*) + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; - -solaris) - os=-solaris2 + solaris) + os=solaris2 ;; - -svr4*) - os=-sysv4 + unixware*) + os=sysv4.2uw ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) + gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # 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) + # 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* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # 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*) + qnx*) case $basic_machine in x86-* | i*86-*) ;; *) - os=-nto$os + os=nto-$os ;; esac ;; - -nto-qnx*) + hiux*) + os=hiuxwe2 ;; - -nto*) + nto-qnx*) + ;; + nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + sim | xray | os68k* | v88r* \ + | windows* | osx | abug | netware* | os9* \ + | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` + linux-dietlibc) + os=linux-dietlibc ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) + linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` + lynx*178) + os=lynxos178 ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` + lynx*5) + os=lynxos5 ;; - -opened*) - os=-openedition + lynx*) + os=lynxos ;; - -os400*) - os=-os400 + mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` ;; - -wince*) - os=-wince + opened*) + os=openedition ;; - -osfrose*) - os=-osfrose + os400*) + os=os400 ;; - -osf*) - os=-osf + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; - -utek*) - os=-bsd + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; - -dynix*) - os=-bsd + wince*) + os=wince ;; - -acis*) - os=-aos + utek*) + os=bsd ;; - -atheos*) - os=-atheos + dynix*) + os=bsd ;; - -syllable*) - os=-syllable + acis*) + os=aos ;; - -386bsd) - os=-bsd + atheos*) + os=atheos ;; - -ctix* | -uts*) - os=-sysv + syllable*) + os=syllable ;; - -nova*) - os=-rtmk-nova + 386bsd) + os=bsd ;; - -ns2 ) - os=-nextstep2 + ctix* | uts*) + os=sysv ;; - -nsk*) - os=-nsk + nova*) + os=rtmk-nova ;; + ns2) + os=nextstep2 + ;; + nsk*) + os=nsk + ;; # Preserve the version number of sinix5. - -sinix5.*) + sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; - -sinix*) - os=-sysv4 + sinix*) + os=sysv4 ;; - -tpf*) - os=-tpf + tpf*) + os=tpf ;; - -triton*) - os=-sysv3 + triton*) + os=sysv3 ;; - -oss*) - os=-sysv3 + oss*) + os=sysv3 ;; - -svr4) - os=-sysv4 + svr4*) + os=sysv4 ;; - -svr3) - os=-sysv3 + svr3) + os=sysv3 ;; - -sysvr4) - os=-sysv4 + sysvr4) + os=sysv4 ;; - # This must come after -sysvr4. - -sysv*) + # This must come after sysvr4. + sysv*) ;; - -ose*) - os=-ose + ose*) + os=ose ;; - -es1800*) - os=-ose + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint ;; - -xenix) - os=-xenix + zvmoe) + os=zvmoe ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint + dicos*) + os=dicos ;; - -aros*) - os=-aros + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac ;; - -zvmoe) - os=-zvmoe + nacl*) ;; - -dicos*) - os=-dicos + ios) ;; - -nacl*) + none) ;; - -none) + *-eabi) ;; *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + os=linux ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf ;; + clipper-intergraph) + os=clix + ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; - or1k-*) - os=-elf - ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; + pru-*) + os=elf + ;; *-be) - os=-beos + os=beos ;; - *-haiku) - os=-haiku - ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; - *-next ) - os=-nextstep + *-next) + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs + os=mvs ;; - *-next) - os=-nextstep3 - ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint ;; + *-wrs) + os=vxworks + ;; *) - os=-none + os=none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in - -riscix*) + 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 ;; - -mvs* | -opened*) + clix*) + vendor=intergraph + ;; + mvs* | opened*) vendor=ibm ;; - -os400*) + os400*) 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/"` + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$basic_machine-$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Index: vendor/dialog/dist/configure =================================================================== --- vendor/dialog/dist/configure (revision 339481) +++ vendor/dialog/dist/configure (revision 339482) @@ -1,17033 +1,25724 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by Autoconf 2.52.20121002. +# Generated by Autoconf 2.52.20170501. # # 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 else 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= 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_unique_file="dialog.h" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #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' 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 -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'` 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_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 ;; -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_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'` 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 ;; *) # 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} ;; esac done if test -n "$ac_prev"; then 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 [\\/$]* | ?:[\\/]* | 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 [\\/$]* | ?:[\\/]* ) ;; *) { 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 srcdir=.. fi else ac_srcdir_defaulted=no fi 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 < if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory 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 # A "../" for each directory in /$ac_subdir. ac_dots=`echo $ac_subdir | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` case $srcdir in .) # No --srcdir option. We are building in place. ac_sub_srcdir=$srcdir ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_sub_srcdir=$srcdir/$ac_subdir ;; *) # Relative path. 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 echo $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 echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\EOF 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 </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 <\?\"\']*) 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 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:923: loading site script $ac_site_file" >&5 + { echo "$as_me:940: 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:934: loading cache $cache_file" >&5 + { echo "$as_me:951: 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:942: creating cache $cache_file" >&5 + { echo "$as_me:959: 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 set,) - { echo "$as_me:958: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { echo "$as_me:975: 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:962: error: \`$ac_var' was not set in the previous run" >&5 + { echo "$as_me:979: 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:968: error: \`$ac_var' has changed since the previous run:" >&5 + { echo "$as_me:985: 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:970: former value: $ac_old_val" >&5 + { echo "$as_me:987: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:972: current value: $ac_new_val" >&5 + { echo "$as_me:989: 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 *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) 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:991: error: changes in the environment can compromise the build" >&5 + { echo "$as_me:1008: 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:993: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 + { { echo "$as_me:1010: 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_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; +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= ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh -if { (echo "$as_me:1014: PATH=\".;.\"; conftest.sh") >&5 +if { (echo "$as_me:1031: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? - echo "$as_me:1017: \$? = $ac_status" >&5 + echo "$as_me:1034: \$? = $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_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 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:1052: checking for $ac_word" >&5 +echo "$as_me:1069: 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:1067: found $ac_dir/$ac_word" >&5 +echo "$as_me:1084: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1075: result: $CC" >&5 + echo "$as_me:1092: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1078: result: no" >&5 + echo "$as_me:1095: 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:1087: checking for $ac_word" >&5 +echo "$as_me:1104: 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:1102: found $ac_dir/$ac_word" >&5 +echo "$as_me:1119: 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:1110: result: $ac_ct_CC" >&5 + echo "$as_me:1127: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1113: result: no" >&5 + echo "$as_me:1130: 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:1126: checking for $ac_word" >&5 +echo "$as_me:1143: 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:1141: found $ac_dir/$ac_word" >&5 +echo "$as_me:1158: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1149: result: $CC" >&5 + echo "$as_me:1166: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1152: result: no" >&5 + echo "$as_me:1169: 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:1161: checking for $ac_word" >&5 +echo "$as_me:1178: 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:1176: found $ac_dir/$ac_word" >&5 +echo "$as_me:1193: 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:1184: result: $ac_ct_CC" >&5 + echo "$as_me:1201: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1187: result: no" >&5 + echo "$as_me:1204: 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:1200: checking for $ac_word" >&5 +echo "$as_me:1217: 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:1220: found $ac_dir/$ac_word" >&5 +echo "$as_me:1237: found $ac_dir/$ac_word" >&5 break done 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:1242: result: $CC" >&5 + echo "$as_me:1259: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1245: result: no" >&5 + echo "$as_me:1262: 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:1256: checking for $ac_word" >&5 +echo "$as_me:1273: 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:1271: found $ac_dir/$ac_word" >&5 +echo "$as_me:1288: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1279: result: $CC" >&5 + echo "$as_me:1296: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1282: result: no" >&5 + echo "$as_me:1299: 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:1295: checking for $ac_word" >&5 +echo "$as_me:1312: 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:1310: found $ac_dir/$ac_word" >&5 +echo "$as_me:1327: 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:1318: result: $ac_ct_CC" >&5 + echo "$as_me:1335: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1321: result: no" >&5 + echo "$as_me:1338: 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:1333: error: no acceptable cc found in \$PATH" >&5 +test -z "$CC" && { { echo "$as_me:1350: 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:1338:" \ +echo "$as_me:1355:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:1341: \"$ac_compiler --version &5\"") >&5 +{ (eval echo "$as_me:1358: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? - echo "$as_me:1344: \$? = $ac_status" >&5 + echo "$as_me:1361: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1346: \"$ac_compiler -v &5\"") >&5 +{ (eval echo "$as_me:1363: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? - echo "$as_me:1349: \$? = $ac_status" >&5 + echo "$as_me:1366: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1351: \"$ac_compiler -V &5\"") >&5 +{ (eval echo "$as_me:1368: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? - echo "$as_me:1354: \$? = $ac_status" >&5 + echo "$as_me:1371: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF -#line 1358 "configure" +#line 1375 "configure" #include "confdefs.h" int -main () +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:1374: checking for C compiler default output" >&5 +echo "$as_me:1391: 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:1377: \"$ac_link_default\"") >&5 +if { (eval echo "$as_me:1394: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? - echo "$as_me:1380: \$? = $ac_status" >&5 + echo "$as_me:1397: \$? = $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:1403: error: C compiler cannot create executables" >&5 +{ { echo "$as_me:1420: 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:1409: result: $ac_file" >&5 +echo "$as_me:1426: 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:1414: checking whether the C compiler works" >&5 +echo "$as_me:1431: 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:1420: \"$ac_try\"") >&5 + { (eval echo "$as_me:1437: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1423: \$? = $ac_status" >&5 + echo "$as_me:1440: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { echo "$as_me:1430: error: cannot run C compiled programs. + { { echo "$as_me:1447: 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:1438: result: yes" >&5 +echo "$as_me:1455: result: yes" >&5 echo "${ECHO_T}yes" >&6 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:1445: checking whether we are cross compiling" >&5 +echo "$as_me:1462: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:1447: result: $cross_compiling" >&5 +echo "$as_me:1464: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 -echo "$as_me:1450: checking for executable suffix" >&5 +echo "$as_me:1467: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 -if { (eval echo "$as_me:1452: \"$ac_link\"") >&5 +if { (eval echo "$as_me:1469: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:1455: \$? = $ac_status" >&5 + echo "$as_me:1472: \$? = $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:1471: error: cannot compute EXEEXT: cannot compile and link" >&5 + { { echo "$as_me:1488: 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:1477: result: $ac_cv_exeext" >&5 +echo "$as_me:1494: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:1483: checking for object suffix" >&5 +echo "$as_me:1500: 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 1489 "configure" +#line 1506 "configure" #include "confdefs.h" int -main () +main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:1501: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1518: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1504: \$? = $ac_status" >&5 + echo "$as_me:1521: \$? = $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:1516: error: cannot compute OBJEXT: cannot compile" >&5 +{ { echo "$as_me:1533: 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 fi -echo "$as_me:1523: result: $ac_cv_objext" >&5 +echo "$as_me:1540: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:1527: checking whether we are using the GNU C compiler" >&5 +echo "$as_me:1544: 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 1533 "configure" +#line 1550 "configure" #include "confdefs.h" int -main () +main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1548: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1565: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1551: \$? = $ac_status" >&5 + echo "$as_me:1568: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1554: \"$ac_try\"") >&5 + { (eval echo "$as_me:1571: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1557: \$? = $ac_status" >&5 + echo "$as_me:1574: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:1569: result: $ac_cv_c_compiler_gnu" >&5 +echo "$as_me:1586: 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:1575: checking whether $CC accepts -g" >&5 +echo "$as_me:1592: 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 1581 "configure" +#line 1598 "configure" #include "confdefs.h" int -main () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1593: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1610: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1596: \$? = $ac_status" >&5 + echo "$as_me:1613: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1599: \"$ac_try\"") >&5 + { (eval echo "$as_me:1616: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1602: \$? = $ac_status" >&5 + echo "$as_me:1619: \$? = $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 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:1612: result: $ac_cv_prog_cc_g" >&5 +echo "$as_me:1629: 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 #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1639: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1656: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1642: \$? = $ac_status" >&5 + echo "$as_me:1659: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1645: \"$ac_try\"") >&5 + { (eval echo "$as_me:1662: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1648: \$? = $ac_status" >&5 + echo "$as_me:1665: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ '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 1660 "configure" +#line 1677 "configure" #include "confdefs.h" #include $ac_declaration int -main () +main (void) { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1673: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1690: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1676: \$? = $ac_status" >&5 + echo "$as_me:1693: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1679: \"$ac_try\"") >&5 + { (eval echo "$as_me:1696: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1682: \$? = $ac_status" >&5 + echo "$as_me:1699: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF -#line 1692 "configure" +#line 1709 "configure" #include "confdefs.h" $ac_declaration int -main () +main (void) { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1704: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1721: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1707: \$? = $ac_status" >&5 + echo "$as_me:1724: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1710: \"$ac_try\"") >&5 + { (eval echo "$as_me:1727: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1713: \$? = $ac_status" >&5 + echo "$as_me:1730: \$? = $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 rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>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 fi 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_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return GCC_VERSION=none if test "$GCC" = yes ; then - echo "$as_me:1743: checking version of $CC" >&5 + echo "$as_me:1760: 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:1747: result: $GCC_VERSION" >&5 + echo "$as_me:1764: result: $GCC_VERSION" >&5 echo "${ECHO_T}$GCC_VERSION" >&6 fi -echo "$as_me:1751: checking for $CC option to accept ANSI C" >&5 +echo "$as_me:1768: 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 1759 "configure" +#line 1776 "configure" #include "confdefs.h" #include #include #include #include /* 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 () +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:1808: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1825: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1811: \$? = $ac_status" >&5 + echo "$as_me:1828: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1814: \"$ac_try\"") >&5 + { (eval echo "$as_me:1831: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1817: \$? = $ac_status" >&5 + echo "$as_me:1834: \$? = $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 fi rm -f conftest.$ac_objext done 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:1834: result: none needed" >&5 + echo "$as_me:1851: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) - echo "$as_me:1837: result: $ac_cv_prog_cc_stdc" >&5 + echo "$as_me:1854: 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} -echo "$as_me:1845: checking \$CC variable" >&5 +echo "$as_me:1862: checking \$CC variable" >&5 echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 -case "$CC" in #(vi -*[\ \ ]-[IUD]*) - echo "$as_me:1849: result: broken" >&5 +case "$CC" in +(*[\ \ ]-*) + echo "$as_me:1866: result: broken" >&5 echo "${ECHO_T}broken" >&6 - { echo "$as_me:1851: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 + { 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_flags=`echo "$CC" | sed -e 's/^[^ ]*[ ]//'` - CC=`echo "$CC" | sed -e 's/[ ].*//'` + 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_flags +for cf_add_cflags in $cf_arg do case $cf_fix_cppflags in -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + 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:1937: result: ok" >&5 +(*) + echo "$as_me:1997: 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:1948: checking how to run the C preprocessor" >&5 +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 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 1969 "configure" +#line 2029 "configure" #include "confdefs.h" #include Syntax error _ACEOF -if { (eval echo "$as_me:1974: \"$ac_cpp conftest.$ac_ext\"") >&5 +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:1980: \$? = $ac_status" >&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 # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF -#line 2003 "configure" +#line 2063 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:2007: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:2067: \"$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:2013: \$? = $ac_status" >&5 + echo "$as_me:2073: \$? = $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 # Passes both tests. ac_preproc_ok=: break fi 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 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:2050: result: $CPP" >&5 +echo "$as_me:2110: 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 2060 "configure" +#line 2120 "configure" #include "confdefs.h" #include Syntax error _ACEOF -if { (eval echo "$as_me:2065: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:2125: \"$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:2071: \$? = $ac_status" >&5 + echo "$as_me:2131: \$? = $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 2094 "configure" +#line 2154 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:2098: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:2158: \"$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:2104: \$? = $ac_status" >&5 + echo "$as_me:2164: \$? = $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 # Passes both tests. ac_preproc_ok=: break fi 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 if $ac_preproc_ok; then : else - { { echo "$as_me:2132: error: C preprocessor \"$CPP\" fails sanity check" >&5 + { { echo "$as_me:2192: 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_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return -echo "$as_me:2144: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "$as_me:2204: 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:2164: result: yes" >&5 + echo "$as_me:2224: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else - echo "$as_me:2168: result: no" >&5 + echo "$as_me:2228: 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:2176: checking for $ac_word" >&5 +echo "$as_me:2236: 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:2191: found $ac_dir/$ac_word" >&5 +echo "$as_me:2251: found $ac_dir/$ac_word" >&5 break done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:2199: result: $RANLIB" >&5 + echo "$as_me:2259: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else - echo "$as_me:2202: result: no" >&5 + echo "$as_me:2262: 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:2211: checking for $ac_word" >&5 +echo "$as_me:2271: 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:2226: found $ac_dir/$ac_word" >&5 +echo "$as_me:2286: 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:2235: result: $ac_ct_RANLIB" >&5 + echo "$as_me:2295: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else - echo "$as_me:2238: result: no" >&5 + echo "$as_me:2298: 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:2264: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 + { { 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:2284: checking for a BSD compatible install" >&5 +echo "$as_me:2344: 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:2333: result: $INSTALL" >&5 +echo "$as_me:2393: 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:2344: checking whether ln -s works" >&5 +echo "$as_me:2404: 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:2348: result: yes" >&5 + echo "$as_me:2408: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:2351: result: no, using $LN_S" >&5 + echo "$as_me:2411: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi -echo "$as_me:2355: checking if $LN_S -f options work" >&5 +echo "$as_me:2415: 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:2367: result: $cf_prog_ln_sf" >&5 +echo "$as_me:2427: 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 tdlint lint alint splint lclint +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:2376: checking for $ac_word" >&5 +echo "$as_me:2436: 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:2391: found $ac_dir/$ac_word" >&5 +echo "$as_me:2451: found $ac_dir/$ac_word" >&5 break done fi fi LINT=$ac_cv_prog_LINT if test -n "$LINT"; then - echo "$as_me:2399: result: $LINT" >&5 + echo "$as_me:2459: result: $LINT" >&5 echo "${ECHO_T}$LINT" >&6 else - echo "$as_me:2402: result: no" >&5 + echo "$as_me:2462: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LINT" && break done +# 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 $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 + 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 "${ECHO_T}$GROFF_PATH" >&6 +else + echo "$as_me:2503: 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 $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 + 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 "${ECHO_T}$NROFF_PATH" >&6 +else + echo "$as_me:2542: 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 $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 + 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 "${ECHO_T}$TBL_PATH" >&6 +else + echo "$as_me:2584: 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:2412: checking for $ac_word" >&5 +echo "$as_me:2602: 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:2427: found $ac_dir/$ac_word" >&5 +echo "$as_me:2617: found $ac_dir/$ac_word" >&5 break done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:2435: result: $AR" >&5 + echo "$as_me:2625: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else - echo "$as_me:2438: result: no" >&5 + echo "$as_me:2628: 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:2447: checking for $ac_word" >&5 +echo "$as_me:2637: 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:2462: found $ac_dir/$ac_word" >&5 +echo "$as_me:2652: 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:2471: result: $ac_ct_AR" >&5 + echo "$as_me:2661: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else - echo "$as_me:2474: result: no" >&5 + echo "$as_me:2664: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi -echo "$as_me:2483: checking for makeflags variable" >&5 +echo "$as_me:2673: 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 + + # 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 + + rm -f conftest.$ac_cv_objext + rm -f conftest.a + + cat >conftest.$ac_ext <&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:-configure}:2713: testing cannot compile test-program ..." 1>&5 + + break + fi + done + rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext + +fi +echo "$as_me:2721: 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 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 </dev/null | fgrep -v "ing directory" | sed -e 's,[ ]*$,,'` case "$cf_result" in - .*k) + (.*k|.*kw) cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` case "$cf_result" in - .*CC=*) cf_cv_makeflags= + (.*CC=*) cf_cv_makeflags= ;; - *) cf_cv_makeflags=$cf_option + (*) cf_cv_makeflags=$cf_option ;; esac break ;; - .-) ;; - *) echo "given option \"$cf_option\", no match \"$cf_result\"" + (.-) ;; + (*) + +echo "${as_me:-configure}:2762: testing given option \"$cf_option\",no match \"$cf_result\" ..." 1>&5 + + ;; esac done rm -f cf_makeflags.tmp fi -echo "$as_me:2517: result: $cf_cv_makeflags" >&5 +echo "$as_me:2770: result: $cf_cv_makeflags" >&5 echo "${ECHO_T}$cf_cv_makeflags" >&6 -echo "$as_me:2520: checking if filesystem supports mixed-case filenames" >&5 +echo "$as_me:2773: 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 #(vi - *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw32*|*-uwin*) #(vi + case $target_alias in + (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) 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:2547: result: $cf_cv_mixedcase" >&5 +echo "$as_me:2800: 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:2558: checking for $ac_word" >&5 +echo "$as_me:2811: 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:2573: found $ac_dir/$ac_word" >&5 +echo "$as_me:2826: found $ac_dir/$ac_word" >&5 break done fi fi CTAGS=$ac_cv_prog_CTAGS if test -n "$CTAGS"; then - echo "$as_me:2581: result: $CTAGS" >&5 + echo "$as_me:2834: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else - echo "$as_me:2584: result: no" >&5 + echo "$as_me:2837: 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:2595: checking for $ac_word" >&5 +echo "$as_me:2848: 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:2610: found $ac_dir/$ac_word" >&5 +echo "$as_me:2863: found $ac_dir/$ac_word" >&5 break done fi fi ETAGS=$ac_cv_prog_ETAGS if test -n "$ETAGS"; then - echo "$as_me:2618: result: $ETAGS" >&5 + echo "$as_me:2871: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else - echo "$as_me:2621: result: no" >&5 + echo "$as_me:2874: 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:2630: checking for $ac_word" >&5 +echo "$as_me:2883: 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:2645: found $ac_dir/$ac_word" >&5 +echo "$as_me:2898: 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:2654: result: $MAKE_LOWER_TAGS" >&5 + echo "$as_me:2907: result: $MAKE_LOWER_TAGS" >&5 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 else - echo "$as_me:2657: result: no" >&5 + echo "$as_me:2910: 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:2664: checking for $ac_word" >&5 +echo "$as_me:2917: 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:2679: found $ac_dir/$ac_word" >&5 +echo "$as_me:2932: 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:2688: result: $MAKE_UPPER_TAGS" >&5 + echo "$as_me:2941: result: $MAKE_UPPER_TAGS" >&5 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 else - echo "$as_me:2691: result: no" >&5 + echo "$as_me:2944: 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:2711: checking if you want to see long compiling messages" >&5 +echo "$as_me:2964: 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 + if test "$enableval" != "yes" ; then - ECHO_LT='--silent' - ECHO_LD='@echo linking $@;' - RULE_CC='@echo compiling $<' - SHOW_CC='@echo compiling $@' - ECHO_CC='@' + ECHO_LT='--silent' + ECHO_LD='@echo linking $@;' + RULE_CC='@echo compiling $<' + SHOW_CC='@echo compiling $@' + ECHO_CC='@' - else + else - ECHO_LT='' - ECHO_LD='' - RULE_CC='' - SHOW_CC='' - ECHO_CC='' + ECHO_LT='' + ECHO_LD='' + RULE_CC='' + SHOW_CC='' + ECHO_CC='' - fi + fi else enableval=yes - ECHO_LT='' - ECHO_LD='' - RULE_CC='' - SHOW_CC='' - ECHO_CC='' + ECHO_LT='' + ECHO_LD='' + RULE_CC='' + SHOW_CC='' + ECHO_CC='' fi; -echo "$as_me:2745: result: $enableval" >&5 +echo "$as_me:2998: 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:2750: error: cannot run $ac_config_sub" >&5 + { { 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:2754: checking build system type" >&5 +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:2763: error: cannot guess build type; you must specify one" >&5 + { { 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:2767: error: $ac_config_sub $ac_cv_build_alias failed." >&5 + { { 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:2772: result: $ac_cv_build" >&5 +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:2780: checking host system type" >&5 + 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:2789: error: $ac_config_sub $ac_cv_host_alias failed" >&5 + { { 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:2794: result: $ac_cv_host" >&5 +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/'` 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 <&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:2820: result: Configuring for $cf_cv_system_name" >&5 +test -n "$cf_cv_system_name" && echo "$as_me:3073: 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:2824: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 + echo "$as_me:3077: 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:2826: error: \"Please remove config.cache and try again.\"" >&5 + { { echo "$as_me:3079: 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 -os2*) - CFLAGS="$CFLAGS -Zmt" - 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 - ;; +(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 <&5 + echo "$as_me:3105: checking for PATH separator" >&5 echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6 case $cf_cv_system_name in - os2*) PATH_SEPARATOR=';' ;; - *) ${PATH_SEPARATOR:=':'} ;; + (os2*) PATH_SEPARATOR=';' ;; + (*) ${PATH_SEPARATOR:=':'} ;; esac - echo "$as_me:2856: result: $PATH_SEPARATOR" >&5 + echo "$as_me:3112: result: $PATH_SEPARATOR" >&5 echo "${ECHO_T}$PATH_SEPARATOR" >&6 - case $cf_cv_system_name in #(vi - OS/2*|os2*) #(vi - LIB_PREFIX='' - ;; - *) LIB_PREFIX='lib' - ;; + case $cf_cv_system_name in + (OS/2*|os2*) + if test "$DFT_LWR_MODEL" = libtool; then + LIB_PREFIX='lib' + else + LIB_PREFIX='' + fi + ;; + (*) LIB_PREFIX='lib' + ;; esac cf_XOPEN_SOURCE=500 cf_POSIX_C_SOURCE=199506L cf_xopen_source= -case $host_os in #(vi -aix[4-7]*) #(vi +case $host_os in +(aix[4-7]*) cf_xopen_source="-D_ALL_SOURCE" ;; -cygwin|msys) #(vi +(msys) cf_XOPEN_SOURCE=600 ;; -darwin[0-8].*) #(vi +(darwin[0-8].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; -darwin*) #(vi +(darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; -freebsd*|dragonfly*) #(vi +(freebsd*|dragonfly*) # 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*) #(vi +(hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; -hpux*) #(vi +(hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; -irix[56].*) #(vi +(irix[56].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; -linux*|gnu*|mint*|k*bsd*-gnu) #(vi +(linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin) -echo "$as_me:2905: checking if we must define _GNU_SOURCE" >&5 +cf_gnu_xopen_source=$cf_XOPEN_SOURCE + +echo "$as_me:3167: 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" +#include "confdefs.h" +#include +int +main (void) +{ + + #if __GLIBC__ > 0 && __GLIBC_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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3200: \$? = $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 +cf_cv_gnu_library=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:3211: 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 +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" +#include "confdefs.h" +#include +int +main (void) +{ + + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2) + 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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3256: \$? = $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 +cf_cv_gnu_library_219=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$cf_save" + +fi +echo "$as_me:3268: 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 $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 +(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 + + cat >conftest.$ac_ext <<_ACEOF +#line 3378 "configure" +#include "confdefs.h" + + #include + #include + +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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3407: \$? = $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 +cf_cv_gnu_dftsrc_219=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:3418: 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 $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 2912 "configure" + cat >conftest.$ac_ext <<_ACEOF +#line 3434 "configure" #include "confdefs.h" #include int -main () +main (void) { -#ifndef _XOPEN_SOURCE -make an error -#endif + #ifndef _XOPEN_SOURCE + #error expected _XOPEN_SOURCE to be defined + #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2927: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:3449: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2930: \$? = $ac_status" >&5 + echo "$as_me:3452: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2933: \"$ac_try\"") >&5 + { (eval echo "$as_me:3455: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2936: \$? = $ac_status" >&5 + echo "$as_me:3458: \$? = $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 cf_save="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -#line 2945 "configure" + +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 +(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 + + cat >conftest.$ac_ext <<_ACEOF +#line 3565 "configure" #include "confdefs.h" #include int -main () +main (void) { -#ifdef _XOPEN_SOURCE -make an error -#endif + #ifdef _XOPEN_SOURCE + #error expected _XOPEN_SOURCE to be undefined + #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2960: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:3580: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2963: \$? = $ac_status" >&5 + echo "$as_me:3583: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2966: \"$ac_try\"") >&5 + { (eval echo "$as_me:3586: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2969: \$? = $ac_status" >&5 + echo "$as_me:3589: \$? = $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 cf_cv_gnu_source=yes fi rm -f conftest.$ac_objext conftest.$ac_ext - CPPFLAGS="$cf_save" + CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:2984: result: $cf_cv_gnu_source" >&5 +echo "$as_me:3604: result: $cf_cv_gnu_source" >&5 echo "${ECHO_T}$cf_cv_gnu_source" >&6 -test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" + if test "$cf_cv_gnu_source" = yes + then + echo "$as_me:3609: 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" +#include "confdefs.h" +#include +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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3643: \$? = $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 +cf_cv_default_source=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:3654: 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 + ;; -mirbsd*) #(vi +(minix*) + cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... + ;; +(mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= 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:3006: checking if we should define _POSIX_C_SOURCE" >&5 +echo "$as_me:3689: 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}:3012: testing if the symbol is already defined go no further ..." 1>&5 +echo "${as_me:-configure}:3695: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF -#line 3015 "configure" +#line 3698 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3030: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:3713: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3033: \$? = $ac_status" >&5 + echo "$as_me:3716: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3036: \"$ac_try\"") >&5 + { (eval echo "$as_me:3719: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3039: \$? = $ac_status" >&5 + echo "$as_me:3722: \$? = $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 cf_want_posix_source=no - case .$cf_POSIX_C_SOURCE in #(vi - .[12]??*) #(vi + case .$cf_POSIX_C_SOURCE in + (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; - .2) #(vi + (.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 3060 "configure" +#line 3743 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3075: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:3758: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3078: \$? = $ac_status" >&5 + echo "$as_me:3761: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3081: \"$ac_try\"") >&5 + { (eval echo "$as_me:3764: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3084: \$? = $ac_status" >&5 + echo "$as_me:3767: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&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 fi -echo "${as_me:-configure}:3095: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 +echo "${as_me:-configure}:3778: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" - CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" + CPPFLAGS="$cf_trim_CPPFLAGS" -echo "${as_me:-configure}:3100: testing if the second compile does not leave our definition intact error ..." 1>&5 + 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 + cat >conftest.$ac_ext <<_ACEOF -#line 3103 "configure" +#line 3789 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3118: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:3804: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3121: \$? = $ac_status" >&5 + echo "$as_me:3807: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3124: \"$ac_try\"") >&5 + { (eval echo "$as_me:3810: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3127: \$? = $ac_status" >&5 + echo "$as_me:3813: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi 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 fi -echo "$as_me:3143: result: $cf_cv_posix_c_source" >&5 +echo "$as_me:3829: 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 -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi fi ;; -netbsd*) #(vi +(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]*) #(vi +(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*) #(vi +(openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; -osf[45]*) #(vi +(osf[45]*) cf_xopen_source="-D_OSF_SOURCE" ;; -nto-qnx*) #(vi +(nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; -sco*) #(vi +(sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; -solaris2.*) #(vi +(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:3256: checking if we should define _XOPEN_SOURCE" >&5 +echo "$as_me:3967: 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 3263 "configure" +#line 3974 "configure" #include "confdefs.h" #include #include #include int -main () +main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3282: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:3993: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3285: \$? = $ac_status" >&5 + echo "$as_me:3996: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3288: \"$ac_try\"") >&5 + { (eval echo "$as_me:3999: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3291: \$? = $ac_status" >&5 + echo "$as_me:4002: \$? = $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 cf_save="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + cat >conftest.$ac_ext <<_ACEOF -#line 3300 "configure" +#line 4014 "configure" #include "confdefs.h" #include #include #include int -main () +main (void) { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3319: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4033: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3322: \$? = $ac_status" >&5 + echo "$as_me:4036: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3325: \"$ac_try\"") >&5 + { (eval echo "$as_me:4039: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3328: \$? = $ac_status" >&5 + echo "$as_me:4042: \$? = $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 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:3343: result: $cf_cv_xopen_source" >&5 +echo "$as_me:4057: 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 -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi fi 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:3451: checking if we should define _POSIX_C_SOURCE" >&5 +echo "$as_me:4185: 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}:3457: testing if the symbol is already defined go no further ..." 1>&5 +echo "${as_me:-configure}:4191: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF -#line 3460 "configure" +#line 4194 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3475: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4209: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3478: \$? = $ac_status" >&5 + echo "$as_me:4212: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3481: \"$ac_try\"") >&5 + { (eval echo "$as_me:4215: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3484: \$? = $ac_status" >&5 + echo "$as_me:4218: \$? = $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 cf_want_posix_source=no - case .$cf_POSIX_C_SOURCE in #(vi - .[12]??*) #(vi + case .$cf_POSIX_C_SOURCE in + (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; - .2) #(vi + (.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 3505 "configure" +#line 4239 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3520: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4254: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3523: \$? = $ac_status" >&5 + echo "$as_me:4257: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3526: \"$ac_try\"") >&5 + { (eval echo "$as_me:4260: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3529: \$? = $ac_status" >&5 + echo "$as_me:4263: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&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 fi -echo "${as_me:-configure}:3540: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 +echo "${as_me:-configure}:4274: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" - CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" + CPPFLAGS="$cf_trim_CPPFLAGS" -echo "${as_me:-configure}:3545: testing if the second compile does not leave our definition intact error ..." 1>&5 + 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 + cat >conftest.$ac_ext <<_ACEOF -#line 3548 "configure" +#line 4285 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3563: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4300: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3566: \$? = $ac_status" >&5 + echo "$as_me:4303: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3569: \"$ac_try\"") >&5 + { (eval echo "$as_me:4306: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3572: \$? = $ac_status" >&5 + echo "$as_me:4309: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi 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 fi -echo "$as_me:3588: result: $cf_cv_posix_c_source" >&5 +echo "$as_me:4325: 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 -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi fi ;; 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 -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" +echo "${as_me:-configure}:4517: 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 - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +echo "${as_me:-configure}:4527: 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 - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +echo "${as_me:-configure}:4537: 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:3761: checking if _XOPEN_SOURCE really is set" >&5 + echo "$as_me:4547: 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 3764 "configure" +#line 4550 "configure" #include "confdefs.h" #include int -main () +main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3779: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4565: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3782: \$? = $ac_status" >&5 + echo "$as_me:4568: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3785: \"$ac_try\"") >&5 + { (eval echo "$as_me:4571: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3788: \$? = $ac_status" >&5 + echo "$as_me:4574: \$? = $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 cf_XOPEN_SOURCE_set=no fi rm -f conftest.$ac_objext conftest.$ac_ext - echo "$as_me:3797: result: $cf_XOPEN_SOURCE_set" >&5 + echo "$as_me:4583: result: $cf_XOPEN_SOURCE_set" >&5 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6 if test $cf_XOPEN_SOURCE_set = yes then cat >conftest.$ac_ext <<_ACEOF -#line 3802 "configure" +#line 4588 "configure" #include "confdefs.h" #include int -main () +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:3817: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4603: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3820: \$? = $ac_status" >&5 + echo "$as_me:4606: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3823: \"$ac_try\"") >&5 + { (eval echo "$as_me:4609: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3826: \$? = $ac_status" >&5 + echo "$as_me:4612: \$? = $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 cf_XOPEN_SOURCE_set_ok=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $cf_XOPEN_SOURCE_set_ok = no then - { echo "$as_me:3837: WARNING: _XOPEN_SOURCE is lower than requested" >&5 + { echo "$as_me:4623: WARNING: _XOPEN_SOURCE is lower than requested" >&5 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;} fi else -echo "$as_me:3842: checking if we should define _XOPEN_SOURCE" >&5 +echo "$as_me:4628: 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 3849 "configure" +#line 4635 "configure" #include "confdefs.h" #include #include #include int -main () +main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3868: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4654: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3871: \$? = $ac_status" >&5 + echo "$as_me:4657: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3874: \"$ac_try\"") >&5 + { (eval echo "$as_me:4660: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3877: \$? = $ac_status" >&5 + echo "$as_me:4663: \$? = $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 cf_save="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + cat >conftest.$ac_ext <<_ACEOF -#line 3886 "configure" +#line 4675 "configure" #include "confdefs.h" #include #include #include int -main () +main (void) { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3905: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4694: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3908: \$? = $ac_status" >&5 + echo "$as_me:4697: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3911: \"$ac_try\"") >&5 + { (eval echo "$as_me:4700: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3914: \$? = $ac_status" >&5 + echo "$as_me:4703: \$? = $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 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:3929: result: $cf_cv_xopen_source" >&5 +echo "$as_me:4718: 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 -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi fi fi fi # 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:4034: checking for special C compiler options needed for large files" >&5 + echo "$as_me:4843: 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 4046 "configure" +#line 4855 "configure" #include "confdefs.h" #include /* 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 () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4066: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4875: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4069: \$? = $ac_status" >&5 + echo "$as_me:4878: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4072: \"$ac_try\"") >&5 + { (eval echo "$as_me:4881: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4075: \$? = $ac_status" >&5 + echo "$as_me:4884: \$? = $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 CC="$CC -n32" rm -f conftest.$ac_objext -if { (eval echo "$as_me:4085: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4894: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4088: \$? = $ac_status" >&5 + echo "$as_me:4897: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4091: \"$ac_try\"") >&5 + { (eval echo "$as_me:4900: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4094: \$? = $ac_status" >&5 + echo "$as_me:4903: \$? = $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 fi rm -f conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi -echo "$as_me:4108: result: $ac_cv_sys_largefile_CC" >&5 +echo "$as_me:4917: 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:4114: checking for _FILE_OFFSET_BITS value needed for large files" >&5 + echo "$as_me:4923: 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 4122 "configure" +#line 4931 "configure" #include "confdefs.h" #include /* 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 () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4142: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4951: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4145: \$? = $ac_status" >&5 + echo "$as_me:4954: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4148: \"$ac_try\"") >&5 + { (eval echo "$as_me:4957: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4151: \$? = $ac_status" >&5 + echo "$as_me:4960: \$? = $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 cat >conftest.$ac_ext <<_ACEOF -#line 4160 "configure" +#line 4969 "configure" #include "confdefs.h" #define _FILE_OFFSET_BITS 64 #include /* 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 () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4181: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4990: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4184: \$? = $ac_status" >&5 + echo "$as_me:4993: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4187: \"$ac_try\"") >&5 + { (eval echo "$as_me:4996: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4190: \$? = $ac_status" >&5 + echo "$as_me:4999: \$? = $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 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi -echo "$as_me:4201: result: $ac_cv_sys_file_offset_bits" >&5 +echo "$as_me:5010: 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 <&5 + echo "$as_me:5020: 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 4219 "configure" +#line 5028 "configure" #include "confdefs.h" #include /* 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 () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4239: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5048: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4242: \$? = $ac_status" >&5 + echo "$as_me:5051: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4245: \"$ac_try\"") >&5 + { (eval echo "$as_me:5054: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4248: \$? = $ac_status" >&5 + echo "$as_me:5057: \$? = $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 cat >conftest.$ac_ext <<_ACEOF -#line 4257 "configure" +#line 5066 "configure" #include "confdefs.h" #define _LARGE_FILES 1 #include /* 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 () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4278: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5087: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4281: \$? = $ac_status" >&5 + echo "$as_me:5090: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4284: \"$ac_try\"") >&5 + { (eval echo "$as_me:5093: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4287: \$? = $ac_status" >&5 + echo "$as_me:5096: \$? = $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 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi -echo "$as_me:4298: result: $ac_cv_sys_large_files" >&5 +echo "$as_me:5107: 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 <&5 + if test "$enable_largefile" != no ; then + echo "$as_me:5120: 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 4319 "configure" +#line 5128 "configure" #include "confdefs.h" #include int -main () +main (void) { return !fseeko; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4331: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5140: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4334: \$? = $ac_status" >&5 + echo "$as_me:5143: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4337: \"$ac_try\"") >&5 + { (eval echo "$as_me:5146: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4340: \$? = $ac_status" >&5 + echo "$as_me:5149: \$? = $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 cat >conftest.$ac_ext <<_ACEOF -#line 4349 "configure" +#line 5158 "configure" #include "confdefs.h" #define _LARGEFILE_SOURCE 1 #include int -main () +main (void) { return !fseeko; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4362: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5171: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4365: \$? = $ac_status" >&5 + echo "$as_me:5174: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4368: \"$ac_try\"") >&5 + { (eval echo "$as_me:5177: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4371: \$? = $ac_status" >&5 + echo "$as_me:5180: \$? = $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 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi -echo "$as_me:4382: result: $ac_cv_sys_largefile_source" >&5 +echo "$as_me:5191: 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 <&5 +echo "$as_me:5205: 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 4402 "configure" +#line 5211 "configure" #include "confdefs.h" #include int -main () +main (void) { return fseeko && fseeko (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:4414: \"$ac_link\"") >&5 +if { (eval echo "$as_me:5223: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4417: \$? = $ac_status" >&5 + echo "$as_me:5226: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:4420: \"$ac_try\"") >&5 + { (eval echo "$as_me:5229: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4423: \$? = $ac_status" >&5 + echo "$as_me:5232: \$? = $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 ac_cv_func_fseeko=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:4433: result: $ac_cv_func_fseeko" >&5 +echo "$as_me:5242: 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 - test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " - test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " - test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " + if test "$ac_cv_sys_large_files" != no + then - echo "$as_me:4454: checking whether to use struct dirent64" >&5 + 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 $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 4461 "configure" +#line 5288 "configure" #include "confdefs.h" +#pragma GCC diagnostic error "-Wincompatible-pointer-types" #include #include int -main () +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; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4482: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5310: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4485: \$? = $ac_status" >&5 + echo "$as_me:5313: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4488: \"$ac_try\"") >&5 + { (eval echo "$as_me:5316: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4491: \$? = $ac_status" >&5 + echo "$as_me:5319: \$? = $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 cf_cv_struct_dirent64=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:4502: result: $cf_cv_struct_dirent64" >&5 +echo "$as_me:5330: 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 + fi +echo "$as_me:5339: 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 "${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}*) + 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%` + ;; + esac + ;; +(.no|.NONE/*) + 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: 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 ) then -echo "$as_me:4513: checking if you want to check for gcc warnings" >&5 +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 # 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:4523: result: $cf_opt_with_warnings" >&5 +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 if test "$GCC" = yes then cat > conftest.i <&5 + { echo "$as_me:5421: checking for $CC __attribute__ directives..." >&5 echo "$as_me: checking for $CC __attribute__ directives..." >&6;} cat > conftest.$ac_ext <&5 - case $cf_attribute in #(vi - printf) #(vi + case $cf_attribute in + (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <&5 + if { (eval echo "$as_me:5473: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4600: \$? = $ac_status" >&5 + echo "$as_me:5476: \$? = $ac_status" >&5 (exit $ac_status); }; then - test -n "$verbose" && echo "$as_me:4602: result: ... $cf_attribute" >&5 + 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 #(vi - noreturn) #(vi + case $cf_attribute in + (noreturn) cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_PRINTF 1 EOF fi cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_SCANF 1 EOF fi cat >>confdefs.h <>confdefs.h <>confdefs.h fi rm -rf conftest* fi INTEL_COMPILER=no if test "$GCC" = yes ; then case $host_os in - linux*|gnu*) - echo "$as_me:4666: checking if this is really Intel C compiler" >&5 + (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 4671 "configure" +#line 5547 "configure" #include "confdefs.h" int -main () +main (void) { #ifdef __INTEL_COMPILER #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4688: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5564: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4691: \$? = $ac_status" >&5 + echo "$as_me:5567: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4694: \"$ac_try\"") >&5 + { (eval echo "$as_me:5570: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4697: \$? = $ac_status" >&5 + echo "$as_me:5573: \$? = $ac_status" >&5 (exit $ac_status); }; }; then INTEL_COMPILER=yes -cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc" +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:4708: result: $INTEL_COMPILER" >&5 + echo "$as_me:5584: result: $INTEL_COMPILER" >&5 echo "${ECHO_T}$INTEL_COMPILER" >&6 ;; esac fi CLANG_COMPILER=no if test "$GCC" = yes ; then - echo "$as_me:4717: checking if this is really Clang C compiler" >&5 + 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 4722 "configure" +#line 5598 "configure" #include "confdefs.h" int -main () +main (void) { #ifdef __clang__ #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4739: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5615: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4742: \$? = $ac_status" >&5 + echo "$as_me:5618: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4745: \"$ac_try\"") >&5 + { (eval echo "$as_me:5621: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4748: \$? = $ac_status" >&5 + echo "$as_me:5624: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CLANG_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" 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:4759: result: $CLANG_COMPILER" >&5 + echo "$as_me:5635: result: $CLANG_COMPILER" >&5 echo "${ECHO_T}$CLANG_COMPILER" >&6 fi cat > conftest.$ac_ext <&5 + { 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:4797: \"$ac_compile\"") >&5 + if { (eval echo "$as_me:5673: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4800: \$? = $ac_status" >&5 + echo "$as_me:5676: \$? = $ac_status" >&5 (exit $ac_status); }; then - test -n "$verbose" && echo "$as_me:4802: result: ... -$cf_opt" >&5 + 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" elif test "$GCC" = yes then - { echo "$as_me:4811: checking for $CC warning options..." >&5 + { 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_warn_CONST + Wundef $cf_gcc_warnings $cf_warn_CONST do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" - if { (eval echo "$as_me:4831: \"$ac_compile\"") >&5 + if { (eval echo "$as_me:5711: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4834: \$? = $ac_status" >&5 + echo "$as_me:5714: \$? = $ac_status" >&5 (exit $ac_status); }; then - test -n "$verbose" && echo "$as_me:4836: result: ... -$cf_opt" >&5 + test -n "$verbose" && echo "$as_me:5716: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 - case $cf_opt in #(vi - Wcast-qual) #(vi - CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES" + case $cf_opt in + (Wcast-qual) + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-DXTSTRINGDEFINES" + ;; - Winline) #(vi + (Winline) case $GCC_VERSION in - [34].*) + ([34].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 -echo "${as_me:-configure}:4847: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 +echo "${as_me:-configure}:5730: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; - Wpointer-arith) #(vi + (Wpointer-arith) case $GCC_VERSION in - [12].*) + ([12].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 -echo "${as_me:-configure}:4857: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 +echo "${as_me:-configure}:5740: 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 rm -rf conftest* fi fi -echo "$as_me:4873: checking if you want to use pkg-config" >&5 +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 else cf_pkg_config=yes fi; -echo "$as_me:4883: result: $cf_pkg_config" >&5 +echo "$as_me:5766: result: $cf_pkg_config" >&5 echo "${ECHO_T}$cf_pkg_config" >&6 -case $cf_pkg_config in #(vi -no) #(vi +case $cf_pkg_config in +(no) PKG_CONFIG=none ;; -yes) #(vi +(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:4895: checking for $ac_word" >&5 +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 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:4912: found $ac_dir/$ac_word" >&5 + echo "$as_me:5795: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then - echo "$as_me:4923: result: $PKG_CONFIG" >&5 + echo "$as_me:5806: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else - echo "$as_me:4926: result: no" >&5 + echo "$as_me:5809: result: no" >&5 echo "${ECHO_T}no" >&6 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:4935: checking for $ac_word" >&5 +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 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:4952: found $ac_dir/$ac_word" >&5 + echo "$as_me:5835: 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:4964: result: $ac_pt_PKG_CONFIG" >&5 + echo "$as_me:5847: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 else - echo "$as_me:4967: result: no" >&5 + echo "$as_me:5850: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_pt_PKG_CONFIG else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi ;; -*) +(*) 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" + cf_path_syntax="$prefix" else - cf_path_syntax="$ac_default_prefix" + cf_path_syntax="$ac_default_prefix" fi -case ".$PKG_CONFIG" in #(vi -.\$\(*\)*|.\'*\'*) #(vi - ;; -..|./*|.\\*) #(vi - ;; -.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX - ;; -.\${*prefix}*|.\${*dir}*) #(vi - eval PKG_CONFIG="$PKG_CONFIG" - case ".$PKG_CONFIG" in #(vi - .NONE/*) - PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` - ;; - esac - ;; #(vi -.no|.NONE/*) - PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` - ;; -*) - { { echo "$as_me:5010: error: expected a pathname, not \"$PKG_CONFIG\"" >&5 +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;} fi -echo "$as_me:5018: checking for this package's name" >&5 +echo "$as_me:5904: checking for this package's name" >&5 echo $ECHO_N "checking for this package's name... $ECHO_C" >&6 # 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:5028: result: $PACKAGE" >&5 +echo "$as_me:5914: result: $PACKAGE" >&5 echo "${ECHO_T}$PACKAGE" >&6 if test -f $srcdir/VERSION ; then - echo "$as_me:5032: checking for package version" >&5 + echo "$as_me:5918: checking for package version" >&5 echo $ECHO_N "checking for package version... $ECHO_C" >&6 # 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` # 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:5044: error: missing major-version" >&5 + 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; }; } VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'` - test -z "$VERSION_MINOR" && { { echo "$as_me:5049: error: missing minor-version" >&5 + 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; }; } - echo "$as_me:5053: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5 + echo "$as_me:5939: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5 echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6 - echo "$as_me:5056: checking for package patch date" >&5 + 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:5061: error: missing patch-date $VERSION_PATCH" >&5 + (.) + { { 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]) + (.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) ;; - *) - { { echo "$as_me:5068: error: illegal patch-date $VERSION_PATCH" >&5 + (*) + { { 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:5073: result: $VERSION_PATCH" >&5 + echo "$as_me:5959: result: $VERSION_PATCH" >&5 echo "${ECHO_T}$VERSION_PATCH" >&6 else - { { echo "$as_me:5076: error: did not find $srcdir/VERSION" >&5 + { { 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; }; } fi # show the actual data that we have for versions: test -n "$verbose" && echo " ABI VERSION $VERSION" 1>&6 -echo "${as_me:-configure}:5084: testing ABI VERSION $VERSION ..." 1>&5 +echo "${as_me:-configure}:5970: testing ABI VERSION $VERSION ..." 1>&5 test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6 -echo "${as_me:-configure}:5088: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5 +echo "${as_me:-configure}:5974: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5 test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6 -echo "${as_me:-configure}:5092: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5 +echo "${as_me:-configure}:5978: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5 test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6 -echo "${as_me:-configure}:5096: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5 +echo "${as_me:-configure}:5982: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5 cf_PACKAGE=dialog PACKAGE=$PACKAGE cat >>confdefs.h <>confdefs.h <>confdefs.h <&5 +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 # 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:5129: result: $SUB_INC" >&5 +echo "$as_me:6015: result: $SUB_INC" >&5 echo "${ECHO_T}$SUB_INC" >&6 +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 +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 +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:6054: result: $cf_man2html" >&5 +echo "${ECHO_T}$cf_man2html" >&6 +else + echo "$as_me:6057: result: no" >&5 +echo "${ECHO_T}no" >&6 +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 + +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 whether --with-man2html or --without-man2html was given. +if test "${with_man2html+set}" = set; then + withval="$with_man2html" + cf_man2html=$withval +else + cf_man2html=$cf_man2html +fi; + +cf_with_groff=no + +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 + + ;; +(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 + +MAN2HTML_TEMP="man2html.tmp" + cat >$MAN2HTML_TEMP <>$MAN2HTML_TEMP <&5 +echo "$as_me: error: expected a pathname, not \"$cf_man2html\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac + + 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 + + # for this example, expect 3 lines of content, the remainder is head/foot + cat >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_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot" + + 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 <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 + + rm -rf conftest* + echo "$as_me:6261: result: $cf_man2html_page" >&5 +echo "${ECHO_T}$cf_man2html_page" >&6 + + cat >>$MAN2HTML_TEMP <&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 5140 "configure" +#line 6288 "configure" #include "confdefs.h" #include #include #include #include _ACEOF -if { (eval echo "$as_me:5148: \"$ac_cpp conftest.$ac_ext\"") >&5 +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:5154: \$? = $ac_status" >&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 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 5176 "configure" +#line 6324 "configure" #include "confdefs.h" #include _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* 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 5194 "configure" +#line 6342 "configure" #include "confdefs.h" #include _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 5215 "configure" +#line 6363 "configure" #include "confdefs.h" #include #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 () +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:5241: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6389: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5244: \$? = $ac_status" >&5 + echo "$as_me:6392: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:5246: \"$ac_try\"") >&5 + { (eval echo "$as_me:6394: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5249: \$? = $ac_status" >&5 + echo "$as_me:6397: \$? = $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 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:5262: result: $ac_cv_header_stdc" >&5 +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 fi -echo "$as_me:5272: checking for inline" >&5 +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 5280 "configure" +#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:5289: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:6437: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5292: \$? = $ac_status" >&5 + echo "$as_me:6440: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5295: \"$ac_try\"") >&5 + { (eval echo "$as_me:6443: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5298: \$? = $ac_status" >&5 + 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:5309: result: $ac_cv_c_inline" >&5 +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 <&5 +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 5336 "configure" +#line 6484 "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5342: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:6490: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5345: \$? = $ac_status" >&5 + echo "$as_me:6493: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5348: \"$ac_try\"") >&5 + { (eval echo "$as_me:6496: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5351: \$? = $ac_status" >&5 + 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:5361: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 <&5 +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 5377 "configure" +#line 6525 "configure" #include "confdefs.h" $ac_includes_default int -main () +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:5392: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:6540: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5395: \$? = $ac_status" >&5 + echo "$as_me:6543: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5398: \"$ac_try\"") >&5 + { (eval echo "$as_me:6546: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5401: \$? = $ac_status" >&5 + 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:5411: result: $ac_cv_type_off_t" >&5 +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 <&5 +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 5429 "configure" +#line 6577 "configure" #include "confdefs.h" $ac_includes_default int -main () +main (void) { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5444: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:6592: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5447: \$? = $ac_status" >&5 + echo "$as_me:6595: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5450: \"$ac_try\"") >&5 + { (eval echo "$as_me:6598: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5453: \$? = $ac_status" >&5 + 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:5463: result: $ac_cv_type_size_t" >&5 +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 cat >>confdefs.h <&5 +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 5483 "configure" +#line 6631 "configure" #include "confdefs.h" #include int -main () +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:5495: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6643: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5498: \$? = $ac_status" >&5 + echo "$as_me:6646: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5501: \"$ac_try\"") >&5 + { (eval echo "$as_me:6649: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5504: \$? = $ac_status" >&5 + 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:5514: result: $ac_cv_working_alloca_h" >&5 +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 >>confdefs.h <<\EOF #define HAVE_ALLOCA_H 1 EOF fi -echo "$as_me:5524: checking for alloca" >&5 +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 5530 "configure" +#line 6678 "configure" #include "confdefs.h" #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int -main () +main (void) { char *p = (char *) alloca (1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5562: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6710: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5565: \$? = $ac_status" >&5 + echo "$as_me:6713: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5568: \"$ac_try\"") >&5 + { (eval echo "$as_me:6716: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5571: \$? = $ac_status" >&5 + 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:5581: result: $ac_cv_func_alloca_works" >&5 +echo "$as_me:6729: result: $ac_cv_func_alloca_works" >&5 echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 if test $ac_cv_func_alloca_works = yes; then cat >>confdefs.h <<\EOF #define HAVE_ALLOCA 1 EOF else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.$ac_objext cat >>confdefs.h <<\EOF #define C_ALLOCA 1 EOF -echo "$as_me:5602: checking whether \`alloca.c' needs Cray hooks" >&5 +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 5608 "configure" +#line 6756 "configure" #include "confdefs.h" #if defined(CRAY) && ! defined(CRAY2) webecray #else wenotbecray #endif _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 -echo "$as_me:5626: result: $ac_cv_os_cray" >&5 +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:5631: checking for $ac_func" >&5 +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 5637 "configure" +#line 6785 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* 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) (); int -main () +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 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5668: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6816: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5671: \$? = $ac_status" >&5 + echo "$as_me:6819: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5674: \"$ac_try\"") >&5 + { (eval echo "$as_me:6822: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5677: \$? = $ac_status" >&5 + 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:5687: result: `eval echo '${'$as_ac_var'}'`" >&5 +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 cat >>confdefs.h <&5 +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 5710 "configure" +#line 6858 "configure" #include "confdefs.h" int -find_stack_direction () +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 () +main (void) { $ac_main_return (find_stack_direction () < 0); } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:5733: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6881: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5736: \$? = $ac_status" >&5 + echo "$as_me:6884: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:5738: \"$ac_try\"") >&5 + { (eval echo "$as_me:6886: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5741: \$? = $ac_status" >&5 + 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:5753: result: $ac_cv_c_stack_direction" >&5 +echo "$as_me:6901: result: $ac_cv_c_stack_direction" >&5 echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 cat >>confdefs.h <&5 +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 else cat >conftest.$ac_ext <<_ACEOF -#line 5771 "configure" +#line 6919 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:5775: \"$ac_cpp conftest.$ac_ext\"") >&5 +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:5781: \$? = $ac_status" >&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" fi rm -f conftest.err conftest.$ac_ext fi -echo "$as_me:5800: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 <&5 +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 else cat >conftest.$ac_ext <<_ACEOF -#line 5819 "configure" +#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 /* 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) (); int -main () +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 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:5850: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6998: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5853: \$? = $ac_status" >&5 + echo "$as_me:7001: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5856: \"$ac_try\"") >&5 + { (eval echo "$as_me:7004: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5859: \$? = $ac_status" >&5 + echo "$as_me:7007: \$? = $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:5869: result: `eval echo '${'$as_ac_var'}'`" >&5 +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 <&5 +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat >conftest.$ac_ext <<_ACEOF -#line 5888 "configure" +#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. 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) */ #include #include #if !STDC_HEADERS && !HAVE_STDLIB_H char *malloc (); #endif /* 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 # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # if HAVE_SYS_PARAM_H # include # 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 */ #endif /* no HAVE_GETPAGESIZE */ int -main () +main (void) { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize (); /* 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); /* 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); /* 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:6015: \"$ac_link\"") >&5 +if { (eval echo "$as_me:7163: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6018: \$? = $ac_status" >&5 + echo "$as_me:7166: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:6020: \"$ac_try\"") >&5 + { (eval echo "$as_me:7168: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6023: \$? = $ac_status" >&5 + echo "$as_me:7171: \$? = $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:6035: result: $ac_cv_func_mmap_fixed_mapped" >&5 +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 fi rm -f conftest.mmap - echo "$as_me:6046: checking whether we are using the GNU C Library 2.1 or newer" >&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 6052 "configure" +#line 7200 "configure" #include "confdefs.h" #include #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* fi -echo "$as_me:6072: result: $ac_cv_gnu_library_2_1" >&5 +echo "$as_me:7220: result: $ac_cv_gnu_library_2_1" >&5 echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6 - GLIBC21="$ac_cv_gnu_library_2_1" + GLIBC21="$ac_cv_gnu_library_2_1" cf_makefile=makefile 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} if test -z "$PACKAGE" ; then - { { echo "$as_me:6085: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&5 + { { 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 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 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:6102: checking for $ac_header" >&5 +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 6108 "configure" +#line 7256 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:6112: \"$ac_cpp conftest.$ac_ext\"") >&5 +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:6118: \$? = $ac_status" >&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:6137: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 <&5 +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 6158 "configure" +#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 /* 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) (); int -main () +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 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6189: \"$ac_link\"") >&5 +if { (eval echo "$as_me:7337: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6192: \$? = $ac_status" >&5 + echo "$as_me:7340: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6195: \"$ac_try\"") >&5 + { (eval echo "$as_me:7343: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6198: \$? = $ac_status" >&5 + echo "$as_me:7346: \$? = $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:6208: result: `eval echo '${'$as_ac_var'}'`" >&5 +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 <conftest.$ac_ext <<_ACEOF -#line 6256 "configure" +#line 7407 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6268: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:7419: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6271: \$? = $ac_status" >&5 + echo "$as_me:7422: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6274: \"$ac_try\"") >&5 + { (eval echo "$as_me:7425: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6277: \$? = $ac_status" >&5 + echo "$as_me:7428: \$? = $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}:6294: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:7445: 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 elif test -d $cf_searchpath/../include ; then 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 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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF -#line 6335 "configure" +#line 7491 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6347: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:7503: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6350: \$? = $ac_status" >&5 + echo "$as_me:7506: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6353: \"$ac_try\"") >&5 + { (eval echo "$as_me:7509: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6356: \$? = $ac_status" >&5 + echo "$as_me:7512: \$? = $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}:6373: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:7529: 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 else -{ { echo "$as_me:6389: error: cannot find libiconv under $withval" >&5 +{ { echo "$as_me:7547: 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 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 + 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}:6414: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:7572: testing adding $cf_add_libdir to library-path ..." 1>&5 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + 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 + 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}:6443: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:7601: testing adding $cf_add_libdir to library-path ..." 1>&5 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done fi else -{ { echo "$as_me:6452: error: cannot find libiconv under $withval" >&5 +{ { 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 - ;; - esac + ;; +esac fi; - echo "$as_me:6463: checking for iconv" >&5 + 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 echo $ECHO_N "(cached) $ECHO_C" >&6 else # 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}:6474: testing Starting FIND_LINKAGE(iconv,) ..." 1>&5 +echo "${as_me:-configure}:7632: testing Starting FIND_LINKAGE(iconv,) ..." 1>&5 cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 6479 "configure" +#line 7637 "configure" #include "confdefs.h" #include #include int -main () +main (void) { 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:6498: \"$ac_link\"") >&5 +if { (eval echo "$as_me:7656: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6501: \$? = $ac_status" >&5 + echo "$as_me:7659: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6504: \"$ac_try\"") >&5 + { (eval echo "$as_me:7662: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6507: \$? = $ac_status" >&5 + 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 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-liconv $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 6521 "configure" +#line 7679 "configure" #include "confdefs.h" #include #include int -main () +main (void) { 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:6540: \"$ac_link\"") >&5 +if { (eval echo "$as_me:7698: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6543: \$? = $ac_status" >&5 + echo "$as_me:7701: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6546: \"$ac_try\"") >&5 + { (eval echo "$as_me:7704: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6549: \$? = $ac_status" >&5 + 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" else 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 + test -n "$verbose" && echo " find linkage for iconv library" 1>&6 -echo "${as_me:-configure}:6566: testing find linkage for iconv library ..." 1>&5 +echo "${as_me:-configure}:7724: testing find linkage for iconv library ..." 1>&5 -echo "${as_me:-configure}:6568: testing Searching for headers in FIND_LINKAGE(iconv,) ..." 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_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 #(vi - -I*) + case $cf_header_path in + (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` -test "$cf_header_path" != "NONE" && \ +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 "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr" - test -d /usr/include && cf_search="$cf_search /usr/include" - test -d /usr/include/iconv && cf_search="$cf_search /usr/include/iconv" - test -d /usr/include/iconv/include && cf_search="$cf_search /usr/include/iconv/include" - test -d /usr/iconv/include && cf_search="$cf_search /usr/iconv/include" - test -d /usr/iconv/include/iconv && cf_search="$cf_search /usr/iconv/include/iconv" -} - -test "$prefix" != "NONE" && \ +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" } -test "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr/local" - test -d /usr/local/include && cf_search="$cf_search /usr/local/include" - test -d /usr/local/include/iconv && cf_search="$cf_search /usr/local/include/iconv" - test -d /usr/local/include/iconv/include && cf_search="$cf_search /usr/local/include/iconv/include" - test -d /usr/local/iconv/include && cf_search="$cf_search /usr/local/iconv/include" - test -d /usr/local/iconv/include/iconv && cf_search="$cf_search /usr/local/iconv/include/iconv" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /opt" - test -d /opt/include && cf_search="$cf_search /opt/include" - test -d /opt/include/iconv && cf_search="$cf_search /opt/include/iconv" - test -d /opt/include/iconv/include && cf_search="$cf_search /opt/include/iconv/include" - test -d /opt/iconv/include && cf_search="$cf_search /opt/iconv/include" - test -d /opt/iconv/include/iconv && cf_search="$cf_search /opt/iconv/include/iconv" +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" } -test "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $HOME" - test -d $HOME/include && cf_search="$cf_search $HOME/include" - test -d $HOME/include/iconv && cf_search="$cf_search $HOME/include/iconv" - test -d $HOME/include/iconv/include && cf_search="$cf_search $HOME/include/iconv/include" - test -d $HOME/iconv/include && cf_search="$cf_search $HOME/iconv/include" - test -d $HOME/iconv/include/iconv && cf_search="$cf_search $HOME/iconv/include/iconv" -} +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 + 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}:6681: testing ... testing $cf_cv_header_path_iconv ..." 1>&5 +echo "${as_me:-configure}:7817: testing ... testing $cf_cv_header_path_iconv ..." 1>&5 - CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_iconv" - cat >conftest.$ac_ext <<_ACEOF -#line 6685 "configure" + 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" #include "confdefs.h" #include #include int -main () +main (void) { 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:6704: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:7844: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6707: \$? = $ac_status" >&5 + echo "$as_me:7847: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6710: \"$ac_try\"") >&5 + { (eval echo "$as_me:7850: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6713: \$? = $ac_status" >&5 + 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 + test -n "$verbose" && echo " ... found iconv headers in $cf_cv_header_path_iconv" 1>&6 -echo "${as_me:-configure}:6718: testing ... found iconv headers in $cf_cv_header_path_iconv ..." 1>&5 +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 + cf_cv_find_linkage_iconv=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 - CPPFLAGS="$cf_save_CPPFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext - fi - done + fi + done - if test "$cf_cv_find_linkage_iconv" = maybe ; then + if test "$cf_cv_find_linkage_iconv" = maybe ; then -echo "${as_me:-configure}:6736: testing Searching for iconv library in FIND_LINKAGE(iconv,) ..." 1>&5 +echo "${as_me:-configure}:7876: testing Searching for iconv library in FIND_LINKAGE(iconv,) ..." 1>&5 - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" - if test "$cf_cv_find_linkage_iconv" != yes ; then + 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 #(vi - -L*) + case $cf_library_path in + (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -test "$cf_library_path" != "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/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 fi cf_search= -test "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr" - test -d /usr/lib && cf_search="$cf_search /usr/lib" - test -d /usr/lib/iconv && cf_search="$cf_search /usr/lib/iconv" - test -d /usr/lib/iconv/lib && cf_search="$cf_search /usr/lib/iconv/lib" - test -d /usr/iconv/lib && cf_search="$cf_search /usr/iconv/lib" - test -d /usr/iconv/lib/iconv && cf_search="$cf_search /usr/iconv/lib/iconv" -} - -test "$prefix" != "NONE" && \ +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" } -test "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" - test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" - test -d /usr/local/lib/iconv && cf_search="$cf_search /usr/local/lib/iconv" - test -d /usr/local/lib/iconv/lib && cf_search="$cf_search /usr/local/lib/iconv/lib" - test -d /usr/local/iconv/lib && cf_search="$cf_search /usr/local/iconv/lib" - test -d /usr/local/iconv/lib/iconv && cf_search="$cf_search /usr/local/iconv/lib/iconv" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /opt" - test -d /opt/lib && cf_search="$cf_search /opt/lib" - test -d /opt/lib/iconv && cf_search="$cf_search /opt/lib/iconv" - test -d /opt/lib/iconv/lib && cf_search="$cf_search /opt/lib/iconv/lib" - test -d /opt/iconv/lib && cf_search="$cf_search /opt/iconv/lib" - test -d /opt/iconv/lib/iconv && cf_search="$cf_search /opt/iconv/lib/iconv" +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" } -test "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $HOME" - test -d $HOME/lib && cf_search="$cf_search $HOME/lib" - test -d $HOME/lib/iconv && cf_search="$cf_search $HOME/lib/iconv" - test -d $HOME/lib/iconv/lib && cf_search="$cf_search $HOME/lib/iconv/lib" - test -d $HOME/iconv/lib && cf_search="$cf_search $HOME/iconv/lib" - test -d $HOME/iconv/lib/iconv && cf_search="$cf_search $HOME/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 + 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}:6833: testing ... testing $cf_cv_library_path_iconv ..." 1>&5 +echo "${as_me:-configure}:7951: 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 6839 "configure" + 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" #include "confdefs.h" #include #include int -main () +main (void) { 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:6858: \"$ac_link\"") >&5 +if { (eval echo "$as_me:7976: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6861: \$? = $ac_status" >&5 + echo "$as_me:7979: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6864: \"$ac_try\"") >&5 + { (eval echo "$as_me:7982: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6867: \$? = $ac_status" >&5 + 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 + test -n "$verbose" && echo " ... found iconv library in $cf_cv_library_path_iconv" 1>&6 -echo "${as_me:-configure}:6872: testing ... found iconv library in $cf_cv_library_path_iconv ..." 1>&5 +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 + 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 - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS" + 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 + fi + done + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi - else - cf_cv_find_linkage_iconv=no - fi + else + cf_cv_find_linkage_iconv=no + fi fi rm -f conftest.$ac_objext conftest$ac_exeext 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 else am_cv_func_iconv="no, consider installing GNU libiconv" fi fi -echo "$as_me:6912: result: $am_cv_func_iconv" >&5 +echo "$as_me:8030: result: $am_cv_func_iconv" >&5 echo "${ECHO_T}$am_cv_func_iconv" >&6 if test "$am_cv_func_iconv" = yes; then cat >>confdefs.h <<\EOF #define HAVE_ICONV 1 EOF - echo "$as_me:6921: checking if the declaration of iconv() needs const." >&5 + 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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6928 "configure" +#line 8046 "configure" #include "confdefs.h" #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int -main () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6953: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:8071: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6956: \$? = $ac_status" >&5 + echo "$as_me:8074: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6959: \"$ac_try\"") >&5 + { (eval echo "$as_me:8077: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6962: \$? = $ac_status" >&5 + echo "$as_me:8080: \$? = $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:6972: result: $am_cv_proto_iconv_const" >&5 +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 cat >>confdefs.h <conftest.$ac_ext <<_ACEOF -#line 7014 "configure" +#line 8135 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:7026: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:8147: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7029: \$? = $ac_status" >&5 + echo "$as_me:8150: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7032: \"$ac_try\"") >&5 + { (eval echo "$as_me:8153: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7035: \$? = $ac_status" >&5 + echo "$as_me:8156: \$? = $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}:7052: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:8173: 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 if test -n "$cf_cv_library_file_iconv" ; then LIBICONV="-liconv" 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 + 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 -echo "${as_me:-configure}:7089: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:8212: testing adding $cf_add_libdir to library-path ..." 1>&5 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done fi fi fi - echo "$as_me:7100: checking for nl_langinfo and CODESET" >&5 +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 7106 "configure" +#line 8229 "configure" #include "confdefs.h" #include int -main () +main (void) { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7118: \"$ac_link\"") >&5 +if { (eval echo "$as_me:8241: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7121: \$? = $ac_status" >&5 + echo "$as_me:8244: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7124: \"$ac_try\"") >&5 + { (eval echo "$as_me:8247: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7127: \$? = $ac_status" >&5 + echo "$as_me:8250: \$? = $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 am_cv_langinfo_codeset=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:7138: result: $am_cv_langinfo_codeset" >&5 +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 + if test $am_cv_langinfo_codeset = yes; then cat >>confdefs.h <<\EOF #define HAVE_LANGINFO_CODESET 1 EOF - fi + fi if test $ac_cv_header_locale_h = yes; then - echo "$as_me:7149: checking for LC_MESSAGES" >&5 + 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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 7155 "configure" +#line 8278 "configure" #include "confdefs.h" #include int -main () +main (void) { return LC_MESSAGES ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7167: \"$ac_link\"") >&5 +if { (eval echo "$as_me:8290: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7170: \$? = $ac_status" >&5 + echo "$as_me:8293: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7173: \"$ac_try\"") >&5 + { (eval echo "$as_me:8296: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7176: \$? = $ac_status" >&5 + echo "$as_me:8299: \$? = $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 am_cv_val_LC_MESSAGES=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:7186: result: $am_cv_val_LC_MESSAGES" >&5 +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 + if test $am_cv_val_LC_MESSAGES = yes; then cat >>confdefs.h <<\EOF #define HAVE_LC_MESSAGES 1 EOF - fi - fi - echo "$as_me:7196: checking whether NLS is requested" >&5 + 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 else USE_NLS=no fi; - echo "$as_me:7206: result: $USE_NLS" >&5 + 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 EOF - echo "$as_me:7219: checking whether included gettext is requested" >&5 + echo "$as_me:8343: 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 nls_cv_force_use_gnu_gettext=no fi; - echo "$as_me:7229: result: $nls_cv_force_use_gnu_gettext" >&5 + echo "$as_me:8353: result: $nls_cv_force_use_gnu_gettext" >&5 echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 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_LIBS_1="$LIBS" - LIBS="$LIBICONV $LIBS" - echo "$as_me:7238: checking for libintl.h and gettext()" >&5 -echo $ECHO_N "checking for libintl.h and gettext()... $ECHO_C" >&6 -if test "${cf_cv_func_gettext+set}" = set; then + 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: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 + # 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 +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 +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:8431: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:8434: 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: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 $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 +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 + + 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 + + fi + + cf_save_LIBS_1="$LIBS" + +cf_add_libs="$LIBICONV" +# 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" + # 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}:7249: testing Starting FIND_LINKAGE(intl,) ..." 1>&5 +echo "${as_me:-configure}:8602: testing Starting FIND_LINKAGE(intl,) ..." 1>&5 cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 7254 "configure" +#line 8607 "configure" #include "confdefs.h" #include extern int _nl_msg_cat_cntr; int -main () +main (void) { - bindtextdomain ("", ""); - return (int) gettext ("") + bindtextdomain ("", ""); + return (int) gettext ("") - + _nl_msg_cat_cntr +#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:7274: \"$ac_link\"") >&5 +if { (eval echo "$as_me:8629: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7277: \$? = $ac_status" >&5 + echo "$as_me:8632: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7280: \"$ac_try\"") >&5 + { (eval echo "$as_me:8635: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7283: \$? = $ac_status" >&5 + 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 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-lintl $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 7297 "configure" +#line 8652 "configure" #include "confdefs.h" #include extern int _nl_msg_cat_cntr; int -main () +main (void) { - bindtextdomain ("", ""); - return (int) gettext ("") + bindtextdomain ("", ""); + return (int) gettext ("") - + _nl_msg_cat_cntr +#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:7317: \"$ac_link\"") >&5 +if { (eval echo "$as_me:8674: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7320: \$? = $ac_status" >&5 + echo "$as_me:8677: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7323: \"$ac_try\"") >&5 + { (eval echo "$as_me:8680: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7326: \$? = $ac_status" >&5 + 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" 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 + test -n "$verbose" && echo " find linkage for intl library" 1>&6 -echo "${as_me:-configure}:7343: testing find linkage for intl library ..." 1>&5 +echo "${as_me:-configure}:8700: testing find linkage for intl library ..." 1>&5 -echo "${as_me:-configure}:7345: testing Searching for headers in FIND_LINKAGE(intl,) ..." 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" + 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 #(vi - -I*) + case $cf_header_path in + (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` -test "$cf_header_path" != "NONE" && \ +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" } 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 "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr" - test -d /usr/include && cf_search="$cf_search /usr/include" - test -d /usr/include/intl && cf_search="$cf_search /usr/include/intl" - test -d /usr/include/intl/include && cf_search="$cf_search /usr/include/intl/include" - test -d /usr/intl/include && cf_search="$cf_search /usr/intl/include" - test -d /usr/intl/include/intl && cf_search="$cf_search /usr/intl/include/intl" -} - -test "$prefix" != "NONE" && \ +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 "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr/local" - test -d /usr/local/include && cf_search="$cf_search /usr/local/include" - test -d /usr/local/include/intl && cf_search="$cf_search /usr/local/include/intl" - test -d /usr/local/include/intl/include && cf_search="$cf_search /usr/local/include/intl/include" - test -d /usr/local/intl/include && cf_search="$cf_search /usr/local/intl/include" - test -d /usr/local/intl/include/intl && cf_search="$cf_search /usr/local/intl/include/intl" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /opt" - test -d /opt/include && cf_search="$cf_search /opt/include" - test -d /opt/include/intl && cf_search="$cf_search /opt/include/intl" - test -d /opt/include/intl/include && cf_search="$cf_search /opt/include/intl/include" - test -d /opt/intl/include && cf_search="$cf_search /opt/intl/include" - test -d /opt/intl/include/intl && cf_search="$cf_search /opt/intl/include/intl" +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 "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $HOME" - test -d $HOME/include && cf_search="$cf_search $HOME/include" - test -d $HOME/include/intl && cf_search="$cf_search $HOME/include/intl" - test -d $HOME/include/intl/include && cf_search="$cf_search $HOME/include/intl/include" - test -d $HOME/intl/include && cf_search="$cf_search $HOME/intl/include" - test -d $HOME/intl/include/intl && cf_search="$cf_search $HOME/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" - 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 + 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 -echo "${as_me:-configure}:7458: testing ... testing $cf_cv_header_path_intl ..." 1>&5 +echo "${as_me:-configure}:8793: testing ... testing $cf_cv_header_path_intl ..." 1>&5 - CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_intl" - cat >conftest.$ac_ext <<_ACEOF -#line 7462 "configure" + CPPFLAGS="$cf_save_CPPFLAGS" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_intl" + + cat >conftest.$ac_ext <<_ACEOF +#line 8801 "configure" #include "confdefs.h" #include extern int _nl_msg_cat_cntr; int -main () +main (void) { - bindtextdomain ("", ""); - return (int) gettext ("") + bindtextdomain ("", ""); + return (int) gettext ("") - + _nl_msg_cat_cntr +#ifndef IGNORE_MSGFMT_HACK + + _nl_msg_cat_cntr +#endif ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:7482: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:8823: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7485: \$? = $ac_status" >&5 + echo "$as_me:8826: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7488: \"$ac_try\"") >&5 + { (eval echo "$as_me:8829: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7491: \$? = $ac_status" >&5 + 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 + test -n "$verbose" && echo " ... found intl headers in $cf_cv_header_path_intl" 1>&6 -echo "${as_me:-configure}:7496: testing ... found intl headers in $cf_cv_header_path_intl ..." 1>&5 +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 + cf_cv_find_linkage_intl=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 - CPPFLAGS="$cf_save_CPPFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext - fi - done + fi + done - if test "$cf_cv_find_linkage_intl" = maybe ; then + if test "$cf_cv_find_linkage_intl" = maybe ; then -echo "${as_me:-configure}:7514: testing Searching for intl library in FIND_LINKAGE(intl,) ..." 1>&5 +echo "${as_me:-configure}:8855: testing Searching for intl library in FIND_LINKAGE(intl,) ..." 1>&5 - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" - if test "$cf_cv_find_linkage_intl" != yes ; then + if test "$cf_cv_find_linkage_intl" != 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 #(vi - -L*) + case $cf_library_path in + (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -test "$cf_library_path" != "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/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_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= -test "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr" - test -d /usr/lib && cf_search="$cf_search /usr/lib" - test -d /usr/lib/intl && cf_search="$cf_search /usr/lib/intl" - test -d /usr/lib/intl/lib && cf_search="$cf_search /usr/lib/intl/lib" - test -d /usr/intl/lib && cf_search="$cf_search /usr/intl/lib" - test -d /usr/intl/lib/intl && cf_search="$cf_search /usr/intl/lib/intl" -} - -test "$prefix" != "NONE" && \ +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" } -test "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" - test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" - test -d /usr/local/lib/intl && cf_search="$cf_search /usr/local/lib/intl" - test -d /usr/local/lib/intl/lib && cf_search="$cf_search /usr/local/lib/intl/lib" - test -d /usr/local/intl/lib && cf_search="$cf_search /usr/local/intl/lib" - test -d /usr/local/intl/lib/intl && cf_search="$cf_search /usr/local/intl/lib/intl" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /opt" - test -d /opt/lib && cf_search="$cf_search /opt/lib" - test -d /opt/lib/intl && cf_search="$cf_search /opt/lib/intl" - test -d /opt/lib/intl/lib && cf_search="$cf_search /opt/lib/intl/lib" - test -d /opt/intl/lib && cf_search="$cf_search /opt/intl/lib" - test -d /opt/intl/lib/intl && cf_search="$cf_search /opt/intl/lib/intl" +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" } -test "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $HOME" - test -d $HOME/lib && cf_search="$cf_search $HOME/lib" - test -d $HOME/lib/intl && cf_search="$cf_search $HOME/lib/intl" - test -d $HOME/lib/intl/lib && cf_search="$cf_search $HOME/lib/intl/lib" - test -d $HOME/intl/lib && cf_search="$cf_search $HOME/intl/lib" - test -d $HOME/intl/lib/intl && cf_search="$cf_search $HOME/intl/lib/intl" -} +done cf_search="$cf_library_path_list $cf_search" - 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 + 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 -echo "${as_me:-configure}:7611: testing ... testing $cf_cv_library_path_intl ..." 1>&5 +echo "${as_me:-configure}:8930: testing ... testing $cf_cv_library_path_intl ..." 1>&5 - 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 7617 "configure" + 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" #include "confdefs.h" #include extern int _nl_msg_cat_cntr; int -main () +main (void) { - bindtextdomain ("", ""); - return (int) gettext ("") + bindtextdomain ("", ""); + return (int) gettext ("") - + _nl_msg_cat_cntr +#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:7637: \"$ac_link\"") >&5 +if { (eval echo "$as_me:8958: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7640: \$? = $ac_status" >&5 + echo "$as_me:8961: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7643: \"$ac_try\"") >&5 + { (eval echo "$as_me:8964: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7646: \$? = $ac_status" >&5 + 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 + test -n "$verbose" && echo " ... found intl library in $cf_cv_library_path_intl" 1>&6 -echo "${as_me:-configure}:7651: testing ... found intl library in $cf_cv_library_path_intl ..." 1>&5 +echo "${as_me:-configure}:8972: testing ... found intl library in $cf_cv_library_path_intl ..." 1>&5 - cf_cv_find_linkage_intl=yes - cf_cv_library_file_intl="-lintl" - break + 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 - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS" + 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 + fi + done + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi - else - cf_cv_find_linkage_intl=no - fi + else + cf_cv_find_linkage_intl=no + fi fi rm -f conftest.$ac_objext conftest$ac_exeext 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_intl" = yes ; then cf_cv_func_gettext=yes else cf_cv_func_gettext=no fi -fi -echo "$as_me:7691: result: $cf_cv_func_gettext" >&5 + 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 + LIBS="$cf_save_LIBS_1" + CPPFLAGS="$cf_save_OPTS_1" if test "$cf_cv_func_gettext" = yes ; then cat >>confdefs.h <<\EOF #define HAVE_LIBINTL_H 1 EOF if test "$PACKAGE" != gettext; then cat >>confdefs.h <<\EOF #define HAVE_GETTEXT 1 EOF 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 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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF -#line 7731 "configure" +#line 9058 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:7743: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:9070: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7746: \$? = $ac_status" >&5 + echo "$as_me:9073: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:7749: \"$ac_try\"") >&5 + { (eval echo "$as_me:9076: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7752: \$? = $ac_status" >&5 + echo "$as_me:9079: \$? = $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}:7769: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:9096: 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 if test -n "$cf_cv_library_file_intl" ; then INTLLIBS="$cf_cv_library_file_intl $LIBICONV" 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 + 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 -echo "${as_me:-configure}:7806: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:9135: testing adding $cf_add_libdir to library-path ..." 1>&5 - INTLLIBS="-L$cf_add_libdir $INTLLIBS" - fi - fi - done + INTLLIBS="-L$cf_add_libdir $INTLLIBS" + fi + fi + done fi fi gt_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:7822: checking for $ac_func" >&5 +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 7828 "configure" +#line 9157 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* 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) (); int -main () +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 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:7859: \"$ac_link\"") >&5 +if { (eval echo "$as_me:9188: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:7862: \$? = $ac_status" >&5 + echo "$as_me:9191: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:7865: \"$ac_try\"") >&5 + { (eval echo "$as_me:9194: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:7868: \$? = $ac_status" >&5 + echo "$as_me:9197: \$? = $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:7878: result: `eval echo '${'$as_ac_var'}'`" >&5 +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 <&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:7920: result: $MSGFMT" >&5 -echo "${ECHO_T}$MSGFMT" >&6 -else - echo "$as_me:7923: 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:7929: 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:7946: 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:7958: result: $GMSGFMT" >&5 -echo "${ECHO_T}$GMSGFMT" >&6 -else - echo "$as_me:7961: 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:7968: 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:7995: result: $XGETTEXT" >&5 -echo "${ECHO_T}$XGETTEXT" >&6 -else - echo "$as_me:7998: result: no" >&5 -echo "${ECHO_T}no" >&6 -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 if test "$CATOBJEXT" = "NONE"; then - nls_cv_use_gnu_gettext=yes + nls_cv_use_gnu_gettext=maybe fi fi - if test "$nls_cv_use_gnu_gettext" = "yes"; then - if test ! -d $srcdir/intl ; then - { { echo "$as_me:8013: error: no NLS library is packaged with this application" >&5 -echo "$as_me: error: no NLS library is packaged with this application" >&2;} - { (exit 1); exit 1; }; } + 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 - INTLOBJS="\$(GETTOBJS)" - # Extract the first word of "msgfmt", so it can be a program name with args. - -set dummy msgfmt; ac_word=$2 -echo "$as_me:8021: 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:8048: result: $MSGFMT" >&5 -echo "${ECHO_T}$MSGFMT" >&6 -else - echo "$as_me:8051: 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:8057: 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:8074: 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:8086: result: $GMSGFMT" >&5 -echo "${ECHO_T}$GMSGFMT" >&6 -else - echo "$as_me:8089: 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:8096: 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:8123: result: $XGETTEXT" >&5 -echo "${ECHO_T}$XGETTEXT" >&6 -else - echo "$as_me:8126: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes - CATOBJEXT=.gmo - INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV" - LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` - fi - - if test "$GMSGFMT" != ":"; then - if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then : ; else - echo "$as_me:8141: result: found msgfmt program is not GNU msgfmt; ignore it" >&5 -echo "${ECHO_T}found msgfmt program is not GNU msgfmt; ignore it" >&6 - GMSGFMT=":" + { 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 "$XGETTEXT" != ":"; then - if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then : ; else - echo "$as_me:8151: result: found xgettext program is not GNU xgettext; ignore it" >&5 -echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 - XGETTEXT=":" + { 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 - - POSUB=po fi - ac_config_commands="$ac_config_commands default-1" + if test "$XGETTEXT" != ":"; then + ac_config_commands="$ac_config_commands default-1" - if test "$PACKAGE" = gettext; then - BUILD_INCLUDED_LIBINTL=yes - fi + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi - if test "$nls_cv_use_gnu_gettext" = "yes"; then - for ac_prog in bison + 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:8171: checking for $ac_word" >&5 +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 $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:8186: found $ac_dir/$ac_word" >&5 +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:8194: result: $INTLBISON" >&5 + echo "$as_me:9312: result: $INTLBISON" >&5 echo "${ECHO_T}$INTLBISON" >&6 else - echo "$as_me:8197: result: no" >&5 + echo "$as_me:9315: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$INTLBISON" && break done - if test -z "$INTLBISON"; then - ac_verc_fail=yes - else - echo "$as_me:8207: checking version of bison" >&5 + 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:8216: result: $ac_prog_version" >&5 + 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 - if test $ac_verc_fail = yes; then - INTLBISON=: - fi + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done fi - for lang in $ALL_LINGUAS; do - GMOFILES="$GMOFILES $lang.gmo" - POFILES="$POFILES $lang.po" - done - nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else - echo "$as_me:8242: checking for catalogs to be installed" >&5 + 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;; + ("$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS - echo "$as_me:8262: result: $LINGUAS" >&5 + echo "$as_me:9381: result: $LINGUAS" >&5 echo "${ECHO_T}$LINGUAS" >&6 fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi INTL_LIBTOOL_SUFFIX_PREFIX= if test "$USE_NLS" = yes ; then # Check whether --with-textdomain or --without-textdomain was given. if test "${with_textdomain+set}" = set; then withval="$with_textdomain" NLS_TEXTDOMAIN=$withval else NLS_TEXTDOMAIN=$PACKAGE fi; cat >>confdefs.h <&5 +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 # 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:8309: result: $use_our_messages" >&5 +echo "$as_me:9428: result: $use_our_messages" >&5 echo "${ECHO_T}$use_our_messages" >&6 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 "$USE_INCLUDED_LIBINTL" = yes ; then - if test "$nls_cv_force_use_gnu_gettext" = 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 cat >>confdefs.h <<\EOF #define HAVE_LIBGETTEXT_H 1 EOF 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 for ac_header in libintl.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:8351: checking for $ac_header" >&5 +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 8357 "configure" +#line 9476 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:8361: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:9480: \"$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:8367: \$? = $ac_status" >&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" 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:8386: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 <>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 cat >>confdefs.h <<\EOF #define HAVE_LIBINTL_H 1 EOF fi fi -echo "$as_me:8434: checking if -lm needed for math functions" >&5 +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 8441 "configure" +#line 9563 "configure" #include "confdefs.h" #include + #include #include int -main () +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:8456: \"$ac_link\"") >&5 +if { (eval echo "$as_me:9579: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8459: \$? = $ac_status" >&5 + echo "$as_me:9582: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8462: \"$ac_try\"") >&5 + { (eval echo "$as_me:9585: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8465: \$? = $ac_status" >&5 + echo "$as_me:9588: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_need_libm=no else 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:8475: result: $cf_cv_need_libm" >&5 +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 - LIBS="-lm $LIBS" +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" fi -echo "$as_me:8484: checking if you want to use dmalloc for testing" >&5 +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 --with-dmalloc or --without-dmalloc was given. if test "${with_dmalloc+set}" = set; then withval="$with_dmalloc" cat >>confdefs.h <&5 +echo "$as_me:9638: result: ${with_dmalloc:-no}" >&5 echo "${ECHO_T}${with_dmalloc:-no}" >&6 -case .$with_cflags in #(vi -.*-g*) - case .$CFLAGS in #(vi - .*-g*) #(vi +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 case $cf_fix_cppflags in -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi ;; esac ;; esac if test "$with_dmalloc" = yes ; then - echo "$as_me:8595: checking for dmalloc.h" >&5 + 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 8601 "configure" +#line 9758 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:8605: \"$ac_cpp conftest.$ac_ext\"") >&5 +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:8611: \$? = $ac_status" >&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:8630: result: $ac_cv_header_dmalloc_h" >&5 +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 -echo "$as_me:8634: checking for dmalloc_debug in -ldmalloc" >&5 +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 8642 "configure" +#line 9799 "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 (); int -main () +main (void) { dmalloc_debug (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8661: \"$ac_link\"") >&5 +if { (eval echo "$as_me:9818: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8664: \$? = $ac_status" >&5 + echo "$as_me:9821: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8667: \"$ac_try\"") >&5 + { (eval echo "$as_me:9824: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8670: \$? = $ac_status" >&5 + echo "$as_me:9827: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dmalloc_dmalloc_debug=yes 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:8681: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 +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 <&5 +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 # Check whether --with-dbmalloc or --without-dbmalloc was given. if test "${with_dbmalloc+set}" = set; then withval="$with_dbmalloc" cat >>confdefs.h <&5 +echo "$as_me:9870: result: ${with_dbmalloc:-no}" >&5 echo "${ECHO_T}${with_dbmalloc:-no}" >&6 -case .$with_cflags in #(vi -.*-g*) - case .$CFLAGS in #(vi - .*-g*) #(vi +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 case $cf_fix_cppflags in -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi ;; esac ;; esac if test "$with_dbmalloc" = yes ; then - echo "$as_me:8807: checking for dbmalloc.h" >&5 + 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 8813 "configure" +#line 9990 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:8817: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:9994: \"$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:8823: \$? = $ac_status" >&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:8842: result: $ac_cv_header_dbmalloc_h" >&5 +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:8846: checking for debug_malloc in -ldbmalloc" >&5 +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 8854 "configure" +#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 () +main (void) { debug_malloc (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:8873: \"$ac_link\"") >&5 +if { (eval echo "$as_me:10050: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:8876: \$? = $ac_status" >&5 + echo "$as_me:10053: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:8879: \"$ac_try\"") >&5 + { (eval echo "$as_me:10056: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:8882: \$? = $ac_status" >&5 + echo "$as_me:10059: \$? = $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 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:8893: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 +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 <&5 +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 # Check whether --with-purify or --without-purify was given. if test "${with_purify+set}" = set; then withval="$with_purify" cat >>confdefs.h <&5 +echo "$as_me:10102: result: ${with_purify:-no}" >&5 echo "${ECHO_T}${with_purify:-no}" >&6 -case .$with_cflags in #(vi -.*-g*) - case .$CFLAGS in #(vi - .*-g*) #(vi +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 case $cf_fix_cppflags in -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi ;; esac ;; esac -echo "$as_me:9018: checking if you want to use valgrind for testing" >&5 +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 # Check whether --with-valgrind or --without-valgrind was given. if test "${with_valgrind+set}" = set; then withval="$with_valgrind" cat >>confdefs.h <&5 +echo "$as_me:10232: result: ${with_valgrind:-no}" >&5 echo "${ECHO_T}${with_valgrind:-no}" >&6 -case .$with_cflags in #(vi -.*-g*) - case .$CFLAGS in #(vi - .*-g*) #(vi +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 case $cf_fix_cppflags in -no) - case $cf_add_cflags in #(vi - -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi +(no) + case $cf_add_cflags in + (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in - -D*) + (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` - test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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 - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + 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) #(vi + (*$cf_add_cflags) ;; - *) #(vi - case $cf_add_cflags in #(vi - -D*) + (*) + 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 - cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + + test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " + cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" + ;; esac ;; - *) - cf_new_cflags="$cf_new_cflags $cf_add_cflags" + (*) + + test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" + ;; esac ;; -yes) - cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" +(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 "${cf_add_cflags}" != "${cf_tst_cflags}" \ + 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 - CFLAGS="$CFLAGS $cf_new_cflags" + test -n "$CFLAGS" && CFLAGS="$CFLAGS " + CFLAGS="${CFLAGS}$cf_new_cflags" + fi if test -n "$cf_new_cppflags" ; then - CPPFLAGS="$CPPFLAGS $cf_new_cppflags" + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" + fi if test -n "$cf_new_extra_cppflags" ; then - EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" + test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " + EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" + fi ;; esac ;; esac -echo "$as_me:9128: checking if you want to perform memory-leak testing" >&5 +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 # Check whether --with-no-leaks or --without-no-leaks was given. if test "${with_no_leaks+set}" = set; then withval="$with_no_leaks" cat >>confdefs.h <<\EOF #define NO_LEAKS 1 EOF cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}" - case ${cf_doalloc} in #(vi - *yes*) ;; - *) + 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:9152: result: $with_no_leaks" >&5 +echo "$as_me:10369: result: $with_no_leaks" >&5 echo "${ECHO_T}$with_no_leaks" >&6 -echo "$as_me:9155: checking if you want --trace option" >&5 +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" else enableval=yes fi; -echo "$as_me:9165: result: $enableval" >&5 +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 else : fi LD_RPATH_OPT= -echo "$as_me:9179: checking for an rpath option" >&5 +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 #(vi -irix*) #(vi +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) #(vi +(linux*|gnu*|k*bsd*-gnu|freebsd*) LD_RPATH_OPT="-Wl,-rpath," ;; -openbsd[2-9].*|mirbsd*) #(vi +(openbsd[2-9].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; -dragonfly*|freebsd*) #(vi +(dragonfly*) LD_RPATH_OPT="-rpath " ;; -netbsd*) #(vi +(netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; -osf*|mls+*) #(vi +(osf*|mls+*) LD_RPATH_OPT="-rpath " ;; -solaris2*) #(vi +(solaris2*) LD_RPATH_OPT="-R" ;; -*) +(*) ;; esac -echo "$as_me:9210: result: $LD_RPATH_OPT" >&5 +echo "$as_me:10427: result: $LD_RPATH_OPT" >&5 echo "${ECHO_T}$LD_RPATH_OPT" >&6 -case "x$LD_RPATH_OPT" in #(vi -x-R*) - echo "$as_me:9215: checking if we need a space after rpath option" >&5 +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" - LIBS="${LD_RPATH_OPT}$libdir $LIBS" + +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" + cat >conftest.$ac_ext <<_ACEOF -#line 9220 "configure" +#line 10453 "configure" #include "confdefs.h" int -main () +main (void) { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:9232: \"$ac_link\"") >&5 +if { (eval echo "$as_me:10465: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:9235: \$? = $ac_status" >&5 + echo "$as_me:10468: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:9238: \"$ac_try\"") >&5 + { (eval echo "$as_me:10471: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9241: \$? = $ac_status" >&5 + 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:9251: result: $cf_rpath_space" >&5 + 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 REL_VERSION=${VERSION_MAJOR}.${VERSION_MINOR} ABI_VERSION=`echo "$VERSION" |sed -e 's/:/./g'` cf_cv_rel_version=$REL_VERSION test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0 # 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:9266: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5 + { 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; DIALOG_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'` DIALOG_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'` if test -n "$DIALOG_MAJOR" ; then - case $DIALOG_MAJOR in #(vi - [0-9]*) #(vi + case $DIALOG_MAJOR in + ([0-9]*) ;; - *) - { { echo "$as_me:9279: error: Release major-version is not a number: $DIALOG_MAJOR" >&5 + (*) + { { 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:9285: error: Release major-version value is empty" >&5 + { { 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 -n "$DIALOG_MINOR" ; then - case $DIALOG_MINOR in #(vi - [0-9]*) #(vi + case $DIALOG_MINOR in + ([0-9]*) ;; - *) - { { echo "$as_me:9295: error: Release minor-version is not a number: $DIALOG_MINOR" >&5 + (*) + { { 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 else - { { echo "$as_me:9301: error: Release minor-version value is empty" >&5 + { { 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; }; } fi test -z "$cf_cv_abi_version" && cf_cv_abi_version=0 # Check whether --with-abi-version or --without-abi-version was given. if test "${with_abi_version+set}" = set; then withval="$with_abi_version" - { echo "$as_me:9311: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5 + + 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;} - cf_cv_abi_version=$withval + 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; if test -n "$cf_cv_abi_version" ; then - case $cf_cv_abi_version in #(vi - [0-9]*) #(vi + case $cf_cv_abi_version in + ([0-9]*) ;; - *) - { { echo "$as_me:9321: error: ABI version is not a number: $cf_cv_abi_version" >&5 + (*) + { { 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 else - { { echo "$as_me:9327: error: ABI version value is empty" >&5 + { { 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; }; } 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="#" -echo "$as_me:9341: checking if libtool -version-number should be used" >&5 +shlibdir=$libdir + +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 # 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 + if test "$enableval" != "yes" ; then cf_libtool_version=no - else - cf_libtool_version=yes - fi + else + cf_libtool_version=yes + fi else enableval=yes - cf_libtool_version=yes + cf_libtool_version=yes fi; -echo "$as_me:9358: result: $cf_libtool_version" >&5 +echo "$as_me:10606: result: $cf_libtool_version" >&5 echo "${ECHO_T}$cf_libtool_version" >&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: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 + +echo "${as_me:-configure}:10622: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 + + ;; + (x*:*:*) + ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'` + test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 + +echo "${as_me:-configure}:10629: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 + + ;; + (*) + { echo "$as_me:10633: WARNING: unexpected VERSION value: $VERSION" >&5 +echo "$as_me: WARNING: unexpected VERSION value: $VERSION" >&2;} + ;; + esac fi 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= -echo "$as_me:9383: checking if you want to build libraries with libtool" >&5 +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 # 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:9393: result: $with_libtool" >&5 +echo "$as_me:10665: result: $with_libtool" >&5 echo "${ECHO_T}$with_libtool" >&6 if test "$with_libtool" != "no"; then if test "$with_libtool" != "yes" ; then if test "x$prefix" != xNONE; then - cf_path_syntax="$prefix" + cf_path_syntax="$prefix" else - cf_path_syntax="$ac_default_prefix" + cf_path_syntax="$ac_default_prefix" fi -case ".$with_libtool" in #(vi -.\$\(*\)*|.\'*\'*) #(vi - ;; -..|./*|.\\*) #(vi - ;; -.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX - ;; -.\${*prefix}*|.\${*dir}*) #(vi - eval with_libtool="$with_libtool" - case ".$with_libtool" in #(vi - .NONE/*) - with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` - ;; - esac - ;; #(vi -.no|.NONE/*) - with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` - ;; -*) - { { echo "$as_me:9424: error: expected a pathname, not \"$with_libtool\"" >&5 +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 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:9437: checking for $ac_word" >&5 +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 $ECHO_N "(cached) $ECHO_C" >&6 else 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:9452: found $ac_dir/$ac_word" >&5 +echo "$as_me:10724: found $ac_dir/$ac_word" >&5 break done fi fi LIBTOOL=$ac_cv_prog_LIBTOOL if test -n "$LIBTOOL"; then - echo "$as_me:9460: result: $LIBTOOL" >&5 + echo "$as_me:10732: result: $LIBTOOL" >&5 echo "${ECHO_T}$LIBTOOL" >&6 else - echo "$as_me:9463: result: no" >&5 + echo "$as_me:10735: 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:9476: checking for $ac_word" >&5 +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:9491: found $ac_dir/$ac_word" >&5 +echo "$as_me:10763: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL if test -n "$ac_ct_LIBTOOL"; then - echo "$as_me:9499: result: $ac_ct_LIBTOOL" >&5 + echo "$as_me:10771: result: $ac_ct_LIBTOOL" >&5 echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 else - echo "$as_me:9502: result: no" >&5 + echo "$as_me:10774: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_LIBTOOL" && break done test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" 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 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:9533: checking for $ac_word" >&5 +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else 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:9548: found $ac_dir/$ac_word" >&5 +echo "$as_me:10820: found $ac_dir/$ac_word" >&5 break done fi fi LIBTOOL=$ac_cv_prog_LIBTOOL if test -n "$LIBTOOL"; then - echo "$as_me:9556: result: $LIBTOOL" >&5 + echo "$as_me:10828: result: $LIBTOOL" >&5 echo "${ECHO_T}$LIBTOOL" >&6 else - echo "$as_me:9559: result: no" >&5 + echo "$as_me:10831: 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 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:9572: checking for $ac_word" >&5 +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 $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:9587: found $ac_dir/$ac_word" >&5 +echo "$as_me:10859: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL if test -n "$ac_ct_LIBTOOL"; then - echo "$as_me:9595: result: $ac_ct_LIBTOOL" >&5 + echo "$as_me:10867: result: $ac_ct_LIBTOOL" >&5 echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 else - echo "$as_me:9598: result: no" >&5 + echo "$as_me:10870: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_LIBTOOL" && break done test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" 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:9620: error: Cannot find libtool" >&5 + { { 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 ${DESTDIR}${libdir} ${LIBTOOL_VERSION} `cut -f1 ${srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' + 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:9636: checking version of $LIBTOOL" >&5 + 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:9647: result: $cf_cv_libtool_version" >&5 + 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:9650: error: This is not GNU libtool" >&5 + { { 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:9655: error: GNU libtool has not been found" >&5 + { { 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 #(vi - cygwin*|msys*|mingw32*|uwin*|aix[4-7]) #(vi + 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 #(vi - 1.[5-9]*|[2-9].[0-9.a-z]*) #(vi + 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 \$@" if test "$with_libtool" = "yes" ; then OBJEXT="lo" LIB_MODEL=libtool DFT_LWR_MODEL=$LIB_MODEL LIBTOOL_MAKE= -echo "$as_me:9693: checking for additional libtool options" >&5 +echo "$as_me:10965: 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 with_libtool_opts=no fi; -echo "$as_me:9703: result: $with_libtool_opts" >&5 +echo "$as_me:10975: result: $with_libtool_opts" >&5 echo "${ECHO_T}$with_libtool_opts" >&6 case .$with_libtool_opts in -.yes|.no|.) +(.yes|.no|.) ;; -*) - LIBTOOL_OPTS=$with_libtool_opts +(*) + LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" ;; esac +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 + +# 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' + +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" + +fi + MAKE_NORMAL="#" MAKE_STATIC="#" MAKE_SHARED= else - echo "$as_me:9718: checking if you want to build shared libraries" >&5 + 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 # 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:9728: result: $with_shared" >&5 + 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 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:9745: checking if release/abi version should be used for shared libs" >&5 + 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 # 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 #(vi - yes) #(vi + case $withval in + (yes) cf_cv_shlib_version=auto ;; - rel|abi|auto|no) #(vi + (rel|abi|auto) cf_cv_shlib_version=$withval ;; - *) - { { echo "$as_me:9760: error: option value must be one of: rel, abi, auto or no" >&5 -echo "$as_me: error: option value must be one of: rel, abi, auto or no" >&2;} + (*) + 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; }; } ;; esac else cf_cv_shlib_version=auto fi; - echo "$as_me:9769: result: $cf_cv_shlib_version" >&5 + echo "$as_me:11070: 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 - echo "$as_me:9779: checking which $CC option to use" >&5 + 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: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 9786 "configure" +#line 11100 "configure" #include "confdefs.h" #include int -main () +main (void) { int x = 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:9798: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:11112: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:9801: \$? = $ac_status" >&5 + echo "$as_me:11115: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:9804: \"$ac_try\"") >&5 + { (eval echo "$as_me:11118: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9807: \$? = $ac_status" >&5 + 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:9816: result: $CC_SHARED_OPTS" >&5 + 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 - case $cf_cv_system_name in #(vi - aix4.3-9*|aix[5-7]*) #(vi + case $cf_cv_system_name in + (aix4.3-9*|aix[5-7]*) if test "$GCC" = yes; then - CC_SHARED_OPTS= - MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' + 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='-qpic=large -G' - # perhaps "-bM:SRE -bnoentry -bexpall" - MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' + 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*) #(vi - MK_SHARED_LIB='${CC} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0' + (beos*) + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0' ;; - cygwin*) #(vi + (cygwin*) CC_SHARED_OPTS= - MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' + 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 - #!/bin/sh + #!$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 \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} + exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; - msys*) #(vi + (msys*) CC_SHARED_OPTS= - MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' + 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 - #!/bin/sh + #!$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 \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} + exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; - darwin*) #(vi + (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" - MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@' + 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:9883: checking if ld -search_paths_first works" >&5 + 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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat >conftest.$ac_ext <<_ACEOF -#line 9892 "configure" +#line 11210 "configure" #include "confdefs.h" int -main () +main (void) { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:9904: \"$ac_link\"") >&5 +if { (eval echo "$as_me:11222: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:9907: \$? = $ac_status" >&5 + echo "$as_me:11225: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:9910: \"$ac_try\"") >&5 + { (eval echo "$as_me:11228: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:9913: \$? = $ac_status" >&5 + echo "$as_me:11231: \$? = $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:9924: result: $cf_cv_ldflags_search_paths_first" >&5 +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]*) #(vi + (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} -b -o $@' + MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $@' INSTALL_LIB="-m 555" ;; - hpux*) #(vi + (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} +b ${libdir} -b -o $@' + 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*) + (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}' + cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else - cf_shared_soname='`basename `' + cf_shared_soname='`basename $@`' fi CC_SHARED_OPTS= - MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o ' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@' ;; - irix*) #(vi + (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} -shared -rdata_shared -soname `basename $@` -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $@` -o $@' else - MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $@` -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $@` -o $@' fi cf_cv_rm_so_locs=yes ;; - linux*|gnu*|k*bsd*-gnu) #(vi + (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 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} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; - mingw*) #(vi + (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='sh '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' + 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 - #!/bin/sh + #!$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 \$* -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} + 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*) #(vi + (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" 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} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; - nto-qnx*|openbsd*|freebsd[12].*) #(vi + (nto-qnx*|openbsd*|freebsd[12].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" - MK_SHARED_LIB='${LD} -Bshareable -o $@' + MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; - dragonfly*|freebsd*) #(vi + (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='${LD} -shared -Bshareable -soname=`basename $@` -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; - netbsd*) #(vi + (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} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@' else - MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -Wl,-shared -Wl,-Bshareable -o $@' fi ;; - osf*|mls+*) #(vi + (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} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`' - case $host_os in #(vi - osf4*) + 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 + (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} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@' + 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*) #(vi + (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} -assert pure-text -o $@' + MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; - solaris2*) #(vi + (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 10147 "configure" +#line 11467 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello\n"); ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:10159: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:11479: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:10162: \$? = $ac_status" >&5 + echo "$as_me:11482: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:10165: \"$ac_try\"") >&5 + { (eval echo "$as_me:11485: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10168: \$? = $ac_status" >&5 + echo "$as_me:11488: \$? = $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} -dy -G -h '$cf_cv_shared_soname' -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $@' else - MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $@' + MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $@' fi ;; - sysv5uw7*|unix_sv*) #(vi + (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} -d y -G -o $@' + 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 #(vi - rel|abi) - case "$MK_SHARED_LIB" in #(vi - *'-o $@') #(vi + 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:10205: WARNING: ignored --with-shlib-version" >&5 + (*) + { echo "$as_me:11525: 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 < 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:10227: checking if CFLAGS option -$cf_opt works" >&5 + 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:10229: \"$ac_compile\"") >&5 + if { (eval echo "$as_me:11549: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:10232: \$? = $ac_status" >&5 + echo "$as_me:11552: \$? = $ac_status" >&5 (exit $ac_status); }; then - echo "$as_me:10234: result: yes" >&5 + echo "$as_me:11554: result: yes" >&5 echo "${ECHO_T}yes" >&6 cf_save_CFLAGS="$CFLAGS" else - echo "$as_me:10238: result: no" >&5 + echo "$as_me:11558: 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}:10253: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5 +echo "${as_me:-configure}:11573: 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}:10257: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 +echo "${as_me:-configure}:11577: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 +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 + +# 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' + +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 "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}:11610: 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}:11618: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 + + ;; + (*) + { 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 + + # make sources + rm -f conftest.* + + cat >conftest.ver <conftest.$ac_ext <conftest.mk <&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 + 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 #(vi - Xlibtool) #(vi + case X$LIB_MODEL in + (Xlibtool) DFT_LIB_SUFFIX='.la' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; - Xdebug) #(vi + (Xdebug) DFT_LIB_SUFFIX='_g.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; - Xprofile) #(vi + (Xprofile) DFT_LIB_SUFFIX='_p.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; - Xshared) #(vi + (Xshared) case $cf_cv_system_name in - aix[5-7]*) #(vi - DFT_LIB_SUFFIX='.a' + (aix[5-7]*) + DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; - cygwin*|msys*|mingw*) #(vi + (cygwin*|msys*|mingw*) DFT_LIB_SUFFIX='.dll' DFT_DEP_SUFFIX='.dll.a' ;; - darwin*) #(vi + (darwin*) DFT_LIB_SUFFIX='.dylib' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; - hpux*) #(vi + (hpux*) case $target in - ia64*) #(vi + (ia64*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; - *) #(vi + (*) DFT_LIB_SUFFIX='.sl' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac ;; - *) #(vi + (*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac ;; - *) + (*) DFT_LIB_SUFFIX='.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac - test -n "$LIB_SUFFIX" && DFT_LIB_SUFFIX="${LIB_SUFFIX}${DFT_LIB_SUFFIX}" - test -n "$LIB_SUFFIX" && DFT_DEP_SUFFIX="${LIB_SUFFIX}${DFT_DEP_SUFFIX}" + 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 LIB_SUFFIX=$DFT_LIB_SUFFIX -echo "$as_me:10325: checking for specific curses-directory" >&5 +echo "$as_me:11777: 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:10335: result: $cf_cv_curses_dir" >&5 +echo "$as_me:11787: 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" + cf_path_syntax="$prefix" else - cf_path_syntax="$ac_default_prefix" + cf_path_syntax="$ac_default_prefix" fi -case ".$withval" in #(vi -.\$\(*\)*|.\'*\'*) #(vi - ;; -..|./*|.\\*) #(vi - ;; -.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX - ;; -.\${*prefix}*|.\${*dir}*) #(vi - eval withval="$withval" - case ".$withval" in #(vi - .NONE/*) - withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` - ;; - esac - ;; #(vi -.no|.NONE/*) - withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` - ;; -*) - { { echo "$as_me:10366: error: expected a pathname, not \"$withval\"" >&5 +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 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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF -#line 10399 "configure" +#line 11854 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:10411: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:11866: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:10414: \$? = $ac_status" >&5 + echo "$as_me:11869: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:10417: \"$ac_try\"") >&5 + { (eval echo "$as_me:11872: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10420: \$? = $ac_status" >&5 + echo "$as_me:11875: \$? = $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}:10437: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:11892: 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 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 + 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}:10471: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:11928: testing adding $cf_add_libdir to library-path ..." 1>&5 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done fi fi fi -echo "$as_me:10482: checking if rpath option should be used" >&5 +echo "$as_me:11939: 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:10492: result: $cf_cv_enable_rpath" >&5 +echo "$as_me:11949: result: $cf_cv_enable_rpath" >&5 echo "${ECHO_T}$cf_cv_enable_rpath" >&6 -use_ncurses=no +echo "$as_me:11952: checking for specific curses-directory" >&5 +echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 -# Check whether --with-ncurses or --without-ncurses was given. -if test "${with_ncurses+set}" = set; then - withval="$with_ncurses" - use_ncurses=ncurses +# 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" ) +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:11993: 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 + + 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" +#include "confdefs.h" +#include +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 + 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12050: \$? = $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}:12067: 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 + +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 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + fi +fi + +cf_cv_screen=curses + +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-screen or --without-screen was given. +if test "${with_screen+set}" = set; then + withval="$with_screen" + cf_cv_screen=$withval +else + # Check whether --with-ncursesw or --without-ncursesw was given. if test "${with_ncursesw+set}" = set; then withval="$with_ncursesw" - use_ncurses=ncursesw + cf_cv_screen=ncursesw +else + +# Check whether --with-ncurses or --without-ncurses was given. +if test "${with_ncurses+set}" = set; then + withval="$with_ncurses" + cf_cv_screen=ncurses +else + +# Check whether --with-pdcurses or --without-pdcurses was given. +if test "${with_pdcurses+set}" = set; then + withval="$with_pdcurses" + cf_cv_screen=pdcurses +else + +# 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 + +# 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; -if test $use_ncurses != no ; then - cf_wide_curses=yes - if test $use_ncurses = ncursesw ; then +fi; +fi; +fi; +fi; +fi; -echo "$as_me:10512: checking for multibyte character support" >&5 +echo "$as_me:12160: result: $cf_cv_screen" >&5 +echo "${ECHO_T}$cf_cv_screen" >&6 + +case $cf_cv_screen in +(curses|curses_*) + +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 + +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 + +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" + +fi + +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 + +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 +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:12246: 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:12250: error: No curses header-files found" >&5 +echo "$as_me: error: No curses header-files found" >&2;} + { (exit 1); exit 1; }; } +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 +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: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 <&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 +(*/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 12323 "configure" +#include "confdefs.h" +#include +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> + +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 + + cf_cv_term_header="$cf_test" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cf_cv_term_header=unknown + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + test "$cf_cv_term_header" != unknown && break +done + +fi +echo "$as_me:12363: 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 + + ;; +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 + +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 +else + + 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 < +#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 + +else + cat >conftest.$ac_ext <<_ACEOF +#line 12434 "configure" +#include "confdefs.h" + +#include <${cf_cv_ncurses_header:-curses.h}> +#include +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 + + 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: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 +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 + +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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmytinfo $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 12535 "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:12554: \"$ac_link\"") >&5 + (eval $ac_link) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12563: \$? = $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_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: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 + +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" + 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 + + ;; +(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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcur_colr $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 12612 "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: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 +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 +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 + 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" + + ac_cv_func_initscr=yes + +else + + 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" +#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:12702: \"$ac_link\"") >&5 + (eval $ac_link) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12711: \$? = $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 +ac_cv_lib_Hcurses_initscr=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +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 + 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" + + ac_cv_func_initscr=yes + +fi + +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 + 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}:12780: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + else + +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}:12809: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + fi + ;; + (*) + +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}:12840: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + 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 + 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}:12875: 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 + +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 + 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 +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 +/* 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 +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 +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 +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" +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 + +fi + + done + +fi + + 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 + 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 +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 +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" +#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:13138: \"$ac_link\"") >&5 + (eval $ac_link) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13147: \$? = $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=error +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +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;} + { (exit 1); exit 1; }; } +fi +fi + + ;; +(ncursesw*) + +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 10520 "configure" +#line 13182 "configure" #include "confdefs.h" #include int -main () +main (void) { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:10533: \"$ac_link\"") >&5 +if { (eval echo "$as_me:13195: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:10536: \$? = $ac_status" >&5 + echo "$as_me:13198: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:10539: \"$ac_try\"") >&5 + { (eval echo "$as_me:13201: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10542: \$? = $ac_status" >&5 + echo "$as_me:13204: \$? = $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 # 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}:10554: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 +echo "${as_me:-configure}:13216: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 10559 "configure" +#line 13221 "configure" #include "confdefs.h" #include int -main () +main (void) { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:10572: \"$ac_link\"") >&5 +if { (eval echo "$as_me:13234: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:10575: \$? = $ac_status" >&5 + echo "$as_me:13237: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:10578: \"$ac_try\"") >&5 + { (eval echo "$as_me:13240: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10581: \$? = $ac_status" >&5 + echo "$as_me:13243: \$? = $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 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-lutf8 $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 10595 "configure" +#line 13257 "configure" #include "confdefs.h" #include int -main () +main (void) { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:10608: \"$ac_link\"") >&5 +if { (eval echo "$as_me:13270: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:10611: \$? = $ac_status" >&5 + echo "$as_me:13273: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:10614: \"$ac_try\"") >&5 + { (eval echo "$as_me:13276: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10617: \$? = $ac_status" >&5 + 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" 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 + test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 -echo "${as_me:-configure}:10634: testing find linkage for utf8 library ..." 1>&5 +echo "${as_me:-configure}:13296: testing find linkage for utf8 library ..." 1>&5 -echo "${as_me:-configure}:10636: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 +echo "${as_me:-configure}:13298: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 - cf_save_CPPFLAGS="$CPPFLAGS" - cf_test_CPPFLAGS="$CPPFLAGS" + 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 #(vi - -I*) + case $cf_header_path in + (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` -test "$cf_header_path" != "NONE" && \ +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" } 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 "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr" - test -d /usr/include && cf_search="$cf_search /usr/include" - test -d /usr/include/utf8 && cf_search="$cf_search /usr/include/utf8" - test -d /usr/include/utf8/include && cf_search="$cf_search /usr/include/utf8/include" - test -d /usr/utf8/include && cf_search="$cf_search /usr/utf8/include" - test -d /usr/utf8/include/utf8 && cf_search="$cf_search /usr/utf8/include/utf8" -} - -test "$prefix" != "NONE" && \ +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" } -test "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr/local" - test -d /usr/local/include && cf_search="$cf_search /usr/local/include" - test -d /usr/local/include/utf8 && cf_search="$cf_search /usr/local/include/utf8" - test -d /usr/local/include/utf8/include && cf_search="$cf_search /usr/local/include/utf8/include" - test -d /usr/local/utf8/include && cf_search="$cf_search /usr/local/utf8/include" - test -d /usr/local/utf8/include/utf8 && cf_search="$cf_search /usr/local/utf8/include/utf8" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /opt" - test -d /opt/include && cf_search="$cf_search /opt/include" - test -d /opt/include/utf8 && cf_search="$cf_search /opt/include/utf8" - test -d /opt/include/utf8/include && cf_search="$cf_search /opt/include/utf8/include" - test -d /opt/utf8/include && cf_search="$cf_search /opt/utf8/include" - test -d /opt/utf8/include/utf8 && cf_search="$cf_search /opt/utf8/include/utf8" +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" } -test "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $HOME" - test -d $HOME/include && cf_search="$cf_search $HOME/include" - test -d $HOME/include/utf8 && cf_search="$cf_search $HOME/include/utf8" - test -d $HOME/include/utf8/include && cf_search="$cf_search $HOME/include/utf8/include" - test -d $HOME/utf8/include && cf_search="$cf_search $HOME/utf8/include" - test -d $HOME/utf8/include/utf8 && cf_search="$cf_search $HOME/utf8/include/utf8" -} +done 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" } 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_search="$cf_search $cf_header_path_list" - 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 + 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 -echo "${as_me:-configure}:10749: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 +echo "${as_me:-configure}:13389: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 - CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_utf8" - cat >conftest.$ac_ext <<_ACEOF -#line 10753 "configure" + CPPFLAGS="$cf_save_CPPFLAGS" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_utf8" + + cat >conftest.$ac_ext <<_ACEOF +#line 13397 "configure" #include "confdefs.h" #include int -main () +main (void) { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:10766: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:13410: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:10769: \$? = $ac_status" >&5 + echo "$as_me:13413: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:10772: \"$ac_try\"") >&5 + { (eval echo "$as_me:13416: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10775: \$? = $ac_status" >&5 + 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 + test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 -echo "${as_me:-configure}:10780: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 +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 + cf_cv_find_linkage_utf8=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 - CPPFLAGS="$cf_save_CPPFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext - fi - done + fi + done - if test "$cf_cv_find_linkage_utf8" = maybe ; then + if test "$cf_cv_find_linkage_utf8" = maybe ; then -echo "${as_me:-configure}:10798: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 +echo "${as_me:-configure}:13442: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 - cf_save_LIBS="$LIBS" - cf_save_LDFLAGS="$LDFLAGS" + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" - if test "$cf_cv_find_linkage_utf8" != yes ; then + 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 #(vi - -L*) + case $cf_library_path in + (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -test "$cf_library_path" != "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/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 cf_search= -test "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr" - test -d /usr/lib && cf_search="$cf_search /usr/lib" - test -d /usr/lib/utf8 && cf_search="$cf_search /usr/lib/utf8" - test -d /usr/lib/utf8/lib && cf_search="$cf_search /usr/lib/utf8/lib" - test -d /usr/utf8/lib && cf_search="$cf_search /usr/utf8/lib" - test -d /usr/utf8/lib/utf8 && cf_search="$cf_search /usr/utf8/lib/utf8" -} - -test "$prefix" != "NONE" && \ +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" } -test "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" - test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" - test -d /usr/local/lib/utf8 && cf_search="$cf_search /usr/local/lib/utf8" - test -d /usr/local/lib/utf8/lib && cf_search="$cf_search /usr/local/lib/utf8/lib" - test -d /usr/local/utf8/lib && cf_search="$cf_search /usr/local/utf8/lib" - test -d /usr/local/utf8/lib/utf8 && cf_search="$cf_search /usr/local/utf8/lib/utf8" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /opt" - test -d /opt/lib && cf_search="$cf_search /opt/lib" - test -d /opt/lib/utf8 && cf_search="$cf_search /opt/lib/utf8" - test -d /opt/lib/utf8/lib && cf_search="$cf_search /opt/lib/utf8/lib" - test -d /opt/utf8/lib && cf_search="$cf_search /opt/utf8/lib" - test -d /opt/utf8/lib/utf8 && cf_search="$cf_search /opt/utf8/lib/utf8" +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" } -test "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $HOME" - test -d $HOME/lib && cf_search="$cf_search $HOME/lib" - test -d $HOME/lib/utf8 && cf_search="$cf_search $HOME/lib/utf8" - test -d $HOME/lib/utf8/lib && cf_search="$cf_search $HOME/lib/utf8/lib" - test -d $HOME/utf8/lib && cf_search="$cf_search $HOME/utf8/lib" - test -d $HOME/utf8/lib/utf8 && cf_search="$cf_search $HOME/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 + 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}:10895: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 +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 10901 "configure" + 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" #include "confdefs.h" #include int -main () +main (void) { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:10914: \"$ac_link\"") >&5 +if { (eval echo "$as_me:13536: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:10917: \$? = $ac_status" >&5 + echo "$as_me:13539: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:10920: \"$ac_try\"") >&5 + { (eval echo "$as_me:13542: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:10923: \$? = $ac_status" >&5 + 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 + test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 -echo "${as_me:-configure}:10928: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 +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 + 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 - CPPFLAGS="$cf_save_CPPFLAGS" - LIBS="$cf_save_LIBS" - LDFLAGS="$cf_save_LDFLAGS" + 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 + fi + done + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi - else - cf_cv_find_linkage_utf8=no - fi + else + cf_cv_find_linkage_utf8=no + fi fi rm -f conftest.$ac_objext conftest$ac_exeext 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_utf8" = yes ; then cf_cv_utf8_lib=add-on else cf_cv_utf8_lib=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:10970: result: $cf_cv_utf8_lib" >&5 +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 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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF -#line 11005 "configure" +#line 13630 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:11017: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:13642: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11020: \$? = $ac_status" >&5 + echo "$as_me:13645: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11023: \"$ac_try\"") >&5 + { (eval echo "$as_me:13648: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11026: \$? = $ac_status" >&5 + echo "$as_me:13651: \$? = $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}:11043: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:13668: 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 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 + 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}:11077: testing adding $cf_add_libdir to library-path ..." 1>&5 +echo "${as_me:-configure}:13704: testing adding $cf_add_libdir to library-path ..." 1>&5 - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done fi - LIBS="$cf_cv_library_file_utf8 $LIBS" +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 + 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 +cf_ncuconfig_root=$cf_cv_screen +cf_have_ncuconfig=no -cf_ncuconfig_root=$use_ncurses +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 "Looking for ${cf_ncuconfig_root}-config" + 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 + + 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 + +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" + + cat >conftest.$ac_ext <<_ACEOF +#line 13862 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:13874: \"$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 + (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 +else + cat >conftest.$ac_ext <<_ACEOF +#line 13889 "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:13896: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13904: \$? = $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 +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: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 + +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + + NCURSES_CONFIG_PKG=$cf_ncuconfig_root + +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 $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" +#include "confdefs.h" +#include +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> + +int +main (void) +{ +int x = auto_left_margin + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:13970: \"$ac_compile\"") >&5 + (eval $ac_compile) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13979: \$? = $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_term_header=unknown + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + test "$cf_cv_term_header" != unknown && break +done + +fi +echo "$as_me:13995: 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 + + ;; +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 + + fi + + else + echo "$as_me:14030: 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_ncuconfig_root}6-config ${cf_ncuconfig_root}5-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_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:11099: checking for $ac_word" >&5 +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:11114: found $ac_dir/$ac_word" >&5 +echo "$as_me:14061: 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:11122: result: $NCURSES_CONFIG" >&5 + echo "$as_me:14069: result: $NCURSES_CONFIG" >&5 echo "${ECHO_T}$NCURSES_CONFIG" >&6 else - echo "$as_me:11125: result: no" >&5 + echo "$as_me:14072: 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_ncuconfig_root}6-config ${cf_ncuconfig_root}5-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:11138: checking for $ac_word" >&5 +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:11153: found $ac_dir/$ac_word" >&5 +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:11161: result: $ac_ct_NCURSES_CONFIG" >&5 + echo "$as_me:14108: result: $ac_ct_NCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else - echo "$as_me:11164: result: no" >&5 + echo "$as_me:14111: 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 + if test "$NCURSES_CONFIG" != none ; then -CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" -LIBS="`$NCURSES_CONFIG --libs` $LIBS" +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= -# even with config script, some packages use no-override for curses.h +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[^=]*='\''\"[^"]*//'` -echo "$as_me:11182: checking if we have identified curses headers" >&5 + 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 + +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 + +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 cf_cv_ncurses_header=none -for cf_header in \ - $use_ncurses/ncurses.h \ - $use_ncurses/curses.h \ - ncurses.h \ - curses.h +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 11196 "configure" +#line 14252 "configure" #include "confdefs.h" #include <${cf_header}> int -main () +main (void) { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:11208: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14264: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11211: \$? = $ac_status" >&5 + echo "$as_me:14267: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11214: \"$ac_try\"") >&5 + { (eval echo "$as_me:14270: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11217: \$? = $ac_status" >&5 + echo "$as_me:14273: \$? = $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 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi -echo "$as_me:11228: result: $cf_cv_ncurses_header" >&5 +echo "$as_me:14284: 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:11232: error: No curses header-files found" >&5 + { { 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 # 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:11242: checking for $ac_header" >&5 +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 11248 "configure" +#line 14304 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:11252: \"$ac_cpp conftest.$ac_ext\"") >&5 +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:11258: \$? = $ac_status" >&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 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:11277: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 <>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` -cat >>confdefs.h <>confdefs.h <conftest.$ac_ext <<_ACEOF -#line 11330 "configure" +#line 14389 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:11342: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14401: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11345: \$? = $ac_status" >&5 + echo "$as_me:14404: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11348: \"$ac_try\"") >&5 + { (eval echo "$as_me:14407: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11351: \$? = $ac_status" >&5 + echo "$as_me:14410: \$? = $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}:11368: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:14427: 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:11385: checking for $cf_ncuhdr_root header in include-path" >&5 +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 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 11397 "configure" +#line 14458 "configure" #include "confdefs.h" #include <$cf_header> int -main () +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 -if { (eval echo "$as_me:11421: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14482: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11424: \$? = $ac_status" >&5 + echo "$as_me:14485: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11427: \"$ac_try\"") >&5 + { (eval echo "$as_me:14488: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11430: \$? = $ac_status" >&5 + echo "$as_me:14491: \$? = $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 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:11445: result: $cf_cv_ncurses_h" >&5 +echo "$as_me:14506: 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:11452: checking for $cf_ncuhdr_root include-path" >&5 +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 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 #(vi - -I*) + case $cf_header_path in + (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` -test "$cf_header_path" != "NONE" && \ +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 # add the variations for the package we are looking for cf_search= -test "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr" - test -d /usr/include && cf_search="$cf_search /usr/include" - test -d /usr/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/include/$cf_ncuhdr_root" - test -d /usr/include/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/include/$cf_ncuhdr_root/include" - test -d /usr/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/$cf_ncuhdr_root/include" - test -d /usr/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/$cf_ncuhdr_root/include/$cf_ncuhdr_root" -} - -test "$prefix" != "NONE" && \ +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 "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /usr/local" - test -d /usr/local/include && cf_search="$cf_search /usr/local/include" - test -d /usr/local/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/local/include/$cf_ncuhdr_root" - test -d /usr/local/include/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/local/include/$cf_ncuhdr_root/include" - test -d /usr/local/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/local/$cf_ncuhdr_root/include" - test -d /usr/local/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/local/$cf_ncuhdr_root/include/$cf_ncuhdr_root" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under /opt" - test -d /opt/include && cf_search="$cf_search /opt/include" - test -d /opt/include/$cf_ncuhdr_root && cf_search="$cf_search /opt/include/$cf_ncuhdr_root" - test -d /opt/include/$cf_ncuhdr_root/include && cf_search="$cf_search /opt/include/$cf_ncuhdr_root/include" - test -d /opt/$cf_ncuhdr_root/include && cf_search="$cf_search /opt/$cf_ncuhdr_root/include" - test -d /opt/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search /opt/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +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 "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for include-directories under $HOME" - test -d $HOME/include && cf_search="$cf_search $HOME/include" - test -d $HOME/include/$cf_ncuhdr_root && cf_search="$cf_search $HOME/include/$cf_ncuhdr_root" - test -d $HOME/include/$cf_ncuhdr_root/include && cf_search="$cf_search $HOME/include/$cf_ncuhdr_root/include" - test -d $HOME/$cf_ncuhdr_root/include && cf_search="$cf_search $HOME/$cf_ncuhdr_root/include" - test -d $HOME/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $HOME/$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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF -#line 11592 "configure" +#line 14634 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:11604: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14646: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11607: \$? = $ac_status" >&5 + echo "$as_me:14649: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11610: \"$ac_try\"") >&5 + { (eval echo "$as_me:14652: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11613: \$? = $ac_status" >&5 + 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 -echo "${as_me:-configure}:11630: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:14672: 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 11651 "configure" +#line 14695 "configure" #include "confdefs.h" #include <$cf_header> int -main () +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 -if { (eval echo "$as_me:11675: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14719: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11678: \$? = $ac_status" >&5 + echo "$as_me:14722: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11681: \"$ac_try\"") >&5 + { (eval echo "$as_me:14725: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11684: \$? = $ac_status" >&5 + echo "$as_me:14728: \$? = $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:11705: error: not found" >&5 + 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; }; } fi -echo "$as_me:11710: result: $cf_cv_ncurses_h2" >&5 +echo "$as_me:14754: result: $cf_cv_ncurses_h2" >&5 echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 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 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 - CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF -#line 11743 "configure" +#line 14790 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:11755: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14802: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11758: \$? = $ac_status" >&5 + echo "$as_me:14805: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11761: \"$ac_try\"") >&5 + { (eval echo "$as_me:14808: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11764: \$? = $ac_status" >&5 + echo "$as_me:14811: \$? = $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}:11781: testing adding $cf_add_incdir to include-path ..." 1>&5 +echo "${as_me:-configure}:14828: 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 # (vi -*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 # (vi -ncurses/curses.h|ncurses/ncurses.h) +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) +(ncursesw/curses.h|ncursesw/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_NCURSES_H 1 EOF ;; esac -echo "$as_me:11827: checking for terminfo header" >&5 +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else -case ${cf_cv_ncurses_header} in #(vi -*/ncurses.h|*/ncursesw.h) #(vi +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 11845 "configure" +#line 14894 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int -main () +main (void) { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:11860: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:14909: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:11863: \$? = $ac_status" >&5 + echo "$as_me:14912: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:11866: \"$ac_try\"") >&5 + { (eval echo "$as_me:14915: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11869: \$? = $ac_status" >&5 + echo "$as_me:14918: \$? = $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_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi -echo "$as_me:11885: result: $cf_cv_term_header" >&5 +echo "$as_me:14934: 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 # (vi -*term.h) +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 # (vi -ncurses/term.h) #(vi +case $cf_cv_term_header in +(ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; -ncursesw/term.h) +(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:11923: checking for ncurses version" >&5 +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 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 < #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:11949: \"$cf_try\"") >&5 + { (eval echo "$as_me:14998: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? - echo "$as_me:11952: \$? = $ac_status" >&5 + 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 else cat >conftest.$ac_ext <<_ACEOF -#line 11962 "configure" +#line 15011 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include -int main() +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:11987: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15036: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:11990: \$? = $ac_status" >&5 + echo "$as_me:15039: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:11992: \"$ac_try\"") >&5 + { (eval echo "$as_me:15041: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:11995: \$? = $ac_status" >&5 + echo "$as_me:15044: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 fi -echo "$as_me:12009: result: $cf_cv_ncurses_version" >&5 +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 -cf_nculib_root=$use_ncurses +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:12022: checking for Gpm_Open in -lgpm" >&5 +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 12030 "configure" +#line 15079 "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 Gpm_Open (); int -main () +main (void) { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12049: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15098: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12052: \$? = $ac_status" >&5 + echo "$as_me:15101: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12055: \"$ac_try\"") >&5 + { (eval echo "$as_me:15104: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12058: \$? = $ac_status" >&5 + 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:12069: result: $ac_cv_lib_gpm_Gpm_Open" >&5 +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:12072: checking for initscr in -lgpm" >&5 + 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 12080 "configure" +#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 () +main (void) { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12099: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15148: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12102: \$? = $ac_status" >&5 + echo "$as_me:15151: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12105: \"$ac_try\"") >&5 + { (eval echo "$as_me:15154: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12108: \$? = $ac_status" >&5 + 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:12119: result: $ac_cv_lib_gpm_initscr" >&5 +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 fi -case $host_os in #(vi -freebsd*) +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:12134: checking for tgoto in -lmytinfo" >&5 + 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 $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 12142 "configure" +#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 (); int -main () +main (void) { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12161: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15210: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12164: \$? = $ac_status" >&5 + echo "$as_me:15213: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12167: \"$ac_try\"") >&5 + { (eval echo "$as_me:15216: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12170: \$? = $ac_status" >&5 + echo "$as_me:15219: \$? = $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_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:12181: result: $ac_cv_lib_mytinfo_tgoto" >&5 +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" fi fi ;; esac -LIBS="$cf_ncurses_LIBS $LIBS" +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" if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then - LIBS="-l$cf_nculib_root $LIBS" + +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 eval 'cf_cv_have_lib_'$cf_nculib_root'=no' cf_libdir="" - echo "$as_me:12200: checking for initscr" >&5 + 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 12206 "configure" +#line 15285 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char initscr (); below. */ #include /* 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 () +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:12237: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15316: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12240: \$? = $ac_status" >&5 + echo "$as_me:15319: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12243: \"$ac_try\"") >&5 + { (eval echo "$as_me:15322: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12246: \$? = $ac_status" >&5 + echo "$as_me:15325: \$? = $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_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:12256: result: $ac_cv_func_initscr" >&5 +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' else cf_save_LIBS="$LIBS" - echo "$as_me:12263: checking for initscr in -l$cf_nculib_root" >&5 + 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 12267 "configure" +#line 15346 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12279: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15358: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12282: \$? = $ac_status" >&5 + echo "$as_me:15361: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12285: \"$ac_try\"") >&5 + { (eval echo "$as_me:15364: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12288: \$? = $ac_status" >&5 + echo "$as_me:15367: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - echo "$as_me:12290: result: yes" >&5 + echo "$as_me:15369: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -echo "$as_me:12297: result: no" >&5 +echo "$as_me:15376: 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 #(vi - -L*) + case $cf_library_path in + (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` -test "$cf_library_path" != "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" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= -test "/usr" != "$prefix" && \ -test -d "/usr" && \ -(test $prefix = NONE || test "/usr" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr" - test -d /usr/lib && cf_search="$cf_search /usr/lib" - test -d /usr/lib/$cf_nculib_root && cf_search="$cf_search /usr/lib/$cf_nculib_root" - test -d /usr/lib/$cf_nculib_root/lib && cf_search="$cf_search /usr/lib/$cf_nculib_root/lib" - test -d /usr/$cf_nculib_root/lib && cf_search="$cf_search /usr/$cf_nculib_root/lib" - test -d /usr/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search /usr/$cf_nculib_root/lib/$cf_nculib_root" -} - -test "$prefix" != "NONE" && \ +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 "/usr/local" != "$prefix" && \ -test -d "/usr/local" && \ -(test $prefix = NONE || test "/usr/local" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" - test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" - test -d /usr/local/lib/$cf_nculib_root && cf_search="$cf_search /usr/local/lib/$cf_nculib_root" - test -d /usr/local/lib/$cf_nculib_root/lib && cf_search="$cf_search /usr/local/lib/$cf_nculib_root/lib" - test -d /usr/local/$cf_nculib_root/lib && cf_search="$cf_search /usr/local/$cf_nculib_root/lib" - test -d /usr/local/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search /usr/local/$cf_nculib_root/lib/$cf_nculib_root" -} +for cf_subdir_prefix in \ + /usr \ + /usr/local \ + /usr/pkg \ + /opt \ + /opt/local \ + $HOME +do -test "/opt" != "$prefix" && \ -test -d "/opt" && \ -(test $prefix = NONE || test "/opt" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under /opt" - test -d /opt/lib && cf_search="$cf_search /opt/lib" - test -d /opt/lib/$cf_nculib_root && cf_search="$cf_search /opt/lib/$cf_nculib_root" - test -d /opt/lib/$cf_nculib_root/lib && cf_search="$cf_search /opt/lib/$cf_nculib_root/lib" - test -d /opt/$cf_nculib_root/lib && cf_search="$cf_search /opt/$cf_nculib_root/lib" - test -d /opt/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search /opt/$cf_nculib_root/lib/$cf_nculib_root" +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 "$HOME" != "$prefix" && \ -test -d "$HOME" && \ -(test $prefix = NONE || test "$HOME" != "$prefix") && { - test -n "$verbose" && echo " ... testing for lib-directories under $HOME" - test -d $HOME/lib && cf_search="$cf_search $HOME/lib" - test -d $HOME/lib/$cf_nculib_root && cf_search="$cf_search $HOME/lib/$cf_nculib_root" - test -d $HOME/lib/$cf_nculib_root/lib && cf_search="$cf_search $HOME/lib/$cf_nculib_root/lib" - test -d $HOME/$cf_nculib_root/lib && cf_search="$cf_search $HOME/$cf_nculib_root/lib" - test -d $HOME/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $HOME/$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:12387: checking for -l$cf_nculib_root in $cf_libdir" >&5 + 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 12391 "configure" +#line 15448 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12403: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15460: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12406: \$? = $ac_status" >&5 + echo "$as_me:15463: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12409: \"$ac_try\"") >&5 + { (eval echo "$as_me:15466: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12412: \$? = $ac_status" >&5 + echo "$as_me:15469: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - echo "$as_me:12414: result: yes" >&5 + echo "$as_me:15471: 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:12421: result: no" >&5 +echo "$as_me:15478: 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 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root if test $cf_found_library = no ; then - { { echo "$as_me:12436: error: Cannot link $cf_nculib_root library" >&5 + { { 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; }; } fi fi if test -n "$cf_ncurses_LIBS" ; then - echo "$as_me:12444: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 + 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 12454 "configure" +#line 15511 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12466: \"$ac_link\"") >&5 +if { (eval echo "$as_me:15523: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12469: \$? = $ac_status" >&5 + echo "$as_me:15526: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12472: \"$ac_try\"") >&5 + { (eval echo "$as_me:15529: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12475: \$? = $ac_status" >&5 + echo "$as_me:15532: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - echo "$as_me:12477: result: yes" >&5 + 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:12482: result: no" >&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 <&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 + 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 + +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" + + cat >conftest.$ac_ext <<_ACEOF +#line 15692 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); + ; + 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 - cf_wide_curses=no + 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 + 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 + (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 +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: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 + else -echo "$as_me:12500: 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 +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + + NCURSES_CONFIG_PKG=$cf_ncuconfig_root + +echo "$as_me:15767: 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 -cf_cv_curses_incdir=no -case $host_os in #(vi -hpux10.*) #(vi - 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 +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%'` ;; -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" +(*) + 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" +#include "confdefs.h" +#include +#include <${cf_cv_ncurses_header:-curses.h}> +#include <$cf_test> + +int +main (void) +{ +int x = auto_left_margin + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:15800: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:15809: \$? = $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_term_header=unknown + +fi +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 "${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 + + ;; +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 + + 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 -echo "$as_me:12526: result: $cf_cv_curses_incdir" >&5 -echo "${ECHO_T}$cf_cv_curses_incdir" >&6 -test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir" -echo "$as_me:12530: checking if we have identified curses headers" >&5 +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="`$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 + +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 echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none -for cf_header in \ - ncurses.h \ - curses.h ncurses/ncurses.h ncurses/curses.h +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 12542 "configure" +#line 16082 "configure" #include "confdefs.h" #include <${cf_header}> int -main () +main (void) { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:12554: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:16094: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:12557: \$? = $ac_status" >&5 + echo "$as_me:16097: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:12560: \"$ac_try\"") >&5 + { (eval echo "$as_me:16100: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12563: \$? = $ac_status" >&5 + echo "$as_me:16103: \$? = $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 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi -echo "$as_me:12574: result: $cf_cv_ncurses_header" >&5 +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:12578: error: No curses header-files found" >&5 + { { 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; }; } 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:12588: checking for $ac_header" >&5 +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 $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 12594 "configure" +#line 16134 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:12598: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:16138: \"$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:12604: \$? = $ac_status" >&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" 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:12623: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 <&5 +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + cat >>confdefs.h <conftest.$ac_ext <<_ACEOF +#line 16219 "configure" +#include "confdefs.h" +#include +int +main (void) +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:16231: \"$ac_compile\"") >&5 + (eval $ac_compile) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:16240: \$? = $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}:16257: 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: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 + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + 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 16288 "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 +if { (eval echo "$as_me:16312: \"$ac_compile\"") >&5 + (eval $ac_compile) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:16321: \$? = $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 +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: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 +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 + + 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 + +# 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" + + cat >conftest.$ac_ext <<_ACEOF +#line 16464 "configure" +#include "confdefs.h" +#include +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 + + cat >conftest.$ac_ext <<_ACEOF +#line 16525 "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 +if { (eval echo "$as_me:16549: \"$ac_compile\"") >&5 + (eval $ac_compile) 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 + (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; }; } + +fi +echo "$as_me:16584: result: $cf_cv_ncurses_h2" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 + + 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 + +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 16620 "configure" +#include "confdefs.h" +#include +int +main (void) +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:16632: \"$ac_compile\"") >&5 + (eval $ac_compile) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:16641: \$? = $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}:16658: 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 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: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 -case ${cf_cv_ncurses_header} in #(vi -*/ncurses.h|*/ncursesw.h) #(vi +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 12651 "configure" +#line 16724 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int -main () +main (void) { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:12666: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:16739: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:12669: \$? = $ac_status" >&5 + echo "$as_me:16742: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:12672: \"$ac_try\"") >&5 + { (eval echo "$as_me:16745: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12675: \$? = $ac_status" >&5 + echo "$as_me:16748: \$? = $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_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi -echo "$as_me:12691: result: $cf_cv_term_header" >&5 +echo "$as_me:16764: 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 # (vi -*term.h) +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 # (vi -ncurses/term.h) #(vi +case $cf_cv_term_header in +(ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; -ncursesw/term.h) +(ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac -echo "$as_me:12723: checking for ncurses version" >&5 +# some applications need this, but should check for NCURSES_VERSION + +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +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 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 < #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:12749: \"$cf_try\"") >&5 + { (eval echo "$as_me:16828: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? - echo "$as_me:12752: \$? = $ac_status" >&5 + 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 else cat >conftest.$ac_ext <<_ACEOF -#line 12762 "configure" +#line 16841 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include -int main() +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:12787: \"$ac_link\"") >&5 +if { (eval echo "$as_me:16866: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12790: \$? = $ac_status" >&5 + echo "$as_me:16869: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:12792: \"$ac_try\"") >&5 + { (eval echo "$as_me:16871: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12795: \$? = $ac_status" >&5 + echo "$as_me:16874: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 fi -echo "$as_me:12809: result: $cf_cv_ncurses_version" >&5 +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 -echo "$as_me:12816: checking if we have identified curses libraries" >&5 -echo $ECHO_N "checking if we have identified curses libraries... $ECHO_C" >&6 +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 12819 "configure" +#line 16909 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.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 Gpm_Open (); int -main () +main (void) { -initscr(); tgoto("?", 0,0) +Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12831: \"$ac_link\"") >&5 +if { (eval echo "$as_me:16928: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12834: \$? = $ac_status" >&5 + echo "$as_me:16931: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12837: \"$ac_try\"") >&5 + { (eval echo "$as_me:16934: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12840: \$? = $ac_status" >&5 + echo "$as_me:16937: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - cf_result=yes + ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -cf_result=no +ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -echo "$as_me:12849: result: $cf_result" >&5 -echo "${ECHO_T}$cf_result" >&6 +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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgpm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 16959 "configure" +#include "confdefs.h" -if test "$cf_result" = no ; then -case $host_os in #(vi -freebsd*) #(vi - echo "$as_me:12855: checking for tgoto in -lmytinfo" >&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 initscr (); +int +main (void) +{ +initscr (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:16978: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:16987: \$? = $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: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" +fi + +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: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 echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 12863 "configure" +#line 17021 "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 () +main (void) { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12882: \"$ac_link\"") >&5 +if { (eval echo "$as_me:17040: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12885: \$? = $ac_status" >&5 + echo "$as_me:17043: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12888: \"$ac_try\"") >&5 + { (eval echo "$as_me:17046: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12891: \$? = $ac_status" >&5 + echo "$as_me:17049: \$? = $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_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:12902: result: $ac_cv_lib_mytinfo_tgoto" >&5 +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 - LIBS="-lmytinfo $LIBS" + cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi - ;; -hpux10.*) #(vi - # 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:12916: 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 + 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" + +if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) +then + +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 + + 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 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 +/* 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 +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_initscr=no +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' +else + + 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' + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:17206: 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: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 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi + +eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root + +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 + +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" + fi + done + cat >conftest.$ac_ext <<_ACEOF +#line 17341 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +initscr(); mousemask(0,0); tgoto((char *)0, 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 + 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 + (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 +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" +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 <&5 +echo $ECHO_N "checking for X... $ECHO_C" >&6 + +# Check whether --with-x or --without-x was given. +if test "${with_x+set}" = set; then + withval="$with_x" + +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 + 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" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:17490: \"$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:17496: \$? = $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 + +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" +#include "confdefs.h" +#include +int +main (void) +{ +XtMalloc (0) + ; + 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 + 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 + (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= +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 + +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 + eval "$ac_cv_have_x" +fi # $with_x != no + +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 + +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 X_DISPLAY_MISSING 1 +EOF + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +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" +#include "confdefs.h" + +int +main (void) +{ + + ; + 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 + 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:17647: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_R_nospace=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_R_nospace=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" + +int +main (void) +{ + + ; + 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 +else + echo "$as_me: failed program was:" >&5 +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: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. + + 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" +#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:17737: \"$ac_link\"") >&5 + (eval $ac_link) 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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:17746: \$? = $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="-lcur_colr $LIBS" +LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 12924 "configure" +#line 17760 "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 (); +char dnet_ntoa (); int -main () +main (void) { -initscr (); +dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12943: \"$ac_link\"") >&5 +if { (eval echo "$as_me:17779: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:12946: \$? = $ac_status" >&5 + echo "$as_me:17782: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:12949: \"$ac_try\"") >&5 + { (eval echo "$as_me:17785: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:12952: \$? = $ac_status" >&5 + echo "$as_me:17788: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_cur_colr_initscr=yes + ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -ac_cv_lib_cur_colr_initscr=no +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 fi -echo "$as_me:12963: 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 +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" +fi - LIBS="-lcur_colr $LIBS" - ac_cv_func_initscr=yes + 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" +/* 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:17833: \"$ac_link\"") >&5 + (eval $ac_link) 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 + (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 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" +fi - echo "$as_me:12972: 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 + fi +fi +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: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 +/* 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) (); + +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 + + ; + 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 +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 + echo $ECHO_N "(cached) $ECHO_C" >&6 +else ac_check_lib_save_LIBS=$LIBS -LIBS="-lHcurses $LIBS" +LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 12980 "configure" +#line 17940 "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 (); +char gethostbyname (); int -main () +main (void) { -initscr (); +gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:12999: \"$ac_link\"") >&5 +if { (eval echo "$as_me:17959: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13002: \$? = $ac_status" >&5 + echo "$as_me:17962: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13005: \"$ac_try\"") >&5 + { (eval echo "$as_me:17965: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13008: \$? = $ac_status" >&5 + echo "$as_me:17968: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_Hcurses_initscr=yes + ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -ac_cv_lib_Hcurses_initscr=no +ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:13019: 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 +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" +fi - # HP's header uses __HP_CURSES, but user claims _HP_CURSES. - LIBS="-lHcurses $LIBS" - CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES" - ac_cv_func_initscr=yes + 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 + 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" +#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 + 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 + + # 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" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char connect (); below. */ +#include +/* 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) +{ +/* 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 +#else +f = connect; /* 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:18086: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18095: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_connect=yes +else + 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:18105: result: $ac_cv_func_connect" >&5 +echo "${ECHO_T}$ac_cv_func_connect" >&6 - fi + 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 + 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" +#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 (); +int +main (void) +{ +connect (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:18136: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18145: \$? = $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: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 $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 18171 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char remove (); below. */ +#include +/* 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) (); + +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 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:18202: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18211: \$? = $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: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 + 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" +#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 (); +int +main (void) +{ +remove (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:18252: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18261: \$? = $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: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" +fi + + fi + + # 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 + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 18287 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shmat (); below. */ +#include +/* 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 (); +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_shmat) || defined (__stub___shmat) +choke me +#else +f = shmat; /* 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:18318: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18327: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shmat=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_shmat=no +fi +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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 18349 "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:18368: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18377: \$? = $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: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" +fi + + fi + fi + + # 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" + +/* 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:18433: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18442: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_ICE_IceConnectionNumber=yes +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 +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" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +cf_x_athena=${cf_x_athena:-Xaw} + +echo "$as_me:18465: 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 "${ECHO_T}yes" >&6 +else + echo "$as_me:18479: 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 $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 "${ECHO_T}yes" >&6 +else + echo "$as_me:18497: 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 $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 "${ECHO_T}yes" >&6 +else + echo "$as_me:18515: 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 $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 "${ECHO_T}yes" >&6 +else + echo "$as_me:18533: 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 + test -n "$verbose" && echo " found package $cf_athena_pkg" 1>&6 + +echo "${as_me:-configure}:18553: 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`" + 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 + + 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 + +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 +(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 ;; -linux*) - case `arch 2>/dev/null` in - x86_64) - if test -d /lib64 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +LIBS="$cf_add_libs" -if test -n "/lib64" ; then - for cf_add_libdir in /lib64 - 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_x_athena_lib="$cf_pkgconfig_libs" -echo "${as_me:-configure}:13059: testing adding $cf_add_libdir to library-path ..." 1>&5 +cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + cat >>confdefs.h <&6 + +echo "${as_me:-configure}:18694: testing ..trimmed $LIBS ..." 1>&5 + + ;; + esac + done + +echo "$as_me:18700: 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" +#include "confdefs.h" + +#include + +int +main (void) +{ + +int check = XmuCompareISOLatin1("big", "small") + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:18723: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:18732: \$? = $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 +cf_cv_xaw_compat=no fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:18742: result: $cf_cv_xaw_compat" >&5 +echo "${ECHO_T}$cf_cv_xaw_compat" >&6 - else + 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 -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}:18754: testing work around broken package ..." 1>&5 -echo "${as_me:-configure}:13088: testing adding $cf_add_libdir to library-path ..." 1>&5 + cf_save_xmu="$LIBS" + cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^ *//' -e 's/ .*//'` - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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 + +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 + +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 + +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 + +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 + + ;; + 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 + test -n "$verbose" && echo " found package Xext" 1>&6 + +echo "${as_me:-configure}:18946: 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`" + 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 + + 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 + +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 +(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 ;; - *) + (*) -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_cflags" && cf_new_cflags="$cf_new_cflags " + cf_new_cflags="${cf_new_cflags}$cf_add_cflags" -echo "${as_me:-configure}:13119: testing adding $cf_add_libdir to library-path ..." 1>&5 + ;; + esac + ;; +(yes) - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - 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_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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +LIBS="$cf_add_libs" + + : +else + cf_pkgconfig_incs= + cf_pkgconfig_libs= + + echo "$as_me:19077: 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" +#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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:19113: \$? = $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 +ac_cv_lib_Xext_XextCreateExtension=no +fi +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 "${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 + 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 + +# OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new), and (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 + test -n "$verbose" && echo " found package x11" 1>&6 + +echo "${as_me:-configure}:19160: 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`" + 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 + + 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 + +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 +(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 ;; -sunos3*|sunos4*) - if test "x$cf_cv_screen" = "xcurses_5lib" - then - if test -d /usr/5lib ; then +(yes) -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 - 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}:13154: testing adding $cf_add_libdir to library-path ..." 1>&5 + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` - LDFLAGS="-L$cf_add_libdir $LDFLAGS" - fi - fi - done + 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 - LIBS="-lcurses -ltermcap $LIBS" +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_1lib= + break fi - fi - ac_cv_func_initscr=yes - ;; + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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: WARNING: unable to find X11 library" >&2;} +fi + +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 + + 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 + + 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 + +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 +(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 ".$ac_cv_func_initscr" != .yes ; then - cf_save_LIBS="$LIBS" +if test -n "$cf_new_cflags" ; then - if test ".${cf_cv_ncurses_version:-no}" != .no + 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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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: WARNING: unable to find ICE library" >&2;} +fi + +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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: WARNING: unable to find SM library" >&2;} +fi + +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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: WARNING: unable to find Xt library" >&2;} +fi + +fi + +cf_have_X_LIBS=no + +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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 $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" +#include "confdefs.h" + +#include + +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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:19878: \$? = $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 +cf_cv_xt_x11_compat=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:19888: 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 + + # 2010/11/19 - good enough until a working Xt on Xcb is delivered. + +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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 + +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 + +fi + + fi + ;; + esac + +echo "$as_me:20047: 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" +#include "confdefs.h" + +#include + +int +main (void) +{ +int num = IceConnectionNumber(0) + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:20069: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:20078: \$? = $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 +cf_cv_xt_ice_compat=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:20088: 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 - cf_check_list="ncurses curses cursesX" - else - cf_check_list="cursesX curses ncurses" + # 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 + +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +LIBS="$cf_add_libs" + +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 + + 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 + + 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 + +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 +(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 + +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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +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 + +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 + +fi + + ;; + esac + ;; + esac 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 - echo "$as_me:13183: checking for tgoto" >&5 -echo $ECHO_N "checking for tgoto... $ECHO_C" >&6 -if test "${ac_cv_func_tgoto+set}" = set; then + 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 + +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 +(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 "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 + +echo "${as_me:-configure}:20485: 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 + + 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 + + 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" +#include "confdefs.h" +#include +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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:20535: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&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 + + 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 + + fi + CFLAGS="$cf_check_flags" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + echo "$as_me:20556: 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 13189 "configure" +#line 20562 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char tgoto (); below. */ + which can conflict with char XOpenDisplay (); below. */ #include /* 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 XOpenDisplay (); char (*f) (); int -main () +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) +#if defined (__stub_XOpenDisplay) || defined (__stub___XOpenDisplay) choke me #else -f = tgoto; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; +f = XOpenDisplay; /* 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:13220: \"$ac_link\"") >&5 +if { (eval echo "$as_me:20593: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13223: \$? = $ac_status" >&5 + echo "$as_me:20596: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13226: \"$ac_try\"") >&5 + { (eval echo "$as_me:20599: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13229: \$? = $ac_status" >&5 + echo "$as_me:20602: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_func_tgoto=yes + ac_cv_func_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -ac_cv_func_tgoto=no +ac_cv_func_XOpenDisplay=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:13239: 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 +echo "$as_me:20612: result: $ac_cv_func_XOpenDisplay" >&5 +echo "${ECHO_T}$ac_cv_func_XOpenDisplay" >&6 +if test $ac_cv_func_XOpenDisplay = yes; then + : 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:13248: 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 "$as_me:20618: 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="-l$cf_term_lib $LIBS" +LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 13256 "configure" +#line 20626 "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 (); +char XOpenDisplay (); int -main () +main (void) { -tgoto (); +XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13275: \"$ac_link\"") >&5 +if { (eval echo "$as_me:20645: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13278: \$? = $ac_status" >&5 + echo "$as_me:20648: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13281: \"$ac_try\"") >&5 + { (eval echo "$as_me:20651: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13284: \$? = $ac_status" >&5 + echo "$as_me:20654: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_Lib=yes" + ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -eval "$as_ac_Lib=no" +ac_cv_lib_X11_XOpenDisplay=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:13295: 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 - break -fi +echo "$as_me:20665: 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 - done +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 + 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 +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 - as_ac_Lib=`echo "ac_cv_lib_$cf_curs_lib''_initscr" | $as_tr_sh` -echo "$as_me:13314: checking for initscr in -l$cf_curs_lib" >&5 -echo $ECHO_N "checking for initscr in -l$cf_curs_lib... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Lib+set}\" = set"; then + echo "$as_me:20689: 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" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char XtAppInitialize (); below. */ +#include +/* 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 (); +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_XtAppInitialize) || defined (__stub___XtAppInitialize) +choke me +#else +f = XtAppInitialize; /* 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:20726: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:20735: \$? = $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 +ac_cv_func_XtAppInitialize=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:20745: result: $ac_cv_func_XtAppInitialize" >&5 +echo "${ECHO_T}$ac_cv_func_XtAppInitialize" >&6 +if test $ac_cv_func_XtAppInitialize = yes; then + : +else + + echo "$as_me:20751: 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="-l$cf_curs_lib $LIBS" +LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 13322 "configure" +#line 20759 "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 (); +char XtAppInitialize (); int -main () +main (void) { -initscr (); +XtAppInitialize (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13341: \"$ac_link\"") >&5 +if { (eval echo "$as_me:20778: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13344: \$? = $ac_status" >&5 + echo "$as_me:20781: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13347: \"$ac_try\"") >&5 + { (eval echo "$as_me:20784: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13350: \$? = $ac_status" >&5 + echo "$as_me:20787: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_Lib=yes" + ac_cv_lib_Xt_XtAppInitialize=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -eval "$as_ac_Lib=no" +ac_cv_lib_Xt_XtAppInitialize=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:13361: 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 - break +echo "$as_me:20798: 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 + +cat >>confdefs.h <<\EOF +#define HAVE_LIBXT 1 +EOF + + cf_have_X_LIBS=Xt + LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS" fi - done - fi - test $cf_curs_lib = unknown && { { echo "$as_me:13369: error: no curses library found" >&5 -echo "$as_me: error: no curses library found" >&2;} - { (exit 1); exit 1; }; } +fi - LIBS="-l$cf_curs_lib $cf_save_LIBS" - if test "$cf_term_lib" = unknown ; then - echo "$as_me:13375: 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 +fi + +if test $cf_have_X_LIBS = no ; then + { echo "$as_me:20815: 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_test=X11/$cf_x_athena_root/SimpleMenu.h + if test $cf_path != default ; then + CPPFLAGS="$cf_save" + + test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " + CPPFLAGS="${CPPFLAGS}-I$cf_path/include" + + echo "$as_me:20841: 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 $ECHO_N "checking for $cf_test... $ECHO_C" >&6 + fi cat >conftest.$ac_ext <<_ACEOF -#line 13378 "configure" +#line 20848 "configure" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> + +#include +#include <$cf_test> int -main () +main (void) { -initscr() + ; return 0; } _ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:20862: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:20871: \$? = $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_ext + echo "$as_me:20880: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + if test "$cf_result" = yes ; then + cf_x_athena_inc=$cf_path + 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;} +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 +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" + + 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_add_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +LIBS="$cf_add_libs" + + echo "$as_me:20961: 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" +#include "confdefs.h" + +#include +#include + +int +main (void) +{ + +$cf_test((XtAppContext) 0) + ; + return 0; +} +_ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13390: \"$ac_link\"") >&5 +if { (eval echo "$as_me:20981: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13393: \$? = $ac_status" >&5 + echo "$as_me:20984: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13396: \"$ac_try\"") >&5 + { (eval echo "$as_me:20987: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13399: \$? = $ac_status" >&5 + echo "$as_me:20990: \$? = $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 - echo "$as_me:13408: result: $cf_result" >&5 + echo "$as_me:20999: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 - test $cf_result = no && { { echo "$as_me:13410: error: Cannot link curses library" >&5 -echo "$as_me: error: Cannot link curses library" >&2;} + if test "$cf_result" = yes ; then + cf_x_athena_lib="$cf_libs" + break + fi + LIBS="$cf_save" + 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: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&2;} { (exit 1); exit 1; }; } - elif test "$cf_curs_lib" = "$cf_term_lib" ; then - : - elif test "$cf_term_lib" != predefined ; then - echo "$as_me:13416: 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 13419 "configure" +fi + +cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + +cat >>confdefs.h <&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 +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 "${ECHO_T}$XCURSES_CONFIG" >&6 +else + echo "$as_me:21057: 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 $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 +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 "${ECHO_T}$ac_ct_XCURSES_CONFIG" >&6 +else + echo "$as_me:21096: 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 +(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 + +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_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_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 + +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 +(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 "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 + +echo "${as_me:-configure}:21316: 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 + + 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 + + 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" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.h}> +#include int -main () +main (void) { -initscr(); tgoto((char *)0, 0, 0); +printf("Hello world"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13431: \"$ac_link\"") >&5 +if { (eval echo "$as_me:21357: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13434: \$? = $ac_status" >&5 + echo "$as_me:21360: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13437: \"$ac_try\"") >&5 + { (eval echo "$as_me:21363: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13440: \$? = $ac_status" >&5 + echo "$as_me:21366: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - cf_result=no + : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 +test -n "$verbose" && echo " test-compile failed. Undoing change to \$CFLAGS" 1>&6 - LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -#line 13449 "configure" +echo "${as_me:-configure}:21374: 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 + + fi + CFLAGS="$cf_check_flags" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +echo "$as_me:21387: 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" #include "confdefs.h" -#include <${cf_cv_ncurses_header:-curses.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 () +main (void) { -initscr() +XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:13461: \"$ac_link\"") >&5 +if { (eval echo "$as_me:21414: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13464: \$? = $ac_status" >&5 + echo "$as_me:21417: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:13467: \"$ac_try\"") >&5 + { (eval echo "$as_me:21420: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13470: \$? = $ac_status" >&5 + echo "$as_me:21423: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - cf_result=yes + ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -cf_result=error +ac_cv_lib_X11_XOpenDisplay=no fi 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 "${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 + 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 + +echo "$as_me:21456: 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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +LIBS="$cf_add_libs" + +cat >conftest.$ac_ext <<_ACEOF +#line 21479 "configure" +#include "confdefs.h" + +#include +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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:21503: \$? = $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 +cf_cv_lib_XCurses=no +fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext - echo "$as_me:13482: result: $cf_result" >&5 -echo "${ECHO_T}$cf_result" >&6 - fi + fi +echo "$as_me:21514: result: $cf_cv_lib_XCurses" >&5 +echo "${ECHO_T}$cf_cv_lib_XCurses" >&6 + fi +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 $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" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:21539: \"$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:21545: \$? = $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 + ac_cv_header_xcurses_h=no +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:21564: 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 +cat >>confdefs.h <<\EOF +#define HAVE_XCURSES 1 +EOF + +fi + +else + { { echo "$as_me:21575: 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: 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 $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" +#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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:21626: \$? = $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: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 + 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_1lib= + break + fi + done + test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" +done +LIBS="$cf_add_libs" + +fi + +echo "$as_me:21666: 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" +#include "confdefs.h" + +#include +#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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:21701: \$? = $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 +cf_cv_widec_curses=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:21712: 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 $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" +#include "confdefs.h" + +#include +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +mbstate_t state + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:21743: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:21752: \$? = $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" +#include "confdefs.h" + +#include +#include +#include <${cf_cv_ncurses_header:-curses.h}> +int +main (void) +{ +mbstate_t state + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:21774: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:21783: \$? = $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 +cf_cv_widec_mbstate=unknown +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:21795: 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:13492: checking if you want extra dialogs" >&5 +echo "$as_me:21818: 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:13502: result: $enableval" >&5 +echo "$as_me:21828: 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:13510: checking if you want config-file support" >&5 +echo "$as_me:21836: 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:13520: result: $enableval" >&5 +echo "$as_me:21846: 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 : fi -echo "$as_me:13533: checking if you want Xdialog-style dialogs" >&5 +echo "$as_me:21859: 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:13543: result: $enableval" >&5 +echo "$as_me:21869: 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:13556: checking if you want extra Xdialog-style dialogs (1.2)" >&5 +echo "$as_me:21882: 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:13566: result: $enableval" >&5 +echo "$as_me:21892: 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:13579: checking if you want compatibility with whiptail options" >&5 +echo "$as_me:21905: 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:13589: result: $enableval" >&5 +echo "$as_me:21915: 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:13601: checking if you want the form dialog" >&5 +echo "$as_me:21927: 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:13611: result: $enableval" >&5 +echo "$as_me:21937: 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:13624: checking if you want the gauge dialog" >&5 +echo "$as_me:21950: 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:13634: result: $enableval" >&5 +echo "$as_me:21960: 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:13647: checking if you want the tailbox dialog" >&5 +echo "$as_me:21973: 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:13657: result: $enableval" >&5 +echo "$as_me:21983: 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:13670: checking if you want the mixedform dialog" >&5 +echo "$as_me:21996: 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=$cf_all_widgets + enableval=${enable_form:=$cf_all_widgets} fi; -echo "$as_me:13680: result: $enableval" >&5 +echo "$as_me:22006: 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:13693: checking if you want the mixedgauge dialog" >&5 +echo "$as_me:22019: 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:13703: result: $enableval" >&5 +echo "$as_me:22029: 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:13716: checking if you want the wide-curses features" >&5 +echo "$as_me:22042: 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_wide_curses + enableval=$cf_cv_widec_curses fi; -echo "$as_me:13726: result: $enableval" >&5 +echo "$as_me:22052: 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:13738: checking for ANSI C header files" >&5 +echo "$as_me:22064: 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 13744 "configure" +#line 22070 "configure" #include "confdefs.h" #include #include #include #include _ACEOF -if { (eval echo "$as_me:13752: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:22078: \"$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:13758: \$? = $ac_status" >&5 + echo "$as_me:22084: \$? = $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 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 13780 "configure" +#line 22106 "configure" #include "confdefs.h" #include _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* 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 13798 "configure" +#line 22124 "configure" #include "confdefs.h" #include _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 13819 "configure" +#line 22145 "configure" #include "confdefs.h" #include #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 () +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:13845: \"$ac_link\"") >&5 +if { (eval echo "$as_me:22171: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:13848: \$? = $ac_status" >&5 + echo "$as_me:22174: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:13850: \"$ac_try\"") >&5 + { (eval echo "$as_me:22176: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13853: \$? = $ac_status" >&5 + echo "$as_me:22179: \$? = $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 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:13866: result: $ac_cv_header_stdc" >&5 +echo "$as_me:22192: 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:13876: checking whether time.h and sys/time.h may both be included" >&5 +echo "$as_me:22202: 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 13882 "configure" +#line 22208 "configure" #include "confdefs.h" #include #include #include int -main () +main (void) { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:13898: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:22224: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:13901: \$? = $ac_status" >&5 + echo "$as_me:22227: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:13904: \"$ac_try\"") >&5 + { (eval echo "$as_me:22230: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13907: \$? = $ac_status" >&5 + echo "$as_me:22233: \$? = $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 ac_cv_header_time=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:13917: result: $ac_cv_header_time" >&5 +echo "$as_me:22243: 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:13930: checking for $ac_hdr that defines DIR" >&5 +echo "$as_me:22256: 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 13936 "configure" +#line 22262 "configure" #include "confdefs.h" #include #include <$ac_hdr> int -main () +main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:13951: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:22277: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:13954: \$? = $ac_status" >&5 + echo "$as_me:22280: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:13957: \"$ac_try\"") >&5 + { (eval echo "$as_me:22283: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:13960: \$? = $ac_status" >&5 + echo "$as_me:22286: \$? = $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:13970: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 cat >>confdefs.h <&5 + echo "$as_me:22309: 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 13991 "configure" +#line 22317 "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 () +main (void) { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14010: \"$ac_link\"") >&5 +if { (eval echo "$as_me:22336: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14013: \$? = $ac_status" >&5 + echo "$as_me:22339: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14016: \"$ac_try\"") >&5 + { (eval echo "$as_me:22342: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14019: \$? = $ac_status" >&5 + echo "$as_me:22345: \$? = $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 ac_cv_lib_dir_opendir=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:14030: result: $ac_cv_lib_dir_opendir" >&5 +echo "$as_me:22356: 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 LIBS="$LIBS -ldir" fi else - echo "$as_me:14037: checking for opendir in -lx" >&5 + echo "$as_me:22363: 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 14045 "configure" +#line 22371 "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 () +main (void) { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14064: \"$ac_link\"") >&5 +if { (eval echo "$as_me:22390: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14067: \$? = $ac_status" >&5 + echo "$as_me:22393: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14070: \"$ac_try\"") >&5 + { (eval echo "$as_me:22396: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14073: \$? = $ac_status" >&5 + echo "$as_me:22399: \$? = $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 ac_cv_lib_x_opendir=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:14084: result: $ac_cv_lib_x_opendir" >&5 +echo "$as_me:22410: 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 LIBS="$LIBS -lx" fi fi -for ac_header in search.h unctrl.h unistd.h +for ac_header in search.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:14095: checking for $ac_header" >&5 +echo "$as_me:22421: 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 14101 "configure" +#line 22427 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:14105: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:22431: \"$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:14111: \$? = $ac_status" >&5 + echo "$as_me:22437: \$? = $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:14130: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 cat >>confdefs.h <&5 +echo "$as_me:22466: 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 , look for , but always look # for 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 #(vi -*/*) +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_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF -#line 14161 "configure" +#line 22487 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}> int -main () +main (void) { WINDOW *x ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:14175: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:22501: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14178: \$? = $ac_status" >&5 + echo "$as_me:22504: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14181: \"$ac_try\"") >&5 + { (eval echo "$as_me:22507: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14184: \$? = $ac_status" >&5 + echo "$as_me:22510: \$? = $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 cf_cv_term_header=no fi rm -f conftest.$ac_objext conftest.$ac_ext done -case $cf_cv_term_header in #(vi -no) +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 14203 "configure" +#line 22529 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #ifdef NCURSES_VERSION #include <${cf_header}> #else make an error #endif int -main () +main (void) { WINDOW *x ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:14221: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:22547: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14224: \$? = $ac_status" >&5 + echo "$as_me:22550: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14227: \"$ac_try\"") >&5 + { (eval echo "$as_me:22553: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14230: \$? = $ac_status" >&5 + echo "$as_me:22556: \$? = $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 cf_cv_term_header=no fi rm -f conftest.$ac_objext conftest.$ac_ext done ;; esac fi -echo "$as_me:14245: result: $cf_cv_term_header" >&5 +echo "$as_me:22571: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 -case $cf_cv_term_header in #(vi -term.h) #(vi +case $cf_cv_term_header in +(term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; -ncurses/term.h) #(vi +(ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; -ncursesw/term.h) +(ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac -echo "$as_me:14272: checking return type of signal handlers" >&5 +echo "$as_me:22598: 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 14278 "configure" +#line 22604 "configure" #include "confdefs.h" #include #include #ifdef signal # undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int -main () +main (void) { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:14300: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:22626: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14303: \$? = $ac_status" >&5 + echo "$as_me:22629: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14306: \"$ac_try\"") >&5 + { (eval echo "$as_me:22632: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14309: \$? = $ac_status" >&5 + echo "$as_me:22635: \$? = $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 ac_cv_type_signal=int fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:14319: result: $ac_cv_type_signal" >&5 +echo "$as_me:22645: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <&5 +echo "$as_me:22671: 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 14350 "configure" +#line 22677 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* 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) (); int -main () +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 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14381: \"$ac_link\"") >&5 +if { (eval echo "$as_me:22708: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14384: \$? = $ac_status" >&5 + echo "$as_me:22711: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14387: \"$ac_try\"") >&5 + { (eval echo "$as_me:22714: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14390: \$? = $ac_status" >&5 + echo "$as_me:22717: \$? = $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:14400: result: `eval echo '${'$as_ac_var'}'`" >&5 +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 cat >>confdefs.h <&5 -echo $ECHO_N "checking if we must define _XOPEN_SOURCE_EXTENDED... $ECHO_C" >&6 +echo "$as_me:22737: 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 14417 "configure" +#line 22745 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> int -main () +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) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14439: \"$ac_link\"") >&5 +if { (eval echo "$as_me:22771: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14442: \$? = $ac_status" >&5 + echo "$as_me:22774: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14445: \"$ac_try\"") >&5 + { (eval echo "$as_me:22777: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14448: \$? = $ac_status" >&5 + echo "$as_me:22780: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - cf_cv_need_xopen_extension=no + cf_cv_need_xopen_extension=none else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -#line 14455 "configure" + + for cf_try_xopen_extension in _XOPEN_SOURCE_EXTENDED NCURSES_WIDECHAR + do + cat >conftest.$ac_ext <<_ACEOF +#line 22790 "configure" #include "confdefs.h" -#define _XOPEN_SOURCE_EXTENDED +#define $cf_try_xopen_extension 1 #include #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { #ifdef NCURSES_VERSION - cchar_t check; - int check2 = curs_set((int)sizeof(check)); + cchar_t check; + int check2 = curs_set((int)sizeof(check)); #endif - long x = winnstr(stdscr, "", 0); - int x1, y1; - getbegyx(stdscr, y1, x1) + long x = winnstr(stdscr, "", 0); + int x1, y1; + getbegyx(stdscr, y1, x1) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14477: \"$ac_link\"") >&5 +if { (eval echo "$as_me:22812: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14480: \$? = $ac_status" >&5 + echo "$as_me:22815: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14483: \"$ac_try\"") >&5 + { (eval echo "$as_me:22818: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14486: \$? = $ac_status" >&5 + echo "$as_me:22821: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - cf_cv_need_xopen_extension=yes + cf_cv_need_xopen_extension=$cf_try_xopen_extension; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -cf_cv_need_xopen_extension=unknown fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + done + fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi -echo "$as_me:14498: result: $cf_cv_need_xopen_extension" >&5 +echo "$as_me:22835: result: $cf_cv_need_xopen_extension" >&5 echo "${ECHO_T}$cf_cv_need_xopen_extension" >&6 -test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" -echo "$as_me:14502: checking for unctrl.h" >&5 +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 $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 , look for , but always look # for 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 #(vi -*/*) +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_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF -#line 14523 "configure" +#line 22868 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}> int -main () +main (void) { WINDOW *x ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:14537: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:22882: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14540: \$? = $ac_status" >&5 + echo "$as_me:22885: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14543: \"$ac_try\"") >&5 + { (eval echo "$as_me:22888: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14546: \$? = $ac_status" >&5 + echo "$as_me:22891: \$? = $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 cf_cv_unctrl_header=no fi rm -f conftest.$ac_objext conftest.$ac_ext done -case $cf_cv_unctrl_header in #(vi -no) - { echo "$as_me:14560: WARNING: unctrl.h header not found" >&5 +fi +echo "$as_me:22904: result: $cf_cv_unctrl_header" >&5 +echo "${ECHO_T}$cf_cv_unctrl_header" >&6 + +case $cf_cv_unctrl_header in +(no) + { echo "$as_me:22909: WARNING: unctrl.h header not found" >&5 echo "$as_me: WARNING: unctrl.h header not found" >&2;} ;; esac -fi -echo "$as_me:14566: result: $cf_cv_unctrl_header" >&5 -echo "${ECHO_T}$cf_cv_unctrl_header" >&6 +case $cf_cv_unctrl_header in +(unctrl.h) -case $cf_cv_unctrl_header in #(vi -unctrl.h) #(vi - cat >>confdefs.h <<\EOF #define HAVE_UNCTRL_H 1 EOF ;; -ncurses/unctrl.h) #(vi +(ncurses/unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_UNCTRL_H 1 EOF ;; -ncursesw/unctrl.h) +(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:14617: checking for ${cf_func}" >&5 + echo "$as_me:22962: checking for ${cf_func}" >&5 echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 -echo "${as_me:-configure}:14620: testing ${cf_func} ..." 1>&5 +echo "${as_me:-configure}:22965: 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 14629 "configure" +#line 22974 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int -main () +main (void) { #ifndef ${cf_func} long foo = (long)(&${cf_func}); -if (foo + 1234 > 5678) - ${cf_cv_main_return:-return}(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:14661: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23007: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14664: \$? = $ac_status" >&5 + echo "$as_me:23010: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14667: \"$ac_try\"") >&5 + { (eval echo "$as_me:23013: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14670: \$? = $ac_status" >&5 + echo "$as_me:23016: \$? = $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:14686: result: $cf_result" >&5 + echo "$as_me:23032: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result != no; then cat >>confdefs.h <&5 +echo "$as_me:23042: 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 14702 "configure" +#line 23048 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char start_color (); below. */ #include /* 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 start_color (); char (*f) (); int -main () +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_start_color) || defined (__stub___start_color) choke me #else f = start_color; /* 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:14733: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23079: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14736: \$? = $ac_status" >&5 + echo "$as_me:23082: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14739: \"$ac_try\"") >&5 + { (eval echo "$as_me:23085: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14742: \$? = $ac_status" >&5 + echo "$as_me:23088: \$? = $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 ac_cv_func_start_color=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:14752: result: $ac_cv_func_start_color" >&5 +echo "$as_me:23098: 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 cat >>confdefs.h <<\EOF #define HAVE_COLOR 1 EOF fi -echo "$as_me:14762: checking for chtype typedef" >&5 +echo "$as_me:23108: 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 14769 "configure" +#line 23115 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { chtype foo ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:14781: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23127: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14784: \$? = $ac_status" >&5 + echo "$as_me:23130: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14787: \"$ac_try\"") >&5 + { (eval echo "$as_me:23133: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14790: \$? = $ac_status" >&5 + echo "$as_me:23136: \$? = $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 cf_cv_chtype_decl=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:14800: result: $cf_cv_chtype_decl" >&5 +echo "$as_me:23146: result: $cf_cv_chtype_decl" >&5 echo "${ECHO_T}$cf_cv_chtype_decl" >&6 if test $cf_cv_chtype_decl = yes ; then cat >>confdefs.h <<\EOF #define HAVE_TYPE_CHTYPE 1 EOF - echo "$as_me:14808: checking if chtype is scalar or struct" >&5 + echo "$as_me:23154: 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 14815 "configure" +#line 23161 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { chtype foo; long x = foo ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:14827: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23173: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:14830: \$? = $ac_status" >&5 + echo "$as_me:23176: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:14833: \"$ac_try\"") >&5 + { (eval echo "$as_me:23179: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14836: \$? = $ac_status" >&5 + echo "$as_me:23182: \$? = $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 cf_cv_chtype_type=struct fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:14846: result: $cf_cv_chtype_type" >&5 +echo "$as_me:23192: result: $cf_cv_chtype_type" >&5 echo "${ECHO_T}$cf_cv_chtype_type" >&6 if test $cf_cv_chtype_type = scalar ; then cat >>confdefs.h <<\EOF #define TYPE_CHTYPE_IS_SCALAR 1 EOF fi fi -echo "$as_me:14857: checking for wide alternate character set array" >&5 +echo "$as_me:23203: 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 14867 "configure" +#line 23213 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { void *foo = &($name['k']) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14883: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23229: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14886: \$? = $ac_status" >&5 + echo "$as_me:23232: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14889: \"$ac_try\"") >&5 + { (eval echo "$as_me:23235: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14892: \$? = $ac_status" >&5 + echo "$as_me:23238: \$? = $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 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi -echo "$as_me:14903: result: $cf_cv_curses_wacs_map" >&5 +echo "$as_me:23249: 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 <&5 +echo "$as_me:23257: 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 14921 "configure" +#line 23267 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { cchar_t *foo = WACS_PLUS; $cf_cv_curses_wacs_map['k'] = *WACS_PLUS ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14938: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23284: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14941: \$? = $ac_status" >&5 + echo "$as_me:23287: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14944: \"$ac_try\"") >&5 + { (eval echo "$as_me:23290: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14947: \$? = $ac_status" >&5 + echo "$as_me:23293: \$? = $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 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF -#line 14957 "configure" +#line 23303 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { cchar_t *foo = WACS_PLUS ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:14973: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23319: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:14976: \$? = $ac_status" >&5 + echo "$as_me:23322: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:14979: \"$ac_try\"") >&5 + { (eval echo "$as_me:23325: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:14982: \$? = $ac_status" >&5 + echo "$as_me:23328: \$? = $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 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi fi -echo "$as_me:14993: result: $cf_cv_curses_wacs_symbols" >&5 +echo "$as_me:23339: 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:15006: checking for ${cf_func}" >&5 + echo "$as_me:23352: checking for ${cf_func}" >&5 echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 -echo "${as_me:-configure}:15009: testing ${cf_func} ..." 1>&5 +echo "${as_me:-configure}:23355: 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 15018 "configure" +#line 23364 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int -main () +main (void) { #ifndef ${cf_func} long foo = (long)(&${cf_func}); -if (foo + 1234 > 5678) - ${cf_cv_main_return:-return}(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:15050: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23397: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:15053: \$? = $ac_status" >&5 + echo "$as_me:23400: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15056: \"$ac_try\"") >&5 + { (eval echo "$as_me:23403: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15059: \$? = $ac_status" >&5 + echo "$as_me:23406: \$? = $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:15075: result: $cf_result" >&5 + echo "$as_me:23422: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result != no; then cat >>confdefs.h <&5 + echo "$as_me:23434: 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 15090 "configure" +#line 23437 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int -main () +main (void) { WINDOW *p = stdscr->_parent ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:15102: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23449: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15105: \$? = $ac_status" >&5 + echo "$as_me:23452: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:15108: \"$ac_try\"") >&5 + { (eval echo "$as_me:23455: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15111: \$? = $ac_status" >&5 + echo "$as_me:23458: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_window__parent=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_window__parent=no fi rm -f conftest.$ac_objext conftest.$ac_ext - echo "$as_me:15120: result: $cf_window__parent" >&5 + echo "$as_me:23467: 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:15135: checking for $ac_header" >&5 +echo "$as_me:23482: 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 15141 "configure" +#line 23488 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:15145: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:23492: \"$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:15151: \$? = $ac_status" >&5 + echo "$as_me:23498: \$? = $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:15170: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 cat >>confdefs.h <&5 +echo "$as_me:23538: 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 15197 "configure" +#line 23544 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:15201: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:23548: \"$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:15207: \$? = $ac_status" >&5 + echo "$as_me:23554: \$? = $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:15226: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 cat >>confdefs.h <&5 +echo "$as_me:23586: 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 15245 "configure" +#line 23592 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:15249: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:23596: \"$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:15255: \$? = $ac_status" >&5 + echo "$as_me:23602: \$? = $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:15274: result: `eval echo '${'$as_ac_Header'}'`" >&5 +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 cat >>confdefs.h <&5 +echo "$as_me:23643: 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 15303 "configure" +#line 23650 "configure" #include "confdefs.h" $cf_wait_headers int -main () +main (void) { int x; int y = WEXITSTATUS(x); int z = WTERMSIG(x); wait(&x); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15319: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23666: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:15322: \$? = $ac_status" >&5 + echo "$as_me:23669: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15325: \"$ac_try\"") >&5 + { (eval echo "$as_me:23672: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15328: \$? = $ac_status" >&5 + echo "$as_me:23675: \$? = $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 <<_ACEOF -#line 15338 "configure" +#line 23685 "configure" #include "confdefs.h" $cf_wait_headers int -main () +main (void) { union wait x; #ifdef WEXITSTATUS int y = WEXITSTATUS(x); #endif #ifdef WTERMSIG int z = WTERMSIG(x); #endif wait(&x); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15358: \"$ac_link\"") >&5 +if { (eval echo "$as_me:23705: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:15361: \$? = $ac_status" >&5 + echo "$as_me:23708: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15364: \"$ac_try\"") >&5 + { (eval echo "$as_me:23711: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15367: \$? = $ac_status" >&5 + echo "$as_me:23714: \$? = $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 cf_cv_type_unionwait=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:15382: result: $cf_cv_type_unionwait" >&5 +echo "$as_me:23729: result: $cf_cv_type_unionwait" >&5 echo "${ECHO_T}$cf_cv_type_unionwait" >&6 test $cf_cv_type_unionwait = yes && cat >>confdefs.h <<\EOF #define HAVE_TYPE_UNIONWAIT 1 EOF if test $cf_cv_type_unionwait = yes; then - echo "$as_me:15391: checking if union wait can be used as wait-arg" >&5 + echo "$as_me:23738: 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 15398 "configure" +#line 23745 "configure" #include "confdefs.h" $cf_wait_headers int -main () +main (void) { union wait x; wait(&x) ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:15410: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23757: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15413: \$? = $ac_status" >&5 + echo "$as_me:23760: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:15416: \"$ac_try\"") >&5 + { (eval echo "$as_me:23763: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15419: \$? = $ac_status" >&5 + echo "$as_me:23766: \$? = $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 cf_cv_arg_union_wait=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi - echo "$as_me:15431: result: $cf_cv_arg_union_wait" >&5 + echo "$as_me:23778: result: $cf_cv_arg_union_wait" >&5 echo "${ECHO_T}$cf_cv_arg_union_wait" >&6 test $cf_cv_arg_union_wait = yes && cat >>confdefs.h <<\EOF #define WAIT_USES_UNION 1 EOF - echo "$as_me:15438: checking if union wait can be used as waitpid-arg" >&5 + echo "$as_me:23785: 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 15445 "configure" +#line 23792 "configure" #include "confdefs.h" $cf_wait_headers int -main () +main (void) { union wait x; waitpid(0, &x, 0) ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:15457: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23804: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15460: \$? = $ac_status" >&5 + echo "$as_me:23807: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:15463: \"$ac_try\"") >&5 + { (eval echo "$as_me:23810: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15466: \$? = $ac_status" >&5 + echo "$as_me:23813: \$? = $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 cf_cv_arg_union_waitpid=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi - echo "$as_me:15478: result: $cf_cv_arg_union_waitpid" >&5 + echo "$as_me:23825: result: $cf_cv_arg_union_waitpid" >&5 echo "${ECHO_T}$cf_cv_arg_union_waitpid" >&6 test $cf_cv_arg_union_waitpid = yes && cat >>confdefs.h <<\EOF #define WAITPID_USES_UNION 1 EOF fi -echo "$as_me:15487: checking if we must include wchar.h to declare mbstate_t" >&5 +echo "$as_me:23834: 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 15494 "configure" +#line 23841 "configure" #include "confdefs.h" #include #include #ifdef HAVE_LIBUTF8_H #include #endif int -main () +main (void) { mbstate_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:15511: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23858: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15514: \$? = $ac_status" >&5 + echo "$as_me:23861: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:15517: \"$ac_try\"") >&5 + { (eval echo "$as_me:23864: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15520: \$? = $ac_status" >&5 + echo "$as_me:23867: \$? = $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 15527 "configure" +#line 23874 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int -main () +main (void) { mbstate_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:15545: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:23892: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:15548: \$? = $ac_status" >&5 + echo "$as_me:23895: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:15551: \"$ac_try\"") >&5 + { (eval echo "$as_me:23898: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15554: \$? = $ac_status" >&5 + echo "$as_me:23901: \$? = $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 cf_cv_mbstate_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:15566: result: $cf_cv_mbstate_t" >&5 +echo "$as_me:23913: 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 $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" +#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 + ac_status=$? + 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 + 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: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 + cat >>confdefs.h <&5 +echo $ECHO_N "checking whether termios.h needs _POSIX_SOURCE... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +#line 23996 "configure" +#include "confdefs.h" +#include +int +main (void) +{ +struct termios foo; int x = foo.c_iflag + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:24008: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:24017: \$? = $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 <<_ACEOF +#line 24025 "configure" +#include "confdefs.h" + +#define _POSIX_SOURCE +#include +int +main (void) +{ +struct termios foo; int x = foo.c_iflag + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:24039: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:24048: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + termios_bad=unknown +else + echo "$as_me: failed program was:" >&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 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + echo "$as_me:24064: result: $termios_bad" >&5 +echo "${ECHO_T}$termios_bad" >&6 + fi +fi + +echo "$as_me:24069: 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" +#include "confdefs.h" +#include +#ifdef HAVE_TERMIOS_H +#include +#else +#ifdef HAVE_TERMIO_H +#include +#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 +#include +#endif + +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +int +main (void) +{ + +#ifdef TIOCGSIZE + struct ttysize win; /* SunOS 3.0... */ + int y = win.ts_lines; + int x = win.ts_cols; +#else +#ifdef TIOCGWINSZ + struct winsize win; /* everything else */ + int y = win.ws_row; + int x = win.ws_col; +#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 + (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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:24145: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_sizechange=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_sizechange=no +fi +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 "${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 + (NEED*) + cat >>confdefs.h <conftest.$ac_ext <<_ACEOF -#line 15591 "configure" +#line 24188 "configure" #include "confdefs.h" #include int -main () +main (void) { setlocale(LC_ALL, "") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15603: \"$ac_link\"") >&5 +if { (eval echo "$as_me:24200: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:15606: \$? = $ac_status" >&5 + echo "$as_me:24203: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15609: \"$ac_try\"") >&5 + { (eval echo "$as_me:24206: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15612: \$? = $ac_status" >&5 + echo "$as_me:24209: \$? = $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 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -echo "$as_me:15625: checking if rpath-hack should be disabled" >&5 +echo "$as_me:24222: 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" +#include "confdefs.h" + +#include +#include + +int +main (void) +{ + + int first_weekday = nl_langinfo (_NL_TIME_FIRST_WEEKDAY)[0]; + long week_1stday_l = (long) nl_langinfo (_NL_TIME_WEEK_1STDAY); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:24247: \"$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 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:24256: \$? = $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 +cf_nl_langinfo_1stday=no + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:24269: 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 +#define HAVE_NL_LANGINFO_1STDAY 1 +EOF + +echo "$as_me:24275: 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 + if test "$enableval" != "yes" ; then cf_disable_rpath_hack=yes - else - cf_disable_rpath_hack=no - fi + else + cf_disable_rpath_hack=no + fi else enableval=yes - cf_disable_rpath_hack=no + cf_disable_rpath_hack=no fi; -echo "$as_me:15642: result: $cf_disable_rpath_hack" >&5 +echo "$as_me:24292: 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:15646: checking for updated LDFLAGS" >&5 +echo "$as_me:24296: 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:15649: result: maybe" >&5 + echo "$as_me:24299: 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:15656: checking for $ac_word" >&5 +echo "$as_me:24306: 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:15671: found $ac_dir/$ac_word" >&5 +echo "$as_me:24321: 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:15679: result: $cf_ldd_prog" >&5 + echo "$as_me:24329: result: $cf_ldd_prog" >&5 echo "${ECHO_T}$cf_ldd_prog" >&6 else - echo "$as_me:15682: result: no" >&5 + echo "$as_me:24332: 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 15696 "configure" +#line 24346 "configure" #include "confdefs.h" #include int -main () +main (void) { printf("Hello"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:15708: \"$ac_link\"") >&5 +if { (eval echo "$as_me:24358: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:15711: \$? = $ac_status" >&5 + echo "$as_me:24361: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:15714: \"$ac_try\"") >&5 + { (eval echo "$as_me:24364: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:15717: \$? = $ac_status" >&5 + 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` else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi 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 then test -n "$verbose" && echo " ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6 -echo "${as_me:-configure}:15745: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5 +echo "${as_me:-configure}:24395: 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}:15757: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:24407: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6 -echo "${as_me:-configure}:15761: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:24411: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LDFLAGS do - case $cf_rpath_src in #(vi - -L*) #(vi + 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}:15798: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 +echo "${as_me:-configure}:24448: 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}:15811: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:24461: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6 -echo "${as_me:-configure}:15815: testing ...checking LIBS $LIBS ..." 1>&5 +echo "${as_me:-configure}:24465: testing ...checking LIBS $LIBS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LIBS do - case $cf_rpath_src in #(vi - -L*) #(vi + 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}:15852: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 +echo "${as_me:-configure}:24502: 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}:15865: testing ...checked LIBS $LIBS ..." 1>&5 +echo "${as_me:-configure}:24515: testing ...checked LIBS $LIBS ..." 1>&5 test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 -echo "${as_me:-configure}:15869: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 +echo "${as_me:-configure}:24519: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 else - echo "$as_me:15872: result: no" >&5 + echo "$as_me:24522: 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 #(vi - xrel) #(vi + case "x$cf_cv_shlib_version" in + (xrel) cf_liblink="\${LIB_ABI_NAME}" cf_libname="\${LIB_REL_NAME}" ;; - xabi) + (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_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_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} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:15986: creating $CONFIG_STATUS" >&5 +{ echo "$as_me:24636: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} 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 \$@" _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 else 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 fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi 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 ." EOF cat >>$CONFIG_STATUS <>$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 <>$CONFIG_STATUS <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header - { { echo "$as_me:16162: error: ambiguous option: $1 + { { echo "$as_me:24812: 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:16181: error: unrecognized option: $1 + -*) { { echo "$as_me:24831: 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.20121002, executed with +This file was extended by $as_me 2.52.20170501, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS > $ac_cs_invocation on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF cat >>$CONFIG_STATUS <>$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:16240: error: invalid argument: $ac_config_target" >&5 + *) { { echo "$as_me:24890: 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 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 <\$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,@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,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t s,@CPP@,$CPP,;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,@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,@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 CEOF 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 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` + 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` + continue + fi + fi + fi + fi + if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + 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" + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end 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 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 - | *:- | *:-:* ) # 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 .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) 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 ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then - { echo "$as_me:16564: creating $ac_file" >&5 + { echo "$as_me:25254: 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:16582: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:25272: 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 else # /dev/null tree - { { echo "$as_me:16595: error: cannot find input file: $f" >&5 + { { echo "$as_me:25285: 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 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` if test -n "$ac_seen"; then ac_used=`grep '@datarootdir@' $ac_item` if test -z "$ac_used"; then - { echo "$as_me:16611: WARNING: datarootdir was used implicitly but not set: + { echo "$as_me:25301: 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` if test -n "$ac_seen"; then - { echo "$as_me:16620: WARNING: datarootdir was used explicitly but not set: + { echo "$as_me:25310: 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 <>$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 for ac_name in prefix exec_prefix datarootdir do ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file` if test -n "$ac_seen"; then ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file` if test -z "$ac_init"; then ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'` - { echo "$as_me:16657: WARNING: Variable $ac_name is used but was not set: + { echo "$as_me:25347: 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 if test -s $tmp/out; then ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out` - { echo "$as_me:16668: WARNING: Some variables may not be substituted: + { echo "$as_me:25358: 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 # # 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 - | *:- | *:-:* ) # 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:16717: creating $ac_file" >&5 + test x"$ac_file" != x- && { echo "$as_me:25407: 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:16728: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:25418: 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 else # /dev/null tree - { { echo "$as_me:16741: error: cannot find input file: $f" >&5 + { { echo "$as_me:25431: 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 while grep . conftest.vals >/dev/null do # Write chunks of a limited-size here document to conftest.frag. echo ' cat >> conftest.frag <> $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 < $tmp/out rm -f $tmp/in mv $tmp/out $tmp/in rm -f conftest.edit conftest.frag ' >> $CONFIG_STATUS 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:16799: $ac_file is unchanged" >&5 + { echo "$as_me:25489: $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 fi else cat $tmp/config.h rm -f $tmp/config.h fi done 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 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 + # 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_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - 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" + # 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_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + 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 + 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 ;; + 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 #(vi - xrel) #(vi + case "x$cf_cv_shlib_version" in + (xrel) cf_liblink="\${LIB_ABI_NAME}" cf_libname="\${LIB_REL_NAME}" ;; - xabi) + (xabi) cf_liblink="\${LIB_REL_NAME}" cf_libname="\${LIB_ABI_NAME}" ;; esac fi LIB_TARGET=$cf_libname case x$LIB_MODEL in -xlibtool|xshared) #(vi +(xlibtool|xshared) cf_libdeps="\${LIBS} \${LDFLAGS}" ;; -x*) +(x*) cf_libdeps= ;; esac cat >>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>makefile <>$CONFIG_STATUS <<\EOF { (exit 0); exit 0; } EOF 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 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; } fi Index: vendor/dialog/dist/configure.in =================================================================== --- vendor/dialog/dist/configure.in (revision 339481) +++ vendor/dialog/dist/configure.in (revision 339482) @@ -1,279 +1,273 @@ -dnl $Id: configure.in,v 1.79 2013/09/02 14:02:57 tom Exp $ +dnl $Id: configure.in,v 1.92 2018/06/18 08:59:49 tom Exp $ dnl Process this file with autoconf to produce a configure script. dnl --------------------------------------------------------------------------- -dnl Copyright 1999-2011,2012 -- Thomas E. Dickey +dnl Copyright 1999-2016,2018 -- 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.20011201) +AC_PREREQ(2.52.20170501) 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 -AC_CHECK_TOOL(AR, ar, ar) +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_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_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 -use_ncurses=no -AC_ARG_WITH(ncurses, - [ --with-ncurses compile/link with ncurses library], - [use_ncurses=ncurses]) -AC_ARG_WITH(ncursesw, - [ --with-ncursesw compile/link with wide-char ncurses library], - [use_ncurses=ncursesw]) -if test $use_ncurses != no ; then - cf_wide_curses=yes - if test $use_ncurses = ncursesw ; then - CF_UTF8_LIB - fi - CF_NCURSES_CONFIG($use_ncurses) -else - cf_wide_curses=no - CF_CURSES_CONFIG -fi +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_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) 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])],,$cf_all_widgets) + 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_wide_curses) + [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 unctrl.h unistd.h) +AC_CHECK_HEADERS(search.h stdint.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 \ ) 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 ],[setlocale(LC_ALL, "")],[AC_DEFINE(HAVE_SETLOCALE,1,[Define to 1 if locale feature can be enabled])]) +CF_NL_LANGINFO_1STDAY CF_DISABLE_RPATH_HACK CF__DEFINE_SHLIB_VARS 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]) Index: vendor/dialog/dist/demo.pl =================================================================== --- vendor/dialog/dist/demo.pl (nonexistent) +++ vendor/dialog/dist/demo.pl (revision 339482) @@ -0,0 +1,337 @@ +#!/usr/bin/env perl +# $Id: demo.pl,v 1.23 2018/06/12 21:39:44 tom Exp $ +################################################################################ +# Copyright 2018 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 demonstration is provided solely to exercise the sample Perl wrapper for +# dialog which is included in its source-code. See libui-dialog-perl for a +# more comprehensive binding. +# +# TODO: modify dialog.pl to use $DIALOG environment variable, drive from GetOpts here +# TODO: eliminate constant $scr_lines in dialog.pl + +use warnings; +use strict; +use diagnostics; + +use FindBin qw($Bin $Script); +use lib "$Bin"; + +require "dialog.pl"; +dialog->import('@dialog_result'); +our @dialog_result; + +sub tput($$) { + my $name = shift; + my $default = shift; + my $value = `tput "$name"`; + chomp $value; + $value = $default unless ( $value =~ /^[0-9]+$/ ); + return $value; +} + +sub napms($) { + my $msecs = shift; + select( undef, undef, undef, $msecs * 0.001 ); +} + +sub show_results($$) { + my $title = shift; + my $width = shift; + &rhs_msgbox( + $title, + sprintf( + "Resulting text:\\n %s", join( '\\n ', @dialog_result ) + ), + $width + ); +} + +sub doit() { + my $status = 1; + my $RHS_CLEAR = "clear"; + my $RHS_TEXTBOX = "textbox"; + my $RHS_MSGBOX = "msgbox"; + my $RHS_INFOBOX = "infobox"; + my $RHS_YESNO = "yesno"; + my $RHS_GAUGE = "gauge"; + my $RHS_INPUTBOX = "inputbox"; + my $RHS_MENU = "menu"; + my $RHS_MENUL = "menul"; + my $RHS_MENUA = "menua"; + my $RHS_CHECKLIST = "checklist"; + my $RHS_CHECKLISTL = "checklistl"; + my $RHS_CHECKLISTA = "checklista"; + my $RHS_RADIOLIST = "radiolist"; + + my @demo_2col = qw( + This that + is has + a this + 2-column quoted + menu "tag". + ); + my @demo_3col; + my @demo_tags; + my %demo_hash; + + for ( my $s = 0, my $t = 0 ; $s <= $#demo_2col ; $s += 2, $t += 3 ) { + my $d = $s / 2; + my $c1 = $demo_2col[$s]; + my $c2 = $demo_2col[ $s + 1 ]; + $demo_3col[$t] = $c1; + $demo_3col[ $t + 1 ] = $c2; + $demo_3col[ $t + 2 ] = ( $c1 =~ /2/ ) ? 1 : 0; + $demo_tags[$d] = $c1; + $demo_tags[$d] =~ s/2/1/; + $demo_tags[ $d + ( $#demo_2col + 1 ) / 2 ] = $c2; + $demo_hash{ sprintf( "%d %s", $d, $c1 ) } = $c2; + } + + while ( $status > 0 ) { + my $lines = &tput( "lines", 24 ); + my $cols = &tput( "cols", 80 ); + my $maxcols = $cols - 4; + my $mincols = ( $cols > 8 ) ? 8 : $cols; + my $midcols = int( ( $cols * 3 ) / 4 ); + + @dialog_result = (); + $status = &rhs_menu( + "My title", "My message", + 0, 14, + $RHS_CLEAR, "clear and exit", + $RHS_TEXTBOX, "text-box of this script", + $RHS_MSGBOX, "informational-message, OK button", + $RHS_INFOBOX, "informational-message, no button", + $RHS_YESNO, "message with Yes/No buttons", + $RHS_GAUGE, "message with progress-gauge", + $RHS_INPUTBOX, "input-box", + $RHS_MENU, "menu, with tags and description", + $RHS_MENUL, "menu, using only tags", + $RHS_MENUA, "alphabetically sorted menu", + $RHS_CHECKLIST, "check-list with tags and description", + $RHS_CHECKLISTL, "check-list using only tags", + $RHS_CHECKLISTA, "alphabetically sorted check-list", + $RHS_RADIOLIST, "list of radio-buttons" + ); + if ( $status > 0 and $#dialog_result == 0 ) { + + my $testcase = $dialog_result[0]; + if ( $testcase eq $RHS_CLEAR ) { + &rhs_clear; + last; + } + elsif ( $testcase eq $RHS_TEXTBOX ) { + &rhs_textbox( "This script", "$Script", 0, 0 ); + } + elsif ( $testcase eq $RHS_MSGBOX ) { + my $msg = + "This is a demonstration script.\\n" + . "This should be the second line,\\n" + . "and this should be the third line,"; + &rhs_msgbox( "A message", $msg, + int( ( length($msg) + 3 ) / 3 ) + 3 ); + } + elsif ( $testcase eq $RHS_INFOBOX ) { + my $msg = + "This is a fairly long line of text, used to" + . " show how dialog can be used to wrap lines to fit in" + . " screens with different width. The text will start wide," + . " then get narrower, showing a new infobox for each width" + . " before going back up to the full width of the terminal."; + my $wide = $maxcols; + while ( $wide > $mincols ) { + &rhs_infobox( "Info-box", $msg, $wide-- ); + &napms(50); + } + while ( $wide < $maxcols ) { + &rhs_infobox( "Info-box", $msg, ++$wide ); + &napms(50); + } + &rhs_msgbox( "Info-end", $msg, $wide ); + } + elsif ( $testcase eq $RHS_YESNO ) { + if ( + &rhs_yesno( + "Yes/no", + "Should \"dialog --yesno\" return \"1\" on \"yes\"" + . " to simplify (some) shell scripts?", + $cols / 2 + ) + ) + { + &rhs_msgbox( + "Explanation", + "No, a successful program exits with " + . "\"0\" (EXIT_SUCCESS)", + $cols / 2 + ); + } + else { + &rhs_msgbox( + "Explanation", + "Shell scripts assume that \"exit\ 0\" is successful;" + . " Perl is different.", + $cols / 2 + ); + } + } + elsif ( $testcase eq $RHS_GAUGE ) { + my $pct = 0; + my $sec = 10; + &rhs_gauge( + "My gauge", + "Show progress (or lack of it)", + $midcols * 3, $pct + ); + while ( $pct < 100 ) { + $pct++; + &napms($sec); + $sec *= 1.04; + &rhs_update_gauge($pct); + } + $pct = 99; + &rhs_update_gauge_and_message( "This will go faster", $pct ); + while ( $pct > 0 ) { + $pct--; + &napms($sec); + $sec /= 1.05; + &rhs_update_gauge($pct); + } + &napms(1000); + &rhs_stop_gauge; + } + elsif ( $testcase eq $RHS_INPUTBOX ) { + if ( + &rhs_inputbox( + "My inputbox", "This demonstrates the inputbox", + $maxcols, "" + ) + ) + { + &show_results( "My inputbox", $midcols ); + } + } + elsif ( $testcase eq $RHS_MENU ) { + if ( + &rhs_menu( + ( + "A menu", + "This menu uses \"tag\" values and descriptions:", + $midcols, ( $#demo_2col + 1 ) / 2 + ), + @demo_2col + ) + ) + { + &show_results( "My menu", $midcols ); + } + } + elsif ( $testcase eq $RHS_MENUL ) { + if ( + &rhs_menul( + ( + "A menu", "This menu uses only the \"tag\" values:", + $midcols, $#demo_tags + 1 + ), + @demo_tags + ) + ) + { + &show_results( "My long-menu", $midcols ); + } + } + elsif ( $testcase eq $RHS_MENUA ) { + if ( + &rhs_menua( + "A menu", "This menu uses the sorted keys from a hash:", + $midcols, %demo_hash + ) + ) + { + &show_results( "My alpha-menu", $midcols ); + } + } + elsif ( $testcase eq $RHS_CHECKLIST ) { + if ( + &rhs_checklist( + ( + "A checklist", + "This checklist uses \"tag\" values" + . " and descriptions:", + $midcols, + ( $#demo_3col + 1 ) / 3 + ), + @demo_3col + ) + ) + { + &show_results( "My checklist", $midcols ); + } + } + elsif ( $testcase eq $RHS_CHECKLISTL ) { + if ( + &rhs_checklistl( + ( + "A checklist", + "This checklist uses only the \"tag\" values:", + $midcols, $#demo_tags + 1 + ), + @demo_tags + ) + ) + { + &show_results( "My long-checklist", $midcols ); + } + } + elsif ( $testcase eq $RHS_CHECKLISTA ) { + if ( + &rhs_checklista( + "A checklist", + "This checklist uses the sorted keys from a hash:", + $midcols, %demo_hash + ) + ) + { + &show_results( "My alpha-checklist", $midcols ); + } + } + elsif ( $testcase eq $RHS_RADIOLIST ) { + if ( + &rhs_radiolist( + ( + "A radiolist", + "This radiolist uses \"tag\" values" + . " and descriptions:", + $midcols, + ( $#demo_3col + 1 ) / 3 + ), + @demo_3col + ) + ) + { + &show_results( "My radiolist", $midcols ); + } + } + } + } +} + +&doit; + +1; Property changes on: vendor/dialog/dist/demo.pl ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/dialog.1 =================================================================== --- vendor/dialog/dist/dialog.1 (revision 339481) +++ vendor/dialog/dist/dialog.1 (revision 339482) @@ -1,1661 +1,1916 @@ '\" t -.\" $Id: dialog.1,v 1.167 2013/09/02 17:38:36 tom Exp $ -.\" Copyright 2005-2012,2013 Thomas E. Dickey +.\" $Id: dialog.1,v 1.205 2018/06/19 00:26:13 tom Exp $ +.\" Copyright 2005-2017,2018 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 -.IP \(bu 4 +.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: 2013/09/02 17:38:36 $" +.TH \*D 1 "" "$Date: 2018/06/19 00:26:13 $" .SH NAME dialog \- display dialog boxes from shell scripts .SH SYNOPSIS \fB\*p --clear\fP .br .BI "\*p --create-rc " file .br \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 to present a variety of questions or +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 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". 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" (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, 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 parameters to the standard error. This is useful when debugging complex scripts using 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 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. Interpretation of the command-line resumes from that point. 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, +\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". . .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. +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 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". To compare the effects, use these: . .ES All three widgets visible, staircase effect, ordered 1,2,3: .Ex -\*p \\ - --begin 2 2 --yesno "" 0 0 \\ - --and-widget --begin 4 4 --yesno "" 0 0 \\ +\*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 \\ - --clear --begin 2 2 --yesno "" 0 0 \\ - --and-widget --clear --begin 4 4 --yesno "" 0 0 \\ +\*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 \\ - --keep-window --begin 2 2 --yesno "" 0 0 \\ - --and-widget --keep-window --begin 4 4 --yesno "" 0 0 \\ +\*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 \\ - --keep-window --begin 2 2 --yesno "" 0 0 \\ - --and-widget --clear --begin 4 4 --yesno "" 0 0 \\ +\*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. . .IP "\fB--colors" -Interpret embedded "\\Z" 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: -0 through 7 are the ANSI used in curses: +.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'. -The settings are cumulative, e.g., "\\Zb\\Z1" makes the following text +.bP +The settings are cumulative, e.g., "\eZb\eZ1" makes the following text bold (perhaps bright) red. -Restore normal settings with "\\Zn". +.bP +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. +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 -See also the "\fB--no-collapse\fP" and "\fB--trim\fP" options. +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 +not used, or +.bP +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--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 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, make the default button of widgets that provide "OK" and "Cancel" -a \fBCancel\fP. +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 those options overrides this, -making the default button always "Yes" (internally the same as "OK"). +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. 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--exit-label \fIstring" -Override the label used for "EXIT" buttons. +Override the label used for \*(``EXIT\*('' buttons. . .IP "\fB--extra-button" -Show an extra button, between "OK" and "Cancel" buttons. +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". +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, -i.e., in checklist, radiolist and menu boxes. +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. .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 after the token "HELP": +\fB\*L\fP will also write 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. .bP Otherwise, the item's tag (the first field) will be written. .RE .IP .IP 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 "\fB--help-label \fIstring" -Override the label used for "Help" buttons. +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. +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 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, 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 +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", 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. That causes them to be repainted in reverse order. 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. 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. +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. +.IP +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 +not used, or +.bP +the \fB--trim\fP option is not used. +.RE +.IP +For more information, see \fBWhitespace Options\fP. . .IP "\fB--no-items" Some widgets (checklist, inputmenu, radiolist, menu) display a list -with two columns (a "tag" and "item", i.e., "description"). +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. +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. 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. +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". . .IP "\fB--no-mouse Do not enable the mouse. . .IP "\fB--no-nl-expand -Do not convert "\\n" 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 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. -A script can still test if the user pressed the "Enter" key to accept the data. +Suppress the \*(``OK\*('' button in checklist, inputbox and menu box modes. +A script can still test if the user pressed +the \*(``Enter\*('' key to accept the data. . .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"). +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 column of tags from the display. 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 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. +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" +.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 --separate-output) 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. +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. . .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. +.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 checklist widgets, output result one line at a time, with no quoting. +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. In either case, \fB\*p\fP adds backslashes to make the output useful in shell scripts. . .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. . .IP "\fB--tab-len \fIn" Specify the number of spaces that a tab character occupies if the "\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 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. 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 -to setup multiple concurrent widgets. +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. Piped input to the \fIgauge\fP widget is logged. Use control/T to log a picture of the current dialog window. -.PP +.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, 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. +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. +.RE +.IP +For more information, see \fBWhitespace Options\fP. . .IP 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". . .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. +Override the label used for \*(``Yes\*('' buttons. . .\" ************************************************************************ .SS Box Options All dialog boxes have at least three parameters: -.TP 5 +.TP 7 \fItext\fP the caption or contents of the box. -.TP 5 +.TP 7 \fIheight\fP the height of the dialog box. -.TP 5 +.TP 7 \fIwidth\fP the width of the dialog box. .PP Other parameters depend on the box type. . . -.IP "\fB--buildlist \fItext height width \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 +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 to control whether the cursor is allowed to visit the lists directly. .RS .bP If \fB--visit-items\fP is not given, tab-traversal uses two states (OK/Cancel). .bP 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. .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, -the strings will be quoted as needed to make it simple for scripts to separate them. +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. . . .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. +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. . . .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. +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, -the strings will be quoted as needed to make it simple for scripts to separate them. +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. . . .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. +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 +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. +On exit, the contents of the text-entry window are written +to \fB\*p\fP's output. . .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, -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. +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..." .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" -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. +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 +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. +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" 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", +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. +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. -Only an "OK" button is provided for input, -but an ESC exit status may be returned. +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..." 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 +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 .RE . . .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 -.IR 1-9 ". There are" -\fImenu-height\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 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..." .fi The \fBmixedform\fP dialog displays a form consisting of labels and fields, 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..." -A -\fBmixedgauge\fP -box displays a meter along the bottom of the box. +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 +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 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, +Only an \*(``OK\*('' button is provided for input, but an ESC exit status may be returned. . .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 +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. +For these reasons, using \*(``init\*('' is highly discouraged. 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..." .fi 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. .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--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. .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). +(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..." -A -\fBradiolist\fP -box is similar to a -\fBmenu\fP -box. +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, +Only an \*(``OK\*('' button is provided for input, but an ESC exit status may be returned. . . .nf -.IP "\fB--rangebox \fItext height width list-height min-value max-value default-value" +.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--tailboxbg \fIfile height width" Display text from a file in a dialog box as a background task, 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. -Until those widgets are closed (e.g., an "OK"), +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 is given. .IP On exit, no text is written to \fB\*p\fP's output. -Only an "EXIT" button is provided for input, +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, l in place of the cursor keys, +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, +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. . . .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") +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 -.I -"\en" +.RI """" \en """" or newline characters -\fI`\en'\fP +.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) +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", +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. +.bP +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. +It changes sequences of tabs, spaces +(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 +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. +.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. +.na +.TS +center tab(/) ; +lB lB lB lB lB +lB lB lB lB lB +_ _ _ _ _ +lw5 lw5 lw5 lw5 lw30. +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. +T} +no/no/no/yes/T{ +Convert tab to space. +Convert newline to space. +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. +T} +no/yes/no/yes/T{ +Convert newline to space. +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. +T} +yes/no/no/yes/T{ +Convert tab to space. +Wrap on 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. +T} +yes/yes/no/yes/T{ +Wrap on 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 +.ad +. +.\" ************************************************************************ .SH "RUN-TIME CONFIGURATION" .TP 4 1. Create a sample configuration file by typing: .LP -.in +1i -"\*p --create-rc " +.Ex +\*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 specific widgets such as \fBtextbox\fP. 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 -\fBcurses.h\fP, e.g., "HELP" from "KEY_HELP". +\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. .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". +\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. .TS center tab(/) ; -l l l +lI lI lI +_ _ _ l l l . -\fIWidget\fR/\fIWindow name\fR/\fISubwindow Name\fR +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 .PP Some widgets are actually other widgets, using internal settings to modify the behavior. Those use the same widget name as the actual widget: .TS center tab(/) ; -l l +lI lI +_ _ l l . -\fIWidget\fR/\fIActual Widget\fR +Widget/Actual Widget dselect/fselect infobox/msgbox inputmenu/menu mixedform/form passwordbox/inputbox passwordform/form prgbox/progressbox programbox/progressbox tailboxbg/tailbox +_ .TE .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, \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 dlgk_keys.h -for "form" (left/right/next/prev). +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, double-quotes and backslashes are interpreted. .IP 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_OK\fP Define any of these variables to change the exit code on Cancel (1), -error (-1), +error (\-1), ESC (255), Extra (3), Help (2), Help with \fB--item-help\fP (2), or OK (0). -Normally shell scripts cannot distinguish between -1 and 255. +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 +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. .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 -.BR Help +.B Help button is pressed (DIALOG_HELP), .br except as noted below about DIALOG_ITEM_HELP. .TP 5 3 if the -.BR Extra +.B Extra button is pressed (DIALOG_EXTRA). .TP 5 4 if the -.BR Help +.B Help button is pressed, .br 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 --1 +\-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, 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". -.SS ORIGINAL DIALOG -First, there is the "original" \fBdialog\fP program to consider (versions -0.3 to 0.9). +You may want to write scripts which run with +other \fBdialog\fP \*(``clones\*(''. +.SS Original Dialog +First, there is the \*(``original\*('' \fBdialog\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 -l l +tab(/) ; +lI lI _ _ l l. -\fIOption\fR \fITreatment\fR -\fB--beep-after\fP ignored -\fB--guage\fP mapped to \fB--gauge\fP +Option/Treatment +\fB--beep-after\fP/ignored +\fB--guage\fP/mapped to \fB--gauge\fP +_ .TE .RE -.SS XDIALOG -Technically, "\fBXdialog\fP", -this is an X application. +.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. .PP The \fB\*p\fP program ignores these options which are recognized by \fBXdialog\fP: .RS .TS -l l +tab(/) ; +lI lI _ _ l l. -\fIOption\fR \fITreatment\fR -\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 +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 +_ .TE .RE .PP -\fBXdialog\fP's manpage has a section discussing its compatibility with \fB\*p\fP. +\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 "\n" (line feed) as a -results separator for the checklist widget; this has been -changed to "/" in Xdialog v1.5.0 so to make it compatible with -(c)dialog. In your old scripts using the Xdialog checklist, you -will then have to add the --separate-output option before the ---checklist one. +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 +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. .RE .PP \fB\*L\fP has not used a different separator; the difference was likely due to confusion regarding some script. -.SS WHIPTAIL +.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 -.RS -.sp -.nf +.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 enviroments such as installers, +it to be smaller in embedded environments such as installers, rescue disks, etc. -.sp + 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. -.fi -.RE +.Ee .PP Comparing actual sizes (Debian testing, 2007/1/10): -The total of sizes for \fBwhiptail\fP, the newt, popt and slang libraries is 757kb. -The comparable number for \fB\*p\fP (counting ncurses) is 520kb. +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) .bP \fB--passwordbox\fP (from Debian changes in 1999), .bP \fB--default-item\fP (from \fB\*p\fP 2000/02/22), .bP \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 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 -l l +tab(/) ; +lI lI _ _ l l. -\fIOption\fR \fITreatment\fR -\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 +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 +_ .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. \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) +Thomas E.\& Dickey (updates for 0.9b and beyond) .SH CONTRIBUTORS -Kiran Cherupally - the mixed form and mixed gauge widgets. +Kiran Cherupally \(en the mixed form and mixed gauge widgets. .LP -Tobias C. Rittweiler +Tobias C.\& Rittweiler .LP -Valery Reznic - the form and progressbox widgets. +Valery Reznic \(en the form and progressbox widgets. .LP -Yura Kalinichenko adapted the gauge widget as "pause". +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 - version 0.3, "dialog" +Savio Lam \(en version 0.3, \*(``dialog\*('' .bP -Stuart Herbert - patch for version 0.4 +Stuart Herbert \(en patch for version 0.4 .bP -Marc Ewing - the gauge widget. +Marc Ewing \(en the gauge widget. .bP -Pasquale De Marco "Pako" - version 0.9a, "cdialog" +Pasquale De Marco \*(``Pako\*('' \(en version 0.9a, \*(``cdialog\*('' Index: vendor/dialog/dist/dialog.3 =================================================================== --- vendor/dialog/dist/dialog.3 (revision 339481) +++ vendor/dialog/dist/dialog.3 (revision 339482) @@ -1,3805 +1,3638 @@ '\" t -.\" $Id: dialog.3,v 1.93 2013/09/22 23:58:11 tom Exp $ -.\" Copyright 2005-2012,2013 Thomas E. Dickey +.\" $Id: dialog.3,v 1.121 2018/06/20 01:21:53 tom Exp $ +.\" Copyright 2005-2017,2018 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 +10 +.de Ex +.RS +7 +.PP .nf +.ft CW .. -.de EE +.de Ee .fi +.ft R .RE .. .\" Bulleted paragraph .de bP -.IP \(bu 4 +.ie n .IP \(bu 4 +.el .IP \(bu 2 .. -.TH \*D 3 "" "$Date: 2013/09/22 23:58:11 $" +.ie \n(.g .ds `` \(lq +.el .ds `` `` +.ie \n(.g .ds '' \(rq +.el .ds '' '' +.TH \*D 3 "" "$Date: 2018/06/20 01:21:53 $" .SH NAME dialog \- widgets and utilities for the \*p program .SH SYNOPSIS .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 to present a variety of questions or +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 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 defined constants can be mapped using environment variables +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)). +(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, +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 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\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 +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.all_subwindows +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.all_windows +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.aspect_ratio +.SS .aspect_ratio 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.finish_string +.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. +given string parameter. +The \fBgauge\fP widget uses this feature. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.getc_callbacks -This is setup in \fIui_getc.c\fP to record windows which must be polled -for input, e.g,. to handle the background tailbox widget. +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.getc_redirect +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.no_mouse +.SS .no_mouse 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.output +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.output_count +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.pipe_input +.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. 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.screen_initialized +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.screen_output +.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). .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.separate_str +.SS .separate_str 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.tab_len -This corresponds to the command-line option "\fB--tab-len\fP \fInumber\fP". +.SS .tab_len +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" option is given. The default is 8. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.trace_output +.SS .text_height +This 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". +.\" --------------------------------------------------------------------------- +.SS .text_only +\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 +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 .trace_output This corresponds to the command-line option "\fB--trace\fP \fIfile\fP". It is the file pointer to which trace messages are written. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.use_colors +.SS .use_colors This is set in \fIinit_dialog\fP if the curses implementation supports color. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.use_scrollbar +.SS .use_scrollbar This corresponds to the command-line option "\fB--scrollbar\fP". If true, draw a scrollbar to make windows holding scrolled data more readable. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.use_shadow +.SS .use_shadow 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_STATE.visit_items +.SS .visit_items 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: .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.ascii_lines +.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 "-". See \fIDIALOG_VARS.no_lines\fP. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.backtitle -This corresponds to the command-line option "\fB--backtitle\fP \fIbacktitle\fP". +.SS .backtitle +This corresponds to the command-line option +"\fB--backtitle\fP \fIbacktitle\/\fP". It specifies a \fIbacktitle\fP string to be displayed on the backdrop, at the top of the screen. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.beep_after_signal +.SS .beep_after_signal 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. +If true, beep after a user has completed a widget +by pressing one of the buttons. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.beep_signal +.SS .beep_signal This corresponds to the command-line option "\fB--beep\fP". It is obsolete. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.begin_set -This is true if the command-line option "\fB--begin y x\fP" was used. -It specifies the position of the upper left corner of a dialog box on the screen. +.SS .begin_set +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.begin_x +.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). .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.begin_y +.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). .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.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 .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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.cant_kill +.SS .cant_kill 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.colors +.SS .colors This corresponds to the command-line option "\fB--colors\fP". -If true, interpret embedded "\\Z" sequences in the dialog text +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., "\\Zb\\Z1" makes the following text +The settings are cumulative, e.g., "\eZb\eZ1" makes the following text bright red. -Restore normal settings with "\\Zn". +Restore normal settings with "\eZn". .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.column_separator +.SS .column_separator 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.cr_wrap +.SS .cr_wrap 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. +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.date_format -This corresponds to the command-line option "\fB--date-format\fP \fIstring\fP". +.SS .date_format +This corresponds to the command-line option +"\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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.default_button +.SS .default_button This is set by the command-line option "\fB--default-button\fP. It is used by \fBdlg_default_button\fP. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.default_item -This corresponds to the command-line option "\fB--default-item\fP \fIstring\fP". +.SS .default_item +This corresponds to the command-line option +"\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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.defaultno +.SS .defaultno 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, make the default button of widgets that provide "OK" and "Cancel" -a \fBCancel\fP. +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, -making the default button always "Yes" (internally the same as "OK"). +making the default button always \*(``Yes\*('' +(internally the same as \*(``OK\*(''). .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.dlg_clear_screen +.SS .dlg_clear_screen 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.exit_label +.SS .exit_label This corresponds to the command-line option "\fB--exit-label string\fP". -The given string overrides the label used for "EXIT" buttons. +The given string overrides the label used for \*(``EXIT\*('' buttons. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.extra_button +.SS .extra_button This corresponds to the command-line option "\fB--extra-button\fP". If true, some widgets show an extra button, -between "OK" and "Cancel" buttons. +between \*(``OK\*('' and \*(``Cancel\*('' buttons. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.extra_label -This corresponds to the command-line option "\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 .extra_label +This corresponds to the command-line option +"\fB--extra-label\fP \fIstring\/\fP". +The given string overrides the label used for \*(``Extra\*('' buttons. +Note: for inputmenu widgets, this defaults to \*(``Rename\*(''. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.formitem_type +.SS .formitem_type 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.help_button +.SS .help_button This corresponds to the command-line option "\fB--help-button\fP". -If true, some widgets show a help-button after "OK" and "Cancel" buttons, +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 -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". +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.help_file -This corresponds to the command-line option "\fB--hfile\fP \fIstring\fP". +.SS .help_file +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.help_label -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_label +This corresponds to the command-line option "\fB--help-label\fP \fIstring\/\fP". +The given string overrides the label used for \*(``Help\*('' buttons. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.help_line -This corresponds to the command-line option "\fB--hline\fP \fIstring\fP". +.SS .help_line +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.help_status +.SS .help_status 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. +after the item-help \*(``HELP\*('' information. This can be used to reconstruct the state of a checklist after processing the help request. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.help_tags +.SS .help_tags 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.input_length +.SS .input_length This is nonzero if \fIDIALOG_VARS.input_result\fP is allocated, versus being a pointer to the user's local variables. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.input_menu +.SS .input_menu This flag is set to denote whether the menubox widget implements a menu versus a inputmenu widget. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.input_result +.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: -.RS .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. -.RE -.IP +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.insecure +.SS .insecure 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.in_helpfile +.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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.item_help +.SS .iso_week +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". 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.keep_tite +.SS .keep_tite 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. +(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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.keep_window +.SS .keep_window 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.last_key +.SS .last_key This corresponds to the command-line option "\fB--last-key\fP". .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.max_input -This corresponds to the command-line option "\fB--max-input\fP \fIsize\fP". +.SS .max_input +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.no_items +.SS .no_items 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"). +with two columns (a \*(``tag\*('' and \*(``item\*('', +i.e., \*(``description\*(''). This tells \fB\*p\fP to read shorter rows from data, -omitting the "list". +omitting the \*(``list\*(''. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.no_label -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_label +This corresponds to the command-line option "\fB--no-label\fP \fIstring\/\fP". +The given string overrides the label used for \*(``No\*('' buttons. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.no_lines +.SS .no_lines This corresponds to the command-line option "\fB--no-lines\fP. It suppresses line-drawing. See \fIDIALOG_VARS.ascii_lines\fP. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.no_nl_expand +.SS .no_nl_expand This corresponds to the command-line option "\fB--no-nl-expand\fP". -If false, \fBdlg_trim_string\fP converts literal "\\n" substrings +If false, \fBdlg_trim_string\fP converts literal "\en" substrings in a message into newlines. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.no_tags +.SS .no_tags 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"). +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 column of tags from the display. -.IP +.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 the first character of the description. In either case, the matchable character is highlighted. -.IP +.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 c c. +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 -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.nocancel +.SS .nocancel This corresponds to the command-line option "\fB--no-cancel\fP". If true, -suppress the "Cancel" button in checklist, inputbox and menu box modes. +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 \fIDIALOG_VARS.nocollapse +.SS .nocollapse 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 option. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.nook +.SS .nook This corresponds to the command-line option "\fB--nook\fP. -\fB\*L\fP will suppress the "ok" (or "yes") button from the widget. +\fB\*L\fP will suppress the \*(``ok\*('' (or \*(``yes\*('') button +from the widget. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.ok_label -This corresponds to the command-line option "\fB--ok-label\fP \fIstring\fP". -The given string overrides the label used for "OK" buttons. +.SS .ok_label +This corresponds to the command-line option "\fB--ok-label\fP \fIstring\/\fP". +The given string overrides the label used for \*(``OK\*('' buttons. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.print_siz +.SS .print_siz 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.quoted +.SS .quoted 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.separate_output +.SS .reorder +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". If true, checklist widgets output result one line at a time, with no quoting. This facilitates parsing by another program. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.single_quoted +.SS .single_quoted 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 +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.size_err +.SS .size_err 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). .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.sleep_secs -This corresponds to the command-line option "\fB--sleep\fP \fIsecs\fP". +.SS .sleep_secs +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. +If nonzero, this is the number of seconds after to delay +after processing a dialog box. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.tab_correct +.SS .tab_correct 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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.time_format -This corresponds to the command-line option "\fB--time-format\fP \fIstring\fP". +.SS .time_format +This corresponds to the command-line option +"\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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.timeout_secs -This corresponds to the command-line option "\fB--timeout\fP \fIsecs\fP". +.SS .timeout_secs +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.title -This corresponds to the command-line option "\fB--title\fP \fItitle\fP". +.SS .title +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. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.trim_whitespace +.SS .trim_whitespace This corresponds to the command-line option "\fB--trim\fP". If true, eliminate leading blanks, trim literal newlines and repeated blanks from message text. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.visit_items -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. +.SS .week_start +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\*(''. .\" --------------------------------------------------------------------------- -.IP \fIDIALOG_VARS.yes_label -This corresponds to the command-line option "\fB--yes-label\fP \fIstring\fP". -The given string overrides the label used for "Yes" buttons. +.SS .yes_label +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. . .\" ************************************************************************ -.IP \fBdialog_buildlist +.SS dialog_buildlist implements the "\fB--buildlist\fP" option. -.RS .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 +\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 -.RE . .\" ************************************************************************ -.IP \fBdialog_calendar +.SS dialog_calendar implements the "\fB--calendar\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_checklist +.SS dialog_checklist implements the "\fB--checklist\fP" and "\fB--radiolist\fP" options depending on the \fIflag\fP parameter. -.RS .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 +\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. -.RE .\" ************************************************************************ -.IP \fBdialog_dselect +.SS dialog_dselect implements the "\fB--dselect\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_editbox +.SS dialog_editbox implements the "\fB--editbox\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_form +.SS dialog_form implements the "\fB--form\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_fselect +.SS dialog_fselect implements the "\fB--fselect\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_gauge +.SS dialog_gauge implements the "\fB--gauge\fP" option. Alternatively, a simpler or customized gauge widget can be -setup using +set up using \fBdlg_allocate_gauge\fP, \fBdlg_reallocate_gauge\fP, \fBdlg_update_gauge\fP and \fBdlg_free_gauge\fP. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_inputbox +.SS dialog_inputbox implements the "\fB--inputbox\fP" or "\fB--password\fP" option, depending on the value of \fIpassword\fP. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_helpfile +.SS dialog_helpfile implements the "\fB--hfile\fP" option. -.RS .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"), +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 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. -.RE .\" ************************************************************************ -.IP \fBdialog_menu +.SS dialog_menu implements the "\fB--menu\fP" or "\fB--inputmenu\fP" option depending on whether \fBdialog_vars.input_menu\fP is set. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_mixedform +.SS dialog_mixedform implements the "\fB--mixedform\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_mixedgauge +.SS dialog_mixedgauge implements the "\fB--mixedgauge\fP" option -.RS .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. +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-9 are the following strings +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. -.RE .\" ************************************************************************ -.IP \fBdialog_msgbox +.SS dialog_msgbox implements the "\fB--msgbox\fP" or "\fB--infobox\fP" option depending on whether \fIpauseopt\fP is set. -.RS .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, +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". -.RE +With an \*(``OK\*('' button, it is denoted a \*(``msgbox\*('', +without an \*(``OK\*('' button, it is denoted an \*(``infobox\*(''. .\" ************************************************************************ -.IP \fBdialog_pause +.SS dialog_pause implements the "\fB--pause\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_prgbox +.SS dialog_prgbox implements the "\fB--prgbox\fP" option. -.RS .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, +if true, an \*(``OK\*('' button will be shown, and the dialog will wait for it to complete. -.RE .\" ************************************************************************ -.IP \fBdialog_progressbox +.SS dialog_progressbox implements the "\fB--progressbox\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_rangebox +.SS dialog_rangebox implements the "\fB--rangebox\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_tailbox +.SS dialog_tailbox implements the "\fB--tailbox\fP" or "\fB--tailboxbg\fP" option depending on whether \fIbg_task\fP is set. -.RS .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, +Otherwise an \*(``OK\*('' button is added to the window, and it will be closed when the button is activated. -.RE .\" ************************************************************************ -.IP \fBdialog_textbox +.SS dialog_textbox implements the "\fB--textbox\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_timebox +.SS dialog_timebox implements the "\fB--timebox\fP" option. -.RS .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. -.RE .\" ************************************************************************ -.IP \fBdialog_treeview +.SS dialog_treeview implements the "\fB--treeview\fP" option. -.RS .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). -.RE .\" ************************************************************************ -.IP \fBdialog_yesno +.SS dialog_yesno implements the "\fB--yesno\fP" option. -.RS .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. -.RE . .\" ************************************************************************ .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 Here is a brief summary of the utility functions and their parameters: .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_callback +.SS dlg_add_callback Add a callback, used to allow polling input from multiple tailbox widgets. -.RS .TP 5 .B DIALOG_CALLBACK *\fIp\fP contains the callback information. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_callback_ref +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_help_formitem +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_help_listitem +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_last_key +.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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_quoted +.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. -.RS .TP 5 .B char * \fIstring is the string to add. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_result +.SS dlg_add_result Add a string to the result buffer \fBdialog_vars.input_result\fP. -.RS .TP 5 .B char * \fIstring is the string to add. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_separator +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_add_string +.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. -.RS .TP 5 .B char * \fIstring is the string to add. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_align_columns +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_allocate_gauge +.SS dlg_allocate_gauge Allocates a gauge widget. Use \fBdlg_update_gauge\fP to display the result. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_asciibox +.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. -.RS +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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_attr_clear +.SS dlg_attr_clear Set window to the given attribute. -.RS .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. -.RE .\" --------------------------------------------------------------------------- +.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 dlg_auto_size -Automatically size the window used for a widget. -If the given height or width are zero, -justify the \fIprompt\fP text and return the actual limits. -.RS -.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, +\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, +\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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_auto_sizefile +.SS dlg_auto_sizefile Like \fBdlg_auto_size\fP, but use a file contents to decide how large the widget should be. -.RS .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. -If it is -1, use the screen's height (after subtracting \fBdialog_vars.begin_y\fP +.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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_beeping +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_boxchar +.SS dlg_boxchar returns its \fBchtype\fP parameter transformed as follows: -.RS .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. +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. +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. -.RE +if the parameter is not a line-drawing or other special character +such as ACS_DARROW, +it returns the parameter unchanged. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_box_x_ordinate +.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). -.RS .TP 5 .B int \fIwidth is the width of the widget. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_box_y_ordinate +.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). -.RS .TP 5 .B int \fIheight is the height of the widget. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_buildlist +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_button_count +.SS dlg_button_count Count the buttons in the list. -.RS .TP 5 .B const char ** \fIlabels is a list of (pointers to) button labels terminated by a null pointer. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_button_layout +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_button_sizes +.SS dlg_button_sizes Compute the size of the button array in columns. -.RS .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. -.RE .\" --------------------------------------------------------------------------- +.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 dlg_button_x_step +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B 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. -.IP -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. -.RS -.TP 5 -.B const char * \fIlabel -is the label to test. -.RE -.\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_calc_list_width +.SS dlg_calc_list_width Calculate the minimum width for the list, assuming none of the items are truncated. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_calc_listh +.SS dlg_calc_listh Calculate new height and list_height values. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_calc_listw +.SS dlg_calc_listw This function is obsolete, provided for library-compatibility. It is replaced by \fBdlg_calc_list_width\fP. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_char_to_button +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_checklist -This entrypoint provides the \fB--checklist\fP or \fP--radiolist\fP +.SS dlg_checklist +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). -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_check_scrolled +.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, +DLGK_PAGE_FIRST, .br - DLGK_PAGE_LAST, +DLGK_PAGE_LAST, .br - DLGK_GRID_UP, +DLGK_GRID_UP, .br - DLGK_GRID_DOWN, +DLGK_GRID_DOWN, .br - DLGK_PAGE_PREV or +DLGK_PAGE_PREV or .br - DLGK_PAGE_NEXT. +DLGK_PAGE_NEXT. .RE .fi -.IP +.LP Some widgets use these key bindings for scrolling the prompt-text up and down, to allow for display in very small windows. -.IP +.LP The function returns 0 (zero) if it finds one of these keys, and -1 if not. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_clear +.SS dlg_clear Set window to the default \fB\*p\fP screen attribute. This is set in the rc-file with \fBscreen_color\fP. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_clr_result +.SS dlg_clr_result Free storage used for the result buffer (\fBdialog_vars.input_result\fP). The corresponding pointer is set to NULL. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_color_count +.SS dlg_color_count Return the number of colors that can be configured in \fB\*p\fP. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_color_setup +.SS dlg_color_setup Initialize the color pairs used in \fB\*p\fP. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_count_argv +.SS dlg_count_argv Count the entries in an argument vector. -.RS .TP 5 .B argv Points to the argument vector. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_count_columns +.SS dlg_count_columns Returns the number of columns used for a string. This is not necessarily the number of bytes in a string. -.RS .TP 5 .B const char * \fIstring is the string to measure. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_count_real_columns +.SS dlg_count_real_columns Returns the number of columns used for a string, -accounting for "\\Z" sequences which can be used for +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. -.RS .TP 5 .B const char * \fIstring is the string to measure. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_count_wchars +.SS dlg_count_wchars Returns the number of wide-characters in the string. -.RS .TP 5 .B const char * \fIstring is the string to measure. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_create_rc +.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. -.RS .TP 5 .B const char * \fIfilename is the name of the file to write to. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_ctl_size +.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. -.RS .TP 5 .B int \fIheight is the window's height .TP 5 .B int \fIwidth is the window's width -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_default_button +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_default_formitem +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_default_item +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_defaultno_button +.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). +find the button-index for the \*(``Cancel\*('' button. +Otherwise, return the index for \*(``OK\*('' (always zero). .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_del_window +.SS dlg_del_window Remove a window, repainting everything else. -.RS .TP 5 .B WINDOW * \fIwin is the window to remove. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_does_output +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_arrows +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_arrows2 +.SS dlg_draw_arrows2 Draw up/down arrows on a window, e.g., for scrollable lists. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_bottom_box +.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. -.RS .TP 5 .B WINDOW * \fIwin is the window to update. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_bottom_box2 +.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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_box +.SS dlg_draw_box Draw a rectangular box with line drawing characters. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_box2 +.SS dlg_draw_box2 Draw a rectangular box with line drawing characters. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_buttons +.SS dlg_draw_buttons Print a list of buttons at the given position. -.RS .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. -.RE +is the number of columns (or rows if \fIvertical\/\fP) allowed for the display. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_helpline +.SS dlg_draw_helpline draw the text in \fBdialog_vars.help_line\fP at the bottom of the given window. -.RS .TP 5 .B WINDOW * \fIdialog is the window to modify. .TP 5 .B bool \fIdecorations if true, allow room for the scrolling arrows. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_scrollbar +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_shadow +.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). -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_draw_title +.SS dlg_draw_title Draw a title centered at the top of the window. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_dummy_menutext +.SS dlg_dummy_menutext 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. -.IP +.LP The function should only return \fBDLG_EXIT_ERROR\fP. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_dump_keys +.SS dlg_dump_keys Write all user-defined key-bindings to the given stream, e.g., as part of \fBdlg_create_rc\fP. -.RS .TP 5 .B FILE * \fIfp is the stream on which to write the bindings. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_dump_window_keys +.SS dlg_dump_window_keys Write all user-defined key-bindings to the given stream, e.g., as part of \fBdlg_create_rc\fP. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_eat_argv +.SS dlg_eat_argv Remove one or more items from an argument vector. -.RS .TP 5 -.B int *argcp +.B int * \fIargcp in/out parameter giving the length of the argument vector. -.B char ***argvp +.B char *** \fIargvp in/out parameter pointing to the argument vector. -.B int start +.B int \fIstart starting index. -.B int count +.B int \fIcount number of arguments to remove. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_edit_offset +.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, +In this context, \*(``characters\*('' may be multicolumn, since the string can be a multibyte character string. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_edit_string +.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, which is a non-editing action outside this function. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_exit +.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. -.RS .TP 5 .B int \fIcode is the internal exit code, e.g., \fBDLG_EXIT_OK\fP, which may be remapped. -.RE -.IP +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_exit_buttoncode +.SS dlg_exit_buttoncode Map the given button index for \fBdlg_exit_label\fP into \fB\*p\fP's exit-code. -.RS .TP 5 .B int \fIbutton is the button index -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_exit_label +.SS dlg_exit_label Return a list of button labels. -If dialog_var.extra_button 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. +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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_exiterr +.SS dlg_exiterr Quit program killing all \fBtailboxbg\fP widgets. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_find_index +.SS dlg_find_index Given the character-offset to find in the list, return the corresponding array index. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_finish_string +.SS dlg_finish_string If \fIDIALOG_STATE.finish_string\fP is true, this function discards data used to speed up layout computations. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_flush_getc +.SS dlg_flush_getc Cancel the local data saved by \fBdlg_last_getc\fP. .\" --------------------------------------------------------------------------- -.IP dlg_editbox +.SS dlg_editbox This entrypoint provides the \fB--editbox\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_editbox\fP). -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_form +.SS dlg_form This entrypoint provides the \fB--form\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_form\fP). -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_free_columns +.SS dlg_free_columns Free data allocated by \fBdlg_align_columns\fP. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_free_formitems +.SS dlg_free_formitems Free memory owned by a list of DIALOG_FORMITEM's. -.RS .TP 5 .B DIALOG_FORMITEM * \fIitems is the list to free. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_free_gauge +.SS dlg_free_gauge Remove the gauge widget from the screen and free its associated memory. -.RS .TP 5 .B void *\fIobjptr points to the gauge widget. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_getc +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_get_attrs +.SS dlg_get_attrs extract the video attributes from the given window. -.RS .TP 5 .B WINDOW * \fIwin is the window from which to get attributes. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_getc_callbacks +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_index_columns +.SS dlg_index_columns Build a list of the display-columns for the given multibyte string's characters. -.RS .TP 5 .B const char * \fIstring is the string to analyze -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_index_wchars +.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. -.RS .TP 5 .B const char * \fIstring is the string to analyze -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_item_help +.SS dlg_item_help Draw the string for the \fBdialog_vars.item_help\fP feature. -.RS .TP 5 .B const char * \fItxt is the help-message -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_killall_bg +.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. -.RS .TP 5 .B int * \fIretval stores the exit-code to pass back to the caller. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_last_getc +.SS dlg_last_getc returns the most recent character that was read via \fBdlg_getc\fP. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_limit_columns +.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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_lookup_key +.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 -.RS .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). -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_max_input +.SS dlg_max_input Limit the parameter according to \fBdialog_vars.max_input\fP -.RS .TP 5 .B int \fImax_len is the value to limit -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_match_char +.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. -.RS .TP 5 .B int \fIch is the character to check .TP 5 .B const char * \fIstring is the string to search -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_menu +.SS dlg_menu This entrypoint provides the \fB--menu\fP functionality without the limitations of \fB\*p\fP's command-line syntax (compare to \fBdialog_menu\fP). -.RS .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, +providing an extra \*(``Rename\*('' button, which activates an edit feature on the selected menu item. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_move_window +.SS dlg_move_window Moves/resizes the given window to the given position and size. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_bigregion +.SS dlg_mouse_bigregion Retrieve the big-region under the pointer. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_free_regions +.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 dlg_mouse_mkbigregion -Creates a region on which the mouse-clicks will return a specifed code. -.RS -.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 -.TP +.RS 5 +.TP 3 1 index by lines .TP 2 index by columns .TP 3 index by cells .RE -.RE .\" --------------------------------------------------------------------------- +.SS dlg_mouse_mkregion .TP 5 -.B dlg_mouse_mkregion -.RS -.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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_region +.SS dlg_mouse_region Retrieve the frame under the mouse pointer -.RS .TP 5 .B int \fIy is the row of the mouse-click .TP 5 .B int \fIx is the column of the mouse-click -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_setbase +.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. -.RS .TP 5 .B int \fIx is the left-column for the base .TP 5 .B int \fIy is the top-row for the base -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_setcode +.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. +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. -.RS .TP 5 .B int \fIcode is the value to add to \fBdlg_mouse_mkregion\fP's \fIcode\fP parameter. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_wgetch +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_mouse_wgetch_nowait +.SS dlg_mouse_wgetch_nowait This is a non-blocking variant of \fBdlg_mouse_wgetch\fP. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_need_separator +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_new_modal_window +.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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_new_window +.SS dlg_new_window Create a window, optionally with a shadow. The shadow is created if \fBdialog_state.use_shadow\fP is true. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_next_button +.SS dlg_next_button Return the next index in the list of labels. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_next_ok_buttonindex +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_ok_buttoncode +.SS dlg_ok_buttoncode Map the given button index for \fBdlg_ok_labels\fP into \fB\*p\fP's exit-code. -.RS .TP 5 .B int \fIbutton is the button-index (which is not necessarily the same as the index in the list of labels). -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B 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_label +Returns a list with the \*(``Ok\*('' label, +and if \fBdialog_vars.help_button\fP is true, the \*(``Help\*('' label as well. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_ok_labels +.SS dlg_ok_labels Return a list of button labels for the OK/Cancel group of widgets. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_ordinate +.SS dlg_ordinate Decode the string as an integer, decrement if greater than zero to make a curses-ordinate from a dialog-ordinate. .\" --------------------------------------------------------------------------- -.TP 5 -.B 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 +.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. -.RS .TP 5 .B char * \fIparams is the parameter string to parse. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_parse_rc +.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 dlg_prev_button +.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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_print_listitem -This is a helper function used for the various "list" widgets, +.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. +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 \*(``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. -.RS .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"), +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 -.RE +nonzero if the text should be displayed using the \*(``selected\*('' colors .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_print_scrolled +.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. -.IP +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_print_line +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_prev_ok_buttonindex +.SS dlg_prev_ok_buttonindex Find the previous button index in the list from \fBdlg_ok_labels\fP. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_print_autowrap +.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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_print_size +.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. -.RS .TP 5 .B int \fIheight is the window's height .TP 5 .B int \fIwidth is the window's width -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_print_text +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.B dlg_progressbox +.SS dlg_progressbox implements the "\fB--prgbox\fP" and "\fB--progressbox\fP" options. -.RS .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, +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". +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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_put_backtitle +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_reallocate_gauge +.SS dlg_reallocate_gauge Allocates or reallocates a gauge widget (see \fBdlg_allocate_gauge\fP). Use \fBdlg_update_gauge\fP to display the result. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_register_buttons +.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, -.RS +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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_register_window +.SS dlg_register_window For a given named widget's window, associate a binding table. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_remove_callback +.SS dlg_remove_callback Remove a callback. -.RS .TP 5 .B DIALOG_CALLBACK * \fIp contains the callback information. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_renamed_menutext +.SS dlg_renamed_menutext 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. -.IP -The function should add "RENAMED" to \fBdialog_vars.input_result\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. -.RS .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 -.RE .\" --------------------------------------------------------------------------- +.SS dlg_restore_vars +Restore \fB\*p\fP's variables from the given variable +(see \fBdialog_save_vars\fP). .TP 5 -.B dlg_restore_vars -Restore \fB\*p\fP's variables from the given variable (see \fBdialog_save_vars\fP). -.RS -.TP 5 .B DIALOG_VARS * \fIsave is the variable from which to restore. -.RE -.IP +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_result_key +.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". +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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_save_vars +.SS dlg_save_vars Save \fB\*p\fP's variables into the given variable (see \fBdlg_restore_vars\fP). -.RS .TP 5 .B DIALOG_VARS * \fIsave is the variable into which to save. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_set_focus +.SS dlg_set_focus Set focus on the given window, making it display above other windows on the screen. -.RS .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) -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_set_result +.SS dlg_set_result Setup a fixed-buffer for the result in \fBdialog_vars.input_result\fP -.RS .TP 5 .B const char * \fIstring is the new contents for the result -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_show_string +.SS dlg_show_string Displays the string, shifted as necessary, to fit within the box and show the current character-offset. -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_strclone +.SS dlg_strclone duplicate the string, like \fBstrdup\fP. -.RS .TP 5 .B const char * \fIcprompt is the string to duplicate -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_strcmp +.SS dlg_strcmp compare two strings, ignoring case. -.RS .TP 5 .B const char * \fIa is one string .TP 5 .B const char * \fIb is the other string -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_string_to_argv +.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 (replacing gaps between tokens with nulls). -.RS +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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_sub_window +.SS dlg_sub_window create a subwindow, e.g., for an input area of a widget -.RS .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 -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_tab_correct_str +.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. -.RS .TP 5 .B char * \fIprompt is the string to convert -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_trace +.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 dlg_trace_chr +.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 +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. -.RS +log it on a \*(``chr\*('' line. .TP 5 -.B int ch +.B int \fIch is the nominal keycode value. .TP 5 -.B int fkey +.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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_trace_msg +.SS dlg_trace_msg Write a formatted message to the trace file. -.RS .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. -.RE -.IP +.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., -.ES -.EX -DLG_TRACE(("this is dialog version %s\\n", dialog_version())); -.EE +.Ex +DLG_TRACE(("this is dialog version %s\en", dialog_version())); +.Ee .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_trace_win +.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. .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_treeview +.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. -.RS .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. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_trim_string +.SS dlg_trim_string The \fBdialog\fP program uses this in each widget to adjust the message string, -which may contain the newline character (referred to as '\\n') -and/or the special substring "\\n" +which may contain the newline character (referred to as '\en') +and/or the special substring "\en" (which can be translated into a newline character). -.IP +.LP There are several optional features: -.RS .bP -Unless \fBdialog_vars.no_nl_expand\fP is set, +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 -If it has "\\n" substrings, -the function preserves extra spaces. +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 -The function changes embedded "\\n" substrings to '\\n' characters. +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 -If \fBdialog_vars.no_nl_expand\fP is not set, -or if there are no "\\n" substrings, -this function strips all extra spaces to simplify justification. +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 '\\n' newline characters. -Otherwise, each '\\n' newline character is converted to a space. +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, -each tab character is converted to a space, -and sequences of blanks (space or tab) are reduced to a single space. +sequences of spaces are reduced to a single space. .RE -.RS .TP 5 .B char * \fIsrc is the string to trim -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_unregister_window +.SS dlg_unregister_window Remove the bindings for a given window. -.RS .TP 5 .B WINDOW * \fIwin is the window from which to remove bindings -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_update_gauge +.SS dlg_update_gauge Update a gauge widget to show a different percentage value. -.RS .TP 5 .B void *\fIobjptr points to the gauge object to update. .TP 5 .B int \fIpercent is the new percentage value to display. -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_yes_buttoncode +.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. -.RS .TP 5 .B int \fIbutton is the button index -.RE .\" --------------------------------------------------------------------------- -.TP 5 -.B dlg_yes_labels +.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. +.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. . .\" ************************************************************************ .SH SEE ALSO \fB\*p\fP (1). . .\" ************************************************************************ .SH AUTHOR -Thomas E. Dickey +Thomas E.\& Dickey Index: vendor/dialog/dist/dialog.c =================================================================== --- vendor/dialog/dist/dialog.c (revision 339481) +++ vendor/dialog/dist/dialog.c (revision 339482) @@ -1,1976 +1,2180 @@ /* - * $Id: dialog.c,v 1.231 2013/09/02 17:20:09 tom Exp $ + * $Id: dialog.c,v 1.268 2018/06/21 09:16:05 tom Exp $ * * cdialog - Display simple dialog boxes from shell scripts * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2017,2018 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 #include #include #include #ifdef HAVE_SETLOCALE #include #endif #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_auto_placement ,o_backtitle ,o_beep ,o_beep_after ,o_begin ,o_cancel_label ,o_checklist ,o_clear ,o_colors ,o_column_separator ,o_cr_wrap ,o_create_rc ,o_date_format ,o_default_button ,o_default_item ,o_defaultno ,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_no_cr_wrap ,o_no_kill ,o_no_label ,o_no_lines ,o_no_mouse ,o_no_nl_expand ,o_no_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_text_size ,o_print_version ,o_programbox ,o_progressbox ,o_quoted ,o_radiolist ,o_screen_center ,o_scrollbar ,o_separate_output ,o_separate_widget ,o_separator ,o_shadow ,o_single_quoted ,o_size_err ,o_sleep ,o_smooth ,o_stderr ,o_stdout ,o_tab_correct ,o_tab_len ,o_tailbox ,o_tailboxbg ,o_textbox ,o_time_format ,o_timeout ,o_title ,o_trim ,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; /* * 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 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; -static bool *dialog_opts; +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. */ /* *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, "" }, { "auto-placement", o_auto_placement, 1, NULL }, { "backtitle", o_backtitle, 1, "" }, { "beep", o_beep, 1, "" }, { "beep-after", o_beep_after, 1, "" }, { "begin", o_begin, 1, " " }, { "cancel-label", o_cancel_label, 1, "" }, { "checklist", o_checklist, 2, " ..." }, { "clear", o_clear, 1, "" }, { "colors", o_colors, 1, "" }, { "column-separator",o_column_separator, 1, "" }, { "cr-wrap", o_cr_wrap, 1, "" }, { "create-rc", o_create_rc, 1, NULL }, { "date-format", o_date_format, 1, "" }, { "default-button", o_default_button, 1, "" }, { "default-item", o_default_item, 1, "" }, { "defaultno", o_defaultno, 1, "" }, { "exit-label", o_exit_label, 1, "" }, { "extra-button", o_extra_button, 1, "" }, { "extra-label", o_extra_label, 1, "" }, { "fixed-font", o_fixed_font, 1, NULL }, { "form", o_form, 2, "
..." }, { "gauge", o_gauge, 2, " []" }, { "guage", o_gauge, 2, NULL }, { "help", o_help, 4, "" }, { "help-button", o_help_button, 1, "" }, { "help-label", o_help_label, 1, "" }, { "help-status", o_help_status, 1, "" }, { "help-tags", o_help_tags, 1, "" }, { "hfile", o_help_file, 1, "" }, { "hline", o_help_line, 1, "" }, { "icon", o_icon, 1, NULL }, { "ignore", o_ignore, 1, "" }, { "infobox", o_infobox, 2, " " }, { "input-fd", o_input_fd, 1, "" }, { "inputbox", o_inputbox, 2, " []" }, { "inputmenu", o_inputmenu, 2, " ..." }, { "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, "" }, { "menu", o_menu, 2, " ..." }, { "mixedform", o_mixedform, 2, " ..." }, { "mixedgauge", o_mixedgauge, 2, " ..." }, { "msgbox", o_msgbox, 2, " " }, { "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, "" }, { "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, "" }, { "output-fd", o_output_fd, 1, "" }, { "output-separator",o_output_separator, 1, "" }, { "passwordbox", o_passwordbox, 2, " []" }, { "passwordform", o_passwordform, 2, " ..." }, { "pause", o_pause, 2, " " }, { "prgbox", o_prgbox, 2, " " }, { "print-maxsize", o_print_maxsize, 1, "" }, { "print-size", o_print_size, 1, "" }, + { "print-text-only",o_print_text_only, 5, " " }, + { "print-text-size",o_print_text_size, 5, " " }, { "print-version", o_print_version, 5, "" }, { "programbox", o_programbox, 2, " " }, { "progressbox", o_progressbox, 2, " " }, { "quoted", o_quoted, 1, "" }, { "radiolist", o_radiolist, 2, " ..." }, { "screen-center", o_screen_center, 1, NULL }, { "scrollbar", o_scrollbar, 1, "" }, { "separate-output",o_separate_output, 1, "" }, { "separate-widget",o_separate_widget, 1, "" }, { "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, "" }, { "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, "" }, { "tailbox", o_tailbox, 2, " " }, { "tailboxbg", o_tailboxbg, 2, " " }, { "textbox", o_textbox, 2, " " }, { "time-format", o_time_format, 1, "" }, { "timeout", o_timeout, 1, "" }, { "title", o_title, 1, "" }, { "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>" }, #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 }, #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 }, #endif #ifdef HAVE_XDIALOG2 - { "buildlist", o_buildlist, 2, "<text> <height> <width> <tag1> <item1> <status1>..." }, + { "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>..." }, #endif #if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL) { "noitem", o_no_items, 1, NULL }, { "notags", o_no_tags, 1, NULL }, #endif #ifdef HAVE_DLG_TRACE { "trace", o_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 changed = FALSE; bool doalloc = FALSE; char *filename; + const char **my_argv = 0; + int my_argc; - dialog_opts = dlg_calloc(bool, (size_t) *argcp + 1); - assert_ptr(dialog_opts, "unescape_argv"); + 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; - changed = dlg_eat_argv(argcp, argvp, j, 1); + 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]); } - changed = dlg_eat_argv(argcp, argvp, j, 1); + dlg_eat_argv(argcp, argvp, j, 1); + --j; } else if (!strcmp((*argvp)[j], "--file")) { - if (++count_includes > limit_includes) + 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) { + 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)) + 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); - if ((added = dlg_count_argv(list)) != 0) { - if (added > 2) { - 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); - assert_ptr(newp, "unescape_argv"); - for (n = 0; n < *argcp; ++n) { - newp[n] = (*argvp)[n]; - } - *argvp = newp; - doalloc = TRUE; + 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]; } - dialog_opts = dlg_realloc(bool, need, dialog_opts); - assert_ptr(dialog_opts, "unescape_argv"); + /* The new array is not NULL-terminated yet. */ + *argvp = newp; + doalloc = TRUE; } - for (n = *argcp; n >= j + 2; --n) { + 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]; - dialog_opts[n + added - 2] = dialog_opts[n]; } - for (n = 0; n < added; ++n) { - (*argvp)[n + j] = list[n]; - dialog_opts[n + j] = FALSE; + } 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]; } - *argcp += added - 2; - free(list); } + /* 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); } - (*argvp)[*argcp] = 0; - ++j; - continue; } 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]))) { - dialog_opts[j] = TRUE; + my_argv[my_argc++] = (*argvp)[j]; + DLG_TRACE(("#\toption argv[%d]=%s\n", j, (*argvp)[j])); } } - /* if we didn't find any "--" tokens, there's no reason to do the table - * lookup in isOption() - */ - if (!changed) { - free(dialog_opts); - dialog_opts = 0; - } - dialog_argv = (*argvp); -} + my_argv[my_argc] = 0; -#define OptionChars "\ -0123456789\ --\ -abcdefghijklmnopqrstuvwxyz\ -" + known_opts = my_argc; + dialog_opts = my_argv; -/* - * 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 = 1; dialog_argv[n] != 0; ++n) { - if (dialog_argv[n] == arg) { - result = dialog_opts[n]; - break; - } - } - } else if (!strncmp(arg, "--", (size_t) 2) && isalpha(UCH(arg[2]))) { - if (strlen(arg) == strspn(arg, OptionChars)) { - result = TRUE; - } else { - dlg_exiterr("Invalid option \"%s\"", arg); - } - } - } - return result; + DLG_TRACE(("#\t%d options vs %d arguments\n", known_opts, *argcp)); + dialog_argv = (*argvp); } static eOptions lookupOption(const char *name, int pass) { unsigned n; eOptions result = o_unknown; if (isOption(name)) { name += 2; for (n = 0; n < sizeof(options) / sizeof(options[0]); n++) { if ((pass & options[n].pass) != 0 && !strcmp(name, options[n].name)) { result = options[n].code; break; } } } return result; } static void Usage(const char *msg) { + handle_leaks(); dlg_exiterr("Error: %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; - const char *format = "Expected %d arguments, found only %d"; char temp[80]; while (argv[0] != 0) { 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 += group; - result++; + 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) { 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, - TRUE); + 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, 7, 0, call_menu}, - {o_inputmenu, 7, 0, call_inputmenu}, - {o_checklist, 8, 0, call_checklist}, - {o_radiolist, 8, 0, call_radiolist}, + {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_buildlist, 4, 0, call_buildlist}, {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_rangebox, 5, 7, call_rangebox}, {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; } /* 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++) { 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); + + 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: + 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++) { 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-2012,2013 Thomas E. Dickey", + "Copyright 2000-2017,2018 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 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)) + && 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_msg("# ignore extra --trace option\n"); + DLG_TRACE(("# ignore extra --trace option\n")); *offset += 1; } - dlg_trace_msg("# Parameters:\n"); + DLG_TRACE(("# Parameters:\n")); for (j = 0; argv[j] != 0; ++j) { - dlg_trace_msg("# argv[%d] = %s\n", j, argv[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) { bool done = FALSE; + eOptions code; - dlg_trace_msg("# process_common_options, offset %d\n", offset); + DLG_TRACE(("# process_common_options, offset %d\n", offset)); while (offset < argc && !done) { /* Common options */ - dlg_trace_msg("#\targv[%d] = %s\n", offset, argv[offset]); - switch (lookupOption(argv[offset], 1)) { + 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; break; case o_single_quoted: dialog_vars.single_quoted = TRUE; break; case o_size_err: dialog_vars.size_err = TRUE; break; case o_beep: dialog_vars.beep_signal = TRUE; break; case o_beep_after: dialog_vars.beep_after_signal = TRUE; break; case o_scrollbar: dialog_state.use_scrollbar = TRUE; break; case o_shadow: dialog_state.use_shadow = TRUE; break; 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.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_print_text_size: + PrintTextOnly(argv, &offset, code); + break; case o_print_maxsize: if (output) { - /* - * 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. - */ - if (argv[offset + 1] == 0) { - ignore_unknown = TRUE; - end_dialog(); - } + 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; 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; 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; - static char **special_argv = 0; - static int special_argc = 0; - dlg_trace_msg("# init_result\n"); + 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"); 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 we are not checking memory leaks, just do the parse of the - * environment once. - */ if (special_argv != 0) { process_common_options(special_argc, special_argv, 0, FALSE); -#ifdef NO_LEAKS - free(special_argv[0]); - free(special_argv); - special_argv = 0; - special_argc = 0; - first = TRUE; -#endif } } int main(int argc, char *argv[]) { char temp[256]; bool esc_pressed = FALSE; bool keep_tite = FALSE; + bool first_time = TRUE; int offset = 1; int offset_add; int retval = DLG_EXIT_OK; int j, have; 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: dialog_state.output = stdout; break; case o_stderr: dialog_state.output = stderr; break; case o_input_fd: if ((j = optionValue(argv, &offset)) < 0 - || (dialog_state.input = fdopen(j, "r")) == 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) + || (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); - exit(DLG_EXIT_OK); + 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_msg("# discarding %d parameters starting with argv[%d] (%s)\n", - 1 + offset - base, base, - argv[base]); + 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)]; - if (dialog_opts != 0) - dialog_opts[j] = dialog_opts[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's output may be redirected (see above). Handle the special * case of options that only report information without interaction. */ if (argc == 2) { - switch (lookupOption(argv[1], 7)) { + 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: initscr(); refresh(); endwin(); break; case o_ignore: break; default: Help(); break; } - return DLG_EXIT_OK; - } - - if (argc < 2) { + dlg_exit(DLG_EXIT_OK); + } else if (argc < 2) { Help(); } #ifdef HAVE_RC_FILE - if (lookupOption(argv[1], 7) == o_create_rc) { + 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 */ + if (dlg_parse_rc() == -1) { /* Read the configuration file */ + handle_leaks(); dlg_exiterr("dialog: dlg_parse_rc"); + } dlg_create_rc(argv[2]); - return DLG_EXIT_OK; + 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) + dlg_exit(DLG_EXIT_OK); + } - dialog_vars.keep_tite = keep_tite; /* init_result() cleared global */ - init_dialog(dialog_state.input, dialog_state.output); while (offset < argc && !esc_pressed) { - init_result(my_buffer); + if (first_time) { + first_time = FALSE; + } else { + init_result(my_buffer); + offset = process_common_options(argc, argv, offset, TRUE); + } - offset = process_common_options(argc, argv, offset, TRUE); - if (argv[offset] == NULL) { if (ignore_unknown) break; Usage("Expected a box option"); } - if (lookupOption(argv[offset], 2) != o_checklist - && dialog_vars.separate_output) { - sprintf(temp, "Expected --checklist, not %.20s", argv[offset]); - Usage(temp); + 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); + } } - if (dialog_state.aspect_ratio == 0) - dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO; - 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_msg("# widget returns %d\n", retval); + 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); } Index: vendor/dialog/dist/dialog.h =================================================================== --- vendor/dialog/dist/dialog.h (revision 339481) +++ vendor/dialog/dist/dialog.h (revision 339482) @@ -1,907 +1,950 @@ /* - * $Id: dialog.h,v 1.267 2013/09/22 19:06:36 tom Exp $ + * $Id: dialog.h,v 1.283 2018/06/19 22:52:11 tom Exp $ * * dialog.h -- common declarations for all dialog modules * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2017,2018 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 #ifdef HAVE_COLOR -#define SCOLS (COLS - (dialog_state.use_shadow ? 2 : 0)) -#define SLINES (LINES - (dialog_state.use_shadow ? 1 : 0)) +#define SCOLS (COLS - (dialog_state.use_shadow ? SHADOW_COLS : 0)) +#define SLINES (LINES - (dialog_state.use_shadow ? SHADOW_ROWS : 0)) #else #define SCOLS COLS #define SLINES LINES #endif #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_CTRL(n) ((n) & 0x1f) /* CTRL is preferred, but conflicts */ #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_TRACE DLG_CTRL('T') +#define CHR_SPACE ' ' #define ESC 27 #define TAB DLG_CTRL('I') -#define MARGIN 1 -#define GUTTER 2 -#define SHADOW_ROWS 1 -#define SHADOW_COLS 2 -#define ARROWS_COL 5 +#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 */ #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; } 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; } 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" */ } 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; #ifdef HAVE_COLOR int fg; int bg; int hilite; #endif #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 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_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_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_max_input(int /*max_len*/); extern int dlg_print_scrolled(WINDOW * /* win */, const char * /* prompt */, int /* offset */, int /* height */, int /* width */, int /* pauseopt */); 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_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_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); +#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_win(win) /* nothing */ #define dlg_trace_chr(ch,fkey) /* nothing */ #define dlg_trace(fname) /* nothing */ #endif #ifdef KEY_RESIZE 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_CLICKED, (mmask_t *) 0) +#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) extern void _nc_free_and_exit(int); /* nc_alloc.h normally not installed */ #endif #endif #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* DIALOG_H_included */ Index: vendor/dialog/dist/dialog.pl =================================================================== --- vendor/dialog/dist/dialog.pl (revision 339481) +++ vendor/dialog/dist/dialog.pl (revision 339482) @@ -1,454 +1,600 @@ # Functions that handle calling dialog(1) -*-perl-*- -# $Id: dialog.pl,v 1.4 2001/10/13 00:40:22 tom Exp $ +# $Id: dialog.pl,v 1.18 2018/06/12 21:01:58 tom Exp $ +################################################################################ +# Copyright 2018 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. +################################################################################ +# The "rhs_" functions, as well as return_output originally came from Redhat +# 4.0, e.g., +# http://www.ibiblio.org/pub/historic-linux/distributions/redhat-4.0/i386/live/usr/bin/Xconfigurator.pl +# The other functions were added to make this more useful for demonstrations. +# These comments are from the original file: +#------------------------------------------------------------------------------ # Return values are 1 for success and 0 for failure (or cancel) # Resultant text (if any) is in dialog_result # Unfortunately, the gauge requires use of /bin/sh to get going. # I didn't bother to make the others shell-free, although it # would be simple to do. # Note that dialog generally returns 0 for success, so I invert the # sense of the return code for more readable boolean expressions. +#------------------------------------------------------------------------------ -$scr_lines = 24; +use warnings; +use strict; +use diagnostics; +our $DIALOG = "dialog"; +our $GAUGE; +our $gauge_width; +our $scr_lines = 24; +our $scr_cols = 80; +our @dialog_result; +our $trace = 0; + require "flush.pl"; +sub trace { + if ($trace) { + if ( open TRACE, ">>dialog.log" ) { + printf TRACE $_[0], @_[ 1 .. $#_ ]; + close TRACE; + } + } +} + +sub quoted($) { + my $text = shift; + $text =~ s/[\r\n]+/\n/g; + $text =~ s/[^\n\t -~]/?/g; + $text =~ s/([\\"])/\\$1/g; + return sprintf "\"%s\"", $text; +} + +sub screensize() { + my $params = `$DIALOG --stdout --print-maxsize`; + $params =~ s/\s+$//; + $params =~ s/^[^:]*:\s+//; + my @params = split /,\s+/, $params; + if ( $#params == 1 ) { + $scr_lines = $params[0]; + $scr_cols = $params[1]; + } + else { + $scr_lines = 24; + $scr_cols = 80; + } +} + +sub height_of($$) { + my $width = shift; + my $message = shift; + my $command = + "$DIALOG --stdout --print-text-size " + . "ed($message) + . " $scr_lines $width 2>&1"; + my $params = `$command`; + my @params = split( /\s/, $params ); + return $params[0]; +} + sub rhs_clear { - return system("dialog --clear"); + return system("$DIALOG --clear"); } sub rhs_textbox { - local ( $title, $file, $width, $height ) = @_; + my ( $title, $file, $width, $height ) = @_; - system("dialog --title \"$title\" --textbox $file $height $width"); + $width = int($width); + $height = int($height); + system( "$DIALOG --title " + . "ed($title) + . " --textbox $file $height $width" ); return 1; } sub rhs_msgbox { - local ( $title, $message, $width ) = @_; - local ( $tmp, $height, $message_len ); + my ( $title, $message, $width ) = @_; + my ( $tmp, $height ); - $message = &rhs_wordwrap($message, $width); - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - $height = 4 + $message_len; + $width = int($width); + $message = &rhs_wordwrap( $message, $width ); + $height = 5 + &height_of( $width, $message ); - $tmp = system("dialog --title \"$title\" --msgbox \"$message\" $height $width"); + $tmp = + system( "$DIALOG --title " + . "ed($title) + . " --msgbox " + . "ed($message) + . " $height $width" ); if ($tmp) { - return 0; - } else { - return 1; + return 0; } + else { + return 1; + } } sub rhs_infobox { - local ( $title, $message, $width ) = @_; - local ( $tmp, $height, $message_len ); + my ( $title, $message, $width ) = @_; + my ( $tmp, $height ); - $message = &rhs_wordwrap($message, $width); - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - $height = 2 + $message_len; + $width = int($width); + $message = &rhs_wordwrap( $message, $width ); + $height = 2 + &height_of( $width, $message ); - return system("dialog --title \"$title\" --infobox \"$message\" $height $width"); + return + system( "$DIALOG --title " + . "ed($title) + . " --infobox " + . "ed($message) + . " $height $width" ); } sub rhs_yesno { - local ( $title, $message, $width ) = @_; - local ( $tmp, $height, $message_len ); + my ( $title, $message, $width ) = @_; + my ( $tmp, $height ); - $message = &rhs_wordwrap($message, $width); - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - $height = 4 + $message_len; + $width = int($width); + $message = &rhs_wordwrap( $message, $width ); + $height = 4 + &height_of( $width, $message ); - $tmp = system("dialog --title \"$title\" --yesno \"$message\" $height $width"); + $tmp = + system( "$DIALOG --title " + . "ed($title) + . " --yesno " + . "ed($message) + . " $height $width" ); + # Dumb: dialog returns 0 for "yes" and 1 for "no" - if (! $tmp) { - return 1; - } else { - return 0; + if ( !$tmp ) { + return 1; } + else { + return 0; + } } sub rhs_gauge { - local ( $title, $message, $width, $percent ) = @_; - local ( $tmp, $height, $message_len ); + my ( $title, $message, $width, $percent ) = @_; + my ( $tmp, $height ); + $width = int($width); $gauge_width = $width; - $message = &rhs_wordwrap($message, $width); - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - $height = 5 + $message_len; + $message = &rhs_wordwrap( $message, $width ); + $height = 5 + &height_of( $width, $message ); - open(GAUGE, "|dialog --title \"$title\" --gauge \"$message\" $height $width $percent"); + open( $GAUGE, + "|$DIALOG --title " + . "ed($title) + . " --gauge " + . "ed($message) + . " $height $width $percent" ); } sub rhs_update_gauge { - local ( $percent ) = @_; + my ($percent) = @_; - &printflush(GAUGE, "$percent\n"); + &printflush( $GAUGE, "$percent\n" ); } sub rhs_update_gauge_and_message { - local ( $message, $percent ) = @_; + my ( $message, $percent ) = @_; - $message = &rhs_wordwrap($message, $gauge_width); + $message = &rhs_wordwrap( $message, $gauge_width ); $message =~ s/\n/\\n/g; - &printflush(GAUGE, "XXX\n$percent\n$message\nXXX\n"); + &printflush( $GAUGE, "XXX\n$percent\n$message\nXXX\n" ); } sub rhs_stop_gauge { - close GAUGE; + close $GAUGE; } sub rhs_inputbox { - local ( $title, $message, $width, $instr ) = @_; - local ( $tmp, $height, $message_len ); + my ( $title, $message, $width, $instr ) = @_; + my ( $tmp, $height ); - $message = &rhs_wordwrap($message, $width); - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - $height = 7 + $message_len; + $width = int($width); + $message = &rhs_wordwrap( $message, $width ); + $height = 7 + &height_of( $width, $message ); - return &return_output(0, "dialog --title \"$title\" --inputbox \"$message\" $height $width \"$instr\""); + return &return_output( 0, + "$DIALOG --title " + . "ed($title) + . " --inputbox " + . "ed($message) + . " $height $width " + . "ed($instr) ); } sub rhs_menu { - local ( $title, $message, $width, $numitems ) = @_; - local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, $numitems ) = @_; + my ( $i, $tmp, $ent, $height, $listheight, $menuheight, @list ); - shift; shift; shift; shift; + $width = int($width); + $numitems = int($numitems); + shift; + shift; + shift; + shift; + @list = (); - for ($i = 0; $i < $numitems; $i++) { - $ent = shift; - $list[@list] = "\"$ent\""; - $ent = shift; - $list[@list] = "\"$ent\""; + for ( $i = 0 ; $i < $numitems ; $i++ ) { + $ent = shift; + $list[@list] = "ed($ent); + $ent = shift; + $list[@list] = "ed($ent); } - $message = &rhs_wordwrap($message, $width); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } - return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); + return &return_output( 0, + "$DIALOG --title " + . "ed($title) + . " --menu " + . "ed($message) + . " $height $width $menuheight @list" ); } sub rhs_menul { - local ( $title, $message, $width, $numitems ) = @_; - local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, $numitems ) = @_; + my ( $i, $tmp, $ent, $height, $listheight, $menuheight, @list ); - shift; shift; shift; shift; + $width = int($width); + $numitems = int($numitems); + shift; + shift; + shift; + shift; + @list = (); - for ($i = 0; $i < $numitems; $i++) { - $ent = shift; - $list[@list] = "\"$ent\""; - $list[@list] = "\"\""; + for ( $i = 0 ; $i < $numitems ; $i++ ) { + $ent = shift; + $list[@list] = "ed($ent); + $list[@list] = "ed(""); } - $message = &rhs_wordwrap($message, $width); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } - return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); + return &return_output( 0, + "$DIALOG --title " + . "ed($title) + . " --menu " + . "ed($message) + . " $height $width $menuheight @list" ); } sub rhs_menua { - local ( $title, $message, $width, %items ) = @_; - local ( $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, %items ) = @_; + my ( $tmp, $ent, $height, $listheight, $menuheight, @list ); - @list = (); - foreach $ent (sort keys (%items)) { - $list[@list] = "\"$ent\""; - $list[@list] = "\"$items{$ent}\""; + $width = int($width); + @list = (); + foreach $ent ( sort keys(%items) ) { + $list[@list] = "ed($ent); + $list[@list] = "ed( $items{$ent} ); } - $message = &rhs_wordwrap($message, $width); + my $numitems = keys(%items); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $numitems = keys(%items); - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } - return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); + return &return_output( 0, + "$DIALOG --title " + . "ed($title) + . " --menu " + . "ed($message) + . " $height $width $menuheight @list" ); } sub rhs_checklist { - local ( $title, $message, $width, $numitems ) = @_; - local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, $numitems ) = @_; + my ( $i, $tmp, $ent, $height, $listheight, $menuheight, @list ); - shift; shift; shift; shift; + $width = int($width); + $numitems = int($numitems); + shift; + shift; + shift; + shift; + @list = (); - for ($i = 0; $i < $numitems; $i++) { - $ent = shift; - $list[@list] = "\"$ent\""; - $ent = shift; - $list[@list] = "\"$ent\""; - $ent = shift; - if ($ent) { - $list[@list] = "ON"; - } else { - $list[@list] = "OFF"; - } + for ( $i = 0 ; $i < $numitems ; $i++ ) { + $ent = shift; + $list[@list] = "ed($ent); + $ent = shift; + $list[@list] = "ed($ent); + $ent = shift; + if ($ent) { + $list[@list] = "ON"; + } + else { + $list[@list] = "OFF"; + } } - $message = &rhs_wordwrap($message, $width); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } - return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); + return &return_output( "list", + "$DIALOG --title " + . "ed($title) + . " --separate-output --checklist " + . "ed($message) + . " $height $width $menuheight @list" ); } sub rhs_checklistl { - local ( $title, $message, $width, $numitems ) = @_; - local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, $numitems ) = @_; + my ( $i, $tmp, $ent, $height, $listheight, $menuheight, @list ); - shift; shift; shift; shift; + $width = int($width); + $numitems = int($numitems); + shift; + shift; + shift; + shift; + @list = (); - for ($i = 0; $i < $numitems; $i++) { - $ent = shift; - $list[@list] = "\"$ent\""; - $list[@list] = "\"\""; - $list[@list] = "OFF"; + for ( $i = 0 ; $i < $numitems ; $i++ ) { + $ent = shift; + $list[@list] = "ed($ent); + $list[@list] = "ed(""); + $list[@list] = "OFF"; } - $message = &rhs_wordwrap($message, $width); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } - return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } + return &return_output( "list", + "$DIALOG --title " + . "ed($title) + . " --separate-output --checklist " + . "ed($message) + . " $height $width $menuheight @list" ); } sub rhs_checklista { - local ( $title, $message, $width, %items ) = @_; - local ( $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, %items ) = @_; + my ( $tmp, $ent, $height, $listheight, $menuheight, @list ); - shift; shift; shift; shift; + shift; + shift; + shift; + shift; @list = (); - foreach $ent (sort keys (%items)) { - $list[@list] = "\"$ent\""; - $list[@list] = "\"$items{$ent}\""; - $list[@list] = "OFF"; + foreach $ent ( sort keys(%items) ) { + $list[@list] = "ed($ent); + $list[@list] = "ed( $items{$ent} ); + $list[@list] = "OFF"; } - $message = &rhs_wordwrap($message, $width); + my $numitems = keys(%items); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $numitems = keys(%items); - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } - return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); + return &return_output( "list", + "$DIALOG --title " + . "ed($title) + . " --separate-output --checklist " + . "ed($message) + . " $height $width $menuheight @list" ); } sub rhs_radiolist { - local ( $title, $message, $width, $numitems ) = @_; - local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + my ( $title, $message, $width, $numitems ) = @_; + my ( $i, $tmp, $ent, $height, $listheight, $menuheight, @list ); - shift; shift; shift; shift; + $width = int($width); + $numitems = int($numitems); + shift; + shift; + shift; + shift; + @list = (); - for ($i = 0; $i < $numitems; $i++) { - $ent = shift; - $list[@list] = "\"$ent\""; - $ent = shift; - $list[@list] = "\"$ent\""; - $ent = shift; - if ($ent) { - $list[@list] = "ON"; - } else { - $list[@list] = "OFF"; - } + for ( $i = 0 ; $i < $numitems ; $i++ ) { + $ent = shift; + $list[@list] = "ed($ent); + $ent = shift; + $list[@list] = "ed($ent); + $ent = shift; + if ($ent) { + $list[@list] = "ON"; + } + else { + $list[@list] = "OFF"; + } } - $message = &rhs_wordwrap($message, $width); + $message = &rhs_wordwrap( $message, $width ); + $listheight = &height_of( $width, $message ); + $height = 6 + $listheight + $numitems; - $message_len = split(/^/, $message); - $tmp = $message; - if (chop($tmp) eq "\n") { - $message_len++; - } - - $height = $message_len + 6 + $numitems; - if ($height <= $scr_lines) { + if ( $height <= $scr_lines ) { $menuheight = $numitems; - } else { - $height = $scr_lines; - $menuheight = $scr_lines - $message_len - 6; } + else { + $height = $scr_lines; + $menuheight = $scr_lines - $listheight - 6; + } - return &return_output(0 , "dialog --title \"$title\" --radiolist \"$message\" $height $width $menuheight @list"); + return &return_output( 0, + "$DIALOG --title " + . "ed($title) + . " --radiolist " + . "ed($message) + . " $height $width $menuheight @list" ); } sub return_output { - local ( $listp, $command ) = @_; - local ( $res ) = 1; + my ( $listp, $command ) = @_; + my ($res) = 1; - pipe(PARENT_READER, CHILD_WRITER); + pipe( PARENT_READER, CHILD_WRITER ); + # We have to fork (as opposed to using "system") so that the parent # process can read from the pipe to avoid deadlock. my ($pid) = fork; - if ($pid == 0) { # child - close(PARENT_READER); - open(STDERR, ">&CHILD_WRITER"); - exec($command); - die("no exec"); + if ( $pid == 0 ) { # child + close(PARENT_READER); + open( STDERR, ">&CHILD_WRITER" ); + exec($command); + die("no exec"); } - if ($pid > 0) { # parent - close( CHILD_WRITER ); - if ($listp) { - @dialog_result = (); - while (<PARENT_READER>) { - chop; - $dialog_result[@dialog_result] = $_; - } - } - else { $dialog_result = <PARENT_READER>; } - close(PARENT_READER); - waitpid($pid,0); - $res = $?; + if ( $pid > 0 ) { # parent + close(CHILD_WRITER); + if ($listp) { + @dialog_result = (); + while (<PARENT_READER>) { + chop; + $dialog_result[@dialog_result] = $_; + } + } + else { + @dialog_result = <PARENT_READER>; + } + close(PARENT_READER); + waitpid( $pid, 0 ); + $res = $?; } # Again, dialog returns results backwards - if (! $res) { - return 1; - } else { - return 0; + if ( !$res ) { + return 1; } + else { + return 0; + } } sub rhs_wordwrap { - local ( $intext, $width ) = @_; - local ( $outtext, $i, $j, @lines, $wrap, @words, $pos, $pad ); + my ( $intext, $width ) = @_; + my ( $outtext, $i, $j, @lines, $wrap, @words, $pos, $pad ); + &trace( "rhs_wordwrap\n\tintext:%s\n\twidth:%d\n", $intext, $width ); + &screensize; + $width = int($width); $outtext = ""; - $pad = 3; # leave 3 spaces around each line - $pos = $pad; # current insert position - $wrap = 0; # 1 if we have been auto wraping - $insert_nl = 0; # 1 if we just did an absolute - # and we should preface any new text - # with a new line - @lines = split(/\n/, $intext); - for ($i = 0; $i <= $#lines; $i++) { - if ($lines[$i] =~ /^>/) { - $outtext .= "\n" if ($insert_nl); + $pad = 3; # leave 3 spaces around each line + $pos = $pad; # current insert position + $wrap = 0; # 1 if we have been auto wrapping + my $insert_nl = 0; # 1 if we just did an absolute + # and we should preface any new text + # with a new line + @lines = split( /\n/, $intext ); + + for ( $i = 0 ; $i <= $#lines ; $i++ ) { + + if ( $lines[$i] =~ /^>/ ) { + $outtext .= "\n" if ($insert_nl); $outtext .= "\n" if ($wrap); - $lines[$i] =~ /^>(.*)$/; + $lines[$i] =~ /^>(.*)$/; $outtext .= $1; - $insert_nl = 1; - $wrap = 0; - $pos = $pad; - } else { + $insert_nl = 1; + $wrap = 0; + $pos = $pad; + } + else { $wrap = 1; - @words = split(/\s+/,$lines[$i]); - for ($j = 0; $j <= $#words; $j++) { - if ($insert_nl) { - $outtext .= "\n"; - $insert_nl = 0; - } - if ((length($words[$j]) + $pos) > $width - $pad) { + @words = split( /\s+/, $lines[$i] ); + for ( $j = 0 ; $j <= $#words ; $j++ ) { + if ($insert_nl) { $outtext .= "\n"; + $insert_nl = 0; + } + if ( ( length( $words[$j] ) + $pos ) > $width - $pad ) { + $outtext .= "\n"; $pos = $pad; } $outtext .= $words[$j] . " "; - $pos += length($words[$j]) + 1; + $pos += length( $words[$j] ) + 1; } } } + &trace( "\touttext:%s\n", $outtext ); return $outtext; } ############ 1; Index: vendor/dialog/dist/dlg_keys.c =================================================================== --- vendor/dialog/dist/dlg_keys.c (revision 339481) +++ vendor/dialog/dist/dlg_keys.c (revision 339482) @@ -1,788 +1,888 @@ /* - * $Id: dlg_keys.c,v 1.34 2011/10/14 00:41:08 tom Exp $ + * $Id: dlg_keys.c,v 1.45 2018/05/28 17:27:10 tom Exp $ * * dlg_keys.c -- runtime binding support for dialog * - * Copyright 2006-2009,2011 Thomas E. Dickey + * Copyright 2006-2017,2018 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> #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) + if (q != 0) { q->link = p; - else + } 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_msg("# dlg_register_window %s\n", name); + 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 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 true if curses_key is a function key, - * and on output, it is true if the result is a function key). + * 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))) { + 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; #ifdef HAVE_RC_FILE if (fkey) { switch ((DLG_KEYS_ENUM) dialog_key) { case DLGK_OK: *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; } #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 sizeof(curses_names)/sizeof(curses_names[0]) +#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 sizeof(dialog_names)/sizeof(dialog_names[0]) +#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(TRACE), + DIALOG_NAME(TOGGLE) }; +#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) { 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 { + 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 "bindkeys" configuration-file entry. This + * 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') { *p++ = '\0'; p = skip_white(p); q = p; while (*p != '\0' && curses_key < 0) { if (escaped) { escaped = FALSE; - curses_key = *p; - } else if (*p == '\\') { + 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) { 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", curses_key); + 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, const char *widget, DLG_KEYS_BINDING * binding) +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, "\n# key bindings for %s widgets\n", - !strcmp(p->name, WILDNAME) ? "all" : 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, p->name, 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 */ Index: vendor/dialog/dist/dlg_keys.h =================================================================== --- vendor/dialog/dist/dlg_keys.h (revision 339481) +++ vendor/dialog/dist/dlg_keys.h (revision 339482) @@ -1,174 +1,178 @@ /* - * $Id: dlg_keys.h,v 1.32 2012/12/21 21:54:30 tom Exp $ + * $Id: dlg_keys.h,v 1.36 2016/08/28 21:23:17 tom Exp $ * * dlg_keys.h -- runtime binding support for dialog * - * Copyright 2005-2011,2012 Thomas E. Dickey + * Copyright 2005-2012,2016 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_TRACE, + DLGK_TOGGLE } 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 ) /* ^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, ' ' ), \ + 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_lookup_key(WINDOW * /*win*/, int /*curses_key*/, int * /*dialog_key*/); 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 */ Index: vendor/dialog/dist/editbox.c =================================================================== --- vendor/dialog/dist/editbox.c (revision 339481) +++ vendor/dialog/dist/editbox.c (revision 339482) @@ -1,731 +1,760 @@ /* - * $Id: editbox.c,v 1.62 2013/03/17 15:03:41 tom Exp $ + * $Id: editbox.c,v 1.70 2018/06/19 22:57:01 tom Exp $ * * editbox.c -- implements the edit box * - * Copyright 2007-2012,2013 Thomas E. Dickey + * Copyright 2007-2016,2018 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 * * 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 + 1)) == 0) { + if ((blob = dlg_malloc(char, size + 2)) == 0) { fail_list(); } else { 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; 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 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) { 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; 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); - (void) wattrset(dialog, dialog_attr); + 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; 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; } 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; - thisrow = (cell / wide) + base_row; - 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; + 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 */ /* * 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); 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); show_all = TRUE; } else { 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_unregister_window(editing); dlg_del_window(editing); dlg_del_window(dialog); - refresh(); dlg_mouse_free_regions(); + /* repaint */ goto retry; #endif + case DLGK_TOGGLE: + if (state != sTEXT) { + result = dlg_ok_buttoncode(state); + } else { + beep(); + } + break; default: beep(); break; } } else { - if ((key == ' ') && (state != sTEXT)) { - result = dlg_ok_buttoncode(state); - } else { - beep(); - } + 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; } Index: vendor/dialog/dist/formbox.c =================================================================== --- vendor/dialog/dist/formbox.c (revision 339481) +++ vendor/dialog/dist/formbox.c (revision 339482) @@ -1,979 +1,998 @@ /* - * $Id: formbox.c,v 1.87 2013/09/02 17:02:05 tom Exp $ + * $Id: formbox.c,v 1.95 2018/06/21 08:23:31 tom Exp $ * - * formbox.c -- implements the form (i.e, some pairs label/editbox) + * formbox.c -- implements the form (i.e., some pairs label/editbox) * - * Copyright 2003-2012,2013 Thomas E. Dickey + * Copyright 2003-2016,2018 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 { 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) { 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; - int first = TRUE; - int first_trace = TRUE; + bool first = TRUE; + bool first_trace = TRUE; int chr_offset = 0; - int state = dialog_vars.default_button >= 0 ? dlg_default_button() : sTEXT; + 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 = dlg_strclone(cprompt); + 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(); - dlg_tab_correct_str(prompt); #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); - (void) wattrset(dialog, dialog_attr); + 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; 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)) 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; } - if (key == ' ') { - fkey = TRUE; - key = DLGK_ENTER; - } } } /* 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_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; - /* repaint */ + free(prompt); dlg_clear(); + dlg_unregister_window(form); dlg_del_window(dialog); - refresh(); 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; + 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; } Index: vendor/dialog/dist/fselect.c =================================================================== --- vendor/dialog/dist/fselect.c (revision 339481) +++ vendor/dialog/dist/fselect.c (revision 339482) @@ -1,928 +1,941 @@ /* - * $Id: fselect.c,v 1.93 2012/12/30 20:52:25 tom Exp $ + * $Id: fselect.c,v 1.102 2018/06/21 23:28:04 tom Exp $ * * fselect.c -- implements the file-selector box * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2017,2018 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/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) { 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 { /* 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]; 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) { 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) - (void) wattrset(list->win, item_selected_attr); + dlg_attrset(list->win, item_selected_attr); (void) waddstr(list->win, list->data[n]); - (void) wattrset(list->win, item_attr); + dlg_attrset(list->win, item_attr); } - (void) wattrset(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. */ static void fix_arrows(LIST * list) { int x; int y; int top; int right; int bottom; if (list->win != 0) { 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)); } } -static int -show_list(char *target, LIST * list, int keep) +static bool +show_list(char *target, LIST * list, bool keep) { - int changed = keep || find_choice(target, list); + 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 int -show_both_lists(char *input, LIST * d_list, LIST * f_list, int keep) +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); + 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]; } } 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]; } } 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) { *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 { 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, int keep) +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) { size_t have = strlen(input); 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_msg("opendir '%s'\n", path); + DLG_TRACE(("opendir '%s'\n", path)); if ((dp = opendir(path)) != 0) { while ((de = readdir(dp)) != 0) { - strncpy(leaf, de->d_name, NAMLEN(de))[NAMLEN(de)] = 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; - int first = (state == sTEXT); - int first_trace = TRUE; + 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_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); - (void) wattrset(dialog, dialog_attr); + 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); 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); 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); 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, (bool) 0, (bool) first); + 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 (!fkey && key == ' ') { + 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; #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(); 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) { result = dlg_ok_buttoncode(code); break; } } 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); } Index: vendor/dialog/dist/guage.c =================================================================== --- vendor/dialog/dist/guage.c (revision 339481) +++ vendor/dialog/dist/guage.c (revision 339482) @@ -1,438 +1,453 @@ /* - * $Id: guage.c,v 1.68 2013/09/22 19:10:22 tom Exp $ + * $Id: guage.c,v 1.76 2018/06/21 08:23:43 tom Exp $ * * guage.c -- implements the gauge dialog * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2015,2018 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 && obj->obj.input != 0) { + if (dialog != 0) { (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); - (void) wattrset(dialog, dialog_attr); + 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); - (void) wattrset(dialog, gauge_attr); + 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) { - wattroff(dialog, A_REVERSE); + dlg_attroff(dialog, A_REVERSE); } else { - (void) wattrset(dialog, A_REVERSE); + 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)) { - delink(obj); - dlg_remove_callback(cb); + cleanup = TRUE; } } + repaint_text(obj); if (status > 0) { result = TRUE; - repaint_text(obj); } 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) { - int status = TRUE; + 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; 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; - curs_set(1); if (valid(obj)) { - delink(obj); 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_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); } Index: vendor/dialog/dist/headers.sh =================================================================== --- vendor/dialog/dist/headers.sh (nonexistent) +++ vendor/dialog/dist/headers.sh (revision 339482) @@ -0,0 +1,103 @@ +#! /bin/sh +# $Id: headers.sh,v 1.3 2007/02/25 20:37:56 tom Exp $ +############################################################################## +# Copyright (c) 2004,2007 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 Property changes on: vendor/dialog/dist/headers.sh ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/inputbox.c =================================================================== --- vendor/dialog/dist/inputbox.c (revision 339481) +++ vendor/dialog/dist/inputbox.c (revision 339482) @@ -1,255 +1,266 @@ /* - * $Id: inputbox.c,v 1.76 2012/12/03 11:46:50 tom Exp $ + * $Id: inputbox.c,v 1.84 2018/06/21 23:29:35 tom Exp $ * * inputbox.c -- implements the input box * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2016,2018 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 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 ) /* * 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; - int first; - int edited; + 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), 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_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); - (void) wattrset(dialog, dialog_attr); + 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, password, first); + 0, 0, box_width, (bool) (password != 0), first); wsyncup(editor); wcursyncup(editor); } while (result == DLG_EXIT_UNKNOWN) { int edit = 0; /* * 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, password, first); + 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; } /* * 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); if (edit) { dlg_show_string(editor, input, chr_offset, inputbox_attr, - 0, 0, box_width, password, first); + 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 ' ': /* FIXME: conflict with inputstr.c */ + case DLGK_TOGGLE: case DLGK_ENTER: dlg_del_window(dialog); result = (state >= 0) ? dlg_enter_buttoncode(state) : DLG_EXIT_OK; 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(); goto retry; #endif default: beep(); break; } } else { beep(); } } dlg_unregister_window(editor); dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); return result; } Index: vendor/dialog/dist/inputstr.c =================================================================== --- vendor/dialog/dist/inputstr.c (revision 339481) +++ vendor/dialog/dist/inputstr.c (revision 339482) @@ -1,802 +1,804 @@ /* - * $Id: inputstr.c,v 1.83 2013/09/23 23:19:26 tom Exp $ + * $Id: inputstr.c,v 1.88 2018/06/18 22:10:54 tom Exp $ * * inputstr.c -- functions for input/display of a string * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2017,2018 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_msg("\tcache %p %p:%s\n", p, p->string, p->string); + DLG_TRACE(("# cache %p %p:%s\n", p, p->string, p->string)); } } static void trace_cache(const char *fn, int ln) { - dlg_trace_msg("trace_cache %s@%d\n", fn, 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 = (p->cache_num - q->cache_num); + int result = CMP(p->cache_num, q->cache_num); if (result == 0) - result = (int) (p->string_at - q->string_at); + 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)) { 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) { 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; 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()) { 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 { 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 */ { 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(ch)) + 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); - (void) wattrset(win, attr); + 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 */ Index: vendor/dialog/dist/makefile.in =================================================================== --- vendor/dialog/dist/makefile.in (revision 339481) +++ vendor/dialog/dist/makefile.in (revision 339482) @@ -1,345 +1,358 @@ -# $Id: makefile.in,v 1.87 2013/09/02 19:51:58 tom Exp $ +# $Id: makefile.in,v 1.97 2018/06/09 01:05:18 tom Exp $ # template makefile for DIALOG ############################################################################## -# Copyright (c) 1999-2012,2013 Thomas E. Dickey # +# Copyright (c) 1999-2017,2018 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 = @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@ 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 .html .1 .3 .man .ps .pdf .txt +.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 $< -.1.html : - GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | groff -P -o0 -I$*_ -Thtml -man" >$@ +@NROFF_NOTE@.1.txt : +@NROFF_NOTE@ GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | nroff -Tascii -man | col -bx" >$@ -.1.ps : - $(SHELL) -c "tbl $< | groff -man" >$@ +@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 -.1.txt : - GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | nroff -Tascii -man | col -bx" >$@ - -.ps.pdf : - 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@ - $(LINK) -o $@ dialog$o -L. -l@PACKAGE@ $(LDFLAGS) $(LIBS) + $(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 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).1" + @ echo "** installing $(ACTUAL_PROG).$(manext)" @ $(SHELL) $(srcdir)/rename.sh \ $(srcdir)/dialog.1 \ - $(MAN1DIR)/$(ACTUAL_PROG).1 \ + $(MAN1DIR)/$(ACTUAL_PROG).$(manext) \ $(ACTUAL_PROG) \ @PACKAGE@ \ $(INSTALL_DATA) uninstall-man :: - $(RM) $(MAN1DIR)/$(ACTUAL_PROG).1 + $(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@.3" + @ echo "** installing @PACKAGE@.$(libext)" @ $(SHELL) $(srcdir)/rename.sh \ $(srcdir)/dialog.3 \ - $(MAN3DIR)/@PACKAGE@.3 \ + $(MAN3DIR)/@PACKAGE@.$(libext) \ $(ACTUAL_PROG) \ @PACKAGE@ \ $(INSTALL_DATA) uninstall-lib :: - $(RM) $(MAN3DIR)/@PACKAGE@.3 + $(RM) $(MAN3DIR)/@PACKAGE@.$(libext) headers.sed : headers-sh $(SHELL) headers-sh $(INCLUDEDIR) $(srcdir) ################################################################################ TOP_DOCS = \ - dialog.html \ - dialog.pdf \ - dialog.ps \ - dialog.txt +@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 \ - dialog_lib.html \ - dialog_lib.pdf \ - dialog_lib.ps \ - dialog_lib.txt +@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 Index: vendor/dialog/dist/menubox.c =================================================================== --- vendor/dialog/dist/menubox.c (revision 339481) +++ vendor/dialog/dist/menubox.c (revision 339482) @@ -1,778 +1,801 @@ /* - * $Id: menubox.c,v 1.148 2013/09/02 17:15:13 tom Exp $ + * $Id: menubox.c,v 1.159 2018/06/21 23:28:56 tom Exp $ * * menubox.c -- implements the menu box * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2016,2018 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_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) { - (void) wattrset(win, (selected != Unselected) ? item_selected_attr : item_attr); + 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 { - (void) wattrset(win, menubox_attr); + 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); } - (void) wattrset(win, save); + 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; - int first = TRUE; + 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) key = dlg_mouse_wgetch(data->menu, &fkey); 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); - (void) wattrset(data->menu, save); + 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; } 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); 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; - (void) wattrset(data->menu, menubox_attr); + 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, - DLG_KEYS_DATA( DLGK_FIELD_NEXT, ' ' ), + 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 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 = dlg_strclone(cprompt); + 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(); - dlg_tab_correct_str(prompt); #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); - (void) wattrset(dialog, dialog_attr); + 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; 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) { 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; 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); /* * 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 */ - height = old_height; - width = old_width; - /* repaint */ +#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); - refresh(); dlg_mouse_free_regions(); + /* 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; 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; } Index: vendor/dialog/dist/mixedform.c =================================================================== --- vendor/dialog/dist/mixedform.c (revision 339481) +++ vendor/dialog/dist/mixedform.c (revision 339482) @@ -1,118 +1,118 @@ /* - * $Id: mixedform.c,v 1.12 2013/09/02 17:02:05 tom Exp $ + * $Id: mixedform.c,v 1.13 2018/06/15 01:23:33 tom Exp $ * * mixedform.c -- implements the mixed form (i.e, typed pairs label/editbox) * - * Copyright 2007-2011,2013 Thomas E. Dickey + * Copyright 2007-2013,2018 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) * MIXEDFORM_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 ItemTypep(i) items[LLEN(i) + 8] #define ItemHelp(i) (dialog_vars.item_help ? items[LLEN(i) + 9] : dlg_strempty()) int dialog_mixedform(const char *title, const char *cprompt, int height, int width, int form_height, int item_no, char **items) { int result; - int choice; + 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_mixedform"); 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()); listitems[i].type = (unsigned) atoi(ItemTypep(i)); } 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; } Index: vendor/dialog/dist/mixedgauge.c =================================================================== --- vendor/dialog/dist/mixedgauge.c (revision 339481) +++ vendor/dialog/dist/mixedgauge.c (revision 339482) @@ -1,392 +1,403 @@ /* - * $Id: mixedgauge.c,v 1.30 2012/11/18 16:30:20 tom Exp $ + * $Id: mixedgauge.c,v 1.34 2018/06/18 22:09:31 tom Exp $ * * mixedgauge.c -- implements the mixedgauge dialog * - * Copyright 2007-2011,2012 Thomas E. Dickey + * Copyright 2007-2012,2018 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); + 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) { chtype attr = A_NORMAL; y = item + MARGIN + 1; if (y > bm) break; status = status_string(dlg->list[item].text, &freeMe); if (status == 0 || *status == 0) 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); - (void) wattrset(win, title_attr); + 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) { - wattroff(win, A_REVERSE); + dlg_attroff(win, A_REVERSE); } else { - (void) wattrset(win, A_REVERSE); + 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); - (void) wattrset(win, title_attr); + dlg_attrset(win, title_attr); (void) wmove(win, y, x + 2); dlg_print_text(win, message, width, &attr); - (void) wattrset(win, save2); + 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); - (void) wattrset(dlg->dialog, gauge_attr); + 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) { - wattroff(dlg->dialog, A_REVERSE); + dlg_attroff(dlg->dialog, A_REVERSE); } else { - (void) wattrset(dlg->dialog, A_REVERSE); + 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; if (!*began) { 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); - (void) wattrset(dlg->caption, dialog_attr); + 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); 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); } Index: vendor/dialog/dist/mouse.c =================================================================== --- vendor/dialog/dist/mouse.c (revision 339481) +++ vendor/dialog/dist/mouse.c (revision 339482) @@ -1,148 +1,162 @@ /* - * $Id: mouse.c,v 1.20 2012/12/21 10:00:30 tom Exp $ + * $Id: mouse.c,v 1.24 2017/01/31 00:27:21 tom Exp $ * * mouse.c -- mouse support for dialog * - * Copyright 2002-2007,2012 Thomas E. Dickey + * Copyright 2002-2016,2017 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> #if USE_MOUSE static int basex, basey, basecode; static mseRegion *regionList = NULL; /*=========== region related functions =============*/ static mseRegion * find_region_by_code(int code) { mseRegion *butPtr; for (butPtr = regionList; butPtr; butPtr = butPtr->next) { if (code == butPtr->code) break; } return butPtr; } void dlg_mouse_setbase(int x, int y) { basex = x; basey = y; } void dlg_mouse_setcode(int code) { basecode = code; + DLG_TRACE(("# mouse_setcode %d\n", code)); } void dlg_mouse_mkbigregion(int y, int x, int height, int width, int code, int step_y, int step_x, int mode) { mseRegion *butPtr = dlg_mouse_mkregion(y, x, height, width, -DLGK_MOUSE(code)); butPtr->mode = mode; butPtr->step_x = MAX(1, step_x); butPtr->step_y = MAX(1, step_y); } void dlg_mouse_free_regions(void) { while (regionList != 0) { mseRegion *butPtr = regionList->next; free(regionList); regionList = butPtr; } } mseRegion * dlg_mouse_mkregion(int y, int x, int height, int width, int code) { mseRegion *butPtr; if ((butPtr = find_region_by_code(basecode + code)) == 0) { - butPtr = dlg_malloc(mseRegion, 1); + butPtr = dlg_calloc(mseRegion, 1); assert_ptr(butPtr, "dlg_mouse_mkregion"); butPtr->next = regionList; regionList = butPtr; } - if (butPtr != 0) { - butPtr->mode = -1; - butPtr->step_x = 0; - butPtr->step_y = 0; - butPtr->y = basey + y; - butPtr->Y = basey + y + height; - butPtr->x = basex + x; - butPtr->X = basex + x + width; - butPtr->code = basecode + code; + + if ((butPtr->mode != -1) || + (butPtr->step_x != 0) || + (butPtr->step_y != 0) || + (butPtr->y != (basey + y)) || + (butPtr->Y != (basey + y + height)) || + (butPtr->x != (basex + x)) || + (butPtr->X != (basex + x + width)) || + (butPtr->code != basecode + code)) { + DLG_TRACE(("# mouse_mkregion %d,%d %dx%d %d (%d)\n", + y, x, height, width, + butPtr->code, code)); } + + butPtr->mode = -1; + butPtr->step_x = 0; + butPtr->step_y = 0; + butPtr->y = basey + y; + butPtr->Y = basey + y + height; + butPtr->x = basex + x; + butPtr->X = basex + x + width; + butPtr->code = basecode + code; + return butPtr; } /* retrieve the frame under the pointer */ static mseRegion * any_mouse_region(int y, int x, int small) { mseRegion *butPtr; for (butPtr = regionList; butPtr; butPtr = butPtr->next) { if (small ^ (butPtr->code >= 0)) { continue; } if (y < butPtr->y || y >= butPtr->Y) { continue; } if (x < butPtr->x || x >= butPtr->X) { continue; } break; /* found */ } return butPtr; } /* retrieve the frame under the pointer */ mseRegion * dlg_mouse_region(int y, int x) { return any_mouse_region(y, x, TRUE); } /* retrieve the bigframe under the pointer */ mseRegion * dlg_mouse_bigregion(int y, int x) { return any_mouse_region(y, x, FALSE); } #else void mouse_dummy(void); void mouse_dummy(void) { } #endif /* USE_MOUSE */ Index: vendor/dialog/dist/mousewget.c =================================================================== --- vendor/dialog/dist/mousewget.c (revision 339481) +++ vendor/dialog/dist/mousewget.c (revision 339482) @@ -1,91 +1,95 @@ /* - * $Id: mousewget.c,v 1.22 2012/11/30 10:23:49 tom Exp $ + * $Id: mousewget.c,v 1.24 2017/01/31 00:27:21 tom Exp $ * * mousewget.c -- mouse/wgetch support for dialog * - * Copyright 2000-2008,2012 Thomas E. Dickey + * Copyright 2000-2016,2017 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) { + 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); } Index: vendor/dialog/dist/msgbox.c =================================================================== --- vendor/dialog/dist/msgbox.c (revision 339481) +++ vendor/dialog/dist/msgbox.c (revision 339482) @@ -1,192 +1,202 @@ /* - * $Id: msgbox.c,v 1.75 2012/12/01 01:48:08 tom Exp $ + * $Id: msgbox.c,v 1.81 2018/06/21 23:29:59 tom Exp $ * * msgbox.c -- implements the message box and info box * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2012,2018 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, - TRAVERSE_BINDINGS, SCROLLKEY_BINDINGS, + TRAVERSE_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ int x, y, last = 0, page; int button; int key = 0, fkey; int result = DLG_EXIT_UNKNOWN; WINDOW *dialog = 0; - char *prompt = dlg_strclone(cprompt); + char *prompt; const char **buttons = dlg_ok_label(); int offset = 0; int check; bool show = TRUE; int min_width = (pauseopt == 1 ? 12 : 0); - int save_nocancel = dialog_vars.nocancel; + 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); } 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); - (void) wattrset(dialog, dialog_attr); + dlg_attrset(dialog, dialog_attr); if (pauseopt) { 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) { 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 (!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; 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_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 { 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_del_window(dialog); dlg_mouse_free_regions(); free(prompt); dialog_vars.nocancel = save_nocancel; return result; } Index: vendor/dialog/dist/package/debian/changelog =================================================================== --- vendor/dialog/dist/package/debian/changelog (revision 339481) +++ vendor/dialog/dist/package/debian/changelog (revision 339482) @@ -1,91 +1,229 @@ +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 Index: vendor/dialog/dist/package/debian/control =================================================================== --- vendor/dialog/dist/package/debian/control (revision 339481) +++ vendor/dialog/dist/package/debian/control (revision 339482) @@ -1,24 +1,24 @@ Source: cdialog Maintainer: Thomas E. Dickey <dickey@invisible-island.net> Section: misc Priority: optional Standards-Version: 3.8.4 -Build-Depends: debhelper (>= 5), libncursesw5-dev (>= 5.3), groff-base +Build-Depends: debhelper (>= 5), libc6 (>= 2.11), libncursesw5-dev (>= 5.3), groff-base Homepage: http://invisible-island.net/dialog/ Package: cdialog Architecture: any -Depends: libncursesw5 (>= 5.3) +Depends: libc6 (>= 2.11), libncursesw5 (>= 5.3) Description: dialog - display dialog boxes from shell scripts - Dialog is a program that will let you to 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 + 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): . - calendar, checklist, dselect, editbox, form, fselect, gauge, - infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, - msgbox (message), passwordbox, passwordform, pause, progressbox, - radiolist, tailbox, tailboxbg, textbox, timebox, and yesno - (yes/no). + 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. Index: vendor/dialog/dist/package/debian/copyright =================================================================== --- vendor/dialog/dist/package/debian/copyright (revision 339481) +++ vendor/dialog/dist/package/debian/copyright (revision 339482) @@ -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-2012,2013 Thomas E. Dickey + Copyright 2000-2017,2018 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-2010,2013 by Thomas E. Dickey +Copyright: 1999-2017,2018 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 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' Index: vendor/dialog/dist/package/debian/postinst =================================================================== --- vendor/dialog/dist/package/debian/postinst (nonexistent) +++ vendor/dialog/dist/package/debian/postinst (revision 339482) @@ -0,0 +1,7 @@ +#! /bin/sh + +set -e + +if [ "$1" = "configure" ]; then + ldconfig +fi Property changes on: vendor/dialog/dist/package/debian/postinst ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/package/debian/rules =================================================================== --- vendor/dialog/dist/package/debian/rules (revision 339481) +++ vendor/dialog/dist/package/debian/rules (revision 339482) @@ -1,95 +1,106 @@ #!/usr/bin/make -f -# MAde with the aid of dh_make, by Craig Small +# 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) -CFLAGS = +CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS) +CFLAGS := $(shell dpkg-buildflags --get CFLAGS) +LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) +ACTUAL_PROG = cdialog + 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 - CFLAGS="$(CFLAGS)" ./configure \ + 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-libtool \ - --with-ncursesw \ - --with-package=cdialog \ + --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/cdialog + $(MAKE) install DESTDIR=$(CURDIR)/debian/${ACTUAL_PROG} 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 Index: vendor/dialog/dist/package/debian/watch =================================================================== --- vendor/dialog/dist/package/debian/watch (revision 339481) +++ vendor/dialog/dist/package/debian/watch (revision 339482) @@ -1,4 +1,4 @@ version=3 -opts=passive ftp://invisible-island.net/dialog/dialog-([\d.]+)\.tgz \ +opts=passive ftp://ftp.invisible-island.net/dialog/dialog-([\d.]+)\.tgz \ debian uupdate Index: vendor/dialog/dist/package/dialog.map =================================================================== --- vendor/dialog/dist/package/dialog.map (nonexistent) +++ vendor/dialog/dist/package/dialog.map (revision 339482) @@ -0,0 +1,222 @@ +# $Id: dialog.map,v 1.7 2018/06/21 00:32:55 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 + +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; Index: vendor/dialog/dist/package/dialog.spec =================================================================== --- vendor/dialog/dist/package/dialog.spec (revision 339481) +++ vendor/dialog/dist/package/dialog.spec (revision 339482) @@ -1,87 +1,95 @@ Summary: dialog - display dialog boxes from shell scripts %define AppProgram dialog -%define AppVersion 1.2 -%define AppRelease 20130923 +%define AppVersion 1.3 +%define AppRelease 20180621 %define ActualProg c%{AppProgram} -# $XTermId: dialog.spec,v 1.54 2013/09/23 23:08:24 tom Exp $ +# $XTermId: dialog.spec,v 1.108 2018/06/21 09:19:45 tom Exp $ Name: %{ActualProg} Version: %{AppVersion} Release: %{AppRelease} License: LGPL -Group: Applications/Development -URL: ftp://invisible-island.net/%{AppProgram} +Group: Applications/System +URL: ftp://ftp.invisible-island.net/%{AppProgram} Source0: %{AppProgram}-%{AppVersion}-%{AppRelease}.tgz Packager: Thomas Dickey <dickey@invisible-island.net> %description -Dialog is a program that will let you to 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): +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): - calendar, checklist, dselect, editbox, form, fselect, gauge, - infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, - msgbox (message), passwordbox, passwordform, pause, progressbox, - radiolist, tailbox, tailboxbg, textbox, timebox, and yesno - (yes/no). + 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. %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-libtool \ - --with-ncursesw \ - --disable-rpath-hack +%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 make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT make install-full DESTDIR=$RPM_BUILD_ROOT -libtool --finish %{_libdir} strip $RPM_BUILD_ROOT%{_bindir}/%{ActualProg} -chmod 755 $RPM_BUILD_ROOT%{_libdir}/lib%{ActualProg}.so.*.*.* -rm -f $RPM_BUILD_ROOT%{_libdir}/lib%{ActualProg}.la +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}.* %{_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 %changelog # each patch should add its ChangeLog entries here + +* 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 Index: vendor/dialog/dist/package/dialog.sym =================================================================== --- vendor/dialog/dist/package/dialog.sym (nonexistent) +++ vendor/dialog/dist/package/dialog.sym (revision 339482) @@ -0,0 +1,202 @@ +# $Id: dialog.sym,v 1.7 2018/06/21 00:32:55 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 +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_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_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_exiterr +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_index_columns +dlg_index_wchars +dlg_item_help +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_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_restore_vars +dlg_result_key +dlg_save_vars +dlg_set_focus +dlg_set_result +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_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 Index: vendor/dialog/dist/package/freebsd/Makefile =================================================================== --- vendor/dialog/dist/package/freebsd/Makefile (revision 339481) +++ vendor/dialog/dist/package/freebsd/Makefile (revision 339482) @@ -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.2.20130923 +PORTVERSION= 1.3.20180621 PORTEPOCH= 1 CATEGORIES= devel -MASTER_SITES= ftp://invisible-island.net/${PORTNAME:S|^c||}/ +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> Index: vendor/dialog/dist/pause.c =================================================================== --- vendor/dialog/dist/pause.c (revision 339481) +++ vendor/dialog/dist/pause.c (revision 339482) @@ -1,246 +1,256 @@ /* - * $Id: pause.c,v 1.36 2012/07/03 00:01:59 tom Exp $ + * $Id: pause.c,v 1.39 2018/06/19 22:57:01 tom Exp $ * * pause.c -- implements the pause dialog * - * Copyright 2004-2011,2012 Thomas E. Dickey + * Copyright 2004-2012,2018 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 result = DLG_EXIT_UNKNOWN; int button_high = (have_buttons ? BTN_HIGH : MARGIN); int gauge_y; - char *prompt = dlg_strclone(cprompt); + 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); - dlg_tab_correct_str(prompt); - dialog_vars.timeout_secs = 0; seconds_orig = (seconds > 0) ? seconds : 1; #ifdef KEY_RESIZE retry: - height = old_height; - width = old_width; #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); - (void) wattrset(dialog, dialog_attr); + 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); - (void) wattrset(dialog, title_attr); + 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) { - wattroff(dialog, A_REVERSE); + dlg_attroff(dialog, A_REVERSE); } else { - (void) wattrset(dialog, A_REVERSE); + 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)) 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 */ 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 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)); 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); } Index: vendor/dialog/dist/po/de.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/dialog.pot =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/es.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/fur.po =================================================================== --- vendor/dialog/dist/po/fur.po (nonexistent) +++ vendor/dialog/dist/po/fur.po (revision 339482) @@ -0,0 +1,113 @@ +# Dialog +# Copyright 2003-2007,2008 # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# Fabio Tomat <f.t.public@gmail.com>, 2016. +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: 2016-11-20 07:14+0100\n" +"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n" +"Language-Team: Friulian <f.t.public@gmail.com>\n" +"Language: fur\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" +"X-Generator: Poedit 1.8.8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sì" + +#: buttons.c:393 +msgid "No" +msgstr "No" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Anule" + +#: buttons.c:417 +msgid "EXIT" +msgstr "JES" + +#: buttons.c:425 +msgid "Extra" +msgstr "Adizionâl" + +#: buttons.c:433 +msgid "Help" +msgstr "Jutori" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mês" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "An" + +#: dialog.c:741 +msgid "Rename" +msgstr "Cambie non" + +#: fselect.c:550 +msgid "Directories" +msgstr "Cartelis" + +#: fselect.c:551 +msgid "Files" +msgstr "File" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Riessût" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Falît" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Superât" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Completât" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Controlât" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Fat" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Saltât" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "In cors" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/D" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Progrès gjenerâl" + +#: textbox.c:489 +msgid "Search" +msgstr "Cîr" Property changes on: vendor/dialog/dist/po/fur.po ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/po/gd.po =================================================================== --- vendor/dialog/dist/po/gd.po (nonexistent) +++ vendor/dialog/dist/po/gd.po (revision 339482) @@ -0,0 +1,111 @@ +# Scottish Gaelic translation of Dialog. +# Copyright 2003-2007,2008 # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# GunChleoc <fios@foramnagaidhlig.net>, 2014. +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: 2014-02-11 11:19-0000\n" +"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n" +"Language-Team: Scottish Gaelic <fios@foramnagaidhlig.net>\n" +"Language: gd\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Tha" + +#: buttons.c:393 +msgid "No" +msgstr "Chan eil" + +#: buttons.c:401 +msgid "OK" +msgstr "Ceart ma-thà" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Sguir dheth" + +#: buttons.c:417 +msgid "EXIT" +msgstr "FÀG AN-SEO" + +#: buttons.c:425 +msgid "Extra" +msgstr "Barrachd" + +#: buttons.c:433 +msgid "Help" +msgstr "Cobhair" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mìos" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Bliadhna" + +#: dialog.c:741 +msgid "Rename" +msgstr "Cuir ainm ùr air" + +#: fselect.c:550 +msgid "Directories" +msgstr "Pasganan" + +#: fselect.c:551 +msgid "Files" +msgstr "Faidhlichean" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Soirbheachail" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Dh'fhàillig leis" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Soirbheachail" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Coileanta" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Air a dhearbhadh" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Dèanta" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Air a leigeil seachad" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "A' dol air adhart" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Chan eil seo iomchaidh" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Adhartas san fharsaingeachd" + +#: textbox.c:489 +msgid "Search" +msgstr "Lorg" Property changes on: vendor/dialog/dist/po/gd.po ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/po/hr.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/hu.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/lv.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/ro.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/po/tr.po =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: vendor/dialog/dist/prgbox.c =================================================================== --- vendor/dialog/dist/prgbox.c (revision 339481) +++ vendor/dialog/dist/prgbox.c (revision 339482) @@ -1,117 +1,117 @@ /* - * $Id: prgbox.c,v 1.9 2012/12/02 23:40:30 tom Exp $ + * $Id: prgbox.c,v 1.13 2016/01/27 01:37:26 tom Exp $ * * prgbox.c -- implements the prg box * - * Copyright 2011,2012 Thomas E. Dickey + * Copyright 2011-2014,2016 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. */ -static FILE * +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) { 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(4 + strlen(command))) != 0) { - sprintf(blob, "-c %s", command); + if ((blob = malloc(10 + strlen(command))) != 0) { + 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; } Index: vendor/dialog/dist/progressbox.c =================================================================== --- vendor/dialog/dist/progressbox.c (revision 339481) +++ vendor/dialog/dist/progressbox.c (revision 339482) @@ -1,306 +1,477 @@ /* - * $Id: progressbox.c,v 1.23 2012/12/21 10:00:05 tom Exp $ + * $Id: progressbox.c,v 1.47 2018/06/21 09:14:47 tom Exp $ * * progressbox.c -- implements the progress box * - * Copyright 2005 Valery Reznic - * Copyright 2006-2012 Thomas E. Dickey + * Copyright 2006-2014,2018 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. * * 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); +} + +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); +} + +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 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) +get_line(MY_OBJ * obj, int *restart) { FILE *fp = obj->obj.input; int col = 0; int j, tmpint, ch; + char *result = obj->line; + *restart = 0; for (;;) { - if ((ch = getc(fp)) == EOF) { - obj->is_eof = 1; - if (col) { + 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; - } else { - return NULL; } } +#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'; - return obj->line; +#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) { + *restart = 1; + } + nodelay(win, FALSE); + } +#endif + return result; } /* * Print a new line of text. */ static void -print_line(MY_OBJ * obj, WINDOW *win, int row, int width) +print_line(MY_OBJ * obj, const char *line, int row) { - int i, y, x; - char *line = obj->line; + int width = obj->wide - (2 * MARGIN); + int limit = MIN((int) strlen(line), width - 2); - (void) wmove(win, row, 0); /* move cursor to correct line */ - (void) waddch(win, ' '); -#ifdef NCURSES_VERSION - (void) waddnstr(win, line, MIN((int) strlen(line), width - 2)); -#else - line[MIN((int) strlen(line), width - 2)] = '\0'; - waddstr(win, line); -#endif + (void) wmove(obj->text, row, 0); /* move cursor to correct line */ + wprintw(obj->text, " %.*s", limit, line); + wclrtoeol(obj->text); +} - getyx(win, y, x); - (void) y; - /* Clear 'residue' of previous line */ - for (i = 0; i < width - x; i++) - (void) waddch(win, ' '); +#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 -pause_for_ok(WINDOW *dialog, int height, int width) +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 result = DLG_EXIT_UNKNOWN; const char **buttons = dlg_ok_label(); int check; - int save_nocancel = dialog_vars.nocancel; + bool save_nocancel = dialog_vars.nocancel; bool redraw = TRUE; dialog_vars.nocancel = TRUE; button = dlg_default_button(); - dlg_register_window(dialog, "progressbox", binding); - dlg_register_buttons(dialog, "progressbox", buttons); +#ifdef KEY_RESIZE + restart: +#endif - dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); - mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n'); + 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) { if (redraw) { redraw = FALSE; if (button < 0) button = 0; - dlg_draw_buttons(dialog, - height - 2, 0, + dlg_draw_buttons(obj->obj.win, + obj->high - 2, 0, buttons, button, - FALSE, width); + FALSE, obj->wide); } - key = dlg_mouse_wgetch(dialog, &fkey); + key = dlg_mouse_wgetch(obj->obj.win, &fkey); if (dlg_result_key(key, fkey, &result)) 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 { beep(); } } - dlg_unregister_window(dialog); + 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; - int x, y, thigh; - WINDOW *dialog, *text; MY_OBJ *obj; - char *prompt = dlg_strclone(cprompt); + int again = 0; + int toprow = 0; int result; - dlg_tab_correct_str(prompt); - dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); - dlg_print_size(height, width); - dlg_ctl_size(height, width); + 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); - x = dlg_box_x_ordinate(width); - y = dlg_box_y_ordinate(height); - thigh = height - (2 * MARGIN); + obj = dlg_calloc(MY_OBJ, 1); + assert_ptr(obj, "dlg_progressbox"); + obj->obj.input = fp; - dialog = dlg_new_window(height, width, y, x); + obj->high = height; + obj->wide = width; - dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); - dlg_draw_title(dialog, title); - dlg_draw_helpline(dialog, FALSE); +#ifdef KEY_RESIZE + obj->old_high = height; + obj->old_wide = width; - if (*prompt != '\0') { - int y2, x2; + curs_set(0); + restart: +#endif - (void) wattrset(dialog, dialog_attr); - dlg_print_autowrap(dialog, prompt, height, width); - getyx(dialog, y2, x2); - (void) x2; - ++y2; - wmove(dialog, y2, MARGIN); - for (i = 0; i < getmaxx(dialog) - 2 * MARGIN; i++) - (void) waddch(dialog, dlg_boxchar(ACS_HLINE)); - y += y2; - thigh -= y2; + start_obj(obj, title, cprompt); +#ifdef KEY_RESIZE + if (again) { + toprow = reprint_lines(obj, FALSE); } +#endif - /* Create window for text region, used for scrolling text */ - text = dlg_sub_window(dialog, - thigh, - width - (2 * MARGIN), - y + MARGIN, - x + MARGIN); - - (void) wrefresh(dialog); - - (void) wmove(dialog, thigh, (MARGIN + 1)); - (void) wnoutrefresh(dialog); - - obj = dlg_calloc(MY_OBJ, 1); - assert_ptr(obj, "dlg_progressbox"); - - obj->obj.input = fp; - obj->obj.win = dialog; - obj->text = text; - - dlg_attr_clear(text, thigh, getmaxx(text), dialog_attr); - for (i = 0; get_line(obj); i++) { - if (i < thigh) { - print_line(obj, text, i, width - (2 * MARGIN)); + 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(text, TRUE); - scroll(text); - scrollok(text, FALSE); - print_line(obj, text, thigh - 1, width - (2 * MARGIN)); + scrollok(obj->text, TRUE); + scroll(obj->text); + scrollok(obj->text, FALSE); + print_line(obj, obj->line, getmaxy(obj->text) - 1); } - (void) wrefresh(text); - dlg_trace_win(dialog); + (void) wrefresh(obj->text); if (obj->is_eof) break; } + dlg_trace_win(obj->obj.win); + curs_set(1); + if (pauseopt) { - scrollok(text, TRUE); - wscrl(text, 1 + MARGIN); - (void) wrefresh(text); - result = pause_for_ok(dialog, height, width); + 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(dialog); + wrefresh(obj->obj.win); result = DLG_EXIT_OK; } - dlg_del_window(dialog); - free(prompt); - free(obj); + 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; } Index: vendor/dialog/dist/rangebox.c =================================================================== --- vendor/dialog/dist/rangebox.c (revision 339481) +++ vendor/dialog/dist/rangebox.c (revision 339482) @@ -1,419 +1,432 @@ /* - * $Id: rangebox.c,v 1.17 2013/03/17 16:02:00 tom Exp $ + * $Id: rangebox.c,v 1.24 2018/06/19 22:57:01 tom Exp $ * * rangebox.c -- implements the rangebox dialog * - * Copyright 2012,2013 Thomas E. Dickey + * Copyright 2012-2017,2018 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> #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; } - (void) wattrset(win, gauge_attr); + 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) { - wattroff(win, A_REVERSE); + dlg_attroff(win, A_REVERSE); } else { - (void) wattrset(win, A_REVERSE); + 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); } - (void) wattrset(win, dialog_attr); + dlg_attrset(win, dialog_attr); wmove(win, y, x); data->current = value; - dlg_trace_msg("drew %d offset %d scaled %d limit %d inc %d\n", - value, - offset, - scaled, - data->slide_len, - data->slide_inc); + 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, - DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + 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 button; int result = DLG_EXIT_UNKNOWN; WINDOW *dialog; int state = dlg_default_button(); const char **buttons = dlg_ok_labels(); - char *prompt = dlg_strclone(cprompt); + 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); + 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); - (void) wattrset(dialog, dialog_attr); + dlg_attrset(dialog, dialog_attr); dlg_print_autowrap(dialog, prompt, height, width); dlg_trace_win(dialog); while (result == DLG_EXIT_UNKNOWN) { 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 ((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_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); - refresh(); dlg_mouse_free_regions(); 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); dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); return result; } Index: vendor/dialog/dist/rc.c =================================================================== --- vendor/dialog/dist/rc.c (revision 339481) +++ vendor/dialog/dist/rc.c (revision 339482) @@ -1,619 +1,616 @@ /* - * $Id: rc.c,v 1.51 2012/11/30 21:32:39 tom Exp $ + * $Id: rc.c,v 1.53 2018/05/31 20:32:15 tom Exp $ * * rc.c -- routines for processing the configuration file * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2012,2018 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> /* * 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])) #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)) -/* check if character is white space */ -#define whitespace(c) (c == ' ' || c == TAB) - /* check if character is string quoting characters */ -#define isquote(c) (c == '"' || c == '\'') +#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 (whitespace(str[n]) && str[n] != '\0') + 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 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) { 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)"); return str; } /* * Extract the foreground, background and highlight values from an attribute * represented as a string in one of two forms: * * "(foreground,background,highlight)" " "xxxx_color" */ static int str_to_attr(char *str, int *fg, int *bg, int *hl) { int i = 0, get_fg = 1; unsigned j; char tempstr[MAX_LEN + 1], *part; size_t have; 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; return 0; } return -1; /* invalid representation */ } /* 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 */ 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 */ /* find end of fg/bg string */ - while (!whitespace(tempstr[i]) && tempstr[i] != ',' + while (!isblank(UCH(tempstr[i])) && tempstr[i] != ',' && tempstr[i] != '\0') i++; if (tempstr[i] == '\0') return -1; /* invalid representation */ - else if (whitespace(tempstr[i])) { /* not yet ',' */ + 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 */ /* trim trailing white space from highlight string */ i = (int) strlen(part) - 1; - while (whitespace(part[i]) && i > 0) + while (isblank(UCH(part[i])) && i > 0) i--; part[i + 1] = '\0'; if (!dlg_strcmp(part, "ON")) *hl = TRUE; else if (!dlg_strcmp(part, "OFF")) *hl = FALSE; else return -1; /* invalid highlight value */ 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 (!whitespace(line[i]) && line[i] != '=' && line[i] != '\0') + 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 (whitespace((*value)[i]) && i > 0) + 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 "\ # Attribute - (foreground,background,highlight?)\n" #endif ); /* 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)); } } #endif /* HAVE_COLOR */ dlg_dump_keys(rc_file); (void) fclose(rc_file); } /* * 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; 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 (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); else sprintf(str, "%s/%s", tempptr, DIALOGRC); rc_file = fopen(tempptr = str, "rt"); } } if (rc_file == NULL) { /* step (b) failed? */ /* try step (c) */ strcpy(str, GLOBALRC); if ((rc_file = fopen(tempptr = 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", tempptr)); /* Scan each line and set variables */ while ((result == 0) && (fgets(str, MAX_LEN, rc_file) != NULL)) { - DLG_TRACE(("rc:%s", str)); + 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); 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); 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); 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); 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); result = -1; /* parse aborted */ } else { dlg_color_table[i].fg = fg; dlg_color_table[i].bg = bg; dlg_color_table[i].hilite = hl; } } else { #endif /* HAVE_COLOR */ fprintf(stderr, "\nParse error: unknown variable " "at line %d of configuration file:\n\t%s\n", l, var); result = -1; /* parse aborted */ } break; case LINE_ERROR: fprintf(stderr, "\nParse error: syntax error at line %d of " "configuration file.\n", l); result = -1; /* parse aborted */ break; } l++; /* next line */ } (void) fclose(rc_file); return result; } Index: vendor/dialog/dist/samples/copifuncs/copi.ifman1 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.ifman1 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.ifman1 (revision 339482) @@ -0,0 +1,29 @@ +#! /usr/bin/perl +# +# This is a utility script to manipulate Fidonet-related issues +# using Eugene Crosser's ifmail package +# +# Version 0.1 +# +# (C) Michael Bravo and The Communication Tube, 1994 +# +# You can do whatever you want with this script. I take no responsibility +# whatsoever in anything related to this script. If you make some useful +# additions to this, please think of sending them to me so I could partake +# of your wisdom. +# +# This script was written to help attaching and requesting files from the +# commandline, much like you do with Squish under DOS or OS/2. It is certainly +# not perfect - I used it as an exercise in Perl. It also probably lacks +# some other useful features, like ability to specify trunc/sent or kill/sent +# attributes etc etc. If you really want this or some other features +# implemented, write me at mbravo@tctube.spb.su or mbravo@octopus.spb.su +# and I will try to do what I can. +# +# Note - files don't get copied to any spool dir, so if you move attached +# files somewhere, they won't get sent. +# +# This script is supposed to read ifmail's config to determine where outbound +# directory and logfile are. The only two parameters to modify in most cases +# are below. + Property changes on: vendor/dialog/dist/samples/copifuncs/copi.ifman1 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.ifmcfg2 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.ifmcfg2 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.ifmcfg2 (revision 339482) @@ -0,0 +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. +# .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 +# 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 Property changes on: vendor/dialog/dist/samples/copifuncs/copi.ifmcfg2 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.ifmcfg4 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.ifmcfg4 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.ifmcfg4 (revision 339482) @@ -0,0 +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) +# 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" +# 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! Property changes on: vendor/dialog/dist/samples/copifuncs/copi.ifmcfg4 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.ifmcfg5 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.ifmcfg5 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.ifmcfg5 (revision 339482) @@ -0,0 +1,14 @@ + +# PhoneTrans lines provide rules to change phone prefixes to make local +# or long-distance calls. In the example below, my country code is 7, +# and local dialing area is 095. From the numbers starting with "7-095-" +# the prefix is stripped and the 7-digit remainder is dialed. For +# the numbers starting with "7-" but not with "7-095-", the country prefix +# "7-" is stripped and the long-distance dialing prefix "8W" substituted. +# For the numbers not matching any of the above, international +# call is performed: international dialing prefix "8W10" is prepended +# to the unmodified 11-digit number. Generally, the syntax is: +# "PhoneTrans <what-to-strip> / <what-to-substitute-instead>" +#PhoneTrans 7-095- / +#PhoneTrans 7- / 8W +#PhoneTrans / 8W10 Property changes on: vendor/dialog/dist/samples/copifuncs/copi.ifmcfg5 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.ifpoll1 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.ifpoll1 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.ifpoll1 (revision 339482) @@ -0,0 +1,9 @@ +#!/bin/sh +# ver 0.7 +# ifpoll, poll my boss node or the node given as argument 1 +# +# i start this shell script every day by crond, but you can +# start it also by hand :) start it as the owner of ifcico. +# rasca, berlin 1993 (Rasca Gmelch, 2:2410/305.4) +# +# where "ifcico" and "ifpack" reside Property changes on: vendor/dialog/dist/samples/copifuncs/copi.ifpoll1 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.ifreq1 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.ifreq1 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.ifreq1 (revision 339482) @@ -0,0 +1,20 @@ +#!/usr/bin/perl +$ver = "0.4"; +# +# this perl script is designed for the ifmail package by eugene grosser. +# +# request a file (first argument) from a fido-node (second argument), +# don't forget to quote if you use wildcards, e.g.: + +# ifreq 'files*' 2:2410/305 +# or +# ifreq 'files newfile' 2:2410/305 +# +# this perl script does only add an entry to the corresponding flo-file, +# the mailer ifcico is not started! +# +# rasca, berlin 1994 (rasca@marie.physik.tu-berlin.de, 2:2410/305.4) +# +# multi-zone support added by +# Roland Rosenfeld 15.05.1994 (roland@p13.flokiste.fido.de, 2:2450/300.13) + Property changes on: vendor/dialog/dist/samples/copifuncs/copi.ifreq1 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.rcnews =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.rcnews (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.rcnews (revision 339482) @@ -0,0 +1,79 @@ +#! /bin/sh +## $Revision: 1.1 $ +## News boot script. + +## =()<. @<_PATH_SHELLVARS>@>()= +. /usr/lib/news/innshellvars + +## Pick ${INND} or ${INNDSTART} +WHAT=${INNDSTART} +## Set to true or false +DOINNWATCH=false +MAIL="${MAILCMD} -s 'Boot-time Usenet warning on `hostname`' ${NEWSMASTER}" + +## RFLAG is set below; set FLAGS as appropriate. +RFLAG="" +FLAGS="-i0 -c0" + +## Clean shutdown? +if [ -f ${SERVERPID} ] ; then + ( echo 'INND: PID file exists -- unclean shutdown!' >/dev/console ) + RFLAG="-r" +fi + +if [ ! -f ${NEWSLIB}/.news.daily ] ; then + echo 'No .news.daily file; need to run news.daily?' | eval ${MAIL} +else + case `find ${NEWSLIB} -name .news.daily -mtime +1 -print 2>/dev/null` in + "") + ;; + *) + echo 'Old .news.daily file; need to run news.daily?' | eval ${MAIL} + ;; + esac +fi + +## Active file recovery. +if [ ! -s ${ACTIVE} ] ; then + if [ -s ${NEWACTIVE} ] ; then + mv ${NEWACTIVE} ${ACTIVE} + else + if [ -s ${OLDACTIVE} ] ; then + cp ${OLDACTIVE} ${ACTIVE} + else + ( echo 'INND: No active file!' >/dev/console ) + exit 1 + fi + fi + RFLAG="-r" + # You might want to rebuild the DBZ database, too: + #echo "cd ${NEWSLIB} \ + # && makehistory -r \ + # && mv history.n.dir history.dir \ + # && mv history.n.pag history.pag" | su ${NEWSUSER} +fi + +## Remove temporary batchfiles and lock files. +( cd ${BATCH} && rm -f bch* ) +( cd ${LOCKS} && rm -f LOCK* ) +( cd ${TEMPSOCKDIR} && rm -f ${TEMPSOCK} ) +rm -f ${NEWSCONTROL} ${NNTPCONNECT} ${SERVERPID} + +## Start the show. +( echo 'Starting innd.' >/dev/console ) +eval ${WHAT} ${RFLAG} ${FLAGS} + +# Gee, looks like lisp, doesn't it? +${DOINNWATCH} && { + echo "( ( sleep 60 ; ${INNWATCH} ) & )" | su ${NEWSUSER} +} + +RMFILE=${MOST_LOGS}/expire.rm +if [ -s ${MOST_LOGS}/expire.rm ] ; then + ( echo "Removing articles from pre-downtime expire run." >/dev/console ) + ( + echo 'System shut down during expire. Unlinking articles listed in' + echo ${RMFILE} + ) | eval ${MAIL} + echo "${NEWSBIN}/expirerm ${RMFILE}" | su ${NEWSUSER} & +fi Property changes on: vendor/dialog/dist/samples/copifuncs/copi.rcnews ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.sendifm2 =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.sendifm2 (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.sendifm2 (revision 339482) @@ -0,0 +1,15 @@ + ${SITE} ${BATCHFILE} + + echo "${PROGNAME}: [$$] end ${SITE}" +done + +case ${HAVE_UUSTAT} in +DONT) + rm -f ${TEMP} + ;; +esac + +## Remove the lock file. +rm -f ${LOCK} + +echo "${PROGNAME}: [$$] end `date`" Property changes on: vendor/dialog/dist/samples/copifuncs/copi.sendifm2 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/copifuncs/copi.trnrc =================================================================== --- vendor/dialog/dist/samples/copifuncs/copi.trnrc (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/copi.trnrc (revision 339482) @@ -0,0 +1,13 @@ +TRNINIT="-x -e -X -F\" :> \"" +HIDELINE="^X-FTN" +NEWSHEADER="Newsgroups: %(%F=^\$?%C:%F) +Subject: %(%S=^\$?%\"\n\nSubject: \":%S) +%(%R=^\$?:References: %R +)Sender: +Distribution: %(%i=^\$?%\"\nDistribution: \":%D) +Organization: %o +X-Comment-To: %f\n\n" +ATTRIBUTION="%f writes:\n" +YOUSAID="In article %i \n of newsgroup %C you write about \"%s\":\n" +MAILCALL="(New Mail)" +export NEWSHEADER HIDELINE TRNINIT ATTRIBUTION MAILCALL YOUSAID EDITOR Index: vendor/dialog/dist/samples/copifuncs/ifpatch =================================================================== --- vendor/dialog/dist/samples/copifuncs/ifpatch (nonexistent) +++ vendor/dialog/dist/samples/copifuncs/ifpatch (revision 339482) @@ -0,0 +1,101 @@ +--- ifgate/message.c.orig Mon Jul 24 15:17:47 1995 ++++ ifgate/message.c Mon Jul 24 15:18:00 1995 +@@ -48,12 +48,26 @@ + if (!strcasecmp(msg->key,"X-UUCP-From")) return 0; + if (!strcasecmp(msg->key,"X-Body-Start")) return 0; + if (!strncasecmp(msg->key,"X-FTN-",6)) return 0; +- if (!strcasecmp(msg->key,"Path")) return isftnpath(msg->val)?0:1; ++ if (!strcasecmp(msg->key,"Path")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return isftnpath(msg->val)?0:1; ++#endif ++ + if (!strcasecmp(msg->key,"Newsgroups")) return newsmode?0:2; + if (!strcasecmp(msg->key,"Xref")) return 0; + if (!strcasecmp(msg->key,"Return-Receipt-To")) return 1; + if (!strcasecmp(msg->key,"Received")) return newsmode?0:2; +- if (!strcasecmp(msg->key,"From")) return ftnorigin?0:2; ++ if (!strcasecmp(msg->key,"From")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return ftnorigin?0:2; ++#endif ++ + if (!strcasecmp(msg->key,"To")) + { + if (newsmode) return 0; +@@ -66,7 +80,14 @@ + } + if (!strcasecmp(msg->key,"Cc")) return 2; + if (!strcasecmp(msg->key,"Bcc")) return 2; +- if (!strcasecmp(msg->key,"Reply-To")) return 2; ++ if (!strcasecmp(msg->key,"Reply-To")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return 2; ++#endif ++ + if (!strcasecmp(msg->key,"Lines")) return 0; + if (!strcasecmp(msg->key,"Date")) return 0; + if (!strcasecmp(msg->key,"Subject")) +@@ -77,8 +98,22 @@ + if (!strcasecmp(msg->key,"Organization")) return removeorg?0:1; + if (!strcasecmp(msg->key,"Comment-To")) return 0; + if (!strcasecmp(msg->key,"X-Comment-To")) return 0; +- if (!strcasecmp(msg->key,"Keywords")) return 2; +- if (!strcasecmp(msg->key,"Summary")) return 2; ++ if (!strcasecmp(msg->key,"Keywords")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return 2; ++#endif ++ ++ if (!strcasecmp(msg->key,"Summary")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return 2; ++#endif ++ + if (!strcasecmp(msg->key,"MIME-Version")) return removemime?0:1; + if (!strcasecmp(msg->key,"Content-Type")) return removemime?0:1; + if (!strcasecmp(msg->key,"Content-Length")) return removemime?0:1; +@@ -86,8 +121,26 @@ + if (!strcasecmp(msg->key,"Content-Name")) return 2; + if (!strcasecmp(msg->key,"Content-Description")) return 2; + if (!strcasecmp(msg->key,"Message-ID")) return ftnorigin?0:1; +- if (!strcasecmp(msg->key,"References")) return removeref?0:1; +- if (!strcasecmp(msg->key,"Distribution")) return ftnorigin?0:1; ++ if (!strcasecmp(msg->key,"References")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return removeref?0:1; ++#endif ++ ++ if (!strcasecmp(msg->key,"Distribution")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return ftnorigin?0:1; ++#endif ++ ++#ifdef LESS_RFC_KLUDGES ++ if (!strcasecmp(msg->key,"NNTP-Posting-Host")) return 0; ++#endif ++ + /*if (!strcasecmp(msg->key,"")) return ;*/ + return 1; + } Index: vendor/dialog/dist/samples/dselect =================================================================== --- vendor/dialog/dist/samples/dselect (nonexistent) +++ vendor/dialog/dist/samples/dselect (revision 339482) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: dselect,v 1.7 2016/01/26 22:52:53 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "Please choose a file" "$@" --dselect $HOME/ 14 48 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: vendor/dialog/dist/samples/dselect ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/install/FDISK.TEST =================================================================== --- vendor/dialog/dist/samples/install/FDISK.TEST (nonexistent) +++ vendor/dialog/dist/samples/install/FDISK.TEST (revision 339482) @@ -0,0 +1,28 @@ + +Disk /dev/hda: 14 heads, 62 sectors, 1018 cylinders +Units = cylinders of 868 * 512 bytes + + Device Boot Begin Start End Blocks Id System +/dev/hda1 1 1 3 1271 a OS/2 Boot Manager +/dev/hda2 4 4 287 123256 6 DOS 16-bit >=32M +/dev/hda3 * 288 288 649 157108 83 Linux native +/dev/hda4 650 650 1018 160146 83 Linux native + +Disk /dev/sda: 64 heads, 32 sectors, 511 cylinders +Units = cylinders of 2048 * 512 bytes + + Device Boot Begin Start End Blocks Id System +/dev/sda1 1 1 21 21488 82 Linux swap +/dev/sda2 22 22 511 501760 83 Linux native + +Disk /dev/sdb: 64 heads, 32 sectors, 4106 cylinders +Units = cylinders of 2048 * 512 bytes + + Device Boot Begin Start End Blocks Id System +/dev/sdb1 1 1 201 205808 83 Linux native +/dev/sdb2 202 202 402 205824 83 Linux native +/dev/sdb3 403 403 603 205824 83 Linux native +/dev/sdb4 604 604 4106 3587072 5 Extended +/dev/sdb5 604 604 1803 1228784 83 Linux native +/dev/sdb6 1024 1804 3003 1228784 83 Linux native +/dev/sdb7 2048 3004 4106 1129456 83 Linux native Index: vendor/dialog/dist/samples/install/makefile.in =================================================================== --- vendor/dialog/dist/samples/install/makefile.in (nonexistent) +++ vendor/dialog/dist/samples/install/makefile.in (revision 339482) @@ -0,0 +1,35 @@ +# $Id: makefile.in,v 1.1 2000/10/08 17:22:53 tom Exp $ +# template makefile for DIALOG sample 'install' +# +SHELL = /bin/sh + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +srcdir = @srcdir@ +top_builddir = ../.. + +DESTDIR = +bindir = $(DESTDIR)@bindir@ + +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ @DEFS@ -I$(top_builddir) -I$(srcdir)/../.. -I. -I$(srcdir) +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +CC = @CC@ +LDFLAGS = @LDFLAGS@ +LIBS = -L../.. -ldialog @LIBS@ +RANLIB = @RANLIB@ + +RM = rm -f + +all: setup + +setup: setup.o + $(CC) -o $@ setup.o $(LIBS) + +clean: + rm -f *.o setup + +test: setup + ./setup + Property changes on: vendor/dialog/dist/samples/install/makefile.in ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/samples/install/setup.c =================================================================== --- vendor/dialog/dist/samples/install/setup.c (nonexistent) +++ vendor/dialog/dist/samples/install/setup.c (revision 339482) @@ -0,0 +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 + 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); +} Property changes on: vendor/dialog/dist/samples/install/setup.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/samples/install/setup.help =================================================================== --- vendor/dialog/dist/samples/install/setup.help (nonexistent) +++ vendor/dialog/dist/samples/install/setup.help (revision 339482) @@ -0,0 +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 +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 + Index: vendor/dialog/dist/samples/menubox11 =================================================================== --- vendor/dialog/dist/samples/menubox11 (nonexistent) +++ vendor/dialog/dist/samples/menubox11 (revision 339482) @@ -0,0 +1,31 @@ +#!/bin/sh +# $Id: menubox11,v 1.2 2018/06/13 21:59:21 tom Exp $ +# zero-width column + +. ./setup-vars + +exec 3>&1 +RESULT=`$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=$? +exec 3>&- + +. ./report-string Property changes on: vendor/dialog/dist/samples/menubox11 ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vendor/dialog/dist/samples/programbox =================================================================== --- vendor/dialog/dist/samples/programbox (revision 339481) +++ vendor/dialog/dist/samples/programbox (revision 339482) @@ -1,19 +1,22 @@ #!/bin/sh -# $Id: programbox,v 1.1 2011/03/02 01:17:28 tom Exp $ +# $Id: programbox,v 1.3 2018/06/17 20:45:25 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break -ls -ld "$text" +ls -ld "$text" || break sleep 0.1 done <$tempfile ) | $DIALOG --title "PROGRAMBOX" "$@" --programbox 20 70 + +retval=$? +. ./report-button Index: vendor/dialog/dist/samples/programbox2 =================================================================== --- vendor/dialog/dist/samples/programbox2 (revision 339481) +++ vendor/dialog/dist/samples/programbox2 (revision 339482) @@ -1,19 +1,22 @@ #!/bin/sh -# $Id: programbox2,v 1.1 2011/03/02 01:25:31 tom Exp $ +# $Id: programbox2,v 1.3 2018/06/17 20:45:25 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break -ls -ld "$text" +ls -ld "$text" || break sleep 0.1 done <$tempfile ) | $DIALOG --title "PROGRAMBOX" "$@" --programbox "ProgramBox" 20 70 + +retval=$? +. ./report-button Index: vendor/dialog/dist/samples/progress =================================================================== --- vendor/dialog/dist/samples/progress (revision 339481) +++ vendor/dialog/dist/samples/progress (revision 339482) @@ -1,19 +1,22 @@ #!/bin/sh -# $Id: progress,v 1.5 2010/01/13 10:20:03 tom Exp $ +# $Id: progress,v 1.7 2018/06/17 20:45:25 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break -ls -ld "$text" +ls -ld "$text" || break sleep 1 done <$tempfile ) | $DIALOG --title "PROGRESS" "$@" --progressbox 20 70 + +retval=$? +. ./report-button Index: vendor/dialog/dist/samples/progress2 =================================================================== --- vendor/dialog/dist/samples/progress2 (revision 339481) +++ vendor/dialog/dist/samples/progress2 (revision 339482) @@ -1,19 +1,22 @@ #!/bin/sh -# $Id: progress2,v 1.5 2010/01/13 10:20:03 tom Exp $ +# $Id: progress2,v 1.7 2018/06/17 20:45:25 tom Exp $ . ./setup-vars . ./setup-tempfile ls -1 >$tempfile ( while true do read text test -z "$text" && break -ls -ld "$text" +ls -ld "$text" || break sleep 1 done <$tempfile ) | $DIALOG --title "PROGRESS" "$@" --progressbox "This is a detailed description\nof the progress-box." 20 70 + +retval=$? +. ./report-button Index: vendor/dialog/dist/samples/run_test.sh =================================================================== --- vendor/dialog/dist/samples/run_test.sh (nonexistent) +++ vendor/dialog/dist/samples/run_test.sh (revision 339482) @@ -0,0 +1,56 @@ +#!/bin/sh +# $Id: run_test.sh,v 1.4 2017/02/01 01:50:09 tom Exp $ +# vile:ts=4 sw=4 +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 + $THIS|dft-*|killall|listing|rotated-data|shortlist|with-*) + echo "** skipping $name" >>$mylog + continue + ;; + esac + rm -f trace $want.log $name.log + echo "** running $name" >>$mylog + $name + [ -f $want.log ] && cp $want.log $name.log +done Property changes on: vendor/dialog/dist/samples/run_test.sh ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/samples/setup-edit =================================================================== --- vendor/dialog/dist/samples/setup-edit (revision 339481) +++ vendor/dialog/dist/samples/setup-edit (revision 339482) @@ -1,7 +1,7 @@ #!/bin/sh -# $Id: setup-edit,v 1.2 2012/06/29 09:31:49 tom Exp $ +# $Id: setup-edit,v 1.3 2016/01/26 22:42:44 tom Exp $ # vile:shmode input=`tempfile 2>/dev/null` || input=/tmp/input$$ output=`tempfile 2>/dev/null` || output=/tmp/test$$ -trap "rm -f $input $output" $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM +trap "rm -f $input $output" $SIG_NONE $SIG_HUP $SIG_INT $SIG_QUIT $SIG_TERM Index: vendor/dialog/dist/samples/setup-tempfile =================================================================== --- vendor/dialog/dist/samples/setup-tempfile (revision 339481) +++ vendor/dialog/dist/samples/setup-tempfile (revision 339482) @@ -1,6 +1,6 @@ #!/bin/sh -# $Id: setup-tempfile,v 1.3 2012/07/06 17:51:56 tom Exp $ +# $Id: setup-tempfile,v 1.4 2016/01/26 22:42:47 tom Exp $ # vile:shmode tempfile=`(tempfile) 2>/dev/null` || tempfile=/tmp/test$$ -trap "rm -f $tempfile" 0 $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM +trap "rm -f $tempfile" 0 $SIG_NONE $SIG_HUP $SIG_INT $SIG_QUIT $SIG_TERM Index: vendor/dialog/dist/tailbox.c =================================================================== --- vendor/dialog/dist/tailbox.c (revision 339481) +++ vendor/dialog/dist/tailbox.c (revision 339482) @@ -1,401 +1,425 @@ /* - * $Id: tailbox.c,v 1.68 2012/11/18 15:48:52 tom Exp $ + * $Id: tailbox.c,v 1.72 2018/06/19 22:57:01 tom Exp $ * * tailbox.c -- implements the tail box * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2012,2018 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, ' '); -#ifdef NCURSES_VERSION (void) waddnstr(win, line, MIN((int) strlen(line), width - 2)); -#else - line[MIN((int) strlen(line), width - 2)] = '\0'; - waddstr(win, line); -#endif 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) { ++target; for (;;) { 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(); 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 *file, int height, int width, int bg_task) +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; 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(file, "rb")) == NULL) + 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, file, &height, &width, 2, min_width); + 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->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); #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_button_layout(buttons, &min_width); goto retry; } #endif } while (handle_my_getc(&(obj->obj), ch, fkey, &result)); } dlg_mouse_free_regions(); return result; } Index: vendor/dialog/dist/textbox.c =================================================================== --- vendor/dialog/dist/textbox.c (revision 339481) +++ vendor/dialog/dist/textbox.c (revision 339482) @@ -1,978 +1,984 @@ /* - * $Id: textbox.c,v 1.110 2012/12/01 01:48:08 tom Exp $ + * $Id: textbox.c,v 1.117 2018/06/19 22:57:01 tom Exp $ * * textbox.c -- implements the text box * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2017,2018 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 (actual > offset) { + 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_msg("Lseek returned %ld, expected %ld\n", 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; /* Allocate space for read buffer */ buftab = xalloc(size_read + 1); if ((obj->fd_bytes_read = read(obj->fd, buftab, size_read)) != -1) { 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; } 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; } } --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; } } 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') /* 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); - (void) wattrset(widget, searchbox_title_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) { 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 */ } #endif /* ESC pressed, or no search term, reprint page to clear box */ - (void) wattrset(obj->text, dialog_attr); + 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 */ - (void) wattrset(obj->text, dialog_attr); + 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 *file, int height, int width) +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, ' ' ), + 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 next = 0; int i, code, 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(file, O_RDONLY)) == -1) - dlg_exiterr("Can't open input file %s", file); + 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, file, &height, &width, 2, min_width); + 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) { /* * 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 (!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); 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); - refresh(); dlg_mouse_free_regions(); 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_del_window(dialog); free(obj.buf); (void) close(obj.fd); dlg_mouse_free_regions(); return result; } Index: vendor/dialog/dist/timebox.c =================================================================== --- vendor/dialog/dist/timebox.c (revision 339481) +++ vendor/dialog/dist/timebox.c (revision 339482) @@ -1,418 +1,431 @@ /* - * $Id: timebox.c,v 1.54 2013/03/17 15:03:41 tom Exp $ + * $Id: timebox.c,v 1.59 2018/06/19 22:57:01 tom Exp $ * * timebox.c -- implements the timebox dialog * - * Copyright 2001-2012,2013 Thomas E. Dickey + * Copyright 2001-2016,2018 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 <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); - (void) wattrset(data->window, item_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); 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, - DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + 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 button; int result = DLG_EXIT_UNKNOWN; WINDOW *dialog; time_t now_time = time((time_t *) 0); struct tm current; int state = dlg_default_button(); const char **buttons = dlg_ok_labels(); - char *prompt = dlg_strclone(subtitle); + 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); + 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); - (void) wattrset(dialog, dialog_attr); + 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))); 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 ((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_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); - refresh(); dlg_mouse_free_regions(); 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 { 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); return CleanupResult(result, dialog, prompt, &save_vars); } Index: vendor/dialog/dist/trace.c =================================================================== --- vendor/dialog/dist/trace.c (revision 339481) +++ vendor/dialog/dist/trace.c (revision 339482) @@ -1,230 +1,268 @@ /* - * $Id: trace.c,v 1.20 2011/10/18 10:47:26 tom Exp $ + * $Id: trace.c,v 1.26 2018/06/13 00:06:48 tom Exp $ * * trace.c -- implements screen-dump and keystroke-logging * - * Copyright 2007-2010,2011 Thomas E. Dickey + * Copyright 2007-2017,2018 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 * * 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,...) { if (myFP != 0) { va_list ap; va_start(ap, fmt); vfprintf(myFP, fmt, ap); va_end(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') { + 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); + } else { + dlg_trace_msg("#+\t\t%.*s\n", left, value); + } + } +} + +void +dlg_trace_2n(const char *name, int value) +{ + dlg_trace_msg("#\t%7s=%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; 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; if (win_wch(win, &cch) == ERR - || (uc = wunctrl(&cch)) == 0 + || (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); } } } else if (ch == ERR) { fkey_name = "ERR"; last_err = 1; } else { fkey_name = unctrl((chtype) ch); if (fkey_name == 0) fkey_name = "UNKNOWN"; } - fprintf(myFP, "chr %s (ch=%#x, fkey=%d)\n", - fkey_name, - ch, fkey); + 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_msg("** dialog %s\n", dialog_version()); + 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"); + 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 Index: vendor/dialog/dist/treeview.c =================================================================== --- vendor/dialog/dist/treeview.c (revision 339481) +++ vendor/dialog/dist/treeview.c (revision 339482) @@ -1,658 +1,672 @@ /* - * $Id: treeview.c,v 1.24 2013/09/02 17:13:33 tom Exp $ + * $Id: treeview.c,v 1.32 2018/06/19 22:57:01 tom Exp $ * * treeview.c -- implements the treeview dialog * - * Copyright 2012,2013 Thomas E. Dickey + * Copyright 2012-2016,2018 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> #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 */ - (void) wattrset(win, menubox_attr); + 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); - (void) wattrset(win, selected ? check_selected_attr : check_attr); + dlg_attrset(win, selected ? check_selected_attr : check_attr); (void) wprintw(win, data->is_check ? "[%c]" : "(%c)", states[item->state]); - (void) wattrset(win, menubox_attr); + dlg_attrset(win, menubox_attr); - (void) wattrset(win, selected ? item_selected_attr : item_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); } - (void) wattrset(win, save); + 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 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); - (void) wattrset(dialog, dialog_attr); + 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; 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) { 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; 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 = ' '; /* force the selected item to toggle */ + 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 == ' ') { + 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_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(); goto retry; #endif default: if (was_mouse) { if ((key2 = dlg_ok_buttoncode(key)) >= 0) { result = key2; break; } beep(); } } } else { 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 (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); } dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no); free(depths); free(listitems); return result; } Index: vendor/dialog/dist/ttysize.c =================================================================== --- vendor/dialog/dist/ttysize.c (nonexistent) +++ vendor/dialog/dist/ttysize.c (revision 339482) @@ -0,0 +1,87 @@ +/* + * $Id: ttysize.c,v 1.1 2018/06/09 02:03:03 tom Exp $ + * + * ttysize.c -- obtain terminal-size for dialog + * + * Copyright 2018 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; +#endif /* HAVE_SIZECHANGE */ + return rc; +} Property changes on: vendor/dialog/dist/ttysize.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: vendor/dialog/dist/ui_getc.c =================================================================== --- vendor/dialog/dist/ui_getc.c (revision 339481) +++ vendor/dialog/dist/ui_getc.c (revision 339482) @@ -1,659 +1,668 @@ /* - * $Id: ui_getc.c,v 1.67 2013/03/24 23:53:19 tom Exp $ + * $Id: ui_getc.c,v 1.70 2018/06/14 00:05:05 tom Exp $ * * ui_getc.c - user interface glue for getc() * - * Copyright 2001-2012,2013 Thomas E. Dickey + * Copyright 2001-2013,2018 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 #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); } /* * 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) { - fclose(p->input); + FILE *input = p->input; + fclose(input); if (p->input == dialog_state.pipe_input) dialog_state.pipe_input = 0; - p->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) { (void) wmove(win, cur_y, cur_x); /* Restore cursor position */ wrefresh(win); - curs_set(state); } + 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) { 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(); } /* * 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_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) { 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); 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 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); break; case ERR: /* wtimeout() in effect; check for file I/O */ if (interval > 0 && current >= expired) { - dlg_exiterr("timeout"); - } - if (!valid_file(stdin) - || !valid_file(dialog_state.screen_output)) { + DLG_TRACE(("# dlg_getc: timeout expired\n")); + 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)) dlg_raise_window(win); else done = TRUE; } else { done = (interval <= 0); } break; case DLGK_HELPFILE: if (dialog_vars.help_file) { 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) 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) { 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 */ 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) { 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); } } } } } } Index: vendor/dialog/dist/util.c =================================================================== --- vendor/dialog/dist/util.c (revision 339481) +++ vendor/dialog/dist/util.c (revision 339482) @@ -1,2708 +1,2779 @@ /* - * $Id: util.c,v 1.258 2013/09/22 00:41:40 tom Exp $ + * $Id: util.c,v 1.272 2018/06/21 23:47:10 tom Exp $ * * util.c -- miscellaneous utilities for dialog * - * Copyright 2000-2012,2013 Thomas E. Dickey + * Copyright 2000-2016,2018 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_SETLOCALE #include <locale.h> #endif #ifdef NEED_WCHAR_H #include <wchar.h> #endif #ifdef NCURSES_VERSION #if defined(HAVE_NCURSESW_TERM_H) #include <ncursesw/term.h> #elif 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> #define COLOR_DATA(upr) , \ concat(DLGC_FG_,upr), \ concat(DLGC_BG_,upr), \ concat(DLGC_HL_,upr) #else #define COLOR_DATA(upr) /*nothing */ #endif #define DATA(atr,upr,lwr,cmt) { atr COLOR_DATA(upr) RC_DATA(lwr,cmt) } #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. */ /* *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") }; /* *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->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); - (void) wattrset(stdscr, screen_attr); + 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; - (void) wattrset(win, attr); + 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); } #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; } /* * 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 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; #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 #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(); } #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? */ (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); /* Setup color attributes */ dlg_color_table[i].atr = ((dlg_color_table[i].hilite ? A_BOLD : 0) | color); } #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]); } /* * 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) { - chtype attrs = dlg_get_attrs(win); int pair; short fg, bg, background; - - if ((pair = PAIR_NUMBER(attrs)) != 0 - && pair_content((short) pair, &fg, &bg) != ERR) { - background = bg; - } else { + if (dialog_state.text_only) { background = COLOR_BLACK; + } else { + chtype attrs = dlg_get_attrs(win); + + 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; 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) { 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; - (void) wattrset(win, selected ? attrs[3] : attrs[2]); + 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) { - (void) wattrset(win, selected ? attrs[1] : attrs[0]); + dlg_attrset(win, selected ? attrs[1] : attrs[0]); (void) waddnstr(win, text + indx[1], indx[limit] - indx[1]); } } } else { attrs[1] = item_selected_attr; attrs[0] = item_attr; cols = dlg_index_columns(text); limit = dlg_limit_columns(text, climit, 0); if (limit > 0) { - (void) wattrset(win, selected ? attrs[1] : attrs[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 - getyx(win, y_origin, x_origin); + if (dialog_state.text_only) { + y_origin = y_after = 0; + x_origin = x_after = 0; + } else { + getyx(win, y_origin, x_origin); + } while (cols > 0 && (*txt != '\0')) { 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; } ++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 (thisTab) { - getyx(win, y_before, x_before); - (void) y_before; + 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; + } } - (void) waddch(win, CharOf(*txt++) | useattr); - getyx(win, y_after, x_after); + 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) { - test_ptr = prompt + indx[test_inx]; - if (*test_ptr == '\n' || *test_ptr == '\0' || cur_x >= (rm + hidden)) + int ch = *(test_ptr = prompt + indx[test_inx]); + if (ch == '\n' || ch == '\0' || cur_x >= (rm + hidden)) break; - if (*test_ptr == TAB && n == 0) { + if (ch == TAB && n == 0) { tabbed = 8; /* workaround for leading tabs */ - } else if (*test_ptr == ' ' && n != 0 && prompt[indx[n - 1]] != ' ') { + } 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' || *test_ptr == ' ' || *test_ptr == '\0') { + if (*test_ptr == '\n' || isblank(UCH(*test_ptr)) || *test_ptr == '\0') { wrap_inx = test_inx; - while (wrap_inx > 0 && prompt[indx[wrap_inx - 1]] == ' ') { + 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 (win) { + 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) + 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 (*test_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 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; - if (win) { + 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) { - (void) wattrset(win, dialog_attr); + dlg_attrset(win, dialog_attr); dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width); last = 0; } else { wbkgdset(dummy, dialog_attr | ' '); - (void) wattrset(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); if (percent < 0) percent = 0; if (percent > 100) percent = 100; if (offset != 0 || percent != 100) { - (void) wattrset(win, position_indicator_attr); + 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) { - (void) wattrset(win, border_attr); + dlg_attrset(win, border_attr); whline(win, dlg_boxchar(ACS_HLINE), 4 - len); } } } last = (y - height); } } else #endif { (void) offset; - (void) wattrset(win, dialog_attr); + 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; 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; while (*string != '\0') { 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 nc = 4; 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) { 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 += nc; - *height += boxlines + 2; + *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) + 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)) { + if (ferror(fd)) + break; offset = 0; - while (((ch = getc(fd)) != '\n') && !feof(fd)) - if ((ch == TAB) && (dialog_vars.tab_correct)) + 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 + } 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); } -static chtype -dlg_get_cell_attrs(WINDOW *win) -{ - chtype result; -#ifdef USE_WIDE_CURSES - cchar_t wch; - wchar_t cc; - attr_t attrs; - short pair; - if (win_wch(win, &wch) == OK - && getcchar(&wch, &cc, &attrs, &pair, NULL) == OK) { - result = attrs; - } else { - result = 0; - } -#else - result = winch(win) & (A_ATTRIBUTES & ~A_COLOR); -#endif - return result; -} - /* * 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); - (void) wattrset(win, 0); + 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 | ' '); } - (void) wattrset(win, save); + 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); } static DIALOG_WINDOWS * find_window(WINDOW *win) { DIALOG_WINDOWS *result = 0; DIALOG_WINDOWS *p; for (p = dialog_state.all_windows; p != 0; p = p->next) { if (p->normal == win) { result = p; break; } } 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 (dlg_get_cell_attrs(cellwin) & A_ALTCHARSET) { + 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)) { #if !USE_WCHGAT chtype save = dlg_get_attrs(dw->shadow); - (void) wattrset(dw->shadow, draw ? shadow_attr : screen_attr); + 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 - (void) wattrset(dw->shadow, save); + 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); } #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" }, }; /* *INDENT-ON* */ unsigned n; char *name; char *temp; long value; bool overridden = FALSE; retry: for (n = 0; n < sizeof(table) / sizeof(table[0]); 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; } } 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); #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); } } /* quit program killing all tailbg */ void 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); dlg_killall_bg(&retval); (void) fflush(stderr); (void) fflush(stdout); dlg_exit(DLG_EXIT_ERROR); } 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) + 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; for (i = 0; i < (item_no * group); i += group) { 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 = dlg_malloc(char, strlen(cprompt) + 1); - assert_ptr(prompt, "dlg_strclone"); - strcpy(prompt, 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); - (void) wattrset(win, title_attr); + dlg_attrset(win, title_attr); wmove(win, 0, x); dlg_print_text(win, title, getmaxx(win) - x, &attr); - (void) wattrset(win, save); + 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; - (void) wattrset(win, on_left); + 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)); - (void) wattrset(win, on_right); + dlg_attrset(win, on_right); (void) waddch(win, dlg_boxchar(ACS_RTEE)); - (void) wattrset(win, on_inside); + 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; 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; } /* * 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) { dlg_ctl_size(height, width); if ((p = find_window(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 caught = 0; + + dlg_trace_win(win); + wtimeout(win, 20); + for (n = base = 0; n < base + 10; ++n) { + if ((ch = wgetch(win)) != ERR) { + if (ch == KEY_RESIZE) { + base = n; + ++caught; + } else { + ungetch(ch); + break; + } + } + } + dlg_trace_msg("# caught %d KEY_RESIZE key%s\n", + 1 + caught, + caught == 1 ? "" : "s"); +} #endif /* KEY_RESIZE */ 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; - (void) wattrset(stdscr, itemhelp_attr); + 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) { /* 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 = 0; + int count = isblank(UCH(*dst)); while (dst-- != base) { if (*dst == '\n') { - return FALSE; - } else if (*dst != ' ') { - return (count > 1); - } else { + break; + } else if (isblank(UCH(*dst))) { count++; + } else { + break; } } - return FALSE; + 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 (*p1 == ' ') + 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, s)) + if (!trim_blank(base, p)) *s++ = ' '; p++; } } else /* If *p != '\n' */ *s++ = *p++; } else if (dialog_vars.trim_whitespace) { - if (*p == ' ') { - if (*(s - 1) != ' ') { + 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 (*(s - 1) != ' ') { + 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 (*p == ' ' && !dialog_vars.nocollapse) { - if (!trim_blank(base, s)) + 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)) + 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 Index: vendor/dialog/dist/yesno.c =================================================================== --- vendor/dialog/dist/yesno.c (revision 339481) +++ vendor/dialog/dist/yesno.c (revision 339482) @@ -1,161 +1,173 @@ /* - * $Id: yesno.c,v 1.57 2012/12/01 01:48:21 tom Exp $ + * $Id: yesno.c,v 1.62 2018/06/19 22:57:01 tom Exp $ * * yesno.c -- implements the yes/no box * - * Copyright 1999-2011,2012 Thomas E. Dickey + * Copyright 1999-2012,2018 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, - TRAVERSE_BINDINGS, SCROLLKEY_BINDINGS, + TRAVERSE_BINDINGS, END_KEYS_BINDING }; /* *INDENT-ON* */ int x, y; int key = 0, fkey; int code; int button = dlg_default_button(); WINDOW *dialog = 0; int result = DLG_EXIT_UNKNOWN; - char *prompt = dlg_strclone(cprompt); + 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; - restart: #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); } 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); - (void) wattrset(dialog, dialog_attr); + 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) { 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 ((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: 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; 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 { beep(); } } dlg_del_window(dialog); dlg_mouse_free_regions(); free(prompt); return result; }