jeaye / color_coded

A vim plugin for libclang-based highlighting of C, C++, ObjC
MIT License
870 stars 53 forks source link

color_coded doesn't compile with multiple installed Lua versions on the system. #16

Closed seclorum closed 9 years ago

seclorum commented 9 years ago

I get these results, due to the fact that I have multiple Lua versions installed on my system (OSX 10.10.2), managed with homebrew:

j@w1x8:~/.vim/bundle/color_coded {(master)} $ make Tracking API changes...

Building bin/libcolor_coded_boost_system.a Compiling src/error_code.cpp Linking bin/libcolor_coded_boost_system.a Building bin/libcolor_coded_boost_filesystem.a Compiling src/codecvt_error_category.cpp Compiling src/operations.cpp Compiling src/path.cpp Compiling src/path_traits.cpp Compiling src/portability.cpp Compiling src/unique_path.cpp Compiling src/utf8_codecvt_facet.cpp Linking bin/libcolor_coded_boost_filesystem.a Building bin/color_coded.so Compiling src/main.cpp src/main.cpp:3:12: fatal error: 'lua.h' file not found

include

       ^

1 error generated. make: *\ [src/main.cpp.o] Error 1

$ ls /opt/local/lib/lua /opt/local/lib/liblua.5.1.5.dylib /opt/local/lib/liblua.5.2.dylib /opt/local/lib/liblua.dylib /opt/local/lib/libluajit-5.1.2.0.3.dylib /opt/local/lib/libluajit-5.1.dylib /opt/local/lib/liblua.5.1.dylib /opt/local/lib/liblua.5.3.0.dylib /opt/local/lib/liblua5.1.dylib /opt/local/lib/libluajit-5.1.2.dylib /opt/local/lib/liblua.5.2.3.dylib /opt/local/lib/liblua.5.3.dylib /opt/local/lib/libluabind.dylib /opt/local/lib/libluajit-5.1.a

/opt/local/lib/lua: 5.1 5.2

/opt/local/lib/luarocks: rocks j@w1x8:~/.vim {} $ ls /opt/local/include/lua /opt/local/include/lua.hpp

/opt/local/include/lua-5.1: lauxlib.h lua.h lua.hpp luaconf.h lualib.h

/opt/local/include/lua-5.3: lauxlib.h lua.h lua.hpp luaconf.h lualib.h

/opt/local/include/lua5.1: lauxlib.h lua.h lua.hpp luaconf.h lualib.h

/opt/local/include/lua5.2: lauxlib.h lua.h lua.hpp lua5.2 luaconf.h lualib.h

/opt/local/include/lua5.3: lauxlib.h lua.h lua.hpp luaconf.h lualib.h

/opt/local/include/luabind: adopt_policy.hpp container_policy.hpp exception_handler.hpp iterator_policy.hpp open.hpp scope.hpp weak_ref.hpp back_reference.hpp copy_policy.hpp from_stack.hpp lua_include.hpp operator.hpp shared_ptr_converter.hpp wrapper_base.hpp back_reference_fwd.hpp dependency_policy.hpp function.hpp luabind.hpp out_value_policy.hpp tag_function.hpp yield_policy.hpp class.hpp detail get_main_thread.hpp make_function.hpp prefix.hpp typeid.hpp class_info.hpp discard_result_policy.hpp get_pointer.hpp nil.hpp raw_policy.hpp value_wrapper.hpp config.hpp error.hpp handle.hpp object.hpp return_reference_to_policy.hpp version.hpp

/opt/local/include/luajit-2.0: lauxlib.h lua.h lua.hpp luaconf.h luajit.h lualib.h

seclorum commented 9 years ago

If I try to explicitly build with Lua5.2, I get SEGV fault:

j@w1x8:~/.vim/bundle/color_coded {(master)} $ vi Makefile Vim: Caught deadly signal SEGV Vim: Finished. Segmentation fault: 11

jeaye commented 9 years ago

Thanks for making an issue.

  1. I've updated the Makefile to also look in /opt/local/include (should fix your initial issue)
  2. That segfault is unwelcome, but I wonder what's going on with your environment that causes this

If you'd like to debug, you can try disabling all plugins except for color_coded. You can also try running make run in the color_coded directory, which tests out color_coded on a very simple file. If you can get any more information on the crash, let me know.

Your compilation issue should be resolved. If you need to modify the compiler flags, you can also use the CXX_FLAGS variable. Example:

$ make CXX_FLAGS=-foobar=spam
seclorum commented 9 years ago

I pulled your revisions, and it still doesn't build:

