This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Problems with time.h from an inexperienced user?
- From: Csaba Raduly <rcsaba at gmail dot com>
- To: cygwin list <cygwin at cygwin dot com>
- Date: Fri, 4 Jul 2014 10:43:01 +0200
- Subject: Re: Problems with time.h from an inexperienced user?
- Authentication-results: sourceware.org; auth=none
- References: <CAKEKBE5j83O+t_NQH0BE2eLD5GScvuAzMkj+xt5dnhEfyrfqpQ at mail dot gmail dot com>
Hi Hal,
On Thu, Jul 3, 2014 at 11:37 PM, Hal Wills wrote:
> Apparently there is a discrepancy between how Cygwin handles timeval.h
> and how most Linux distributions handle it, because I am unable to
> build htop and ncmpcpp with visualizer support on Cygwin.
>
> Here are the errors when I attempt to 'make' ncmpcpp and './configure' htop:
>
>
> then mv -f ".deps/cmdargs.Tpo" ".deps/cmdargs.Po"; else rm -f
> ".deps/cmdargs.Tpo"; exit 1; fi
> In file included from cmdargs.cpp:41:0:
> visualizer.h:72:2: error: 'timeval' does not name a type
> timeval m_timer;
> ^
> Makefile:444: recipe for target 'cmdargs.o' failed
> make[2]: *** [cmdargs.o] Error 1
> make[2]: Leaving directory '/home/ullr/ncmpcpp/src'
> Makefile:305: recipe for target 'all-recursive' failed
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory '/home/ullr/ncmpcpp'
> Makefile:217: recipe for target 'all' failed
> make: *** [all] Error 2
>
>
> In file included from Header.h:13:0,
> from Settings.h:15,
> from AvailableMetersPanel.h:12,
> from AvailableMetersPanel.c:8:
> Meter.h:88:19: error: field 'time' has incomplete type
> struct timeval time;
> ^
At least for htop, this is due to the very Linux-centric nature of
htop, and the different way system headers include each other.
htop's Meter.h uses timeval, but does not include sys/time.h
This is incorrect, but htop on Linux gets away with it, because
Meter.h includes Process.h, which also doesn't include sys/time.h, but
includes sys/types.h
On my Ubuntu 12.04 LTS, /usr/include/x86_64-linux-gnu/sys/types.h
includes time.h, which drags in the declaration of timeval.
Here's a report from include-what-you-use (a tool based on clang) for Meter.h:
----------------------------------------
$ make CC=iwyu Meter.o
iwyu -DHAVE_CONFIG_H -I. -DNDEBUG -g -O2 -MT Meter.o -MD -MP -MF
.deps/Meter.Tpo -c -o Meter.o Meter.c
Meter.h should add these lines:
#include <ncursesw/curses.h> // for attrset, mvaddch
#include <sys/time.h> // for timeval
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include "Object.h" // for Object, ObjectClass
#include "Panel.h" // for MAX
#include "RichString.h" // for MIN
struct Meter_;
Meter.h should remove these lines:
The full include-list for Meter.h:
#include <ncursesw/curses.h> // for attrset, mvaddch
#include <sys/time.h> // for timeval
#include "ListItem.h" // for ListItem
#include "Object.h" // for Object, ObjectClass
#include "Panel.h" // for MAX
#include "ProcessList.h" // for ProcessList
#include "RichString.h" // for MIN
struct Meter_;
---
Meter.c should add these lines:
#include <stddef.h> // for size_t
#include <stdio.h> // for snprintf
Meter.c should remove these lines:
- #include <stdarg.h> // lines 29-29
- #include "String.h" // lines 22-22
----------------------------------------
You should #include <sys/time.h> in your local copy of Meter.h (and
similar fixes elsewhere, if needed).
Then you could try convincing the author of htop to fix his program by
sending the necessary diffs.
Csaba
--
GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++
The Tao of math: The numbers you can count are not the real numbers.
Life is complex, with real and imaginary parts.
"Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds
"People disagree with me. I just ignore them." -- Linus Torvalds
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple