Project

General

Profile

Actions

Bug #7287

closed

please rename atomic.h which conflicts with /usr/include/atomic.h in Solaris10

Added by ngoto (Naohisa Goto) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.0.0dev (2012-11-05) [sparc64-solaris2.10]
Backport:
[ruby-dev:46414]

Description

Solaris10にて、ccやfccなどgcc以外を使用してコンパイルする際は、Rubyソース内の atomic.h にて、以下のようにシステムの atomic.h (/usr/include/atomic.h)を#includeしています。

#elif defined(__sun)
#include <atomic.h>

#include "atomic.h" とは違って #include <atomic.h> のように<>で囲んでいるので、システムのヘッダファイルが優先されるはず、と思っていたら、実はそうではなく、configureがコンパイル時のオプションとして "-I." を追加しているため、Rubyソース側の atomic.h しか読み込むことができず、どう頑張ってもシステムの /usr/include/atomic.h は読み込まれないことが判明しました。
このため、以下のように"implicit function declaration"の警告が出ます。(行番号はr36984の場合)

"gc.c", line 1421: warning: implicit function declaration: atomic_swap_uint
"gc.c", line 1902: warning: implicit function declaration: atomic_or_uint
"gc.c", line 1952: warning: implicit function declaration: atomic_swap_ulong

幸い、Solaris10およびIllumos(旧OpenSolaris)の現時点の /usr/include/atomic.h は、実質的に 内部で #include <sys/atomic.h> しているだけでしたので、#include <sys/atomic.h> をRubyの atomic.h に追加することで問題を回避できました。ただし、Solaris10のmanページ(man atomic_ops)では atomic.h を使うように指示がされており、sys/atomic.h はカーネル内ドライバ専用らしいので、OSの将来のバージョン・リビジョンでは最悪コンパイルできなくなる可能性は残っています。根本的解決策としては、Ruby側のatomic.hのファイル名を違う名前に変更するしかないと思います。

ファイル名変更するときは、他のOSやライブラリとも被らないことが望ましいので若干調べたところ、
AIX 6.1 では、#include <sys/atomic_op.h> だそうです。
http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.kerneltechref%2Fdoc%2Fktechrf1%2Ffetch_and_add.htm

BoehmGC が要求する libatomic_ops には atomic_ops.h が含まれているようです。
https://github.com/ivmai/libatomic_ops/


Files

noname (205 Bytes) noname Anonymous, 11/06/2012 08:53 PM
noname (205 Bytes) noname Anonymous, 11/07/2012 10:23 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0