diff --git a/ext/extconf.rb b/ext/extconf.rb index f3a401e..766381e 100644 --- a/ext/extconf.rb +++ b/ext/extconf.rb @@ -1,21 +1,80 @@ # encoding: UTF-8 require 'mkmf' -dir_config('mysql') +# borrowed from mysqlplus +# http://github.com/oldmoe/mysqlplus/blob/master/ext/extconf.rb +dirs = ENV['PATH'].split(':') + %w[ + /opt + /opt/local + /opt/local/mysql + /opt/local/lib/mysql5 + /usr + /usr/local + /usr/local/mysql + /usr/local/mysql-* + /usr/local/lib/mysql5 +].map{|dir| "#{dir}/bin" } -if !have_header('mysql.h') && !have_header('mysql/mysql.h') - raise 'MySQL headers not found, maybe try manually specifying --with-mysql-dir=/path/to/mysql/installation' +GLOB = "{#{dirs.join(',')}}/{mysql_config,mysql_config5}" + +if /mswin32/ =~ RUBY_PLATFORM + inc, lib = dir_config('mysql') + exit 1 unless have_library("libmysql") +elsif mc = (with_config('mysql-config') || Dir[GLOB].first) then + mc = Dir[GLOB].first if mc == true + cflags = `#{mc} --cflags`.chomp + exit 1 if $? != 0 + libs = `#{mc} --libs`.chomp + exit 1 if $? != 0 + $CPPFLAGS += ' ' + cflags + $libs = libs + " " + $libs +else + inc, lib = dir_config('mysql', '/usr/local') + libs = ['m', 'z', 'socket', 'nsl', 'mygcc'] + while not find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") do + exit 1 if libs.empty? + have_library(libs.shift) + end end +if have_header('mysql.h') then + src = "#include \n#include \n" +elsif have_header('mysql/mysql.h') then + src = "#include \n#include \n" +else + exit 1 +end + +# make mysql constant +File.open("conftest.c", "w") do |f| + f.puts src +end +if defined? cpp_command then + cpp = Config.expand(cpp_command('')) +else + cpp = Config.expand sprintf(CPP, $CPPFLAGS, $CFLAGS, '') +end +if /mswin32/ =~ RUBY_PLATFORM && !/-E/.match(cpp) + cpp << " -E" +end +unless system "#{cpp} > confout" then + exit 1 +end +File.unlink "conftest.c" + +error_syms = [] +IO.foreach('confout') do |l| + next unless l =~ /errmsg\.h|mysqld_error\.h/ + fn = l.split(/\"/)[1] + IO.foreach(fn) do |m| + if m =~ /^#define\s+([CE]R_[0-9A-Z_]+)/ then + error_syms << $1 + end + end +end +File.unlink 'confout' + $CFLAGS << ' -Wall -Wextra -funroll-loops' # $CFLAGS << ' -O0 -ggdb3' -if have_library('mysqlclient') - if RUBY_VERSION =~ /1.9/ - $CFLAGS << ' -DRUBY_19_COMPATIBILITY' - end - - create_makefile('mysql2_ext') -else - raise 'libmysql not found, maybe try manually specifying --with-mysql-lib=/path/to/mysql/libs' -end \ No newline at end of file +create_makefile('mysql2_ext') \ No newline at end of file diff --git a/ext/mysql2_ext.h b/ext/mysql2_ext.h index c72c8b9..f366001 100644 --- a/ext/mysql2_ext.h +++ b/ext/mysql2_ext.h @@ -1,10 +1,17 @@ #include #include +#ifdef HAVE_MYSQL_H +#include +#include +#include +#include +#else #include #include #include #include +#endif #ifdef HAVE_RUBY_ENCODING_H #include