Forum: Ruby-dev [ruby-trunk - Bug #7287][Open] please rename atomic.h which conflicts with /usr/include/atomic.h in

Posted by ngoto (Naohisa Goto) (Guest)
on 2012-11-06 08:21
(Received via mailing list)
Issue #7287 has been reported by ngoto (Naohisa Goto).

----------------------------------------
Bug #7287: please rename atomic.h which conflicts with 
/usr/include/atomic.h in Solaris10
https://bugs.ruby-lang.org/issues/7287

Author: ngoto (Naohisa Goto)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-11-05) [sparc64-solaris2.10]


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.j...

BoehmGC が要求する libatomic_ops には atomic_ops.h が含まれているようです。
https://github.com/ivmai/libatomic_ops/
Posted by ngoto (Naohisa Goto) (Guest)
on 2012-11-06 08:33
(Received via mailing list)
Issue #7287 has been updated by ngoto (Naohisa Goto).

Status changed from Closed to Open
Priority changed from Normal to Low

回避策はコミットしましたが、根本的解決ではないので再openします。
----------------------------------------
Bug #7287: please rename atomic.h which conflicts with 
/usr/include/atomic.h in Solaris10
https://bugs.ruby-lang.org/issues/7287#change-32475

Author: ngoto (Naohisa Goto)
Status: Open
Priority: Low
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-11-05) [sparc64-solaris2.10]


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.j...

