145 lines
3.1 KiB
Ruby
145 lines
3.1 KiB
Ruby
|
=begin
|
||
|
top-level extconf.rb for Ruby-GNOME2
|
||
|
|
||
|
$Id: extconf.rb,v 1.17 2007/10/22 12:19:17 ktou Exp $
|
||
|
|
||
|
Copyright (C) 2003-2005 Ruby-GNOME2 Project Team
|
||
|
=end
|
||
|
|
||
|
require 'English'
|
||
|
require 'mkmf'
|
||
|
require 'fileutils'
|
||
|
require 'pathname'
|
||
|
|
||
|
priorlibs = [
|
||
|
"glib2",
|
||
|
"gobject-introspection",
|
||
|
"gio2",
|
||
|
"gdk_pixbuf2",
|
||
|
"pango",
|
||
|
"atk",
|
||
|
"gtk2",
|
||
|
"gdk3",
|
||
|
"gtk3",
|
||
|
]
|
||
|
|
||
|
#
|
||
|
# detect sub-directories
|
||
|
#
|
||
|
$ruby = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['RUBY_INSTALL_NAME'] + RbConfig::CONFIG['EXEEXT'])
|
||
|
$ruby = arg_config("--ruby", $ruby)
|
||
|
|
||
|
rm = "rm -f"
|
||
|
if /mswin/ =~ RUBY_PLATFORM
|
||
|
rm = "del"
|
||
|
end
|
||
|
|
||
|
|
||
|
$srcdir = File.dirname(__FILE__)
|
||
|
$topsrcdir = $configure_args["--topsrcdir"] ||= $srcdir
|
||
|
$topdir = $configure_args["--topdir"] ||= Dir.pwd
|
||
|
$strict = $configure_args["--strict"] ? "--strict" : ""
|
||
|
|
||
|
$srcdir = File.expand_path($srcdir)
|
||
|
$topsrcdir = File.expand_path($topsrcdir)
|
||
|
$topdir = File.expand_path($topdir)
|
||
|
|
||
|
subdirs = ARGV.select{|v| /^--/ !~ v}
|
||
|
|
||
|
if subdirs.size == 0
|
||
|
subdirs = Dir.glob($topsrcdir+"/*/extconf.rb")
|
||
|
subdirs.collect! do |subdir|
|
||
|
subdir[0..$topsrcdir.size] = ""
|
||
|
File.dirname(subdir)
|
||
|
end
|
||
|
priorlibs &= subdirs
|
||
|
subdirs -= priorlibs
|
||
|
subdirs = priorlibs + subdirs #Change the order
|
||
|
end
|
||
|
|
||
|
#
|
||
|
# generate sub-directory Makefiles
|
||
|
#
|
||
|
target_modules = []
|
||
|
ignore_modules = []
|
||
|
|
||
|
ruby, *ruby_args = Shellwords.shellwords($ruby)
|
||
|
if ARGV.grep(/\A--ruby=/)
|
||
|
extra_args = ["--ruby=#{$ruby}"] + ARGV.reject {|arg| /\A--ruby=/ =~ arg}
|
||
|
else
|
||
|
extra_args = ARGV.dup
|
||
|
end
|
||
|
|
||
|
subdirs.each do |subdir|
|
||
|
STDERR.puts("#{$0}: Entering directory `#{subdir}'")
|
||
|
FileUtils.mkdir_p(subdir)
|
||
|
topdir = File.join(*([".."] * subdir.split(/\/+/).size))
|
||
|
dir = $topsrcdir
|
||
|
dir = File.join(topdir, dir) unless Pathname.new(dir).absolute?
|
||
|
srcdir = File.join(dir, subdir)
|
||
|
args = ruby_args + ["-C", subdir, File.join(srcdir, "extconf.rb"),
|
||
|
"--topsrcdir=#{dir}", "--topdir=#{topdir}",
|
||
|
*extra_args]
|
||
|
ret = system(ruby, *args)
|
||
|
STDERR.puts("#{$0}: Leaving directory '#{subdir}'")
|
||
|
if ret
|
||
|
target_modules << subdir
|
||
|
else
|
||
|
ignore_modules << subdir
|
||
|
end
|
||
|
end
|
||
|
puts "\n-----"
|
||
|
unless target_modules.empty?
|
||
|
puts "Target libraries: #{target_modules.join(', ')}"
|
||
|
end
|
||
|
unless ignore_modules.empty?
|
||
|
puts "Ignored libraries: #{ignore_modules.join(', ')}"
|
||
|
end
|
||
|
|
||
|
#
|
||
|
# generate top-level Makefile
|
||
|
#
|
||
|
|
||
|
def run_make_in_sub_dir(sub_dir, target)
|
||
|
if /mswin/ =~ RUBY_PLATFORM
|
||
|
" $(COMMAND) '#{sub_dir}' $(MAKE) #{target}"
|
||
|
else
|
||
|
" (cd '#{sub_dir}' && $(MAKE) #{target})"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
File.open("Makefile", "w") do |makefile|
|
||
|
makefile.print(<<-EOM)
|
||
|
TOPSRCDIR = #{$topsrcdir}
|
||
|
COMMAND = #{$ruby} #{$topsrcdir}/exec_make.rb #{$strict}
|
||
|
RM = #{rm}
|
||
|
EOM
|
||
|
|
||
|
["all", "install", "site-install", "clean", "distclean"].each do |target|
|
||
|
makefile.print(<<-EOM)
|
||
|
#{target}:
|
||
|
EOM
|
||
|
target_modules.each do |target_module|
|
||
|
sub_target = "#{target}-#{target_module}"
|
||
|
makefile.print(<<-EOM)
|
||
|
#{target}: #{sub_target}
|
||
|
#{sub_target}:
|
||
|
#{run_make_in_sub_dir(target_module, target)}
|
||
|
|
||
|
EOM
|
||
|
end
|
||
|
end
|
||
|
|
||
|
makefile.print(<<-EOM)
|
||
|
distclean: distclean-toplevel
|
||
|
distclean-toplevel:
|
||
|
$(RM) Makefile mkmf.log
|
||
|
EOM
|
||
|
end
|
||
|
|
||
|
puts "-----"
|
||
|
puts "Done."
|
||
|
|
||
|
$makefile_created = true
|