Subject: bug#7178: 24.0.50; Emacs 24 doesn't build on Solaris 10

From: Dan Nicolaescu <[email-masked]>
Date: Sun, 10 Oct 2010 10:07:48 -0400

Rainer Orth <[email-masked]> writes:

> When I tried to build Emacs bazaar trunk on Solaris 10 to check if
> bug#7163 still occurs on trunk, I ran into two issues:
>
> * lisp/Makefile.in (compile-clean) uses $() which the Solaris 10 /bin/sh
>   doesn't understand.  This can easily be avoided by using `` instead.
>
> * src/sysdep.c doesn't compile: 
>
> "/usr/include/term.h", line 1034: syntax error before or at: bool
>
>   <term.h> uses bool without providing bool.  <stdbool.h> cannot be
>   included since it only works in C99 mode.  The documented solution
>   (e.g. on the curs_terminfo(3CURSES) manpage) is to include <curses.h>
>   before term.h.  The patch below hardcodes this, but this is most
>   likely not the appropriate solution.  Some kind of autoconf magic is
>   probably needed to check if <term.h> can be compiled on its own.

> === modified file 'src/sysdep.c'
> --- src/sysdep.c	2010-08-22 15:14:37 +0000
> +++ src/sysdep.c	2010-09-08 20:34:07 +0000
> @@ -97,6 +97,7 @@
>  /* Include this last.  If it is ncurses header file, it adds a lot of
>     defines that interfere with stuff in other headers.  Someone responsible
>     for ncurses messed up bigtime.  See bug#6812.  */
> +#include <curses.h>
>  #include <term.h>
>  #endif

The only reason to include <term.h> in sysdep.c is to get a prototype
for `tputs' (used in `reset_sys_modes') .
cm.c also uses tputs, but it adds an extern declaration for it.

Given that including <term.h> seems to cause problems, maybe a good
workaround would be to move `reset_sys_modes' to cm.c.