From 46a7493b6c02a7b3340d082c0d7a4d7bb0b50415 Mon Sep 17 00:00:00 2001 From: ttate Date: Mon, 1 Apr 2002 15:01:56 +0000 Subject: lib/mkmf.rb: install any files using $INSTALLFILES. (from [ruby-dev:16683]) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2317 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++ lib/mkmf.rb | 137 ++++++++++++++++++++++++++++++++++++++---------------------- 2 files changed, 92 insertions(+), 50 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5f3df76c6e..7f431763f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Apr 1 23:48:12 2002 Takaaki Tateishi + + * lib/mkmf.rb: install any files using $INSTALLFILES. + (see also [ruby-dev:16683]) + Mon Apr 1 17:25:50 2002 Yukihiro Matsumoto * io.c (rb_io_fptr_cleanup): need flush even when io will not be diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 1a6a318071..af5894d16f 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -39,6 +39,23 @@ $sitedir = CONFIG["sitedir"] $sitelibdir = CONFIG["sitelibdir"] $sitearchdir = CONFIG["sitearchdir"] +def dir_re(dir) + Regexp.new('\$(?:\('+dir+'\)|\{'+dir+'\})(?:\$\(target_prefix\)|\{target_prefix\})?') +end +commondir = dir_re('commondir') + +INSTALL_DIRS = [ + [commondir, "$(rubylibdir)"], + [dir_re('sitelibdir'), "$(rubylibdir)$(target_prefix)"], + [dir_re('sitearchdir'), "$(archdir)$(target_prefix)"] +] + +SITEINSTALL_DIRS = [ + [commondir, "$(sitedir)$(target_prefix)"], + [dir_re('rubylibdir'), "$(sitelibdir)$(target_prefix)"], + [dir_re('archdir'), "$(sitearchdir)$(target_prefix)"] +] + if File.exist? Config::CONFIG["archdir"] + "/ruby.h" $hdrdir = $archdir elsif File.exist? $srcdir + "/ruby.h" @@ -160,33 +177,47 @@ def try_run(src, opt="") end end -def install_rb(mfile, dest, srcdir = nil) - libdir = "lib" - libdir = srcdir + "/" + libdir if srcdir - path = [] - dir = [] - if File.directory? libdir - Find.find(libdir) do |f| - next unless /\.rb$/ =~ f - f = f[libdir.length+1..-1] - path.push f - dir |= [File.dirname(f)] - end - end - for f in dir - if f == "." - mfile.printf "\t@$(RUBY) -r ftools -e 'File::makedirs(*ARGV)' %s\n", dest +def install_files(mfile, ifiles, map = INSTALL_DIRS, srcprefix = nil) + ifiles or return + srcprefix ||= '$(srcdir)' + Config::expand(srcdir = srcprefix.dup) + dirs = [] + path = Hash.new {|h, i| h[i] = dirs.push([i])[-1]} + ifiles.each do |files, dir, prefix| + dir = map.inject(dir) {|dir, (orig, new)| dir.gsub(orig, new)} if map + prefix = %r"\A#{Regexp.quote(prefix)}/" if prefix + if( files[0,1] == "." ) + # install files which are in current working directory. + Dir.glob(files) do |f| + d = File.dirname(f) + d.sub!(prefix, "") if prefix + d = (d.empty? || d == ".") ? dir : File.join(dir,d) + path[d] << f + end else - mfile.printf "\t@$(RUBY) -r ftools -e 'File::makedirs(*ARGV)' %s/%s\n", dest, f + # install files which are under the $(srcdir). + Dir.glob(File.join(srcdir,files)) do |f| + f[0..srcdir.size] = "" + d = File.dirname(f) + d.sub!(prefix, "") if prefix + d = (d.empty? || d == ".") ? dir : File.join(dir, d) + path[d] << (srcprefix ? File.join(srcprefix, f) : f) + end end end - for f in path - d = '/' + File::dirname(f) - d = '' if d == '/.' - mfile.printf "\t@$(RUBY) -r ftools -e 'File::install(ARGV[0], ARGV[1], 0644, true)' %s/%s %s%s\n", libdir, f, dest, d + + dirs.each do |dir, *files| + mfile.printf("\t@$(MAKEDIRS) %s\n", dir) + files.each do |f| + mfile.printf("\t@$(INSTALL_DATA) %s %s\n", f, dir) + end end end +def install_rb(mfile, dest, srcdir = nil) + install_files(mfile, [["lib/**/*.rb", dest, "lib"]], INSTALL_DIRS, srcdir) +end + def append_library(libs, lib) if /mswin32/ =~ RUBY_PLATFORM lib + ".lib " + libs @@ -373,7 +404,7 @@ def with_destdir(dir) /^\$[\(\{]/ =~ dir ? dir : "$(DESTDIR)"+dir end -def create_makefile(target, srcdir = $srcdir) +def create_makefile(target, srcprefix = nil) save_libs = $libs.dup save_libpath = $LIBPATH.dup print "creating Makefile\n" @@ -398,7 +429,8 @@ def create_makefile(target, srcdir = $srcdir) $configure_args['--enable-shared'] or $LIBPATH |= [$topdir] $LIBPATH |= [CONFIG["libdir"]] - srcdir ||= '.' + srcprefix ||= '$(srcdir)' + Config::expand(srcdir = srcprefix.dup) defflag = '' if RUBY_PLATFORM =~ /cygwin|mingw/ deffile = target + '.def' @@ -463,21 +495,19 @@ RUBY_INSTALL_NAME = #{CONFIG["RUBY_INSTALL_NAME"]} RUBY_SO_NAME = #{CONFIG["RUBY_SO_NAME"]} arch = #{CONFIG["arch"]} ruby_version = #{Config::CONFIG["ruby_version"]} -#{ -if destdir = CONFIG["prefix"].scan(drive)[0] and !destdir.empty? - "\nDESTDIR = " + destdir -else - "" -end -} -prefix = #{with_destdir CONFIG["prefix"].sub(drive, '')} -exec_prefix = #{with_destdir CONFIG["exec_prefix"].sub(drive, '')} -libdir = #{with_destdir $libdir.sub(drive, '')} -rubylibdir = #{with_destdir $rubylibdir.sub(drive, '')} -archdir = #{with_destdir $archdir.sub(drive, '')} -sitedir = #{with_destdir $sitedir.sub(drive, '')} -sitelibdir = #{with_destdir $sitelibdir.sub(drive, '')} -sitearchdir = #{with_destdir $sitearchdir.sub(drive, '')} +EOMF + if destdir = CONFIG["prefix"].scan(drive)[0] and !destdir.empty? + mfile.print "\nDESTDIR = ", destdir, "\n" + end + CONFIG.select do |key, var| + next if /prefix$/ !~ key + mfile.print key, " = ", with_destdir(var.sub(drive, '')), "\n" + end + CONFIG.select do |key, var| + next if key == "srcdir" or /dir$/ !~ key + mfile.print key, " = ", with_destdir(var.sub(drive, '')), "\n" + end + mfile.print <