>Number: 39582
>Category: pkg
>Synopsis: devel/ncurses breaks /usr/include/curses.h on NetBSD
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Sep 18 21:20:00 +0000 2008
>Originator: Taylor R Campbell <campbell%mumble.net@localhost>
>Release: NetBSD 4.0_STABLE
>Organization:
>Environment:
System: NetBSD smalltalk.localdomain 4.0_STABLE NetBSD 4.0_STABLE
(RIAX3DOM0_GATEWAY) #1: Wed Sep 10 22:47:22 UTC 2008
riastradh%smalltalk.localdomain@localhost:/home/riastradh/netbsd/4/obj/sys/arch/i386/compile/RIAX3DOM0_GATEWAY
i386
Architecture: i386
Machine: i386
>Description:
devel/ncurses installs several files in /usr/pkg/include, one
of which is named unctrl.h. This file itself includes
<ncurses.h>. /usr/include/curses.h from the NetBSD base system
contains the line
#include <unctrl.h>
which, when /usr/pkg/include is in the system header path,
causes inclusion of /usr/pkg/include/unctrl.h, rather than of
the intended /usr/include/unctrl.h. This transitively includes
/usr/pkg/include/ncurses.h, which does not lead a happy
coexistence with /usr/include/curses.h.
>How-To-Repeat:
Install devel/ncurses. Compile, or preprocess, the following
trivial program with -I/usr/pkg/include:
#include <curses.h>
int
main (int argc, char *argv[])
{
return (0);
}
>Fix:
Two choices immediately spring to mind:
1. Install a symbolic link /usr/pkg/include/curses.h pointing
to ncurses.h. (This is the reverse of what one often finds
in Linux systems.) This is a matter of adding an extra line
to the `post-install' target.
2. Install ncurses in a subdirectory of /usr/pkg/include, such
as /usr/pkg/include/ncurses. This is what devel/ncursesw
already does. This requires configuring ncurses differently
and changing ncurses/buildlink3.mk to add the subdirectory
to the system header path.
There is already a hack in ncurses/buildlink3.mk to install a
temporary symbolic link so that source files in the dependent
packages can include <curses.h> and see ncurses. This doesn't
help when building software outside of pkgsrc, however.