diff options
Diffstat (limited to 'src/ruby/ext')
-rw-r--r-- | src/ruby/ext/grpc/extconf.rb | 78 |
1 files changed, 33 insertions, 45 deletions
diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb index 59fa87f8c0..105689627b 100644 --- a/src/ruby/ext/grpc/extconf.rb +++ b/src/ruby/ext/grpc/extconf.rb @@ -54,45 +54,6 @@ LIB_DIRS = [ LIBDIR ] -def crash(msg) - print(" extconf failure: #{msg}\n") - exit 1 -end - -def build_local_c(grpc_lib_dir, root, config) - grpc_already_built = File.exist?(File.join(grpc_lib_dir, 'libgrpc.a')) - system("make -C #{root} static_c CONFIG=#{config}") unless grpc_already_built -end - -def local_fallback(msg) - # Check to see if GRPC_ROOT is defined or available - grpc_root = ENV['GRPC_ROOT'] - if grpc_root.nil? - r = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) - grpc_root = r if File.exist?(File.join(r, 'include/grpc/grpc.h')) - end - - # Stop if there is still no grpc_root - crash(msg) if grpc_root.nil? - - grpc_config = ENV['GRPC_CONFIG'] || 'opt' - if ENV.key?('GRPC_LIB_DIR') - grpc_lib_dir = File.join(grpc_root, ENV['GRPC_LIB_DIR']) - else - grpc_lib_dir = File.join(File.join(grpc_root, 'libs'), grpc_config) - end - build_local_c(grpc_lib_dir, grpc_root, grpc_config) - HEADER_DIRS.unshift File.join(grpc_root, 'include') - LIB_DIRS.unshift grpc_lib_dir - - dir_config('grpc', HEADER_DIRS, LIB_DIRS) - have_library('grpc', 'grpc_channel_destroy') - create_makefile('grpc/grpc') - exit 0 -end - -dir_config('grpc', HEADER_DIRS, LIB_DIRS) - $CFLAGS << ' -Wno-implicit-function-declaration ' $CFLAGS << ' -Wno-pointer-sign ' $CFLAGS << ' -Wno-return-type ' @@ -105,12 +66,39 @@ if grpc_pkg_config $CFLAGS << ' ' + `pkg-config --static --cflags grpc`.strip + ' ' $LDFLAGS << ' ' + `pkg-config --static --libs grpc`.strip + ' ' else - $LDFLAGS << ' -lgrpc -lgpr -lz -ldl' + dir_config('grpc', HEADER_DIRS, LIB_DIRS) + raise "libdl not found" unless have_library('dl', 'dlopen') + raise "zlib not found" unless have_library('z', 'inflate') + begin + raise "Fail" unless have_library('gpr', 'gpr_now') + raise "Fail" unless have_library('grpc', 'grpc_channel_destroy') + rescue + # Check to see if GRPC_ROOT is defined or available + grpc_root = ENV['GRPC_ROOT'] + if grpc_root.nil? + r = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + grpc_root = r if File.exist?(File.join(r, 'include/grpc/grpc.h')) + end + + # Stop if there is still no grpc_root + exit 1 if grpc_root.nil? + + grpc_config = ENV['GRPC_CONFIG'] || 'opt' + if ENV.key?('GRPC_LIB_DIR') + grpc_lib_dir = File.join(grpc_root, ENV['GRPC_LIB_DIR']) + else + grpc_lib_dir = File.join(File.join(grpc_root, 'libs'), grpc_config) + end + unless File.exist?(File.join(grpc_lib_dir, 'libgrpc.a')) + print "Building internal gRPC\n" + system("make -C #{root} static_c CONFIG=#{config}") + end + $CFLAGS << ' -I' + File.join(grpc_root, 'include') + $LDFLAGS << ' -L' + grpc_lib_dir + raise "gpr not found" unless have_library('gpr', 'gpr_now') + raise "grpc not found" unless have_library('grpc', 'grpc_channel_destroy') + end end -local_fallback('need gpr lib') unless have_library('gpr', 'gpr_now') -unless have_library('grpc', 'grpc_channel_destroy') - local_fallback('need grpc lib') -end -have_library('grpc', 'grpc_channel_destroy') + create_makefile('grpc/grpc') |