@w1x8:~/.vim/bundle/color_coded {(master)} $ git pull remote: Counting objects: 9, done. remote: Compressing objects: 100% (9/9), done. remote: Total 9 (delta 3), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (9/9), done. From https://github.com/jeaye/color_coded 4af5f50..4acf01d master -> origin/master Updating 4af5f50..4acf01d Fast-forward Makefile.in | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------ README.md | 5 ++++- 2 files changed, 137 insertions(+), 132 deletions(-) j@w1x8:~/.vim/bundle/color_coded {(master)} $ make Tracking API changes...

Building bin/libcolor_coded_boost_system.a Linking bin/libcolor_coded_boost_system.a Building bin/libcolor_coded_boost_filesystem.a Linking bin/libcolor_coded_boost_filesystem.a Building bin/color_coded.so Compiling src/main.cpp src/main.cpp:3:12: fatal error: 'lua.h' file not found

include

       ^

1 error generated. make: *\ [src/main.cpp.o] Error 1 j@w1x8:~/.vim/bundle/color_coded {(master)} $ make clean

seclorum commented 9 years ago

BTW, if you want to meet on IRC to debug this, maybe its better? I'm torpor on freenode ..

seclorum commented 9 years ago

BTW, which Lua version are you expecting to be linking with - 5.2 or 5.3?

seclorum commented 9 years ago

Okay, I added flags to link against lua 5.2, same deal. CXX_FLAGS=-L/opt/local/lib/lua/5.2/ make Tracking API changes...

Building bin/libcolor_coded_boost_system.a Linking bin/libcolor_coded_boost_system.a Building bin/libcolor_coded_boost_filesystem.a Linking bin/libcolor_coded_boost_filesystem.a Building bin/color_coded.so Compiling src/main.cpp Linking bin/color_coded.so

$ make run j@w1x8:~/.vim/bundle/color_coded {(master)} $ Vim: Caught deadly signal SEGV Vim: Finished.

seclorum commented 9 years ago

Here are my vim details:

$ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 2 2015 17:31:59) MacOS X (unix) version Included patches: 1-688 Compiled by Homebrew Huge version without GUI. Features included (+) or not (-): +acl +farsi +mouse_netterm +syntax +arabic +file_in_path +mouse_sgr +tag_binary +autocmd +find_in_path -mouse_sysmouse +tag_old_static -balloon_eval +float +mouse_urxvt -tag_any_white -browse +folding +mouse_xterm -tcl ++builtin_terms -footer +multi_byte +terminfo +byte_offset +fork() +multi_lang +termresponse +cindent -gettext -mzscheme +textobjects -clientserver -hangul_input +netbeans_intg +title +clipboard +iconv +path_extra -toolbar +cmdline_compl +insert_expand +perl +user_commands +cmdline_hist +jumplist +persistent_undo +vertsplit +cmdline_info +keymap +postscript +virtualedit +comments +langmap +printer +visual +conceal +libcall +profile +visualextra +cryptv +linebreak +python +viminfo +cscope +lispindent -python3 +vreplace +cursorbind +listcmds +quickfix +wildignore +cursorshape +localmap +reltime +wildmenu +dialog_con +lua +rightleft +windows +diff +menu +ruby +writebackup +digraphs +mksession +scrollbind -X11 -dnd +modify_fname +signs -xfontset -ebcdic +mouse +smartindent -xim +emacs_tags -mouseshape -sniff -xsmp +eval +mouse_dec +startuptime -xterm_clipboard +ex_extra -mouse_gpm +statusline -xterm_save +extra_search -mouse_jsbterm -sun_workshop -xpm system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: /usr/bin/clang -c -I. -Iproto -DHAVE_CONFIG_H -F/usr/local/Frameworks -DMACOS_X_UNIX -Os -w -pipe -march=native -mmacosx-version-min=10.10 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: /usr/bin/clang -L. -L/Users/travis/.sm/pkg/active/lib -fPIC -Bstatic -fstack-protector -L/usr/local/lib -F/usr/local/Frameworks -Wl,-headerpad_max_install_names -o vim -lm -lncurses -liconv -framework Cocoa -pagezero_size 10000 -image_base 100000000 -L/usr/local/lib -lluajit-5.1 -fstack-protector -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -F/usr/local/Cellar/python/2.7.9/Frameworks -framework Python -lruby-static -framework CoreFoundation -lobjc -L/Users/j/.rvm/rubies/ruby-2.1.1/lib

Maybe color_coded doesn't like luajit?

tony commented 9 years ago

"Multiple installed Lua version on the system."

Perhaps that's it. On debian jessie I have to have both lua 5.1 and 5.2 packages. I can't just use one version of it.

