Bug 93842 - [Qt] QNX build fails due to missing timegm declaration
Summary: [Qt] QNX build fails due to missing timegm declaration
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKit Qt (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Milian Wolff
URL:
Keywords:
Depends on:
Blocks: 74040
  Show dependency treegraph
 
Reported: 2012-08-13 07:16 PDT by Milian Wolff
Modified: 2012-08-17 03:23 PDT (History)
7 users (show)

See Also:


Attachments
Patch (1.44 KB, patch)
2012-08-13 07:19 PDT, Milian Wolff
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Milian Wolff 2012-08-13 07:16:31 PDT
Trying to build QtWebKit QNX fails with the following error:

make -j1
makeobj[0]: Entering directory `/home/milian/projects/qt5/build-playbook/qtwebkit/Release'
cd Source/WTF/ && ( test -f Makefile.WTF || /home/milian/projects/qt5/install-playbook/bin/qmake /home/milian/projects/qt5/qtwebkit/Source/WTF/WTF.pro DEFINES+=ENABLE_3D_RENDERING=0 DEFINES+=ENABLE_WEBGL=0 INSTALL_LIBS=/home/milian/projects/qt5/build-playbook/../install-playbook/ CONFIG+=release CONFIG-=debug -o Makefile.WTF ) && /usr/bin/make -f Makefile.WTF 
make[1]: Entering directory `/home/milian/projects/qt5/build-playbook/qtwebkit/Release/Source/WTF'
qcc -Vgcc_ntoarmv7le -lang-c++ -c -fstack-protector -fstack-protector-all -Wno-psabi -O2 -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -D_REENTRANT -DQ_OS_BLACKBERRY -DENABLE_3D_RENDERING=0 -DENABLE_WEBGL=0 -DWTF_USE_ICU_UNICODE=1 -DHAVE_QRAWFONT=1 -DHAVE_FONTCONFIG=1 -DENABLE_XSLT=1 -DWTF_USE_ZLIB=1 -DWTF_USE_TILED_BACKING_STORE=1 -DENABLE_LEGACY_VIEWPORT_ADAPTION=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DHAVE_QSTYLE=1 -DENABLE_FULLSCREEN_API=1 -DENABLE_ACCELERATED_2D_CANVAS=0 -DENABLE_ANIMATION_API=0 -DENABLE_BATTERY_STATUS=0 -DENABLE_BLOB=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CSP_NEXT=0 -DENABLE_CSS_BOX_DECORATION_BREAK=1 -DENABLE_CSS_EXCLUSIONS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_CSS_GRID_LAYOUT=0 -DENABLE_CSS_IMAGE_ORIENTATION=0 -DENABLE_CSS_IMAGE_RESOLUTION=0 -DENABLE_CSS_REGIONS=1 -DENABLE_CSS_SHADERS=0 -DENABLE_CSS_VARIABLES=0 -DENABLE_CSS3_FLEXBOX=1 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATAGRID=0 -DENABLE_DATALIST_ELEMENT=1 -DENABLE_DATA_TRANSFER_ITEMS=0 -DENABLE_DETAILS_ELEMENT=1 -DENABLE_DEVICE_ORIENTATION=0 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_DOWNLOAD_ATTRIBUTE=0 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_FILE_SYSTEM=0 -DENABLE_FILTERS=1 -DENABLE_FTPDIR=1 -DENABLE_GAMEPAD=0 -DENABLE_GEOLOCATION=0 -DENABLE_GESTURE_EVENTS=1 -DENABLE_HIGH_DPI_CANVAS=0 -DENABLE_ICONDATABASE=1 -DENABLE_IFRAME_SEAMLESS=1 -DENABLE_INDEXED_DATABASE=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_INPUT_TYPE_COLOR=1 -DENABLE_INPUT_TYPE_DATE=0 -DENABLE_INPUT_TYPE_DATETIME=0 -DENABLE_INPUT_TYPE_DATETIMELOCAL=0 -DENABLE_INPUT_TYPE_MONTH=0 -DENABLE_INPUT_TYPE_TIME=0 -DENABLE_INPUT_TYPE_WEEK=0 -DENABLE_INSPECTOR=1 -DENABLE_INSPECTOR_SERVER=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_LEGACY_WEBKIT_BLOB_BUILDER=1 -DENABLE_LINK_PREFETCH=0 -DENABLE_LINK_PRERENDER=0 -DENABLE_MATHML=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_METER_ELEMENT=1 -DENABLE_MHTML=0 -DENABLE_MICRODATA=0 -DENABLE_MUTATION_OBSERVERS=0 -DENABLE_NETSCAPE_PLUGIN_API=0 -DENABLE_NETWORK_INFO=0 -DENABLE_NOTIFICATIONS=1 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PAGE_VISIBILITY_API=1 -DENABLE_PROGRESS_ELEMENT=1 -DENABLE_QUOTA=0 -DENABLE_REGISTER_PROTOCOL_HANDLER=0 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_SHADOW_DOM=0 -DENABLE_SHARED_WORKERS=1 -DENABLE_SQL_DATABASE=1 -DENABLE_STYLE_SCOPED=0 -DENABLE_SVG=1 -DENABLE_SVG_DOM_OBJC_BINDINGS=0 -DENABLE_SVG_FONTS=1 -DENABLE_TEXT_AUTOSIZING=0 -DENABLE_TEXT_NOTIFICATIONS_ONLY=0 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_UNDO_MANAGER=0 -DENABLE_VIBRATION=0 -DENABLE_VIDEO=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_WEB_AUDIO=0 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_TOUCH_SLIDER=1 -DWTF_USE_3D_GRAPHICS=0 -DENABLE_3D_RENDERING=0 -DENABLE_WEBGL=0 -DENABLE_3D_RENDERING=0 -DENABLE_WEBGL=0 -DBUILDING_QT__=1 -DNDEBUG -DBUILDING_WTF -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DQT_NO_DEBUG -DQT_CORE_LIB -I/home/milian/projects/qt5/install-playbook/mkspecs/unsupported/blackberry-armv7le-qcc -I/home/milian/projects/qt5/qtwebkit/Source/WTF -I. -I/home/milian/projects/qt5/qtwebkit/Source/WTF -I/home/milian/projects/qt5/qtwebkit/Source/WTF/wtf -I/home/milian/projects/qt5/qtwebkit/Source -I../include -I/home/milian/projects/qt5/install-playbook/include -I/home/milian/projects/qt5/install-playbook/include/QtScript -I/home/milian/projects/qt5/install-playbook/include/QtCore -I/home/milian/bbndk-2.0.1/target/qnx6/usr/include -I/home/milian/bbndk-2.0.1/target/qnx6/usr/include/freetype2 -I. -o obj/release/wtf/DateMath.o /home/milian/projects/qt5/qtwebkit/Source/WTF/wtf/DateMath.cpp
/home/milian/projects/qt5/qtwebkit/Source/WTF/wtf/DateMath.cpp: In function 'std::int32_t WTF::calculateUTCOffset()':
/home/milian/projects/qt5/qtwebkit/Source/WTF/wtf/DateMath.cpp:402: error: 'timegm' was not declared in this scope
cc: /home/milian/bbndk-2.0.1/host/linux/x86/usr/lib/gcc/arm-unknown-nto-qnx6.5.0eabi/4.4.2/cc1plus error 1
make[1]: *** [obj/release/wtf/DateMath.o] Error 1
make[1]: Leaving directory `/home/milian/projects/qt5/build-playbook/qtwebkit/Release/Source/WTF'
make: *** [sub-Source-WTF-WTF-pro-make_first-ordered] Error 2
makeobj[0]: Leaving directory `/home/milian/projects/qt5/build-playbook/qtwebkit/Release'

I'll provide a patch now.
Comment 1 Milian Wolff 2012-08-13 07:19:58 PDT
Created attachment 157989 [details]
Patch
Comment 2 Simon Hausmann 2012-08-13 12:54:26 PDT
Comment on attachment 157989 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=157989&action=review

> Source/WTF/wtf/DateMath.cpp:108
> +#if OS(QNX)
> +// qnx6 defines timegm in nbutil.h
> +#include <nbutil.h>
> +#endif

Out of curiousity: Why doesn't the blackberry port need this?
Comment 3 Simon Hausmann 2012-08-14 03:55:49 PDT
Rim folks, any idea? I keep on forgetting OS(QNX) vs. PLATFORM(BLACKBERRY) - is there a way to simplify the #ifdef usage here? :)
Comment 4 Simon Hausmann 2012-08-14 03:57:42 PDT
Sorry, wrong bug ;). But my question to the RIM folks just changes slightly ;-): Any idea why the include isn't needed for PLATFORM(BLACKBERRY)?
Comment 5 Yong Li 2012-08-14 07:05:37 PDT
(In reply to comment #4)
> Sorry, wrong bug ;). But my question to the RIM folks just changes slightly ;-): Any idea why the include isn't needed for PLATFORM(BLACKBERRY)?

