<!-- 
  ****************************************************************************
  * Copyright (c) 2010 Free Software Foundation, Inc.                        *
  *                                                                          *
  * 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.                                                           *
  ****************************************************************************
  * @Id: MKncu_config.in,v 1.3 2010/03/06 22:29:17 tom Exp @
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>ncurses5-config 1</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1 class="no-header">ncurses5-config 1</H1>
<PRE>
<STRONG><A HREF="ncurses5-config.1.html">ncurses5-config(1)</A></STRONG>                                   <STRONG><A HREF="ncurses5-config.1.html">ncurses5-config(1)</A></STRONG>




</PRE>
<H2><a name="h2-NAME">NAME</a></H2><PRE>
       ncurses5-config - helper script for ncurses libraries


</PRE>
<H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       <STRONG>ncurses5-config</STRONG> [<EM>options</EM>]


</PRE>
<H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
       This is a shell script which simplifies configuring appli-
       cations against a particular set of ncurses libraries.


</PRE>
<H2><a name="h2-OPTIONS">OPTIONS</a></H2><PRE>
       <STRONG>--prefix</STRONG>
              echos the package-prefix of ncurses

       <STRONG>--exec-prefix</STRONG>
              echos the executable-prefix of ncurses

       <STRONG>--cflags</STRONG>
              echos the C compiler flags needed to  compile  with
              ncurses

       <STRONG>--libs</STRONG> echos the libraries needed to link with ncurses

       <STRONG>--version</STRONG>
              echos the release+patchdate version of ncurses

       <STRONG>--abi-version</STRONG>
              echos the ABI version of ncurses

       <STRONG>--mouse-version</STRONG>
              echos the mouse-interface version of ncurses

       <STRONG>--bindir</STRONG>
              echos the directory containing ncurses programs

       <STRONG>--datadir</STRONG>
              echos the directory containing ncurses data

       <STRONG>--includedir</STRONG>
              echos the directory containing ncurses header files

       <STRONG>--libdir</STRONG>
              echos the directory containing ncurses libraries

       <STRONG>--mandir</STRONG>
              echos the directory containing ncurses manpages

       <STRONG>--terminfo</STRONG>
              echos the $TERMINFO terminfo database path, e.g.,
              /usr/share/terminfo

       <STRONG>--terminfo-dirs</STRONG>
              echos the $TERMINFO_DIRS directory list, e.g.,
              /usr/local/ncurses/share/terminfo:/usr/share/ter-
              minfo

       <STRONG>--termpath</STRONG>
              echos the $TERMPATH termcap list,  if  support  for
              termcap is configured.

       <STRONG>--help</STRONG> prints this message


</PRE>
<H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>

       This describes <STRONG>ncurses</STRONG> version 5.9 (patch 20150523).



                                                     <STRONG><A HREF="ncurses5-config.1.html">ncurses5-config(1)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#h2-OPTIONS">OPTIONS</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
</ul>
</div>
</BODY>
</HTML>