seclorum commented 9 years ago

I don't understand - why should you need both installed? I think the best thing to do is work out which version of Lua that color_coded is written for, and then just use it.

tony commented 9 years ago

Warning, doesn't seem ready for prime time. Ran into compile errors even after fixing some header issues. I really like the idea though.

Source: http://www.reddit.com/r/vim/comments/316y4k/color_coded_realtime_semantic_highlighting_in_vim/cpz1b3z.

Feel fortunate the compilation errors are getting posted here. Most people will encounter compilation issues and throw up their hands and give up and not press the issue.

I don't understand - why should you need both installed? I think the best thing to do is work out which version of Lua that color_coded is written for, and then just use it.

I am confirming the fatal error: 'lua.h' file not found. Users don't have a choice if their distribution packages' use lua 5.1 here and 5.2 there. I can't remove a version fully without uninstalling important system packages (particularly for for me it was KDE packages on debian jessie, but this could happen anywhere).

edit: corrections

jeaye commented 9 years ago

@seclorum You didn't ./configure after pulling down the changes. The makefile is generate by the configure script. Thus, you've been using the same makefile all along.

jeaye commented 9 years ago

BTW, which Lua version are you expecting to be linking with - 5.2 or 5.3?

The dependencies section of the readme (linked to from the compilation step) specifies that 5.2 should be used. I've added some more flags which should better support Debian-based distros and OS X (just now). Please be sure to ./configure before you make.

seclorum commented 9 years ago

I did actually configure before I make'd .. I just didn't snag it in the pate. Here is the result of a new attempt:

@w1x8:~/.vim/bundle/color_coded {(master)} $ git pull Already up-to-date. j@w1x8:~/.vim/bundle/color_coded {(master)} $ make clean Cleaned bin/libcolor_coded_boost_system.a Cleaned bin/libcolor_coded_boost_filesystem.a Cleaned bin/color_coded.so j@w1x8:~/.vim/bundle/color_coded {(master)} $ ./configure Configuring color_coded Platform: OS X

Compiler: c++ CXX platform flags: -stdlib=libc++ LD platform flags: -L/opt/local/lib/lua/5.2 -L/opt/local/lib -framework CoreFoundation -lc++

Updating submodules... done Downloading clang... already downloaded! Populating Makefile... done Generation sources... done Done configuring color_coded

To run compile, use make j@w1x8:~/.vim/bundle/color_coded {(master)} $ make Tracking API changes...

Building bin/libcolor_coded_boost_system.a Compiling src/error_code.cpp Linking bin/libcolor_coded_boost_system.a Building bin/libcolor_coded_boost_filesystem.a Compiling src/codecvt_error_category.cpp Compiling src/operations.cpp Compiling src/path.cpp Compiling src/path_traits.cpp Compiling src/portability.cpp Compiling src/unique_path.cpp Compiling src/utf8_codecvt_facet.cpp Linking bin/libcolor_coded_boost_filesystem.a Building bin/color_coded.so Compiling src/main.cpp Linking bin/color_coded.so j@w1x8:~/.vim/bundle/color_coded {(master)} $ make run j@w1x8:~/.vim/bundle/color_coded {(master)} $ Vim: Caught deadly signal SEGV Vim: Finished.

Same deal, alas. Tell me how I can debug it further and I'll try to nail this for you.

jeaye commented 9 years ago

Try to answer these

  1. Does vim crash when just opening it and not opening a file?
  2. Does it happen in both vim and gvim?
  3. If not 1., what if you open a non-color_coded file (such as python, ruby, txt, etc)?
  4. If not 1., you could try modifying your Makefile (line 4) to s/-O3/-O0/ and add -ggdb. Once you've done that, recompile and then make open. Attach a debugger using vim's PID with gdb -p and let it continue. Next, in vim, open test/simple.cpp. Does gdb give you any good information?
seclorum commented 9 years ago
  1. Yes. vim crashes with the plugin enabled, opening no files (just vim at cmdline).
  2. Yes. gvim crashes too.
  3. It crashes no matter what - open a new file (vim /tmp/t.txt), or an existing file (vim src/main.cpp). Regardless of vim or gvim.
  4. Disabled the plugin (make clean && vim ../../vimrc - commented out color_coded), made the Makefile changes per #4, ran make open - SEGV. No gdb on Darwin/OSX, used lldb instead - lldb vim src/main.cpp - no SEGV. :( No useful info.
seclorum commented 9 years ago

Interesting: with the plugin disabled (commented out in vimrc), 'make run' also produces the SEGV error - i.e. whatever make run is doing, even with the color_coded plugin disabled, crashes gvim.

