implement ConfigureOp#check_cfg - not tested yet
This commit is contained in:
parent
aba11155a4
commit
ab4ca71ac7
@ -100,6 +100,11 @@ module Rscons
|
|||||||
if cdc = @script.check_d_compiler
|
if cdc = @script.check_d_compiler
|
||||||
co.check_d_compiler(cdc)
|
co.check_d_compiler(cdc)
|
||||||
end
|
end
|
||||||
|
if ccs = @script.check_cfgs
|
||||||
|
ccs.each do |cc|
|
||||||
|
co.check_cfg(*cc)
|
||||||
|
end
|
||||||
|
end
|
||||||
if cchs = @script.check_c_headers
|
if cchs = @script.check_c_headers
|
||||||
cchs.each do |cch|
|
cchs.each do |cch|
|
||||||
co.check_c_header(*cch)
|
co.check_c_header(*cch)
|
||||||
|
@ -98,6 +98,21 @@ module Rscons
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Check for a package or configure program output.
|
||||||
|
def check_cfg(options = {})
|
||||||
|
program = options[:program] || "pkg-config"
|
||||||
|
args = options[:args] || %w[--cflags --libs]
|
||||||
|
command = [program] + args
|
||||||
|
if options[:package]
|
||||||
|
command += [options[:package]]
|
||||||
|
end
|
||||||
|
stdout, _, status = log_and_test_command(command)
|
||||||
|
if status == 0
|
||||||
|
parse_flags(stdout)
|
||||||
|
end
|
||||||
|
common_config_checks(status, options)
|
||||||
|
end
|
||||||
|
|
||||||
# Check for a C header.
|
# Check for a C header.
|
||||||
def check_c_header(header_name, options = {})
|
def check_c_header(header_name, options = {})
|
||||||
$stdout.write("Checking for C header '#{header_name}'... ")
|
$stdout.write("Checking for C header '#{header_name}'... ")
|
||||||
@ -339,6 +354,24 @@ module Rscons
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Merge construction variables into the configured Environment.
|
||||||
|
#
|
||||||
|
# This method does the same thing as {#merge_vars}, except that Array
|
||||||
|
# values in +vars+ are appended to the end of Array construction variables
|
||||||
|
# instead of replacing their contents.
|
||||||
|
#
|
||||||
|
# @param vars [Hash]
|
||||||
|
# Hash containing the variables to merge.
|
||||||
|
def append_vars(vars)
|
||||||
|
vars.each_pair do |key, val|
|
||||||
|
if @env[key].is_a?(Array) and val.is_a?(Array)
|
||||||
|
@env[key] += val
|
||||||
|
else
|
||||||
|
@env[key] = val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Perform processing common to several configure checks.
|
# Perform processing common to several configure checks.
|
||||||
#
|
#
|
||||||
# @param status [Process::Status, Integer]
|
# @param status [Process::Status, Integer]
|
||||||
@ -397,5 +430,82 @@ module Rscons
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Parse compilation flags (from a program like pkg-config for example).
|
||||||
|
#
|
||||||
|
# @param flags [String]
|
||||||
|
# Compilation flags.
|
||||||
|
def parse_flags(flags)
|
||||||
|
vars = {}
|
||||||
|
words = Shellwords.split(flags)
|
||||||
|
skip = false
|
||||||
|
words.each_with_index do |word, i|
|
||||||
|
if skip
|
||||||
|
skip = false
|
||||||
|
next
|
||||||
|
end
|
||||||
|
append = lambda do |var, val|
|
||||||
|
vars[var] ||= []
|
||||||
|
vars[var] += val
|
||||||
|
end
|
||||||
|
handle = lambda do |var, val|
|
||||||
|
if val.nil? or val.empty?
|
||||||
|
val = words[i + 1]
|
||||||
|
skip = true
|
||||||
|
end
|
||||||
|
if val and not val.empty?
|
||||||
|
append[var, [val]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if word == "-arch"
|
||||||
|
if val = words[i + 1]
|
||||||
|
append["CCFLAGS", ["-arch", val]]
|
||||||
|
append["LDFLAGS", ["-arch", val]]
|
||||||
|
end
|
||||||
|
skip = true
|
||||||
|
elsif word =~ /^#{@env["CPPDEFPREFIX"]}(.*)$/
|
||||||
|
handle["CPPDEFINES", $1]
|
||||||
|
elsif word == "-include"
|
||||||
|
if val = words[i + 1]
|
||||||
|
append["CCFLAGS", ["-include", val]]
|
||||||
|
end
|
||||||
|
skip = true
|
||||||
|
elsif word == "-isysroot"
|
||||||
|
if val = words[i + 1]
|
||||||
|
append["CCFLAGS", ["-isysroot", val]]
|
||||||
|
append["LDFLAGS", ["-isysroot", val]]
|
||||||
|
end
|
||||||
|
skip = true
|
||||||
|
elsif word =~ /^#{@env["INCPREFIX"]}(.*)$/
|
||||||
|
handle["CPPPATH", $1]
|
||||||
|
elsif word =~ /^#{@env["LIBLINKPREFIX"]}(.*)$/
|
||||||
|
handle["LIBS", $1]
|
||||||
|
elsif word =~ /^#{@env["LIBDIRPREFIX"]}(.*)$/
|
||||||
|
handle["LIBPATH", $1]
|
||||||
|
elsif word == "-mno-cygwin"
|
||||||
|
append["CCFLAGS", [word]]
|
||||||
|
append["LDFLAGS", [word]]
|
||||||
|
elsif word == "-mwindows"
|
||||||
|
append["LDFLAGS", [word]]
|
||||||
|
elsif word == "-pthread"
|
||||||
|
append["CCFLAGS", [word]]
|
||||||
|
append["LDFLAGS", [word]]
|
||||||
|
elsif word =~ /^-Wa,(.*)$/
|
||||||
|
append["ASFLAGS", $1.split(",")]
|
||||||
|
elsif word =~ /^-Wl,(.*)$/
|
||||||
|
append["LDFLAGS", $1.split(",")]
|
||||||
|
elsif word =~ /^-Wp,(.*)$/
|
||||||
|
append["CPPFLAGS", $1.split(",")]
|
||||||
|
elsif word.start_with?("-")
|
||||||
|
append["CCFLAGS", [word]]
|
||||||
|
elsif word.start_with?("+")
|
||||||
|
append["CCFLAGS", [word]]
|
||||||
|
append["LDFLAGS", [word]]
|
||||||
|
else
|
||||||
|
append["LIBS", [word]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
append_vars(vars)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -42,6 +42,12 @@ module Rscons
|
|||||||
@script.check_d_compiler = args
|
@script.check_d_compiler = args
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Check for a package or configure program output.
|
||||||
|
def check_cfg(*args)
|
||||||
|
@script.check_cfgs ||= []
|
||||||
|
@script.check_cfgs << args
|
||||||
|
end
|
||||||
|
|
||||||
# Check for a C header.
|
# Check for a C header.
|
||||||
def check_c_header(*args)
|
def check_c_header(*args)
|
||||||
@script.check_c_headers ||= []
|
@script.check_c_headers ||= []
|
||||||
@ -89,6 +95,10 @@ module Rscons
|
|||||||
# D compilers to check for.
|
# D compilers to check for.
|
||||||
attr_accessor :check_d_compiler
|
attr_accessor :check_d_compiler
|
||||||
|
|
||||||
|
# @return [Array<Array>]
|
||||||
|
# Configs to check for.
|
||||||
|
attr_accessor :check_cfgs
|
||||||
|
|
||||||
# @return [Array<Array>]
|
# @return [Array<Array>]
|
||||||
# C headers to check for.
|
# C headers to check for.
|
||||||
attr_accessor :check_c_headers
|
attr_accessor :check_c_headers
|
||||||
|
Loading…
x
Reference in New Issue
Block a user