2002-12-26 17:59:35 +03:00
|
|
|
#! /usr/local/bin/ruby
|
2012-11-26 23:12:55 +04:00
|
|
|
# -*- mode: ruby; coding: us-ascii -*-
|
2015-12-16 08:31:54 +03:00
|
|
|
# frozen_string_literal: false
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2013-05-20 16:42:02 +04:00
|
|
|
# :stopdoc:
|
2006-09-08 23:48:22 +04:00
|
|
|
$extension = nil
|
|
|
|
$extstatic = nil
|
2002-09-08 13:08:15 +04:00
|
|
|
$force_static = nil
|
|
|
|
$destdir = nil
|
2006-09-08 23:48:22 +04:00
|
|
|
$dryrun = false
|
2002-09-08 13:08:15 +04:00
|
|
|
$nodynamic = nil
|
2012-05-16 09:39:06 +04:00
|
|
|
$extobjs = []
|
2006-09-08 23:48:22 +04:00
|
|
|
$extflags = ""
|
|
|
|
$extlibs = nil
|
|
|
|
$extpath = nil
|
2002-12-31 15:31:12 +03:00
|
|
|
$message = nil
|
2009-02-24 13:01:08 +03:00
|
|
|
$command_output = nil
|
2017-01-28 08:31:25 +03:00
|
|
|
$subconfigure = false
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2003-01-05 23:11:20 +03:00
|
|
|
$progname = $0
|
|
|
|
alias $PROGRAM_NAME $0
|
|
|
|
alias $0 $progname
|
|
|
|
|
2002-09-08 13:08:15 +04:00
|
|
|
$extlist = []
|
|
|
|
|
2012-05-16 09:39:06 +04:00
|
|
|
DUMMY_SIGNATURE = "***DUMMY MAKEFILE***"
|
|
|
|
|
2005-05-13 18:44:59 +04:00
|
|
|
srcdir = File.dirname(File.dirname(__FILE__))
|
2008-02-26 21:56:00 +03:00
|
|
|
unless defined?(CROSS_COMPILING) and CROSS_COMPILING
|
|
|
|
$:.replace([File.expand_path("lib", srcdir), Dir.pwd])
|
|
|
|
end
|
|
|
|
$:.unshift(srcdir)
|
|
|
|
require 'rbconfig'
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2004-02-21 08:33:24 +03:00
|
|
|
$topdir = "."
|
2002-09-08 16:59:08 +04:00
|
|
|
$top_srcdir = srcdir
|
2004-03-18 12:50:14 +03:00
|
|
|
|
2008-02-26 21:56:00 +03:00
|
|
|
$" << "mkmf.rb"
|
|
|
|
load File.expand_path("lib/mkmf.rb", srcdir)
|
2004-03-18 12:50:14 +03:00
|
|
|
require 'optparse/shellwords'
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2012-11-26 23:12:55 +04:00
|
|
|
if defined?(File::NULL)
|
|
|
|
@null = File::NULL
|
|
|
|
elsif !File.chardev?(@null = "/dev/null")
|
|
|
|
@null = "nul"
|
|
|
|
end
|
|
|
|
|
2011-07-03 18:44:59 +04:00
|
|
|
def verbose?
|
2012-05-16 09:39:06 +04:00
|
|
|
$mflags.defined?("V") == "1"
|
|
|
|
end
|
|
|
|
|
|
|
|
def system(*args)
|
|
|
|
if verbose?
|
|
|
|
if args.size == 1
|
|
|
|
puts args
|
|
|
|
else
|
2012-05-20 18:00:13 +04:00
|
|
|
puts Shellwords.join(args)
|
2012-05-16 09:39:06 +04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
super
|
2011-07-03 18:44:59 +04:00
|
|
|
end
|
|
|
|
|
2014-04-15 14:29:01 +04:00
|
|
|
def atomic_write_open(filename)
|
|
|
|
filename_new = filename + ".new.#$$"
|
|
|
|
open(filename_new, "wb") do |f|
|
|
|
|
yield f
|
|
|
|
end
|
|
|
|
if File.binread(filename_new) != (File.binread(filename) rescue nil)
|
|
|
|
File.rename(filename_new, filename)
|
|
|
|
else
|
|
|
|
File.unlink(filename_new)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2005-02-10 06:09:27 +03:00
|
|
|
def extract_makefile(makefile, keep = true)
|
2005-02-06 17:51:44 +03:00
|
|
|
m = File.read(makefile)
|
2015-01-21 07:22:07 +03:00
|
|
|
s = m[/^CLEANFILES[ \t]*=[ \t](.*)/, 1] and $cleanfiles = s.split
|
|
|
|
s = m[/^DISTCLEANFILES[ \t]*=[ \t](.*)/, 1] and $distcleanfiles = s.split
|
2016-09-24 16:26:21 +03:00
|
|
|
s = m[/^EXTSO[ \t]*=[ \t](.*)/, 1] and $extso = s.split
|
2005-02-06 17:51:44 +03:00
|
|
|
if !(target = m[/^TARGET[ \t]*=[ \t]*(\S*)/, 1])
|
2005-02-10 06:09:27 +03:00
|
|
|
return keep
|
2005-02-06 17:51:44 +03:00
|
|
|
end
|
|
|
|
installrb = {}
|
2016-01-07 06:06:58 +03:00
|
|
|
m.scan(/^(?:do-)?install-rb-default:.*[ \t](\S+)(?:[ \t].*)?\n\1:[ \t]*(\S+)/) {installrb[$2] = $1}
|
2005-02-06 17:51:44 +03:00
|
|
|
oldrb = installrb.keys.sort
|
|
|
|
newrb = install_rb(nil, "").collect {|d, *f| f}.flatten.sort
|
|
|
|
if target_prefix = m[/^target_prefix[ \t]*=[ \t]*\/(.*)/, 1]
|
|
|
|
target = "#{target_prefix}/#{target}"
|
2005-02-19 04:43:58 +03:00
|
|
|
end
|
|
|
|
unless oldrb == newrb
|
|
|
|
if $extout
|
|
|
|
newrb.each {|f| installrb.delete(f)}
|
2005-03-28 15:53:52 +04:00
|
|
|
unless installrb.empty?
|
|
|
|
config = CONFIG.dup
|
|
|
|
install_dirs(target_prefix).each {|var, val| config[var] = val}
|
2010-11-17 13:13:25 +03:00
|
|
|
FileUtils.rm_f(installrb.values.collect {|f| RbConfig.expand(f, config)},
|
2011-07-03 18:44:59 +04:00
|
|
|
:verbose => verbose?)
|
2005-03-28 15:53:52 +04:00
|
|
|
end
|
2005-02-10 06:09:27 +03:00
|
|
|
end
|
2005-02-19 04:43:58 +03:00
|
|
|
return false
|
2005-02-06 17:51:44 +03:00
|
|
|
end
|
2011-12-08 18:28:28 +04:00
|
|
|
srcs = Dir[File.join($srcdir, "*.{#{SRC_EXT.join(%q{,})}}")].map {|fn| File.basename(fn)}.sort
|
2011-11-20 18:22:44 +04:00
|
|
|
if !srcs.empty?
|
|
|
|
old_srcs = m[/^ORIG_SRCS[ \t]*=[ \t](.*)/, 1] or return false
|
2017-01-20 13:59:47 +03:00
|
|
|
(old_srcs.split - srcs).empty? or return false
|
2011-11-20 18:22:44 +04:00
|
|
|
end
|
2005-02-06 17:51:44 +03:00
|
|
|
$target = target
|
2006-05-26 03:44:08 +04:00
|
|
|
$extconf_h = m[/^RUBY_EXTCONF_H[ \t]*=[ \t]*(\S+)/, 1]
|
2009-12-30 19:58:51 +03:00
|
|
|
if $static.nil?
|
|
|
|
$static ||= m[/^EXTSTATIC[ \t]*=[ \t]*(\S+)/, 1] || false
|
|
|
|
/^STATIC_LIB[ \t]*=[ \t]*\S+/ =~ m or $static = false
|
|
|
|
end
|
2005-02-06 17:51:44 +03:00
|
|
|
$preload = Shellwords.shellwords(m[/^preload[ \t]*=[ \t]*(.*)/, 1] || "")
|
2013-05-23 19:18:05 +04:00
|
|
|
if dldflags = m[/^dldflags[ \t]*=[ \t]*(.*)/, 1] and !$DLDFLAGS.include?(dldflags)
|
|
|
|
$DLDFLAGS += " " + dldflags
|
|
|
|
end
|
2005-02-06 17:51:44 +03:00
|
|
|
if s = m[/^LIBS[ \t]*=[ \t]*(.*)/, 1]
|
|
|
|
s.sub!(/^#{Regexp.quote($LIBRUBYARG)} */, "")
|
|
|
|
s.sub!(/ *#{Regexp.quote($LIBS)}$/, "")
|
|
|
|
$libs = s
|
|
|
|
end
|
2006-09-08 23:48:22 +04:00
|
|
|
$objs = (m[/^OBJS[ \t]*=[ \t](.*)/, 1] || "").split
|
|
|
|
$srcs = (m[/^SRCS[ \t]*=[ \t](.*)/, 1] || "").split
|
2016-07-06 08:44:58 +03:00
|
|
|
$headers = (m[/^LOCAL_HDRS[ \t]*=[ \t](.*)/, 1] || "").split
|
2005-02-06 17:51:44 +03:00
|
|
|
$LOCAL_LIBS = m[/^LOCAL_LIBS[ \t]*=[ \t]*(.*)/, 1] || ""
|
|
|
|
$LIBPATH = Shellwords.shellwords(m[/^libpath[ \t]*=[ \t]*(.*)/, 1] || "") - %w[$(libdir) $(topdir)]
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
2017-01-27 11:05:06 +03:00
|
|
|
def extmake(target, basedir = 'ext', maybestatic = true)
|
2004-02-17 13:34:31 +03:00
|
|
|
FileUtils.mkpath target unless File.directory?(target)
|
2004-02-21 08:33:24 +03:00
|
|
|
begin
|
2014-05-09 09:52:59 +04:00
|
|
|
# don't build if parent library isn't build
|
|
|
|
parent = true
|
|
|
|
d = target
|
|
|
|
until (d = File.dirname(d)) == '.'
|
2016-08-01 15:39:54 +03:00
|
|
|
if File.exist?("#{$top_srcdir}/#{basedir}/#{d}/extconf.rb")
|
2014-05-09 09:52:59 +04:00
|
|
|
parent = (/^all:\s*install/ =~ IO.read("#{d}/Makefile") rescue false)
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2004-02-21 08:33:24 +03:00
|
|
|
dir = Dir.pwd
|
|
|
|
FileUtils.mkpath target unless File.directory?(target)
|
|
|
|
Dir.chdir target
|
|
|
|
top_srcdir = $top_srcdir
|
|
|
|
topdir = $topdir
|
2007-06-10 07:06:15 +04:00
|
|
|
hdrdir = $hdrdir
|
2004-02-21 08:33:24 +03:00
|
|
|
prefix = "../" * (target.count("/")+1)
|
2007-06-10 07:06:15 +04:00
|
|
|
$top_srcdir = relative_from(top_srcdir, prefix)
|
|
|
|
$hdrdir = relative_from(hdrdir, prefix)
|
2004-02-21 08:33:24 +03:00
|
|
|
$topdir = prefix + $topdir
|
2002-09-08 13:08:15 +04:00
|
|
|
$target = target
|
|
|
|
$mdir = target
|
2016-08-01 15:39:54 +03:00
|
|
|
$srcdir = File.join($top_srcdir, basedir, $mdir)
|
2003-08-12 06:12:48 +04:00
|
|
|
$preload = nil
|
2009-03-03 10:25:50 +03:00
|
|
|
$objs = []
|
|
|
|
$srcs = []
|
2016-09-24 16:26:21 +03:00
|
|
|
$extso = []
|
2003-08-16 18:58:34 +04:00
|
|
|
makefile = "./Makefile"
|
2013-05-01 11:17:53 +04:00
|
|
|
static = $static
|
|
|
|
$static = nil if noinstall = File.fnmatch?("-*", target)
|
2014-05-09 09:52:59 +04:00
|
|
|
ok = parent && File.exist?(makefile)
|
2017-01-28 08:31:25 +03:00
|
|
|
if parent
|
2007-08-03 06:05:57 +04:00
|
|
|
rbconfig0 = RbConfig::CONFIG
|
|
|
|
mkconfig0 = CONFIG
|
|
|
|
rbconfig = {
|
|
|
|
"hdrdir" => $hdrdir,
|
|
|
|
"srcdir" => $srcdir,
|
|
|
|
"topdir" => $topdir,
|
|
|
|
}
|
|
|
|
mkconfig = {
|
|
|
|
"hdrdir" => ($hdrdir == top_srcdir) ? top_srcdir : "$(top_srcdir)/include",
|
2016-08-01 15:39:54 +03:00
|
|
|
"srcdir" => "$(top_srcdir)/#{basedir}/#{$mdir}",
|
2007-08-03 06:05:57 +04:00
|
|
|
"topdir" => $topdir,
|
|
|
|
}
|
|
|
|
rbconfig0.each_pair {|key, val| rbconfig[key] ||= val.dup}
|
|
|
|
mkconfig0.each_pair {|key, val| mkconfig[key] ||= val.dup}
|
|
|
|
RbConfig.module_eval {
|
|
|
|
remove_const(:CONFIG)
|
|
|
|
const_set(:CONFIG, rbconfig)
|
|
|
|
remove_const(:MAKEFILE_CONFIG)
|
|
|
|
const_set(:MAKEFILE_CONFIG, mkconfig)
|
|
|
|
}
|
2011-11-30 04:57:24 +04:00
|
|
|
MakeMakefile.class_eval {
|
2007-08-03 06:05:57 +04:00
|
|
|
remove_const(:CONFIG)
|
|
|
|
const_set(:CONFIG, mkconfig)
|
|
|
|
}
|
2005-02-06 17:51:44 +03:00
|
|
|
begin
|
2006-05-26 03:44:08 +04:00
|
|
|
$extconf_h = nil
|
|
|
|
ok &&= extract_makefile(makefile)
|
2009-03-03 10:25:50 +03:00
|
|
|
old_objs = $objs
|
2015-01-21 07:22:07 +03:00
|
|
|
old_cleanfiles = $distcleanfiles | $cleanfiles
|
2009-01-04 05:11:33 +03:00
|
|
|
conf = ["#{$srcdir}/makefile.rb", "#{$srcdir}/extconf.rb"].find {|f| File.exist?(f)}
|
2011-11-20 18:22:44 +04:00
|
|
|
if (!ok || ($extconf_h && !File.exist?($extconf_h)) ||
|
2005-02-06 17:51:44 +03:00
|
|
|
!(t = modified?(makefile, MTIMES)) ||
|
2009-01-04 05:11:33 +03:00
|
|
|
[conf, "#{$srcdir}/depend"].any? {|f| modified?(f, [t])})
|
2005-02-06 17:51:44 +03:00
|
|
|
then
|
2005-02-10 06:09:27 +03:00
|
|
|
ok = false
|
2017-01-28 08:31:25 +03:00
|
|
|
if verbose?
|
|
|
|
print "#{conf}\n" if conf
|
|
|
|
else
|
|
|
|
print "#{$message} #{target}\n"
|
2011-03-08 03:33:05 +03:00
|
|
|
end
|
2017-01-28 08:31:25 +03:00
|
|
|
$stdout.flush
|
2005-02-06 17:51:44 +03:00
|
|
|
init_mkmf
|
|
|
|
Logging::logfile 'mkmf.log'
|
|
|
|
rm_f makefile
|
2009-01-04 05:11:33 +03:00
|
|
|
if conf
|
2013-04-03 14:00:49 +04:00
|
|
|
Logging.open do
|
|
|
|
unless verbose?
|
|
|
|
$stderr.reopen($stdout.reopen(@null))
|
|
|
|
end
|
2011-07-03 18:44:59 +04:00
|
|
|
load $0 = conf
|
|
|
|
end
|
2003-01-05 11:50:21 +03:00
|
|
|
else
|
2016-08-31 09:36:12 +03:00
|
|
|
create_makefile(target)
|
2003-01-05 11:50:21 +03:00
|
|
|
end
|
2006-05-24 20:43:45 +04:00
|
|
|
$defs << "-DRUBY_EXPORT" if $static
|
2005-02-06 17:51:44 +03:00
|
|
|
ok = File.exist?(makefile)
|
2004-04-02 13:00:12 +04:00
|
|
|
end
|
2005-02-06 17:51:44 +03:00
|
|
|
rescue SystemExit
|
|
|
|
# ignore
|
2012-05-18 10:19:25 +04:00
|
|
|
rescue => error
|
|
|
|
ok = false
|
2005-02-06 17:51:44 +03:00
|
|
|
ensure
|
|
|
|
rm_f "conftest*"
|
|
|
|
$0 = $PROGRAM_NAME
|
|
|
|
end
|
|
|
|
end
|
2014-05-18 10:08:54 +04:00
|
|
|
ok &&= File.open(makefile){|f| s = f.gets and !s[DUMMY_SIGNATURE]}
|
2015-09-04 06:54:23 +03:00
|
|
|
unless ok
|
2016-08-19 07:38:20 +03:00
|
|
|
mf = ["# #{DUMMY_SIGNATURE}\n", *dummy_makefile(CONFIG["srcdir"])].join("")
|
2014-04-15 14:29:01 +04:00
|
|
|
atomic_write_open(makefile) do |f|
|
2016-08-19 07:38:20 +03:00
|
|
|
f.print(mf)
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
2012-05-18 10:19:25 +04:00
|
|
|
|
2015-07-10 04:22:55 +03:00
|
|
|
return true if !error and target.start_with?("-")
|
|
|
|
|
2017-04-19 17:05:26 +03:00
|
|
|
message = nil
|
|
|
|
if error
|
|
|
|
loc = error.backtrace_locations[0]
|
|
|
|
message = "#{loc.absolute_path}:#{loc.lineno}: #{error.message}"
|
|
|
|
if Logging.log_opened?
|
|
|
|
Logging::message("#{message}\n\t#{error.backtrace.join("\n\t")}\n")
|
|
|
|
end
|
2012-05-18 10:19:25 +04:00
|
|
|
end
|
2016-05-16 03:16:13 +03:00
|
|
|
|
2017-04-19 17:05:26 +03:00
|
|
|
return [parent, message]
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
2016-08-07 13:04:41 +03:00
|
|
|
args = $mflags
|
2011-03-08 03:33:05 +03:00
|
|
|
unless $destdir.to_s.empty? or $mflags.defined?("DESTDIR")
|
2016-08-07 13:04:41 +03:00
|
|
|
args += ["DESTDIR=" + relative_from($destdir, "../"+prefix)]
|
2005-04-17 17:57:52 +04:00
|
|
|
end
|
2013-05-01 11:17:53 +04:00
|
|
|
if $static and ok and !$objs.empty? and !noinstall
|
2017-01-28 08:31:25 +03:00
|
|
|
args += ["static"]
|
2016-08-15 05:46:53 +03:00
|
|
|
$extlist.push [(maybestatic ? $static : false), target, $target, $preload]
|
2003-08-16 18:58:34 +04:00
|
|
|
end
|
2015-01-21 07:22:07 +03:00
|
|
|
FileUtils.rm_f(old_cleanfiles - $distcleanfiles - $cleanfiles)
|
2009-03-03 11:10:10 +03:00
|
|
|
FileUtils.rm_f(old_objs - $objs)
|
2002-09-08 13:08:15 +04:00
|
|
|
if $static
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
$extflags ||= ""
|
2003-08-12 11:55:14 +04:00
|
|
|
$extlibs ||= []
|
2003-08-06 07:11:14 +04:00
|
|
|
$extpath ||= []
|
2004-01-19 07:10:53 +03:00
|
|
|
unless $mswin
|
2012-09-06 20:21:57 +04:00
|
|
|
$extflags = split_libs($extflags, $DLDFLAGS, $LDFLAGS).uniq.join(" ")
|
2004-01-19 07:10:53 +03:00
|
|
|
end
|
2014-12-23 16:05:47 +03:00
|
|
|
$extlibs = merge_libs($extlibs, split_libs($libs, $LOCAL_LIBS).map {|lib| lib.sub(/\A\.\//, "ext/#{target}/")})
|
2003-08-06 07:11:14 +04:00
|
|
|
$extpath |= $LIBPATH
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
2004-02-21 08:33:24 +03:00
|
|
|
ensure
|
2013-04-03 15:28:10 +04:00
|
|
|
Logging::log_close
|
2014-05-09 09:52:59 +04:00
|
|
|
if rbconfig0
|
2007-08-03 06:05:57 +04:00
|
|
|
RbConfig.module_eval {
|
|
|
|
remove_const(:CONFIG)
|
|
|
|
const_set(:CONFIG, rbconfig0)
|
|
|
|
remove_const(:MAKEFILE_CONFIG)
|
|
|
|
const_set(:MAKEFILE_CONFIG, mkconfig0)
|
|
|
|
}
|
2014-05-09 09:52:59 +04:00
|
|
|
end
|
|
|
|
if mkconfig0
|
2011-11-30 04:57:24 +04:00
|
|
|
MakeMakefile.class_eval {
|
2007-08-03 06:05:57 +04:00
|
|
|
remove_const(:CONFIG)
|
|
|
|
const_set(:CONFIG, mkconfig0)
|
|
|
|
}
|
|
|
|
end
|
2007-06-10 07:06:15 +04:00
|
|
|
$top_srcdir = top_srcdir
|
2004-02-21 08:33:24 +03:00
|
|
|
$topdir = topdir
|
2007-06-10 07:06:15 +04:00
|
|
|
$hdrdir = hdrdir
|
2013-05-01 11:17:53 +04:00
|
|
|
$static = static
|
2004-02-21 08:33:24 +03:00
|
|
|
Dir.chdir dir
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
2004-02-17 13:34:31 +03:00
|
|
|
begin
|
|
|
|
Dir.rmdir target
|
|
|
|
target = File.dirname(target)
|
|
|
|
rescue SystemCallError
|
|
|
|
break
|
|
|
|
end while true
|
2002-11-13 10:30:24 +03:00
|
|
|
true
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
|
|
|
|
2003-01-25 21:59:34 +03:00
|
|
|
def parse_args()
|
2004-02-22 06:58:44 +03:00
|
|
|
$mflags = []
|
2010-12-02 04:46:42 +03:00
|
|
|
$makeflags = [] # for make command to build ruby, so quoted
|
2004-02-22 06:58:44 +03:00
|
|
|
|
2005-02-06 17:51:44 +03:00
|
|
|
$optparser ||= OptionParser.new do |opts|
|
2004-02-22 06:58:44 +03:00
|
|
|
opts.on('-n') {$dryrun = true}
|
2006-06-21 12:08:36 +04:00
|
|
|
opts.on('--[no-]extension [EXTS]', Array) do |v|
|
2004-02-22 06:58:44 +03:00
|
|
|
$extension = (v == false ? [] : v)
|
2004-02-09 11:48:55 +03:00
|
|
|
end
|
2006-06-21 12:08:36 +04:00
|
|
|
opts.on('--[no-]extstatic [STATIC]', Array) do |v|
|
2004-02-22 06:58:44 +03:00
|
|
|
if ($extstatic = v) == false
|
|
|
|
$extstatic = []
|
|
|
|
elsif v
|
2005-11-16 17:25:53 +03:00
|
|
|
$force_static = true if $extstatic.delete("static")
|
2004-02-22 06:58:44 +03:00
|
|
|
$extstatic = nil if $extstatic.empty?
|
|
|
|
end
|
2004-02-09 11:48:55 +03:00
|
|
|
end
|
2004-02-22 06:58:44 +03:00
|
|
|
opts.on('--dest-dir=DIR') do |v|
|
|
|
|
$destdir = v
|
|
|
|
end
|
|
|
|
opts.on('--extout=DIR') do |v|
|
|
|
|
$extout = (v unless v.empty?)
|
|
|
|
end
|
|
|
|
opts.on('--make=MAKE') do |v|
|
|
|
|
$make = v || 'make'
|
|
|
|
end
|
2006-06-21 12:08:36 +04:00
|
|
|
opts.on('--make-flags=FLAGS', '--mflags', Shellwords) do |v|
|
2005-11-16 17:25:53 +03:00
|
|
|
v.grep(/\A([-\w]+)=(.*)/) {$configure_args["--#{$1}"] = $2}
|
2004-02-22 06:58:44 +03:00
|
|
|
if arg = v.first
|
|
|
|
arg.insert(0, '-') if /\A[^-][^=]*\Z/ =~ arg
|
|
|
|
end
|
2010-01-26 15:34:51 +03:00
|
|
|
$makeflags.concat(v.reject {|arg2| /\AMINIRUBY=/ =~ arg2}.quote)
|
2004-02-22 06:58:44 +03:00
|
|
|
$mflags.concat(v)
|
|
|
|
end
|
|
|
|
opts.on('--message [MESSAGE]', String) do |v|
|
|
|
|
$message = v
|
|
|
|
end
|
2009-02-24 13:01:08 +03:00
|
|
|
opts.on('--command-output=FILE', String) do |v|
|
|
|
|
$command_output = v
|
|
|
|
end
|
2014-07-03 07:38:13 +04:00
|
|
|
opts.on('--gnumake=yes|no', true) do |v|
|
|
|
|
$gnumake = v
|
|
|
|
end
|
2015-11-18 18:55:39 +03:00
|
|
|
opts.on('--extflags=FLAGS') do |v|
|
|
|
|
$extflags = v || ""
|
|
|
|
end
|
2005-02-06 17:51:44 +03:00
|
|
|
end
|
|
|
|
begin
|
|
|
|
$optparser.parse!(ARGV)
|
|
|
|
rescue OptionParser::InvalidOption => e
|
|
|
|
retry if /^--/ =~ e.args[0]
|
|
|
|
$optparser.warn(e)
|
2006-10-09 18:41:24 +04:00
|
|
|
abort $optparser.to_s
|
2005-02-06 17:51:44 +03:00
|
|
|
end
|
2017-01-28 08:23:39 +03:00
|
|
|
$command_output or abort "--command-output option is mandatory"
|
2002-11-04 00:42:14 +03:00
|
|
|
|
2004-02-22 06:58:44 +03:00
|
|
|
$destdir ||= ''
|
2003-01-27 22:48:02 +03:00
|
|
|
|
2003-01-25 21:59:34 +03:00
|
|
|
$make, *rest = Shellwords.shellwords($make)
|
|
|
|
$mflags.unshift(*rest) unless rest.empty?
|
2002-11-04 00:42:14 +03:00
|
|
|
|
2003-01-26 11:56:01 +03:00
|
|
|
def $mflags.set?(flag)
|
2008-02-26 21:56:00 +03:00
|
|
|
grep(/\A-(?!-).*#{flag.chr}/i) { return true }
|
2003-01-27 22:48:02 +03:00
|
|
|
false
|
2003-01-26 11:56:01 +03:00
|
|
|
end
|
2004-02-09 11:48:55 +03:00
|
|
|
def $mflags.defined?(var)
|
|
|
|
grep(/\A#{var}=(.*)/) {return $1}
|
2005-03-02 13:53:53 +03:00
|
|
|
false
|
2004-02-09 11:48:55 +03:00
|
|
|
end
|
2003-01-26 11:56:01 +03:00
|
|
|
|
|
|
|
if $mflags.set?(?n)
|
|
|
|
$dryrun = true
|
|
|
|
else
|
2003-02-10 14:59:26 +03:00
|
|
|
$mflags.unshift '-n' if $dryrun
|
2003-01-26 11:56:01 +03:00
|
|
|
end
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
|
2003-01-26 11:56:01 +03:00
|
|
|
$continue = $mflags.set?(?k)
|
2004-02-09 12:20:52 +03:00
|
|
|
if $extout
|
2004-02-17 06:12:53 +03:00
|
|
|
$extout = '$(topdir)/'+$extout
|
2007-06-10 07:06:15 +04:00
|
|
|
RbConfig::CONFIG["extout"] = CONFIG["extout"] = $extout
|
2004-02-17 13:34:31 +03:00
|
|
|
$extout_prefix = $extout ? "$(extout)$(target_prefix)/" : ""
|
2007-06-10 10:09:40 +04:00
|
|
|
$mflags << "extout=#$extout" << "extout_prefix=#$extout_prefix"
|
2004-02-09 11:48:55 +03:00
|
|
|
end
|
2003-01-25 21:59:34 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
parse_args()
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
|
2004-02-09 11:48:55 +03:00
|
|
|
if target = ARGV.shift and /^[a-z-]+$/ =~ target
|
|
|
|
$mflags.push(target)
|
|
|
|
case target
|
2017-01-28 08:31:25 +03:00
|
|
|
when /^(dist|real)?(clean)$/, /^install\b/
|
|
|
|
abort "#{target} is obsolete"
|
2011-03-08 03:33:05 +03:00
|
|
|
when /configure/
|
2017-01-28 08:31:25 +03:00
|
|
|
$subconfigure = !ARGV.empty?
|
2004-02-09 11:48:55 +03:00
|
|
|
end
|
|
|
|
end
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
unless $message
|
2004-02-09 11:48:55 +03:00
|
|
|
if target
|
2011-03-08 03:33:05 +03:00
|
|
|
$message = target.sub(/^(\w+?)e?\b/, '\1ing').tr('-', ' ')
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
else
|
|
|
|
$message = "compiling"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
EXEEXT = CONFIG['EXEEXT']
|
2002-12-31 15:31:12 +03:00
|
|
|
if CROSS_COMPILING
|
2008-02-26 21:56:00 +03:00
|
|
|
$ruby = $mflags.defined?("MINIRUBY") || CONFIG['MINIRUBY']
|
2006-05-17 19:42:21 +04:00
|
|
|
elsif sep = config_string('BUILD_FILE_SEPARATOR')
|
|
|
|
$ruby = "$(topdir:/=#{sep})#{sep}miniruby" + EXEEXT
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
else
|
|
|
|
$ruby = '$(topdir)/miniruby' + EXEEXT
|
|
|
|
end
|
2017-04-21 06:01:12 +03:00
|
|
|
$ruby = [$ruby]
|
|
|
|
$ruby << "-I'$(topdir)'"
|
2008-02-26 21:56:00 +03:00
|
|
|
unless CROSS_COMPILING
|
2017-04-21 06:01:12 +03:00
|
|
|
$ruby << "-I'$(top_srcdir)/lib'"
|
|
|
|
$ruby << "-I'$(extout)/$(arch)'" << "-I'$(extout)/common'" if $extout
|
2008-02-26 21:56:00 +03:00
|
|
|
ENV["RUBYLIB"] = "-"
|
|
|
|
end
|
2017-04-21 06:01:12 +03:00
|
|
|
topruby = $ruby
|
|
|
|
$ruby = topruby.join(' ')
|
2008-02-26 21:56:00 +03:00
|
|
|
$mflags << "ruby=#$ruby"
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2004-01-26 05:35:30 +03:00
|
|
|
MTIMES = [__FILE__, 'rbconfig.rb', srcdir+'/lib/mkmf.rb'].collect {|f| File.mtime(f)}
|
2002-09-08 13:08:15 +04:00
|
|
|
|
|
|
|
# get static-link modules
|
|
|
|
$static_ext = {}
|
2004-02-09 11:48:55 +03:00
|
|
|
if $extstatic
|
2006-10-09 18:41:24 +04:00
|
|
|
$extstatic.each do |t|
|
|
|
|
target = t
|
2009-02-02 02:12:52 +03:00
|
|
|
target = target.downcase if File::FNM_SYSCASE.nonzero?
|
2004-02-09 11:48:55 +03:00
|
|
|
$static_ext[target] = $static_ext.size
|
|
|
|
end
|
|
|
|
end
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
for dir in ["ext", File::join($top_srcdir, "ext")]
|
|
|
|
setup = File::join(dir, CONFIG['setup'])
|
2002-09-08 13:08:15 +04:00
|
|
|
if File.file? setup
|
2005-11-16 17:25:53 +03:00
|
|
|
f = open(setup)
|
2002-09-08 13:08:15 +04:00
|
|
|
while line = f.gets()
|
|
|
|
line.chomp!
|
|
|
|
line.sub!(/#.*$/, '')
|
|
|
|
next if /^\s*$/ =~ line
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
target, opt = line.split(nil, 3)
|
|
|
|
if target == 'option'
|
|
|
|
case opt
|
|
|
|
when 'nodynamic'
|
|
|
|
$nodynamic = true
|
|
|
|
end
|
2002-09-08 13:08:15 +04:00
|
|
|
next
|
|
|
|
end
|
2009-02-02 02:12:52 +03:00
|
|
|
target = target.downcase if File::FNM_SYSCASE.nonzero?
|
2004-01-08 01:06:38 +03:00
|
|
|
$static_ext[target] = $static_ext.size
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
MTIMES << f.mtime
|
2002-09-08 13:08:15 +04:00
|
|
|
$setup = setup
|
|
|
|
f.close
|
|
|
|
break
|
|
|
|
end
|
2004-02-09 11:48:55 +03:00
|
|
|
end unless $extstatic
|
|
|
|
|
2017-01-26 11:19:34 +03:00
|
|
|
@gemname = nil
|
|
|
|
if ARGV[0]
|
|
|
|
ext_prefix, exts = ARGV.shift.split('/', 2)
|
|
|
|
$extension = [exts] if exts
|
|
|
|
@gemname = exts if ext_prefix == 'gems'
|
|
|
|
end
|
|
|
|
ext_prefix = "#{$top_srcdir}/#{ext_prefix || 'ext'}"
|
2004-02-09 11:48:55 +03:00
|
|
|
exts = $static_ext.sort_by {|t, i| i}.collect {|t, i| t}
|
2015-01-11 07:44:09 +03:00
|
|
|
default_exclude_exts =
|
2016-02-19 05:09:06 +03:00
|
|
|
case
|
|
|
|
when $cygwin
|
|
|
|
%w''
|
|
|
|
when $mswin, $mingw
|
2015-01-11 10:35:13 +03:00
|
|
|
%w'pty syslog'
|
2015-01-11 07:44:09 +03:00
|
|
|
else
|
|
|
|
%w'*win32*'
|
|
|
|
end
|
2017-04-20 11:13:16 +03:00
|
|
|
mandatory_exts = {}
|
2015-01-11 07:44:09 +03:00
|
|
|
withes, withouts = [["--with", nil], ["--without", default_exclude_exts]].collect {|w, d|
|
2012-02-25 11:08:47 +04:00
|
|
|
if !(w = %w[-extensions -ext].collect {|o|arg_config(w+o)}).any?
|
2015-06-19 01:58:14 +03:00
|
|
|
d ? proc {|c1| d.any?(&c1)} : proc {true}
|
2010-01-19 08:29:18 +03:00
|
|
|
elsif (w = w.grep(String)).empty?
|
|
|
|
proc {true}
|
2008-06-10 15:13:58 +04:00
|
|
|
else
|
2015-01-11 07:44:09 +03:00
|
|
|
w = w.collect {|o| o.split(/,/)}.flatten
|
2017-04-20 11:13:16 +03:00
|
|
|
w.collect! {|o| o == '+' ? d : o}.flatten!
|
2015-01-11 07:44:09 +03:00
|
|
|
proc {|c1| w.any?(&c1)}
|
2008-06-10 15:13:58 +04:00
|
|
|
end
|
2010-01-19 08:29:18 +03:00
|
|
|
}
|
|
|
|
cond = proc {|ext, *|
|
2017-04-20 11:13:16 +03:00
|
|
|
withes.call(proc {|n|
|
|
|
|
!n or (mandatory_exts[ext] = true if File.fnmatch(n, ext))
|
|
|
|
}) and
|
|
|
|
!withouts.call(proc {|n| File.fnmatch(n, ext)})
|
2010-01-19 08:29:18 +03:00
|
|
|
}
|
|
|
|
($extension || %w[*]).each do |e|
|
2010-12-29 14:37:47 +03:00
|
|
|
e = e.sub(/\A(?:\.\/)+/, '')
|
2010-01-19 08:29:18 +03:00
|
|
|
exts |= Dir.glob("#{ext_prefix}/#{e}/**/extconf.rb").collect {|d|
|
2005-10-16 17:17:43 +04:00
|
|
|
d = File.dirname(d)
|
|
|
|
d.slice!(0, ext_prefix.length + 1)
|
|
|
|
d
|
2005-10-22 18:55:07 +04:00
|
|
|
}.find_all {|ext|
|
|
|
|
with_config(ext, &cond)
|
2005-10-16 17:17:43 +04:00
|
|
|
}.sort
|
2014-05-22 18:34:56 +04:00
|
|
|
if $LIBRUBYARG_SHARED.empty? and CONFIG["EXTSTATIC"] == "static"
|
2014-05-21 08:46:00 +04:00
|
|
|
exts.delete_if {|d| File.fnmatch?("-*", d)}
|
|
|
|
end
|
2005-10-16 17:17:43 +04:00
|
|
|
end
|
2017-01-26 11:19:34 +03:00
|
|
|
ext_prefix = File.basename(ext_prefix)
|
2004-02-09 11:48:55 +03:00
|
|
|
|
2016-09-01 18:55:13 +03:00
|
|
|
extend Module.new {
|
|
|
|
def timestamp_file(name, target_prefix = nil)
|
2017-01-26 11:19:34 +03:00
|
|
|
if @gemname and name == '$(TARGET_SO_DIR)'
|
|
|
|
name = "$(arch)/gems/#{@gemname}#{target_prefix}"
|
|
|
|
end
|
2016-09-01 18:55:13 +03:00
|
|
|
super.sub(%r[/\.extout\.(?:-\.)?], '/.')
|
|
|
|
end
|
2016-09-24 16:26:21 +03:00
|
|
|
|
|
|
|
def configuration(srcdir)
|
|
|
|
super << "EXTSO #{['=', $extso].join(' ')}\n"
|
|
|
|
end
|
2011-03-08 03:33:05 +03:00
|
|
|
|
2017-01-26 11:19:34 +03:00
|
|
|
def create_makefile(*args, &block)
|
|
|
|
return super unless @gemname
|
2016-09-01 08:24:19 +03:00
|
|
|
super(*args) do |conf|
|
|
|
|
conf.find do |s|
|
|
|
|
s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) {
|
2016-09-04 08:05:20 +03:00
|
|
|
"TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\
|
|
|
|
"#{$1}$(TARGET_GEM_DIR)$(target_prefix)"
|
2016-09-01 08:24:19 +03:00
|
|
|
}
|
|
|
|
end
|
2016-09-04 08:27:48 +03:00
|
|
|
conf.any? {|s| /^TARGET *= *\S/ =~ s} and conf << %{
|
2016-09-01 08:24:19 +03:00
|
|
|
|
|
|
|
# default target
|
|
|
|
all:
|
2016-08-31 11:39:23 +03:00
|
|
|
|
2016-09-04 08:05:20 +03:00
|
|
|
build_complete = $(TARGET_GEM_DIR)/gem.build_complete
|
2016-08-31 11:39:23 +03:00
|
|
|
install-so: build_complete
|
|
|
|
build_complete: $(build_complete)
|
|
|
|
$(build_complete): $(TARGET_SO)
|
|
|
|
$(Q) $(TOUCH) $@
|
|
|
|
|
2017-02-28 11:22:00 +03:00
|
|
|
clean-so::
|
|
|
|
-$(Q)$(RM) $(build_complete)
|
2016-08-31 11:39:23 +03:00
|
|
|
}
|
2016-09-04 08:27:48 +03:00
|
|
|
conf
|
2016-08-31 11:39:23 +03:00
|
|
|
end
|
|
|
|
end
|
2017-01-26 11:19:34 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
dir = Dir.pwd
|
|
|
|
FileUtils::makedirs(ext_prefix)
|
|
|
|
Dir::chdir(ext_prefix)
|
|
|
|
|
|
|
|
hdrdir = $hdrdir
|
|
|
|
$hdrdir = ($top_srcdir = relative_from(srcdir, $topdir = "..")) + "/include"
|
|
|
|
extso = []
|
|
|
|
fails = []
|
|
|
|
exts.each do |d|
|
|
|
|
$static = $force_static ? true : $static_ext[d]
|
|
|
|
|
2017-01-28 08:31:25 +03:00
|
|
|
if !$nodynamic or $static
|
2017-01-27 11:05:06 +03:00
|
|
|
result = extmake(d, ext_prefix, !@gemname) or abort
|
2017-01-26 11:19:34 +03:00
|
|
|
extso |= $extso
|
2017-04-19 17:05:26 +03:00
|
|
|
fails << [d, result] unless result == true
|
2017-01-26 11:19:34 +03:00
|
|
|
end
|
2016-08-31 11:39:23 +03:00
|
|
|
end
|
2016-08-01 15:39:54 +03:00
|
|
|
|
2007-06-10 07:06:15 +04:00
|
|
|
$top_srcdir = srcdir
|
2004-02-21 08:33:24 +03:00
|
|
|
$topdir = "."
|
2007-06-10 07:06:15 +04:00
|
|
|
$hdrdir = hdrdir
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2006-05-27 06:30:10 +04:00
|
|
|
extinit = Struct.new(:c, :o) {
|
|
|
|
def initialize(src)
|
|
|
|
super("#{src}.c", "#{src}.#{$OBJEXT}")
|
|
|
|
end
|
|
|
|
}.new("extinit")
|
2002-09-08 13:08:15 +04:00
|
|
|
|
2012-05-16 09:39:06 +04:00
|
|
|
$extobjs ||= []
|
2006-09-08 23:48:22 +04:00
|
|
|
$extpath ||= []
|
|
|
|
$extflags ||= ""
|
|
|
|
$extlibs ||= []
|
2017-01-23 05:19:00 +03:00
|
|
|
extinits = []
|
2006-09-08 23:48:22 +04:00
|
|
|
unless $extlist.empty?
|
2003-08-12 06:12:48 +04:00
|
|
|
list = $extlist.dup
|
2004-09-02 20:54:35 +04:00
|
|
|
built = []
|
2004-01-08 01:06:38 +03:00
|
|
|
while e = list.shift
|
2016-08-15 05:46:53 +03:00
|
|
|
static, target, feature, required = e
|
|
|
|
next unless static
|
2013-02-20 16:06:10 +04:00
|
|
|
if required and !(required -= built).empty?
|
2004-01-08 01:06:38 +03:00
|
|
|
l = list.size
|
2013-02-20 16:06:10 +04:00
|
|
|
if (while l > 0; break true if required.include?(list[l-=1][1]) end)
|
2004-01-08 01:06:38 +03:00
|
|
|
list.insert(l + 1, e)
|
|
|
|
end
|
2004-04-16 03:27:12 +04:00
|
|
|
next
|
2003-08-12 06:12:48 +04:00
|
|
|
end
|
2013-02-20 16:06:10 +04:00
|
|
|
base = File.basename(feature)
|
2017-01-23 05:19:00 +03:00
|
|
|
extinits << feature
|
2013-02-20 16:06:10 +04:00
|
|
|
$extobjs << format("ext/%s/%s.%s", target, base, $LIBEXT)
|
|
|
|
built << target
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
|
|
|
|
2003-08-06 07:11:14 +04:00
|
|
|
$extpath.delete("$(topdir)")
|
|
|
|
$extflags = libpathflag($extpath) << " " << $extflags.strip
|
2002-10-22 08:19:26 +04:00
|
|
|
conf = [
|
2006-10-01 19:00:45 +04:00
|
|
|
['LIBRUBY_SO_UPDATE', '$(LIBRUBY_EXTS)'],
|
2005-08-04 19:20:10 +04:00
|
|
|
['SETUP', $setup],
|
2003-08-12 11:55:14 +04:00
|
|
|
['EXTLIBS', $extlibs.join(' ')], ['EXTLDFLAGS', $extflags]
|
2002-10-22 08:19:26 +04:00
|
|
|
].map {|n, v|
|
2016-04-25 10:56:03 +03:00
|
|
|
"#{n}=#{v}" if v &&= v[/\S(?:.*\S)?/]
|
2002-10-22 08:19:26 +04:00
|
|
|
}.compact
|
2017-01-28 08:31:25 +03:00
|
|
|
puts(*conf) unless $subconfigure
|
2002-10-27 12:04:55 +03:00
|
|
|
$stdout.flush
|
2002-11-04 00:42:14 +03:00
|
|
|
$mflags.concat(conf)
|
2009-02-24 13:01:08 +03:00
|
|
|
$makeflags.concat(conf)
|
2006-05-27 06:30:10 +04:00
|
|
|
else
|
|
|
|
FileUtils.rm_f(extinit.to_a)
|
2002-09-08 13:08:15 +04:00
|
|
|
end
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
rubies = []
|
2006-10-09 18:41:24 +04:00
|
|
|
%w[RUBY RUBYW STATIC_RUBY].each {|n|
|
|
|
|
r = n
|
2004-04-02 13:00:12 +04:00
|
|
|
if r = arg_config("--"+r.downcase) || config_string(r+"_INSTALL_NAME")
|
2009-04-30 20:34:01 +04:00
|
|
|
rubies << RbConfig.expand(r+=EXEEXT)
|
2005-11-16 17:25:53 +03:00
|
|
|
$mflags << "#{n}=#{r}"
|
2004-04-02 13:00:12 +04:00
|
|
|
end
|
* configure.in (XCFLAGS): CFLAGS to comile ruby itself.
* configure.in (LIBEXT): suffix for static libraries.
* configure.in (LIBPATHFLAG): switch template to specify library
path.
* configure.in (LINK_SO): command to link shared objects.
* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
files.
* configure.in (EXPORT_PREFIX): prefix to exported symbols on
Windows.
* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
libraries, macros and headers used in common.
* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
excutable name.
* Makefile.in (CFLAGS): append XCFLAGS.
* Makefile.in (PREP): miscellaneous system dependent files.
* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
* Makefile.in (MAKEFILES): depend on *.in and config.status.
* Makefile.in (parse.c): replace "y.tab.c" with actual name for
byacc.
* ext/extmk.rb, lib/mkmf.rb: integrated.
* ext/extmk.rb: propagate MFLAGS.
* ext/extmk.rb (extmake): make dummy Makefile to clean even if no
Makefile is made.
* lib/mkmf.rb (older): accept multiple file names and Time
objects.
* lib/mkmf.rb (xsystem): split and qoute.
* lib/mkmf.rb (cpp_include): make include directives.
* lib/mkmf.rb (try_func): try wheather specified function is
available.
* lib/mkmf.rb (install_files): default to site-install.
* lib/mkmf.rb (checking_for): added.
* lib/mkmf.rb (find_executable0): just find executable file with
no message.
* lib/mkmf.rb (create_header): output header file is variable.
* lib/mkmf.rb (create_makefile): separate sections.
* lib/mkmf.rb (init_mkmf): initialize global variables.
* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
* bcc32/Makefile.sub (ARCH): fixed to i386.
* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
link EXTOBJS.
* ext/dl/extconf.rb: use try_cpp to cross compile.
* ext/dl/extconf.rb: not modify files in source directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2002-10-21 18:03:46 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
Dir.chdir ".."
|
2005-04-17 17:57:52 +04:00
|
|
|
unless $destdir.to_s.empty?
|
|
|
|
$mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}"
|
|
|
|
end
|
2009-02-24 13:01:08 +03:00
|
|
|
$makeflags.uniq!
|
2002-12-31 15:31:12 +03:00
|
|
|
|
2007-06-10 10:09:40 +04:00
|
|
|
$mflags.unshift("topdir=#$topdir")
|
2008-05-08 12:44:15 +04:00
|
|
|
ENV.delete("RUBYOPT")
|
2017-01-28 08:31:25 +03:00
|
|
|
exts.map! {|d| "#{ext_prefix}/#{d}/."}
|
|
|
|
FileUtils.makedirs(File.dirname($command_output))
|
|
|
|
begin
|
2014-04-15 14:29:01 +04:00
|
|
|
atomic_write_open($command_output) do |mf|
|
2011-03-08 03:33:05 +03:00
|
|
|
mf.puts "V = 0"
|
|
|
|
mf.puts "Q1 = $(V:1=)"
|
|
|
|
mf.puts "Q = $(Q1:0=@)"
|
|
|
|
mf.puts "ECHO1 = $(V:1=@:)"
|
|
|
|
mf.puts "ECHO = $(ECHO1:0=@echo)"
|
2011-03-28 06:08:18 +04:00
|
|
|
mf.puts "MFLAGS = -$(MAKEFLAGS)" if $nmake
|
2011-03-08 03:33:05 +03:00
|
|
|
mf.puts
|
|
|
|
|
2012-05-19 06:36:25 +04:00
|
|
|
def mf.macro(name, values, max = 70)
|
|
|
|
print name, " ="
|
|
|
|
w = w0 = name.size + 2
|
|
|
|
h = " \\\n" + "\t" * (w / 8) + " " * (w % 8)
|
|
|
|
values.each do |s|
|
|
|
|
if s.size + w > max
|
|
|
|
print h
|
|
|
|
w = w0
|
|
|
|
end
|
|
|
|
print " ", s
|
|
|
|
w += s.size + 1
|
2011-03-08 03:33:05 +03:00
|
|
|
end
|
2012-05-19 06:36:25 +04:00
|
|
|
puts
|
2011-03-08 03:33:05 +03:00
|
|
|
end
|
2012-05-19 06:36:25 +04:00
|
|
|
|
2017-04-21 06:01:12 +03:00
|
|
|
mf.macro "ruby", topruby
|
|
|
|
mf.macro "RUBY", ["$(ruby)"]
|
2012-05-19 06:36:25 +04:00
|
|
|
mf.macro "extensions", exts
|
2012-05-19 09:57:32 +04:00
|
|
|
mf.macro "EXTOBJS", $extlist.empty? ? ["dmyext.#{$OBJEXT}"] : ["ext/extinit.#{$OBJEXT}", *$extobjs]
|
2012-05-19 06:36:25 +04:00
|
|
|
mf.macro "EXTLIBS", $extlibs
|
2016-09-24 16:26:21 +03:00
|
|
|
mf.macro "EXTSO", extso
|
2012-05-19 06:36:25 +04:00
|
|
|
mf.macro "EXTLDFLAGS", $extflags.split
|
2017-01-23 05:19:00 +03:00
|
|
|
mf.macro "EXTINITS", extinits
|
2013-02-20 16:06:13 +04:00
|
|
|
submakeopts = []
|
|
|
|
if enable_config("shared", $enable_shared)
|
2016-06-18 04:13:39 +03:00
|
|
|
submakeopts << 'DLDOBJS="$(EXTOBJS) $(EXTENCS)"'
|
2014-12-04 20:27:49 +03:00
|
|
|
submakeopts << 'EXTOBJS='
|
2013-02-20 16:06:13 +04:00
|
|
|
submakeopts << 'EXTSOLIBS="$(EXTLIBS)"'
|
|
|
|
submakeopts << 'LIBRUBY_SO_UPDATE=$(LIBRUBY_EXTS)'
|
|
|
|
else
|
2016-06-18 04:13:39 +03:00
|
|
|
submakeopts << 'EXTOBJS="$(EXTOBJS) $(EXTENCS)"'
|
2013-02-20 16:06:13 +04:00
|
|
|
submakeopts << 'EXTLIBS="$(EXTLIBS)"'
|
|
|
|
end
|
|
|
|
submakeopts << 'EXTLDFLAGS="$(EXTLDFLAGS)"'
|
2017-01-23 05:18:59 +03:00
|
|
|
submakeopts << 'EXTINITS="$(EXTINITS)"'
|
2014-10-31 06:49:43 +03:00
|
|
|
submakeopts << 'UPDATE_LIBRARIES="$(UPDATE_LIBRARIES)"'
|
2015-10-22 17:56:37 +03:00
|
|
|
submakeopts << 'SHOWFLAGS='
|
2013-02-20 16:06:13 +04:00
|
|
|
mf.macro "SUBMAKEOPTS", submakeopts
|
2017-04-21 06:01:12 +03:00
|
|
|
mf.macro "NOTE_MESG", %w[$(RUBY) $(top_srcdir)/tool/colorize.rb skip]
|
|
|
|
mf.macro "NOTE_NAME", %w[$(RUBY) $(top_srcdir)/tool/colorize.rb fail]
|
2012-05-16 09:39:06 +04:00
|
|
|
mf.puts
|
2011-03-08 03:33:05 +03:00
|
|
|
targets = %w[all install static install-so install-rb clean distclean realclean]
|
2012-02-25 11:08:47 +04:00
|
|
|
targets.each do |tgt|
|
2016-08-15 05:46:53 +03:00
|
|
|
mf.puts "#{tgt}: $(extensions:/.=/#{tgt})"
|
2016-05-12 14:19:43 +03:00
|
|
|
mf.puts "#{tgt}: note" unless /clean\z/ =~ tgt
|
2011-03-08 03:33:05 +03:00
|
|
|
end
|
|
|
|
mf.puts
|
2012-05-16 09:39:06 +04:00
|
|
|
mf.puts "clean:\n\t-$(Q)$(RM) ext/extinit.#{$OBJEXT}"
|
|
|
|
mf.puts "distclean:\n\t-$(Q)$(RM) ext/extinit.c"
|
|
|
|
mf.puts
|
2017-01-26 11:19:34 +03:00
|
|
|
mf.puts "#{rubies.join(' ')}: $(extensions:/.=/#{$force_static ? 'static' : 'all'})"
|
2013-02-20 16:06:13 +04:00
|
|
|
submake = "$(Q)$(MAKE) $(MFLAGS) $(SUBMAKEOPTS)"
|
2017-01-28 04:43:29 +03:00
|
|
|
mf.puts "all static: #{rubies.join(' ')}\n"
|
2014-07-03 07:40:24 +04:00
|
|
|
$extobjs.each do |tgt|
|
|
|
|
mf.puts "#{tgt}: #{File.dirname(tgt)}/static"
|
|
|
|
end
|
2016-06-18 04:13:39 +03:00
|
|
|
mf.puts "#{rubies.join(' ')}: $(EXTOBJS)#{' libencs' if CONFIG['ENCSTATIC'] == 'static'}"
|
2013-02-20 16:06:13 +04:00
|
|
|
rubies.each do |tgt|
|
|
|
|
mf.puts "#{tgt}:\n\t#{submake} $@"
|
2011-03-08 03:33:05 +03:00
|
|
|
end
|
2016-06-18 04:13:39 +03:00
|
|
|
mf.puts "libencs:\n\t$(Q)$(MAKE) -f enc.mk V=$(V) $@"
|
2017-01-22 15:50:36 +03:00
|
|
|
mf.puts "ext/extinit.#{$OBJEXT}:\n\t$(Q)$(MAKE) $(MFLAGS) V=$(V) EXTINITS=\"$(EXTINITS)\" $@" if $static
|
2011-03-08 03:33:05 +03:00
|
|
|
mf.puts
|
2014-07-03 07:38:13 +04:00
|
|
|
if $gnumake == "yes"
|
|
|
|
submake = "$(MAKE) -C $(@D)"
|
|
|
|
else
|
|
|
|
submake = "cd $(@D) && "
|
|
|
|
config_string("exec") {|str| submake << str << " "}
|
|
|
|
submake << "$(MAKE)"
|
|
|
|
end
|
2012-02-25 11:08:47 +04:00
|
|
|
targets.each do |tgt|
|
2017-01-26 11:19:34 +03:00
|
|
|
exts.each do |d|
|
2014-07-03 07:38:13 +04:00
|
|
|
mf.puts "#{d[0..-2]}#{tgt}:\n\t$(Q)#{submake} $(MFLAGS) V=$(V) $(@F)"
|
2011-03-08 03:33:05 +03:00
|
|
|
end
|
|
|
|
end
|
2016-09-24 16:26:21 +03:00
|
|
|
mf.puts "\n""extso:\n"
|
|
|
|
mf.puts "\t@echo EXTSO=$(EXTSO)"
|
|
|
|
|
2016-05-12 14:19:43 +03:00
|
|
|
mf.puts "\n""note:\n"
|
|
|
|
unless fails.empty?
|
2017-04-20 11:13:16 +03:00
|
|
|
abandon = false
|
2017-04-21 05:43:25 +03:00
|
|
|
mf.puts "note: note-body\n"
|
|
|
|
mf.puts "note-body:: note-header\n"
|
|
|
|
mf.puts "note-header:\n"
|
|
|
|
mf.puts %Q<\t@$(NOTE_MESG) "*** Following extensions are not compiled:">
|
|
|
|
mf.puts "note-body:: note-header\n"
|
2017-04-19 17:05:26 +03:00
|
|
|
fails.each do |ext, (parent, err)|
|
2017-04-20 11:13:16 +03:00
|
|
|
abandon ||= mandatory_exts[ext]
|
2017-04-21 05:43:25 +03:00
|
|
|
mf.puts %Q<\t@$(NOTE_NAME) "#{ext}:">
|
2017-04-19 17:05:26 +03:00
|
|
|
if parent
|
|
|
|
mf.puts %Q<\t@echo "\tCould not be configured. It will not be installed.">
|
2017-04-20 11:13:16 +03:00
|
|
|
err and err.scan(/.+/) do |ee|
|
2017-04-19 17:05:26 +03:00
|
|
|
mf.puts %Q<\t@echo "\t#{ee.gsub(/["`$^]/, '\\\\\\&')}">
|
2017-02-10 06:58:01 +03:00
|
|
|
end
|
2017-04-19 17:05:26 +03:00
|
|
|
mf.puts %Q<\t@echo "\tCheck #{ext_prefix}/#{ext}/mkmf.log for more details.">
|
2017-02-10 06:58:01 +03:00
|
|
|
else
|
2017-04-19 17:05:26 +03:00
|
|
|
mf.puts %Q<\t@echo "\tSkipped because its parent was not configured.">
|
2016-05-13 02:35:22 +03:00
|
|
|
end
|
2016-05-12 14:19:43 +03:00
|
|
|
end
|
2017-04-21 05:43:25 +03:00
|
|
|
mf.puts "note:\n"
|
|
|
|
mf.puts %Q<\t@$(NOTE_MESG) "*** Fix the problems, then remove these directories and try again if you want.">
|
2017-04-20 11:13:16 +03:00
|
|
|
if abandon
|
|
|
|
mf.puts "\t""@exit 1"
|
|
|
|
end
|
2016-05-12 14:19:43 +03:00
|
|
|
end
|
2009-02-24 13:01:08 +03:00
|
|
|
end
|
|
|
|
end
|
2013-05-20 16:42:02 +04:00
|
|
|
# :startdoc:
|
2002-09-08 13:08:15 +04:00
|
|
|
|
|
|
|
#Local variables:
|
|
|
|
# mode: ruby
|
|
|
|
#end:
|