jeaye commented 9 years ago

make run doesn't use your vimrc's plugins. It disables all plugins and just loads color_coded.

No useful info in the debugger? Did it crash and break in the debugger? Can you issue bt for a backtrace?

seclorum commented 9 years ago

Yes, just noticed that it loads only color_coded, so make run is a good test going further, since it means I can leave my vimrc alone. It did not crash and break in the debugger (lldb) so I'm looking into that a bit further.

seclorum commented 9 years ago

Okay, I wasn't using lldb properly (missing the -- separating args at the command line) so now I have useful information:

"test/simple.cpp" 44L, 621CProcess 12698 stopped

jeaye commented 9 years ago

Can I get the full backtrace? That's only the first frame.

seclorum commented 9 years ago
"test/simple.cpp" 44L, 621CProcess 12698 stopped
* thread #1: tid = 0x195293, 0x00000000004c9b6f liblua.5.2.dylib`luaH_getint + 11, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xffffffff00000038)
    frame #0: 0x00000000004c9b6f liblua.5.2.dylib`luaH_getint + 11
liblua.5.2.dylib`luaH_getint + 11:
-> 0x4c9b6f:  cmpl   0x38(%rdi), %eax
   0x4c9b72:  jae    0x4c9b80                  ; luaH_getint + 28
   0x4c9b74:  cltq
   0x4c9b76:  shlq   $0x4, %rax
(lldb) bt
* thread #1: tid = 0x195293, 0x00000000004c9b6f liblua.5.2.dylib`luaH_getint + 11, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xffffffff00000038)
  * frame #0: 0x00000000004c9b6f liblua.5.2.dylib`luaH_getint + 11
    frame #1: 0x00000000004bd7fa liblua.5.2.dylib`lua_setglobal + 35
    frame #2: 0x0000000003002097 color_coded.so`luaopen_color_coded(lua=0x000000000049b378) + 71 at main.cpp:70
    frame #3: 0x00007fff04c4d8b8 libluajit-5.1.2.dylib`___lldb_unnamed_function93$$libluajit-5.1.2.dylib + 52
    frame #4: 0x00007fff04c75c78 libluajit-5.1.2.dylib`___lldb_unnamed_function477$$libluajit-5.1.2.dylib + 680
    frame #5: 0x00007fff04c4d8b8 libluajit-5.1.2.dylib`___lldb_unnamed_function93$$libluajit-5.1.2.dylib + 52
    frame #6: 0x00007fff04c5ce24 libluajit-5.1.2.dylib`lua_pcall + 100
    frame #7: 0x000000010016021b vim`ex_lua + 125
    frame #8: 0x00000001000518d0 vim`do_cmdline + 6261
    frame #9: 0x0000000100026129 vim`call_func + 3030
    frame #10: 0x0000000100028139 vim`get_func_tv + 313
    frame #11: 0x000000010003f465 vim`eval7 + 2086
    frame #12: 0x000000010003ea20 vim`eval6 + 44
    frame #13: 0x000000010003e685 vim`eval5 + 53
    frame #14: 0x000000010003dea2 vim`eval4 + 48
    frame #15: 0x000000010003dd51 vim`eval3 + 39
    frame #16: 0x0000000100024b08 vim`eval1 + 38
    frame #17: 0x00000001000247f9 vim`eval0 + 49
    frame #18: 0x0000000100026974 vim`ex_let + 302
    frame #19: 0x00000001000518d0 vim`do_cmdline + 6261
    frame #20: 0x000000010004eeca vim`do_source + 1584
    frame #21: 0x000000010004e838 vim`cmd_source + 100
    frame #22: 0x00000001000518d0 vim`do_cmdline + 6261
    frame #23: 0x0000000100178cbd vim`main + 8277
    frame #24: 0x00007fff9a8dc5c9 libdyld.dylib`start + 1
jeaye commented 9 years ago

Interesting. Thanks for the backtace. Looks like it's crashing right in the plugin's "main" (entry point). Not even getting past the registration. Looking.

seclorum commented 9 years ago

Maybe it has something to do with this:

http://lua-users.org/lists/lua-l/2011-11/msg00474.html

(Trying now)

jeaye commented 9 years ago

A hah! Try building your macvim without luajit. Follow the README for the brew instructions.

seclorum commented 9 years ago

I did try that but it actually produced a vim without Lua (even though --with-lua was specified on the brew command line per the README) - it seems that the latest vim from homebrew has a luajit preference for some reason I haven't debugged yet. But, let me see if the -pagezero_size 10000 -image_base 100000000 args work, because I'd actually prefer to make it work with luajit if possible ..

