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