borrow the more flexible extconf from the mysqlplus project
This commit is contained in:
parent
11216551cd
commit
80a8602fbb
|
@ -1,21 +1,80 @@
|
||||||
# encoding: UTF-8
|
# encoding: UTF-8
|
||||||
require 'mkmf'
|
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')
|
GLOB = "{#{dirs.join(',')}}/{mysql_config,mysql_config5}"
|
||||||
raise 'MySQL headers not found, maybe try manually specifying --with-mysql-dir=/path/to/mysql/installation'
|
|
||||||
|
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
|
||||||
|
end
|
||||||
|
|
||||||
|
if have_header('mysql.h') then
|
||||||
|
src = "#include <errmsg.h>\n#include <mysqld_error.h>\n"
|
||||||
|
elsif have_header('mysql/mysql.h') then
|
||||||
|
src = "#include <mysql/errmsg.h>\n#include <mysql/mysqld_error.h>\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 << ' -Wall -Wextra -funroll-loops'
|
||||||
# $CFLAGS << ' -O0 -ggdb3'
|
# $CFLAGS << ' -O0 -ggdb3'
|
||||||
|
|
||||||
if have_library('mysqlclient')
|
|
||||||
if RUBY_VERSION =~ /1.9/
|
|
||||||
$CFLAGS << ' -DRUBY_19_COMPATIBILITY'
|
|
||||||
end
|
|
||||||
|
|
||||||
create_makefile('mysql2_ext')
|
create_makefile('mysql2_ext')
|
||||||
else
|
|
||||||
raise 'libmysql not found, maybe try manually specifying --with-mysql-lib=/path/to/mysql/libs'
|
|
||||||
end
|
|
|
@ -1,10 +1,17 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <ruby.h>
|
#include <ruby.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_MYSQL_H
|
||||||
|
#include <mysql.h>
|
||||||
|
#include <mysql_com.h>
|
||||||
|
#include <errmsg.h>
|
||||||
|
#include <mysqld_error.h>
|
||||||
|
#else
|
||||||
#include <mysql/mysql.h>
|
#include <mysql/mysql.h>
|
||||||
#include <mysql/mysql_com.h>
|
#include <mysql/mysql_com.h>
|
||||||
#include <mysql/errmsg.h>
|
#include <mysql/errmsg.h>
|
||||||
#include <mysql/mysqld_error.h>
|
#include <mysql/mysqld_error.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_RUBY_ENCODING_H
|
#ifdef HAVE_RUBY_ENCODING_H
|
||||||
#include <ruby/encoding.h>
|
#include <ruby/encoding.h>
|
||||||
|
|
Loading…
Reference in New Issue