seclorum commented 9 years ago

Never mind, of course this won't work (-pagezero_size 10000 -image_base 100000000) because .. not building an executable with a main .. (i.e. is plugin)

jeaye commented 9 years ago

That link you gave also mentioned that linking to luajit2 is required. I haven't tested color_coded with luajit, so I'm thinking we should try removing it on your machine for now (yes, it should be addressed if it's an issue -- let's find out).

I'm using a fresh install of Yosemite on a test machine and it worked just fine with the command in the README. What do you mean it produced a vim without lua for you? There was no +lua in vim?

seclorum commented 9 years ago

Here's the new vim version details:

j@w1x8:~/.vim/bundle/color_coded {(master)}
$ make
Tracking API changes...

Building bin/libcolor_coded_boost_system.a
 Compiling src/error_code.cpp
Linking bin/libcolor_coded_boost_system.a
Building bin/libcolor_coded_boost_filesystem.a
 Compiling src/codecvt_error_category.cpp
 Compiling src/operations.cpp
 Compiling src/path.cpp
 Compiling src/path_traits.cpp
 Compiling src/portability.cpp
 Compiling src/unique_path.cpp
 Compiling src/utf8_codecvt_facet.cpp
Linking bin/libcolor_coded_boost_filesystem.a
Building bin/color_coded.so
 Compiling src/main.cpp
Linking bin/color_coded.so
j@w1x8:~/.vim/bundle/color_coded {(master)}
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr  2 2015 17:31:59)
MacOS X (unix) version
Included patches: 1-688
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
-balloon_eval    +float           +mouse_urxvt     -tag_any_white
-browse          +folding         +mouse_xterm     -tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         -gettext         -mzscheme        +textobjects
-clientserver    -hangul_input    +netbeans_intg   +title
+clipboard       +iconv           +path_extra      -toolbar
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con      +lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      -X11
-dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     -xim
+emacs_tags      -mouseshape      -sniff           -xsmp
+eval            +mouse_dec       +startuptime     -xterm_clipboard
+ex_extra        -mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    -xpm
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/local/share/vim"
Compilation: /usr/bin/clang -c -I. -Iproto -DHAVE_CONFIG_H   -F/usr/local/Frameworks -DMACOS_X_UNIX  -Os -w -pipe -march=native -mmacosx-version-min=10.10 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: /usr/bin/clang   -L. -L/Users/travis/.sm/pkg/active/lib -fPIC -Bstatic -fstack-protector -L/usr/local/lib -F/usr/local/Frameworks -Wl,-headerpad_max_install_names -o vim        -lm  -lncurses -liconv -framework Cocoa  -pagezero_size 10000 -image_base 100000000 -L/usr/local/lib -lluajit-5.1 -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -F/usr/local/Cellar/python/2.7.9/Frameworks -framework Python   -lruby-static -framework CoreFoundation -lobjc -L/Users/j/.rvm/rubies/ruby-2.1.1/lib

Same problem - make run (after fresh configure && make) produces SEGV.

Really at a loss what it could be at this point.

jeaye commented 9 years ago

Your vim still has luajit. See it on the last line. When you vim --version | grep jit nothing should be found.

jeaye commented 9 years ago

Please do this:

$ brew uninstall macvim
$ brew install macvim --with-lua --override-system-vim
$ brew linkapps macvim
seclorum commented 9 years ago

Yes, I noticed that - I don't know why its not being rebuilt without luajit .. so I did a complete clean of macvim from my system, after a complete rebuild of macvim - without luajit - it seems the problem has gone away. Apologies - I guess this is related to the fact that vim was originally built on my system with luajit enabled. Still would be good to get it working with luajit somehow, but after all, its good to know the problem seems to be luajit related.

seclorum commented 9 years ago

Since I use cscope, also going to try to install vim --with-cscope too, and see if that interferes with things (probably won't, but just in case) ...

jeaye commented 9 years ago

Absolutely, if this solves your issue, I'll open a ticket about the luajit issues so they can be resolved. I'm thinking you should be good after this; let me know!

seclorum commented 9 years ago

Looks good, will continue to use it from this point on. Thanks for putting up with this luajit nonsense - let me know if I can help you get luajit support sorted out, that would be good (I would like to use other plugins that rely on luajit at some point) ..

jeaye commented 9 years ago

Excellent. I'm glad to hear we at least have it working on your machine. I'll make an issue about luajit now. I appreciate your patience.

seclorum commented 9 years ago

No worries - happy to help. Should've been obvious from the beginning, but thats murphy for you.. ;)