From: nobu.nokada@... Date: 2002-05-29T17:33:37+09:00 Subject: Re: adding uninstall entry, extconf.rb Hi, At Wed, 29 May 2002 16:11:13 +0900, Norman Makoto Su wrote: > I just have a small request. Would it be possible to have the mkmf module > create an uninstall entry? Since we already have install, I think it might be > helpful to have an uninstall entry. Considerable. And site-install didn't work properly. Index: lib/ftools.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/ftools.rb,v retrieving revision 1.5 diff -u -2 -p -r1.5 ftools.rb --- lib/ftools.rb 2001/10/02 10:36:34 1.5 +++ lib/ftools.rb 2002/05/29 08:07:50 @@ -158,4 +158,16 @@ class << File alias mkpath makedirs + + def rmdirs(*dirs) + verbose = if dirs[-1].is_a? String then false else dirs.pop end + for dir in dirs + next unless FileTest.directory? dir + until dir == "." or dir == "/" + $stderr.print "rmdir ", dir, "\n" if verbose + Dir.rmdir(dir) rescue break + dir = dirname(dir) + end + end + end alias o_chmod chmod Index: lib/mkmf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v retrieving revision 1.81 diff -u -2 -p -r1.81 mkmf.rb --- lib/mkmf.rb 2002/05/04 21:57:32 1.81 +++ lib/mkmf.rb 2002/05/29 08:11:37 @@ -187,5 +187,5 @@ def install_files(mfile, ifiles, map = I dir = map.inject(dir) {|dir, (orig, new)| dir.gsub(orig, new)} if map prefix = %r"\A#{Regexp.quote(prefix)}/?" if prefix - if( files[0,2] == "./" ) + if files[0, 2] == "./" # install files which are in current working directory. Dir.glob(files) do |f| @@ -215,6 +215,14 @@ def install_files(mfile, ifiles, map = I end +def uninstall_files(mfile, *files) + files.each do |dir, *files| + next if files.empty? + mfile.print "\t$(RM) ", files.collect {|file| File.join(dir, File.basename(file))}.join(" "), "\n" + mfile.print "\t$(RMDIRS) ", dir, "\n" + end +end + def install_rb(mfile, dest, srcdir = nil) - install_files(mfile, [["lib/**/*.rb", dest, "lib"]], INSTALL_DIRS, srcdir) + install_files(mfile, [["lib/**/*.rb", dest, "lib"]], nil, srcdir) end @@ -523,4 +531,5 @@ RUBY = #{CONFIG["ruby_install_name"]} RM = $(RUBY) -rftools -e "File::rm_f(*ARGV.map do|x|Dir[x]end.flatten.uniq)" MAKEDIRS = $(RUBY) -r ftools -e 'File::makedirs(*ARGV)' +RMDIRS = $(RUBY) -rftools -e 'File::rmdirs(*ARGV)' INSTALL_PROG = $(RUBY) -r ftools -e 'File::install(ARGV[0], ARGV[1], 0555, true)' INSTALL_DATA = $(RUBY) -r ftools -e 'File::install(ARGV[0], ARGV[1], 0644, true)' @@ -553,10 +562,19 @@ $(sitearchdir)$(target_prefix)/$(DLLIB): EOMF mfile.print "install:\n" - install_rb(mfile, "$(rubylibdir)$(target_prefix)", srcprefix) - install_files(mfile, $INSTALLFILES, INSTALL_DIRS, srcprefix) + installed = [["$(archdir)$(target_prefix)", "$(DLLIB)"]] + files = install_rb(mfile, "$(rubylibdir)$(target_prefix)", srcprefix) and installed.concat(files) + files = install_files(mfile, $INSTALLFILES, INSTALL_DIRS, srcprefix) and installed.concat(files) mfile.print "\n" + mfile.print "uninstall\n" + uninstall_files(mfile, *installed) + mfile.print "\n" mfile.print "site-install:\n" - install_rb(mfile, "$(sitelibdir)$(target_prefix)", srcprefix) - install_files(mfile, $INSTALLFILES, SITEINSTALL_DIRS, srcprefix) + installed = [["$(sitearchdir)$(target_prefix)", "$(DLLIB)"]] + files = install_rb(mfile, "$(sitelibdir)$(target_prefix)", srcprefix) and installed.concat(files) + files = install_files(mfile, $INSTALLFILES, SITEINSTALL_DIRS, srcprefix) and installed.concat(files) + mfile.print "\n" + mfile.print "site-uninstall\n" + uninstall_files(mfile, *installed) + mfile.print "\n" unless /mswin32/ =~ RUBY_PLATFORM -- Nobu Nakada