Isn't timegm defined in time.h? Can you check the time.h you are using?
Comment 6 Milian Wolff 2012-08-14 08:06:11 PDT
No, in the BBNDK 2.0.1, it's only defined in nbutil.h:

~/bbndk-2.0.1$ grep -R timegm target/qnx6/usr/include/
target/qnx6/usr/include/nbutil.h:time_t timegm(struct tm *);
Comment 7 Yong Li 2012-08-14 08:10:00 PDT
(In reply to comment #6)
> No, in the BBNDK 2.0.1, it's only defined in nbutil.h:
> 
> ~/bbndk-2.0.1$ grep -R timegm target/qnx6/usr/include/
> target/qnx6/usr/include/nbutil.h:time_t timegm(struct tm *);

OK. We also have nbutil.h. So it shouldn't break BB build. Patch looks good to me.
Comment 8 Laszlo Gombos 2012-08-14 19:26:24 PDT
(In reply to comment #3)
> Rim folks, any idea? I keep on forgetting OS(QNX) vs. PLATFORM(BLACKBERRY) - is there a way to simplify the #ifdef usage here? :)

The patch looks good to me as well as I do not think DateMath.cpp should have a dependency on any PLATFORM() macro.

I agree with Simon that we should clarify the macro usage.

I think it would be useful to:

a./ List the currently maintained or targeted OS() macros when PLATFORM(BLACKBERRY) is set (in addition to OS(QNX))

b./ List the currently maintained or targeted PLATFORM() macros when OS(QNX) is set (in addition to PLATFORM(BLACKBERRY)).

If OS(QNX) is equivalent to PLATFORM(BLACKBERRY) than we should look into eliminate one of the 2 macros.
Comment 9 Yong Li 2012-08-15 07:41:02 PDT
(In reply to comment #8)
> (In reply to comment #3)
> > Rim folks, any idea? I keep on forgetting OS(QNX) vs. PLATFORM(BLACKBERRY) - is there a way to simplify the #ifdef usage here? :)
> 
> The patch looks good to me as well as I do not think DateMath.cpp should have a dependency on any PLATFORM() macro.
> 
> I agree with Simon that we should clarify the macro usage.
> 
> I think it would be useful to:
> 
> a./ List the currently maintained or targeted OS() macros when PLATFORM(BLACKBERRY) is set (in addition to OS(QNX))
> 
> b./ List the currently maintained or targeted PLATFORM() macros when OS(QNX) is set (in addition to PLATFORM(BLACKBERRY)).
> 
> If OS(QNX) is equivalent to PLATFORM(BLACKBERRY) than we should look into eliminate one of the 2 macros.

They are definitely not equivalent. PLATFORM(BLACKBERRY) is a subset of OS(QNX). OS(QNX) is always true in PLATFORM(BLACKBERRY)

a./ None (OS(QNX) only)
b./ PLATFORM(QT) and probably others. Also OS(QNX) can be used without any PLATFORM() macros.
Comment 10 Yong Li 2012-08-15 07:41:46 PDT
I can r+ the patch if no objection. Simon?
Comment 11 Simon Hausmann 2012-08-16 07:59:49 PDT
Millian, please set commit-queue? if you'd like to land it via the commit queue.
Comment 12 WebKit Review Bot 2012-08-17 03:23:24 PDT
Comment on attachment 157989 [details]
Patch

Clearing flags on attachment: 157989

Committed r125877: <http://trac.webkit.org/changeset/125877>
Comment 13 WebKit Review Bot 2012-08-17 03:23:28 PDT
All reviewed patches have been landed.  Closing bug.