FreeBSDのchromium 18.0.1025.142

FreeBSDのchromium port もアップデートされましたが、どうもコンパイル時のオプションに Pulse Audio のチェックを入れているとコンパイルエラーになるようです。clang 3.0でもgcc 4.6でもダメでした。

clang 3.0のエラーメッセージは次の通りです。

CXX(target) out/Release/obj.target/media/media/audio/simple_sources.o
In file included from media/audio/pulse/pulse_output.cc:5:
In file included from ./media/audio/pulse/pulse_output.h:25:
In file included from ./base/memory/weak_ptr.h:63:
./base/logging.h:555:26: error: invalid operands to binary expression (‘const
scoped_refptr<base::MessageLoopProxy>’ and ‘MessageLoop *’)
DEFINE_CHECK_OP_IMPL(EQ, ==)
~~~~~~~~~~~~~~~~~~~~~~~~~^~~
./base/logging.h:548:12: note: expanded from:
if (v1 op v2) return NULL; \
~~ ^ ~~
media/audio/pulse/pulse_output.cc:129:3: note: in instantiation of function
template specialization
‘logging::CheckEQImpl<scoped_refptr<base::MessageLoopProxy>, MessageLoop
*>’ requested here
DCHECK_EQ(stream->manager_->GetMessageLoop(), MessageLoop::current());
^
./base/logging.h:744:31: note: expanded from:
#define DCHECK_EQ(val1, val2) DCHECK_OP(EQ, ==, val1, val2)
^
./base/logging.h:719:9: note: expanded from:
logging::Check##name##Impl((val1), (val2), \
^
./base/memory/scoped_ptr.h:224:6: note: candidate template ignored: failed
template argument deduction
bool operator==(C* p1, const scoped_ptr<C>& p2) {
^
./base/memory/scoped_ptr.h:336:6: note: candidate template ignored: failed
template argument deduction
bool operator==(C* p1, const scoped_array<C>& p2) {
^
./base/memory/scoped_ptr.h:462:6: note: candidate template ignored: failed
template argument deduction
bool operator==(C* p, const scoped_ptr_malloc<C, FP>& b) {
^
1 error generated.
gmake: *** [out/Release/obj.target/media/media/audio/pulse/pulse_output.o] エラー 1
gmake: *** 未完了のジョブを待っています….
*** Error code 1

Stop in /usr/ports/www/chromium.
*** Error code 1

Stop in /usr/ports/www/chromium.

 

gcc 4.6 では次のようなエラーメッセージがでます。

CXX(target) out/Release/obj.target/media/media/audio/pulse/pulse_output.o
In file included from ./base/memory/weak_ptr.h:63:0,
from ./media/audio/pulse/pulse_output.h:25,
from media/audio/pulse/pulse_output.cc:5:
./base/logging.h: In function ‘std::string* logging::CheckEQImpl(const t1&, const t2&, const char*) [with t1 = scoped_refptr<base::MessageLoopProxy>, t2 = MessageLoop*, std::string = std::basic_string<char>]’:
media/audio/pulse/pulse_output.cc:129:3: instantiated from here
./base/logging.h:555:1: error: no match for ‘operator==’ in ‘v1 == v2’
./base/logging.h:555:1: note: candidates are:
./base/logging.h:555:1: note: operator==(MessageLoop*, MessageLoop*) <built-in>
./base/logging.h:555:1: note: no known conversion for argument 1 from ‘const scoped_refptr<base::MessageLoopProxy>’ to ‘MessageLoop*’
./base/logging.h:555:1: note: operator==(base::MessageLoopProxy*, base::MessageLoopProxy*) <built-in>
./base/logging.h:555:1: note: no known conversion for argument 2 from ‘MessageLoop* const’ to ‘base::MessageLoopProxy*’
./base/memory/scoped_ptr.h:224:6: note: template<class C> bool operator==(C*, const scoped_ptr<C>&)
./base/memory/scoped_ptr.h:336:6: note: template<class C> bool operator==(C*, const scoped_array<C>&)
./base/memory/scoped_ptr.h:462:6: note: template<class C, class FP> bool operator==(C*, const scoped_ptr_malloc<C, FP>&)
./base/logging.h:555:1: warning: control reaches end of non-void function [-Wreturn-type]
gmake: *** [out/Release/obj.target/media/media/audio/pulse/pulse_output.o] エラー 1
gmake: *** 未完了のジョブを待っています….
*** Error code 1

Stop in /usr/ports/www/chromium.
*** Error code 1

Stop in /usr/ports/www/chromium.

大人しくPulse Audioのチェックを外しておいた方が良さそうです。