Bug 26296 - xulrunner не определяет char16_t
Summary: xulrunner не определяет char16_t
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: xulrunner-devel (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Andrey Cherepanov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 26066
  Show dependency tree
 
Reported: 2011-09-14 14:28 MSK by viy
Modified: 2012-03-05 17:06 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description viy 2011-09-14 14:28:48 MSK
On Wed, Sep 14, 2011 at 11:08:48AM +0300, Igor Vlasenko wrote:
> 
> В новом стандарте c++ char16_t превратился во встроенный тип и keyword,
> http://en.cppreference.com/w/cpp/keywords/char16_t
> в результате чего, например, новый xulrunner уже не определяет char16_t,
> и сборка с помощью gcc45 оканчивается неудачей:

     [exec] //usr/include/xulrunner/nsStringAPI.h:1101:3: error: 'char16_t' was not declared in this scope
     [exec] make: *** [xpcomxul.o] Error 1

Значит, новый xulrunner неправильно собран, поскольку сам по себе
он поддерживает системы как с HAVE_CPP_CHAR16_T, так и без них, см.
/usr/include/xulrunner/xpcom-config.h
Comment 1 Alexey Gladkov 2011-09-14 14:53:45 MSK
HAVE_CPP_CHAR16_T был выставлен в xpcom-config.h в момент сборки, когда char16_t был доступен. Если положить xpcom-config.h не заполненный (дефолтный), то всем кто будет использовать хэдеры xulrunner предётся заполнять его самостоятельно.

Я не вижу способов как это исправить.
Comment 2 viy 2011-09-14 15:12:00 MSK
Если я правильно понял Дмитрия, 
то в нашем gcc45 нет встроенного char16_t, поэтому 
HAVE_CPP_CHAR16_T был выставлен в xpcom-config.h в момент сборки некорректно.
Comment 3 Alexey Gladkov 2011-09-14 15:29:48 MSK
(В ответ на комментарий №2)
> Если я правильно понял Дмитрия, 

Не будьте испорченным телефоном.

> то в нашем gcc45 нет встроенного char16_t, поэтому 
> HAVE_CPP_CHAR16_T был выставлен в xpcom-config.h в момент сборки некорректно.

xulrruner сам использует xpcom-config.h при сборке.

Вот проверка:

http://git.altlinux.org/people/legion/packages/xulrunner.git?p=xulrunner.git;a=blob;f=mozilla/configure.in;h=3447605ecaca93a0e54d718789dfcb4bfd09987e;hb=307c4eaefdad49e73914662be088ab0ebc43e105#l3005
Comment 4 Dmitry V. Levin 2011-09-14 15:41:40 MSK
Встроенный тип char16_t доступен только при компиляции в режиме C++0x (g++ -std=c++0x и g++ -std=gnu++0x).

The default, if no C++ language dialect options are given, is `-std=gnu++98'

Так что использовать заголовки xulrunner можно только в случае если компилятор используется в том же режиме что и во время статической проверки на тип char16_t во время сборки самого xulrunner.

Объезд для клиентов xulrunner:
export CXX='g++ -std=gnu++0x'
Comment 5 Alexey Gladkov 2011-09-14 15:56:22 MSK
(В ответ на комментарий №4)
> Встроенный тип char16_t доступен только при компиляции в режиме C++0x (g++
> -std=c++0x и g++ -std=gnu++0x).

Если этот тип появляется только при определённых условиях, то разумеется необходимо из воспроизводить при сборке.

Можно конечно для страждущих добавить эту опцию в в pkg-файлы, но это мягко говоря ...