BoehmGC が要求する libatomic_ops には atomic_ops.h が含まれているようです。
https://github.com/ivmai/libatomic_ops/
Posted by KISHIMOTO, Makoto (Guest)
on 2012-11-06 09:29
(Received via mailing list)
$B$-$7$b$H$G$9(B

> #include "atomic.h" $B$H$O0c$C$F(B #include <atomic.h> 
$B$N$h$&$K(B<>$B$G0O$s$G$$$k$N$G!"%7%9%F%`$N%X%C%@%U%!%$%k$,M%@h$5$l$k$O$:!"$H;W$C$F$$$?$i!"<B$O$=$&$G$O$J$/!"(Bconfigure$B$,%3%s%Q%$%k;~$N%*%W%7%g%s$H$7$F(B 
"-I." $B$rDI2C$7$F$$$k$?$a!"(BRuby$B%=!<%9B&$N(B atomic.h 
$B$7$+FI$_9~$`$3$H$,$G$-$:!"$I$&4hD%$C$F$b%7%9%F%`$N(B /usr/include/atomic.h 
$B$OFI$_9~$^$l$J$$$3$H$,H=L@$7$^$7$?!#(B

ruby$B$G$O!"$O$^$C$?$3$H$O$J$$$N$G$9$,!"5U$N%Q%?!<%s$G!"(B
base64.h (heimdal) $B$H$+!"(Bgc.h (Boehm GC) $B$H$+$G!"%"%W%jB&$N(B
$B%X%C%@%U%!%$%k$r%$%s%/%k!<%I$7$F$[$7$$$N$K!"(B/usr/local/include 
$B$K(B
$B$"$k!"%7%9%F%`!J%i%$%V%i%j$N%Q%C%1!<%8!K$NB&$N%X%C%@%U%!%$%k$,(B
$B%$%s%/%k!<%I$5$l$F$7$^$$!"%H%i%V$k!"$H$$$&%Q%?!<%s$KITDj4|$K(B
$B8+Iq$o$l$F$$$^$9!#(B

# -I/usr/local/include $B$OB>$N%i%$%V%i%j$N$?$a$KMW$k$N$G!"(B
# "" $B$G0O$s$G$b$"$^$j0UL#$,$J$/(B

$B!VF1L>$N%X%C%@%U%!%$%k!WLdBj$N%Y%9%H%W%i%/%F%#%9!"$C$FL5$$$b$N$G(B
$B$7$g$&$+$M$'!)(B
Posted by Akinori MUSHA (Guest)
on 2012-11-06 12:47
(Received via mailing list)
At Tue, 6 Nov 2012 17:28:27 +0900,
KISHIMOTO, Makoto wrote:
>
> # -I/usr/local/include $B$OB>$N%i%$%V%i%j$N$?$a$KMW$k$N$G!"(B
> # "" $B$G0O$s$G$b$"$^$j0UL#$,$J$/(B
>
> $B!VF1L>$N%X%C%@%U%!%$%k!WLdBj$N%Y%9%H%W%i%/%F%#%9!"$C$FL5$$$b$N$G(B
> $B$7$g$&$+$M$'!)(B

$B!!$h$/CN$i$l$?%X%C%@%U%!%$%k$HF1$8L>A0$N$b$N$O:n$i$:!"I,MW$J$i3,AX2=$9(B
$B$Y$7!"$H$$$&$H$3$m$G$9$+$M$(!#(B

$B!!(Bgcc $B$K$O(B #include "..." $B$K$@$1:nMQ$9$k(B -iquote dir 
$B$H$$$&%*%W%7%g%s$,(B
$B$"$j!"$3$l$,@5$K$:$P$j$J$N$G$9$,!"(B $BDI?o$7$F$$$k$N$O(B clang 
$B$/$i$$$+$b$7(B
$B$l$^$;$s!#(B
Posted by mame (Yusuke Endoh) (Guest)
on 2012-11-06 13:42
(Received via mailing list)
Issue #7287 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to kosaki (Motohiro KOSAKI)

atomic.h を入れた kosaki さんに振ってしまいます。rb_atomic.h とかにするんですかね。
他は大丈夫ですかねえ。

$ ls *.h
addr2line.h  encdb.h        iseq.h    regint.h          timev.h 
vm_core.h
atomic.h     eval_intern.h  method.h  regparse.h        transcode_data.h 
vm_exec.h
constant.h   gc.h           node.h    revision.h        transdb.h 
vm_insnhelper.h
debug.h      id.h           parse.h   thread_pthread.h  verconf.h 
vm_opts.h
dln.h        internal.h     regenc.h  thread_win32.h    version.h

Boehm GC とか #include できなさそうですね。しないけど。

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Bug #7287: please rename atomic.h which conflicts with 
/usr/include/atomic.h in Solaris10
https://bugs.ruby-lang.org/issues/7287#change-32499

Author: ngoto (Naohisa Goto)
Status: Assigned
Priority: Low
Assignee: kosaki (Motohiro KOSAKI)
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-11-05) [sparc64-solaris2.10]


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.j...

BoehmGC が要求する libatomic_ops には atomic_ops.h が含まれているようです。
https://github.com/ivmai/libatomic_ops/
Posted by KOSAKI Motohiro (Guest)
on 2012-11-06 18:15
(Received via mailing list)
> $B$"$j!"$3$l$,@5$K$:$P$j$J$N$G$9$,!"(B $BDI?o$7$F$$$k$N$O(B clang 
$B$/$i$$$+$b$7(B
> $B$l$^$;$s!#(B

$B$=$b$=$b(B atomic.h 
$B$O8x3+$7$?$/$J$$$+$i(Binclude/ruby$B$G$O$J$$>l=j$K$*$$$F$"$k$N$K(B
$B$J$<(B /usr/local/include $B$KF~$C$F$7$^$C$?$N$G$7$g$&(B
Makefile$B$,%P%0$C$F$k!)$X$s$J%G%#%9%H%j$D$+$C$F$k!)(B
Posted by kosaki (Motohiro KOSAKI) (Guest)
on 2012-11-06 18:22
(Received via mailing list)
Issue #7287 has been updated by kosaki (Motohiro KOSAKI).

Assignee changed from kosaki (Motohiro KOSAKI) to ngoto (Naohisa Goto)

ああ、やっと問題が理解できました。(すいません、別メールでへんなコメントをつけてしまいました)

回避策のrevertと名前変更は一緒にやったほうがいいと思うのでngotoさんがコミットしてもらったほうがいいかと思います。
名前は rb_atomic.h で異論ありません。(ほかのでもOK、そこにこだわりはない)
----------------------------------------
Bug #7287: please rename atomic.h which conflicts with 
/usr/include/atomic.h in Solaris10
https://bugs.ruby-lang.org/issues/7287#change-32508

Author: ngoto (Naohisa Goto)
Status: Assigned
Priority: Low
Assignee: ngoto (Naohisa Goto)
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-11-05) [sparc64-solaris2.10]


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.j...

BoehmGC が要求する libatomic_ops には atomic_ops.h が含まれているようです。
https://github.com/ivmai/libatomic_ops/
Posted by Akinori MUSHA (Guest)
on 2012-11-07 02:09
(Received via mailing list)
At Wed, 7 Nov 2012 02:15:08 +0900,
KOSAKI Motohiro wrote:
> > $B$"$j!"$3$l$,@5$K$:$P$j$J$N$G$9$,!"(B $BDI?o$7$F$$$k$N$O(B clang 
$B$/$i$$$+$b$7(B
> > $B$l$^$;$s!#(B
>
> $B$=$b$=$b(B atomic.h 
$B$O8x3+$7$?$/$J$$$+$i(Binclude/ruby$B$G$O$J$$>l=j$K$*$$$F$"$k$N$K(B
> $B$J$<(B /usr/local/include $B$KF~$C$F$7$^$C$?$N$G$7$g$&(B
> Makefile$B$,%P%0$C$F$k!)$X$s$J%G%#%9%H%j$D$+$C$F$k!)(B

#include "atomic.h" $B$GFI$^$l$k$=$N(B $(srcdir)/atomic.h $B$,(B Solaris 
$B$G$O(B
/usr/include/atomic.h $B$rI,MW$H$9$k$N$GCf$G(B #include <atomic.h> 
$B$H$7$F$$(B
$B$?$N$@$1$I!"(B <> $B$G3g$C$F$b(B -I$(srcdir) 
$B$,;XDj$5$l$F$$$k$H%7%9%F%`%G%#%l(B
$B%/%H%j$G$J$/$=$A$i$rM%@h$7$F$7$^$&$N$G!"<B<AE*$K(B "" $B$b(B <> 
$B$b0c$$$,$J$/!"(B
$B%7%9%F%`$K$"$kF1L>%X%C%@$O1#$5$l$F%$%s%/%k!<%I$G$-$J$$$H$$$&OC$@$H;W$$(B
$B$^$9!#(B

$B$H=q$$$?$H$3$m$G<!$N%a!<%k$K5$$,IU$-$^$7$?$,5-O?$N$?$a$KEj$2$F$*$-$^$9!#(B
Posted by KISHIMOTO, Makoto (Guest)
on 2012-11-07 05:14
(Received via mailing list)
$B$-$7$b$H$G$9(B

> > > $B!!(Bgcc $B$K$O(B #include "..." $B$K$@$1:nMQ$9$k(B -iquote dir 
$B$H$$$&%*%W%7%g%s$,(B
> > > $B$"$j!"$3$l$,@5$K$:$P$j$J$N$G$9$,!"(B $BDI?o$7$F$$$k$N$O(B clang 
$B$/$i$$$+$b$7(B
> > > $B$l$^$;$s!#(B

$B$=$&$$$C$?@)8f$N$?$a$K;H$($k(B -I- $B$,(B deprecated 
$B$K$J$C$F$7$^$C$F!"(B
$BBeBX$,$J$$$N$+$J$!!"$H;W$C$F$$$?$N$G$9$,!"$A$c$s$H$"$C$?$N$G$9$M!#(B
Posted by ngoto (Naohisa Goto) (Guest)
on 2012-11-09 17:14
(Received via mailing list)
Issue #7287 has been updated by ngoto (Naohisa Goto).


> 回避策のrevertと名前変更は一緒にやったほうがいいと思うのでngotoさんがコミットしてもらったほうがいいかと思います。名前は rb_atomic.h 
で異論ありません。(ほかのでもOK、そこにこだわりはない)

r37603 にていったん r37491 をリバートした後、r37604 にてコミットしました。
ファイル名は、旧atomic.h内でマクロ RUBY_ATOMIC_H を使っているのを見て、何となく、rb_atomic.h ではなく 
ruby_atomic.h にしました。
----------------------------------------
Bug #7287: please rename atomic.h which conflicts with 
/usr/include/atomic.h in Solaris10
https://bugs.ruby-lang.org/issues/7287#change-32720

Author: ngoto (Naohisa Goto)
Status: Closed
Priority: Low
Assignee: ngoto (Naohisa Goto)
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-11-05) [sparc64-solaris2.10]


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.j...

BoehmGC が要求する libatomic_ops には atomic_ops.h が含まれているようです。
https://github.com/ivmai/libatomic_ops/
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.