[MacPorts] #44624: vim+universal+ruby18 fails to build because of missing rb_num2uint symbol in i386 slice of libruby.dylib
MacPorts
noreply at macports.org
Tue Aug 12 09:41:01 PDT 2014
#44624: vim+universal+ruby18 fails to build because of missing rb_num2uint symbol
in i386 slice of libruby.dylib
-------------------------+----------------------
Reporter: jeremyhu@… | Owner: raimue@…
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 2.3.1
Resolution: | Keywords:
Port: vim |
-------------------------+----------------------
Description changed by jeremyhu@…:
Old description:
> {{{
> make[2]: Leaving directory
> `/opt/local/var/macports/build/_Volumes_Home_jeremy_src_macports_trunk_dports_editors_vim/vim/work/vim74/src/po'
> /usr/bin/clang -L/opt/local/lib -L/opt/local/lib -L.
> -L/opt/local/lib -Wl,-headerpad_max_install_names -L/opt/local/lib
> -Wl,-headerpad_max_install_names -arch x86_64 -arch i386 -L/usr/local/lib
> -o vim objects/buffer.o objects/blowfish.o objects/charset.o
> objects/diff.o objects/digraph.o objects/edit.o objects/eval.o
> objects/ex_cmds.o objects/ex_cmds2.o objects/ex_docmd.o objects/ex_eval.o
> objects/ex_getln.o objects/fileio.o objects/fold.o objects/getchar.o
> objects/hardcopy.o objects/hashtab.o objects/if_cscope.o
> objects/if_xcmdsrv.o objects/mark.o objects/memline.o objects/menu.o
> objects/message.o objects/misc1.o objects/misc2.o objects/move.o
> objects/mbyte.o objects/normal.o objects/ops.o objects/option.o
> objects/os_unix.o objects/pathdef.o objects/popupmnu.o objects/quickfix.o
> objects/regexp.o objects/screen.o objects/search.o objects/sha256.o
> objects/spell.o objects/syntax.o objects/tag.o objects/term.o
> objects/ui.o objects/undo.o objects/version.o objects/window.o
> objects/gui.o objects/gui_gtk.o objects/gui_gtk_x11.o objects/pty.o
> objects/gui_gtk_f.o objects/gui_beval.o objects/if_python.o
> objects/if_ruby.o objects/netbeans.o objects/main.o objects/memfile.o
> -L/opt/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -lgio-2.0
> -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage
> -lXfixes -lX11 -lXext -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0
> -lpangoft2-1.0 -lpango-1.0 -lm -lgobject-2.0 -lglib-2.0 -lintl
> -lfontconfig -lfreetype -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE
> -lm -lncurses -liconv -lintl
> -L/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
> -ldl -framework CoreFoundation -lpython2.7 -lruby -lpthread -ldl -lobjc
> -L/opt/local/lib
> Undefined symbols for architecture i386:
> "_rb_num2uint", referenced from:
> _window_set_cursor in if_ruby.o
> ld: symbol(s) not found for architecture i386
> clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
> make[1]: *** [vim] Error 1
> make[1]: Leaving directory
> `/opt/local/var/macports/build/_Volumes_Home_jeremy_src_macports_trunk_dports_editors_vim/vim/work/vim74/src'
> ...
>
> ~/src/macports $ nm -arch i386 /opt/local/lib/libruby.dylib | grep
> rb_num2uint
>
> ~/src/macports $ nm -arch x86_64 /opt/local/lib/libruby.dylib | grep
> rb_num2uint
> 000000000004266e T _rb_num2uint
> }}}
>
> This is because the function is only available in 64bit ruby where int !=
> long. vim handles this by checking macros that are set at configure time
> rather than build time:
>
> # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
> # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
> # define rb_fix2int dll_rb_fix2int
> # define rb_num2int dll_rb_num2int
> # endif
> # define rb_num2uint dll_rb_num2uint
> # endif
>
> I suggest vim use muniversal to address this
New description:
{{{
make[2]: Leaving directory
`/opt/local/var/macports/build/_Volumes_Home_jeremy_src_macports_trunk_dports_editors_vim/vim/work/vim74/src/po'
/usr/bin/clang -L/opt/local/lib -L/opt/local/lib -L. -L/opt/local/lib
-Wl,-headerpad_max_install_names -L/opt/local/lib
-Wl,-headerpad_max_install_names -arch x86_64 -arch i386 -L/usr/local/lib
-o vim objects/buffer.o objects/blowfish.o objects/charset.o
objects/diff.o objects/digraph.o objects/edit.o objects/eval.o
objects/ex_cmds.o objects/ex_cmds2.o objects/ex_docmd.o objects/ex_eval.o
objects/ex_getln.o objects/fileio.o objects/fold.o objects/getchar.o
objects/hardcopy.o objects/hashtab.o objects/if_cscope.o
objects/if_xcmdsrv.o objects/mark.o objects/memline.o objects/menu.o
objects/message.o objects/misc1.o objects/misc2.o objects/move.o
objects/mbyte.o objects/normal.o objects/ops.o objects/option.o
objects/os_unix.o objects/pathdef.o objects/popupmnu.o objects/quickfix.o
objects/regexp.o objects/screen.o objects/search.o objects/sha256.o
objects/spell.o objects/syntax.o objects/tag.o objects/term.o
objects/ui.o objects/undo.o objects/version.o objects/window.o
objects/gui.o objects/gui_gtk.o objects/gui_gtk_x11.o objects/pty.o
objects/gui_gtk_f.o objects/gui_beval.o objects/if_python.o
objects/if_ruby.o objects/netbeans.o objects/main.o objects/memfile.o
-L/opt/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -lgio-2.0
-lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage
-lXfixes -lX11 -lXext -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0
-lpangoft2-1.0 -lpango-1.0 -lm -lgobject-2.0 -lglib-2.0 -lintl
-lfontconfig -lfreetype -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE
-lm -lncurses -liconv -lintl
-L/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
-ldl -framework CoreFoundation -lpython2.7 -lruby -lpthread -ldl -lobjc
-L/opt/local/lib
Undefined symbols for architecture i386:
"_rb_num2uint", referenced from:
_window_set_cursor in if_ruby.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make[1]: *** [vim] Error 1
make[1]: Leaving directory
`/opt/local/var/macports/build/_Volumes_Home_jeremy_src_macports_trunk_dports_editors_vim/vim/work/vim74/src'
...
~/src/macports $ nm -arch i386 /opt/local/lib/libruby.dylib | grep
rb_num2uint
~/src/macports $ nm -arch x86_64 /opt/local/lib/libruby.dylib | grep
rb_num2uint
000000000004266e T _rb_num2uint
}}}
This is because the function is only available in 64bit ruby where int !=
long. vim handles this by checking macros that are set at configure time
rather than build time:
{{{
# if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
# define rb_fix2int dll_rb_fix2int
# define rb_num2int dll_rb_num2int
# endif
# define rb_num2uint dll_rb_num2uint
# endif
}}}
I suggest vim use muniversal to address this
--
--
Ticket URL: <https://trac.macports.org/ticket/44624#comment:1>
MacPorts <http://www.macports.org/>
Ports system for OS X
More information about the macports-tickets
mailing list