diff options
author | knu <knu@FreeBSD.org> | 2002-11-22 20:49:49 +0800 |
---|---|---|
committer | knu <knu@FreeBSD.org> | 2002-11-22 20:49:49 +0800 |
commit | 705ce8fb82814d853efa863e95e4b09484410f98 (patch) | |
tree | b571bedaa6431ede03ae9e3011c8a1b21eea4e87 /lang | |
parent | 29c7f274f834e25da31578e5f39b7f20821589d1 (diff) | |
download | freebsd-ports-gnome-705ce8fb82814d853efa863e95e4b09484410f98.tar.gz freebsd-ports-gnome-705ce8fb82814d853efa863e95e4b09484410f98.tar.zst freebsd-ports-gnome-705ce8fb82814d853efa863e95e4b09484410f98.zip |
Update lang/ruby-devel to the latest snapshot as of 2002-11-22.
Add a DEBUG knob here too.
Diffstat (limited to 'lang')
-rw-r--r-- | lang/ruby-devel/Makefile | 31 | ||||
-rw-r--r-- | lang/ruby-devel/distinfo | 2 | ||||
-rw-r--r-- | lang/ruby-devel/files/patch-mkmf.rb | 33 | ||||
-rw-r--r-- | lang/ruby-devel/files/patch-tempfile.rb | 147 | ||||
-rw-r--r-- | lang/ruby-devel/pkg-plist | 4 | ||||
-rw-r--r-- | lang/ruby18/Makefile | 31 | ||||
-rw-r--r-- | lang/ruby18/distinfo | 2 | ||||
-rw-r--r-- | lang/ruby18/files/patch-mkmf.rb | 33 | ||||
-rw-r--r-- | lang/ruby18/files/patch-tempfile.rb | 147 | ||||
-rw-r--r-- | lang/ruby18/pkg-plist | 4 |
10 files changed, 92 insertions, 342 deletions
diff --git a/lang/ruby-devel/Makefile b/lang/ruby-devel/Makefile index df58a03aac74..33e6f238e06a 100644 --- a/lang/ruby-devel/Makefile +++ b/lang/ruby-devel/Makefile @@ -7,7 +7,6 @@ PORTNAME= ruby${RUBY_R} PORTVERSION= ${RUBY_PORTVERSION} -PORTREVISION= 1 CATEGORIES= lang ruby ipv6 MASTER_SITES= ${MASTER_SITE_RUBY} \ ${ONIGURUMA_MASTER_SITES:S,$,:oniguruma,} @@ -47,7 +46,12 @@ GNU_CONFIGURE= yes WRKSRC= ${RUBY_WRKSRC} CONFIGURE_ARGS= ${RUBY_CONFIGURE_ARGS} \ --enable-shared -MAKE_ENV= LANG=C # prevent bison 1.33 w/ gettext 0.10.35 from coredumping + +.if defined(DEBUG) +CFLAGS+= -g +STRIP= # none +.endif + MAKE_ARGS= -j3 INSTALLS_SHLIB= yes MAN1= ruby${_RUBY_SUFFIX}.1 @@ -77,6 +81,7 @@ PLIST_SUB+= IF_DEFAULT=${IF_DEFAULT} \ RUBYLIB=${RUBYLIB} INSTALLED_SCRIPTS= ${PREFIX}/bin/irb \ + ${PREFIX}/bin/erb \ ${PREFIX}/bin/h2rb OBSOLETED_MODULES= dl \ @@ -92,6 +97,7 @@ OBSOLETED_MODULES= dl \ uri post-extract: + ${MV} ${WRKSRC}/ext/dl/h2rb ${WRKSRC}/bin/ .if defined(WITH_ONIGURUMA) ${TAR} -zxvf ${DISTDIR}/${DIST_SUBDIR}/${ONIGURUMA_DISTFILE} -C ${WRKDIR} .endif @@ -113,22 +119,15 @@ pre-install: ${RM} -f ${RUBY_WITHOUT_SUFFIX}${RUBY_R} \ ${PREFIX}/man/man1/ruby${RUBY_R}.1 \ ${PREFIX}/man/man1/ruby${RUBY_R}.1.gz - for f in ${INSTALLED_SCRIPTS}; do \ - ${RM} -f $${f}${RUBY_R}; \ - done post-install: .if defined(STRIP) && ${STRIP} == -s - strip ${RUBY} + ${STRIP_CMD} ${RUBY} .endif - ${INSTALL_SCRIPT} ${WRKSRC}/ext/dl/h2rb ${PREFIX}/bin/ .if ${RUBY_VER} == ${RUBY_DEFAULT_VER} ${MV} -f ${RUBY_WITHOUT_SUFFIX}${RUBY_R} ${RUBY_WITH_SUFFIX} ${MV} -f ${PREFIX}/man/man1/ruby${RUBY_R}.1 ${PREFIX}/man/man1/ruby${_RUBY_SUFFIX}.1 .endif - for f in ${INSTALLED_SCRIPTS}; do \ - ${MV} -f $${f} $${f}${_RUBY_SUFFIX}; \ - done if [ -x ${RUBY_WITHOUT_SUFFIX}${RUBY_DEFAULT_SUFFIX}${RUBY_R} ]; then \ ${LN} -fs ${RUBY_WITHOUT_SUFFIX}${RUBY_DEFAULT_SUFFIX}${RUBY_R} ${RUBY_WITHOUT_SUFFIX}${RUBY_R}; \ ${LN} -fs ruby${RUBY_DEFAULT_SUFFIX}${RUBY_R}.1${MANEXT} ${PREFIX}/man/man1/ruby${RUBY_R}.1${MANEXT}; \ @@ -146,18 +145,6 @@ post-install: fi .endif ${LDCONFIG} -m ${PREFIX}/lib -.for f in ${INSTALLED_SCRIPTS} - ${RUBY_WITH_SUFFIX} ${RUBY_FLAGS} -i -p \ - -e 'if $$. == 1; ' \ - -e ' if /^#!/; ' \ - -e ' sub /^#!\s*\S*(\benv\s+)?\bruby/, "#!${RUBY_WITH_SUFFIX}";' \ - -e ' else;' \ - -e ' $$_ = "#!${RUBY_WITH_SUFFIX}\n" + $$_;' \ - -e ' end;' \ - -e 'end' \ - ${f}${_RUBY_SUFFIX} - ${CHMOD} ${BINMODE} ${f}${_RUBY_SUFFIX} -.endfor ${MKDIR} ${RUBY_ELISPDIR} ${TOUCH} ${RUBY_ELISPDIR}/.keep_me ${MKDIR} ${RUBY_EXAMPLESDIR} diff --git a/lang/ruby-devel/distinfo b/lang/ruby-devel/distinfo index 9196017b2259..c274e83098fa 100644 --- a/lang/ruby-devel/distinfo +++ b/lang/ruby-devel/distinfo @@ -1,2 +1,2 @@ -MD5 (ruby/ruby-1.7.3-2002.11.14.tar.bz2) = 9e1978a64c23acc5ee754e7b9f1e0627 +MD5 (ruby/ruby-1.7.3-2002.11.22.tar.bz2) = fafe9cbd17e49dbf356710bc5751d78a MD5 (ruby/onigd20020424.tar.gz) = d5e6505aa776378a58cdb0fd4ef9cdc0 diff --git a/lang/ruby-devel/files/patch-mkmf.rb b/lang/ruby-devel/files/patch-mkmf.rb new file mode 100644 index 000000000000..d121d10c8333 --- /dev/null +++ b/lang/ruby-devel/files/patch-mkmf.rb @@ -0,0 +1,33 @@ +Index: lib/mkmf.rb +=================================================================== +RCS file: /src/ruby/lib/mkmf.rb,v +retrieving revision 1.116 +diff -u -1 -r1.116 mkmf.rb +--- lib/mkmf.rb 14 Nov 2002 13:51:19 -0000 1.116 ++++ lib/mkmf.rb 22 Nov 2002 12:38:13 -0000 +@@ -688,7 +688,6 @@ + mfile.print %{ +-all: $(DLLIB) ++CLEANLIBS = "$(TARGET).{lib,exp,il?,tds,map}" $(DLLIB) ++CLEANOBJS = "*.{#{$OBJEXT},#{$LIBEXT},s[ol],pdb,bak}" + +-clean:: +- @$(RM) "$(TARGET).{lib,exp,il?,tds,map}" $(DLLIB) +- @$(RM) "*.{#{$OBJEXT},#{$LIBEXT},s[ol],pdb,bak}" ++all: $(DLLIB) + } +@@ -850,6 +849,6 @@ + CLEANINGS = " +-clean:: +- @$(RM) $(CLEANFILES) ++clean: ++ @$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) + +-distclean:: clean ++distclean: clean + @$(RM) Makefile extconf.h conftest.* mkmf.log +@@ -857,3 +856,3 @@ + +-realclean:: distclean ++realclean: distclean + " diff --git a/lang/ruby-devel/files/patch-tempfile.rb b/lang/ruby-devel/files/patch-tempfile.rb deleted file mode 100644 index 4018f06739d9..000000000000 --- a/lang/ruby-devel/files/patch-tempfile.rb +++ /dev/null @@ -1,147 +0,0 @@ -Index: lib/tempfile.rb -=================================================================== -RCS file: /src/ruby/lib/tempfile.rb,v -retrieving revision 1.10 -retrieving revision 1.12 -diff -u -r1.10 -r1.12 ---- lib/tempfile.rb 4 Jun 2002 07:34:19 -0000 1.10 -+++ lib/tempfile.rb 18 Nov 2002 07:26:15 -0000 1.12 -@@ -1,31 +1,43 @@ - # --# $Id: tempfile.rb,v 1.10 2002/06/04 07:34:19 matz Exp $ -+# $Id: tempfile.rb,v 1.12 2002/11/18 07:26:15 knu Exp $ - # --# The class for temporary files. --# o creates a temporary file, which name is "basename.pid.n" with mode "w+". --# o Tempfile objects can be used like IO object. --# o with tempfile.close(true) created temporary files are removed. --# o created files are also removed on script termination. --# o with Tempfile#open, you can reopen the temporary file. --# o file mode of the temporary files are 0600. -+# This is a class for managing temporary files. -+# -+# o Tempfile::new("basename") creates a temporary file whose name is -+# "basename.pid.n" and opens with mode "w+". -+# o A Tempfile object can be treated as an IO object. -+# o The temporary directory is determined by ENV['TMPDIR'], -+# ENV['TMP'], and ENV['TEMP'] in the order named, and if none of -+# them is available, it is set to /tmp. -+# o When $SAFE > 0, you should specify a directory via the second argument -+# of Tempfile::new(), or it will end up finding an ENV value tainted and -+# pick /tmp. In case you don't have it, an exception will be raised. -+# o Tempfile#close(true) gets the temporary file removed immediately. -+# o Otherwise, the removal is delayed until the object is finalized. -+# o With Tempfile#open, you can reopen the temporary file. -+# o The file mode for the temporary files is 0600. -+# o This library is (considered to be) thread safe. - - require 'delegate' - - class Tempfile < SimpleDelegator - Max_try = 10 -+ @@cleanlist = [] - -- def Tempfile.callback(path, data) -+ def Tempfile.callback(data) - pid = $$ - lambda{ - if pid == $$ -+ path, tmpfile, cleanlist = *data -+ - print "removing ", path, "..." if $DEBUG -- data[0].close if data[0] -- if File.exist?(path) -- File.unlink(path) -- end -- if File.exist?(path + '.lock') -- Dir.rmdir(path + '.lock') -- end -+ -+ tmpfile.close if tmpfile -+ -+ # keep this order for thread safeness -+ File.unlink(path) if File.exist?(path) -+ cleanlist.delete(path) if cleanlist -+ - print "done\n" if $DEBUG - end - } -@@ -35,30 +47,44 @@ - if $SAFE > 0 and tmpdir.tainted? - tmpdir = '/tmp' - end -- n = 0 -- while true -+ -+ lock = nil -+ n = failure = 0 -+ -+ begin -+ Thread.critical = true -+ - begin - tmpname = sprintf('%s/%s%d.%d', tmpdir, basename, $$, n) - lock = tmpname + '.lock' -- unless File.exist?(tmpname) or File.exist?(lock) -- Dir.mkdir(lock) -- break -- end -- rescue -- raise "cannot generate tempfile `%s'" % tmpname if n >= Max_try -- #sleep(1) -- end -- n += 1 -+ n += 1 -+ end while @@cleanlist.include?(tmpname) or -+ File.exist?(lock) or File.exist?(tmpname) -+ -+ Dir.mkdir(lock) -+ rescue -+ failure += 1 -+ retry if failure < Max_try -+ raise "cannot generate tempfile `%s'" % tmpname -+ ensure -+ Thread.critical = false - end - -- @protect = [] -- @clean_files = Tempfile.callback(tmpname, @protect) -- ObjectSpace.define_finalizer(self, @clean_files) -+ @data = [tmpname] -+ @clean_proc = Tempfile.callback(@data) -+ ObjectSpace.define_finalizer(self, @clean_proc) - - @tmpfile = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL, 0600) -- @protect[0] = @tmpfile - @tmpname = tmpname -+ @@cleanlist << @tmpname -+ @data[1] = @tmpfile -+ @data[2] = @@cleanlist -+ - super(@tmpfile) -+ -+ # Now we have all the File/IO methods defined, you must not -+ # carelessly put bare puts(), etc. after this. -+ - Dir.rmdir(lock) - end - -@@ -69,15 +95,15 @@ - def open - @tmpfile.close if @tmpfile - @tmpfile = File.open(@tmpname, 'r+') -- @protect[0] = @tmpfile -+ @data[1] = @tmpfile - __setobj__(@tmpfile) - end - - def close(real=false) - @tmpfile.close if @tmpfile -- @protect[0] = @tmpfile = nil -+ @data[1] = @tmpfile = nil - if real -- @clean_files.call -+ @clean_proc.call - ObjectSpace.undefine_finalizer(self) - end - end diff --git a/lang/ruby-devel/pkg-plist b/lang/ruby-devel/pkg-plist index 0c6d16c43c91..eed68d9ec8ab 100644 --- a/lang/ruby-devel/pkg-plist +++ b/lang/ruby-devel/pkg-plist @@ -1,3 +1,5 @@ +%%IF_DEFAULT%%bin/erb%%RUBY_R%% +bin/erb%%_RUBY_SUFFIX%% %%IF_DEFAULT%%bin/h2rb%%RUBY_R%% bin/h2rb%%_RUBY_SUFFIX%% %%IF_DEFAULT%%bin/irb%%RUBY_R%% @@ -58,6 +60,7 @@ lib/lib%%RUBY_NAME%%.so.%%RUBY_SHLIBVER%% %%RUBYLIB%%%%RUBY_LIBDIR%%/debug.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/delegate.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/e2mmap.rb +%%RUBYLIB%%%%RUBY_LIBDIR%%/erb.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/eregex.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/expect.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/fileutils.rb @@ -261,7 +264,6 @@ lib/lib%%RUBY_NAME%%.so.%%RUBY_SHLIBVER%% %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/fullpath.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/getopts.test %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/goodfriday.rb -%%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/irb.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/less.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/list.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/list2.rb diff --git a/lang/ruby18/Makefile b/lang/ruby18/Makefile index df58a03aac74..33e6f238e06a 100644 --- a/lang/ruby18/Makefile +++ b/lang/ruby18/Makefile @@ -7,7 +7,6 @@ PORTNAME= ruby${RUBY_R} PORTVERSION= ${RUBY_PORTVERSION} -PORTREVISION= 1 CATEGORIES= lang ruby ipv6 MASTER_SITES= ${MASTER_SITE_RUBY} \ ${ONIGURUMA_MASTER_SITES:S,$,:oniguruma,} @@ -47,7 +46,12 @@ GNU_CONFIGURE= yes WRKSRC= ${RUBY_WRKSRC} CONFIGURE_ARGS= ${RUBY_CONFIGURE_ARGS} \ --enable-shared -MAKE_ENV= LANG=C # prevent bison 1.33 w/ gettext 0.10.35 from coredumping + +.if defined(DEBUG) +CFLAGS+= -g +STRIP= # none +.endif + MAKE_ARGS= -j3 INSTALLS_SHLIB= yes MAN1= ruby${_RUBY_SUFFIX}.1 @@ -77,6 +81,7 @@ PLIST_SUB+= IF_DEFAULT=${IF_DEFAULT} \ RUBYLIB=${RUBYLIB} INSTALLED_SCRIPTS= ${PREFIX}/bin/irb \ + ${PREFIX}/bin/erb \ ${PREFIX}/bin/h2rb OBSOLETED_MODULES= dl \ @@ -92,6 +97,7 @@ OBSOLETED_MODULES= dl \ uri post-extract: + ${MV} ${WRKSRC}/ext/dl/h2rb ${WRKSRC}/bin/ .if defined(WITH_ONIGURUMA) ${TAR} -zxvf ${DISTDIR}/${DIST_SUBDIR}/${ONIGURUMA_DISTFILE} -C ${WRKDIR} .endif @@ -113,22 +119,15 @@ pre-install: ${RM} -f ${RUBY_WITHOUT_SUFFIX}${RUBY_R} \ ${PREFIX}/man/man1/ruby${RUBY_R}.1 \ ${PREFIX}/man/man1/ruby${RUBY_R}.1.gz - for f in ${INSTALLED_SCRIPTS}; do \ - ${RM} -f $${f}${RUBY_R}; \ - done post-install: .if defined(STRIP) && ${STRIP} == -s - strip ${RUBY} + ${STRIP_CMD} ${RUBY} .endif - ${INSTALL_SCRIPT} ${WRKSRC}/ext/dl/h2rb ${PREFIX}/bin/ .if ${RUBY_VER} == ${RUBY_DEFAULT_VER} ${MV} -f ${RUBY_WITHOUT_SUFFIX}${RUBY_R} ${RUBY_WITH_SUFFIX} ${MV} -f ${PREFIX}/man/man1/ruby${RUBY_R}.1 ${PREFIX}/man/man1/ruby${_RUBY_SUFFIX}.1 .endif - for f in ${INSTALLED_SCRIPTS}; do \ - ${MV} -f $${f} $${f}${_RUBY_SUFFIX}; \ - done if [ -x ${RUBY_WITHOUT_SUFFIX}${RUBY_DEFAULT_SUFFIX}${RUBY_R} ]; then \ ${LN} -fs ${RUBY_WITHOUT_SUFFIX}${RUBY_DEFAULT_SUFFIX}${RUBY_R} ${RUBY_WITHOUT_SUFFIX}${RUBY_R}; \ ${LN} -fs ruby${RUBY_DEFAULT_SUFFIX}${RUBY_R}.1${MANEXT} ${PREFIX}/man/man1/ruby${RUBY_R}.1${MANEXT}; \ @@ -146,18 +145,6 @@ post-install: fi .endif ${LDCONFIG} -m ${PREFIX}/lib -.for f in ${INSTALLED_SCRIPTS} - ${RUBY_WITH_SUFFIX} ${RUBY_FLAGS} -i -p \ - -e 'if $$. == 1; ' \ - -e ' if /^#!/; ' \ - -e ' sub /^#!\s*\S*(\benv\s+)?\bruby/, "#!${RUBY_WITH_SUFFIX}";' \ - -e ' else;' \ - -e ' $$_ = "#!${RUBY_WITH_SUFFIX}\n" + $$_;' \ - -e ' end;' \ - -e 'end' \ - ${f}${_RUBY_SUFFIX} - ${CHMOD} ${BINMODE} ${f}${_RUBY_SUFFIX} -.endfor ${MKDIR} ${RUBY_ELISPDIR} ${TOUCH} ${RUBY_ELISPDIR}/.keep_me ${MKDIR} ${RUBY_EXAMPLESDIR} diff --git a/lang/ruby18/distinfo b/lang/ruby18/distinfo index 9196017b2259..c274e83098fa 100644 --- a/lang/ruby18/distinfo +++ b/lang/ruby18/distinfo @@ -1,2 +1,2 @@ -MD5 (ruby/ruby-1.7.3-2002.11.14.tar.bz2) = 9e1978a64c23acc5ee754e7b9f1e0627 +MD5 (ruby/ruby-1.7.3-2002.11.22.tar.bz2) = fafe9cbd17e49dbf356710bc5751d78a MD5 (ruby/onigd20020424.tar.gz) = d5e6505aa776378a58cdb0fd4ef9cdc0 diff --git a/lang/ruby18/files/patch-mkmf.rb b/lang/ruby18/files/patch-mkmf.rb new file mode 100644 index 000000000000..d121d10c8333 --- /dev/null +++ b/lang/ruby18/files/patch-mkmf.rb @@ -0,0 +1,33 @@ +Index: lib/mkmf.rb +=================================================================== +RCS file: /src/ruby/lib/mkmf.rb,v +retrieving revision 1.116 +diff -u -1 -r1.116 mkmf.rb +--- lib/mkmf.rb 14 Nov 2002 13:51:19 -0000 1.116 ++++ lib/mkmf.rb 22 Nov 2002 12:38:13 -0000 +@@ -688,7 +688,6 @@ + mfile.print %{ +-all: $(DLLIB) ++CLEANLIBS = "$(TARGET).{lib,exp,il?,tds,map}" $(DLLIB) ++CLEANOBJS = "*.{#{$OBJEXT},#{$LIBEXT},s[ol],pdb,bak}" + +-clean:: +- @$(RM) "$(TARGET).{lib,exp,il?,tds,map}" $(DLLIB) +- @$(RM) "*.{#{$OBJEXT},#{$LIBEXT},s[ol],pdb,bak}" ++all: $(DLLIB) + } +@@ -850,6 +849,6 @@ + CLEANINGS = " +-clean:: +- @$(RM) $(CLEANFILES) ++clean: ++ @$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) + +-distclean:: clean ++distclean: clean + @$(RM) Makefile extconf.h conftest.* mkmf.log +@@ -857,3 +856,3 @@ + +-realclean:: distclean ++realclean: distclean + " diff --git a/lang/ruby18/files/patch-tempfile.rb b/lang/ruby18/files/patch-tempfile.rb deleted file mode 100644 index 4018f06739d9..000000000000 --- a/lang/ruby18/files/patch-tempfile.rb +++ /dev/null @@ -1,147 +0,0 @@ -Index: lib/tempfile.rb -=================================================================== -RCS file: /src/ruby/lib/tempfile.rb,v -retrieving revision 1.10 -retrieving revision 1.12 -diff -u -r1.10 -r1.12 ---- lib/tempfile.rb 4 Jun 2002 07:34:19 -0000 1.10 -+++ lib/tempfile.rb 18 Nov 2002 07:26:15 -0000 1.12 -@@ -1,31 +1,43 @@ - # --# $Id: tempfile.rb,v 1.10 2002/06/04 07:34:19 matz Exp $ -+# $Id: tempfile.rb,v 1.12 2002/11/18 07:26:15 knu Exp $ - # --# The class for temporary files. --# o creates a temporary file, which name is "basename.pid.n" with mode "w+". --# o Tempfile objects can be used like IO object. --# o with tempfile.close(true) created temporary files are removed. --# o created files are also removed on script termination. --# o with Tempfile#open, you can reopen the temporary file. --# o file mode of the temporary files are 0600. -+# This is a class for managing temporary files. -+# -+# o Tempfile::new("basename") creates a temporary file whose name is -+# "basename.pid.n" and opens with mode "w+". -+# o A Tempfile object can be treated as an IO object. -+# o The temporary directory is determined by ENV['TMPDIR'], -+# ENV['TMP'], and ENV['TEMP'] in the order named, and if none of -+# them is available, it is set to /tmp. -+# o When $SAFE > 0, you should specify a directory via the second argument -+# of Tempfile::new(), or it will end up finding an ENV value tainted and -+# pick /tmp. In case you don't have it, an exception will be raised. -+# o Tempfile#close(true) gets the temporary file removed immediately. -+# o Otherwise, the removal is delayed until the object is finalized. -+# o With Tempfile#open, you can reopen the temporary file. -+# o The file mode for the temporary files is 0600. -+# o This library is (considered to be) thread safe. - - require 'delegate' - - class Tempfile < SimpleDelegator - Max_try = 10 -+ @@cleanlist = [] - -- def Tempfile.callback(path, data) -+ def Tempfile.callback(data) - pid = $$ - lambda{ - if pid == $$ -+ path, tmpfile, cleanlist = *data -+ - print "removing ", path, "..." if $DEBUG -- data[0].close if data[0] -- if File.exist?(path) -- File.unlink(path) -- end -- if File.exist?(path + '.lock') -- Dir.rmdir(path + '.lock') -- end -+ -+ tmpfile.close if tmpfile -+ -+ # keep this order for thread safeness -+ File.unlink(path) if File.exist?(path) -+ cleanlist.delete(path) if cleanlist -+ - print "done\n" if $DEBUG - end - } -@@ -35,30 +47,44 @@ - if $SAFE > 0 and tmpdir.tainted? - tmpdir = '/tmp' - end -- n = 0 -- while true -+ -+ lock = nil -+ n = failure = 0 -+ -+ begin -+ Thread.critical = true -+ - begin - tmpname = sprintf('%s/%s%d.%d', tmpdir, basename, $$, n) - lock = tmpname + '.lock' -- unless File.exist?(tmpname) or File.exist?(lock) -- Dir.mkdir(lock) -- break -- end -- rescue -- raise "cannot generate tempfile `%s'" % tmpname if n >= Max_try -- #sleep(1) -- end -- n += 1 -+ n += 1 -+ end while @@cleanlist.include?(tmpname) or -+ File.exist?(lock) or File.exist?(tmpname) -+ -+ Dir.mkdir(lock) -+ rescue -+ failure += 1 -+ retry if failure < Max_try -+ raise "cannot generate tempfile `%s'" % tmpname -+ ensure -+ Thread.critical = false - end - -- @protect = [] -- @clean_files = Tempfile.callback(tmpname, @protect) -- ObjectSpace.define_finalizer(self, @clean_files) -+ @data = [tmpname] -+ @clean_proc = Tempfile.callback(@data) -+ ObjectSpace.define_finalizer(self, @clean_proc) - - @tmpfile = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL, 0600) -- @protect[0] = @tmpfile - @tmpname = tmpname -+ @@cleanlist << @tmpname -+ @data[1] = @tmpfile -+ @data[2] = @@cleanlist -+ - super(@tmpfile) -+ -+ # Now we have all the File/IO methods defined, you must not -+ # carelessly put bare puts(), etc. after this. -+ - Dir.rmdir(lock) - end - -@@ -69,15 +95,15 @@ - def open - @tmpfile.close if @tmpfile - @tmpfile = File.open(@tmpname, 'r+') -- @protect[0] = @tmpfile -+ @data[1] = @tmpfile - __setobj__(@tmpfile) - end - - def close(real=false) - @tmpfile.close if @tmpfile -- @protect[0] = @tmpfile = nil -+ @data[1] = @tmpfile = nil - if real -- @clean_files.call -+ @clean_proc.call - ObjectSpace.undefine_finalizer(self) - end - end diff --git a/lang/ruby18/pkg-plist b/lang/ruby18/pkg-plist index 0c6d16c43c91..eed68d9ec8ab 100644 --- a/lang/ruby18/pkg-plist +++ b/lang/ruby18/pkg-plist @@ -1,3 +1,5 @@ +%%IF_DEFAULT%%bin/erb%%RUBY_R%% +bin/erb%%_RUBY_SUFFIX%% %%IF_DEFAULT%%bin/h2rb%%RUBY_R%% bin/h2rb%%_RUBY_SUFFIX%% %%IF_DEFAULT%%bin/irb%%RUBY_R%% @@ -58,6 +60,7 @@ lib/lib%%RUBY_NAME%%.so.%%RUBY_SHLIBVER%% %%RUBYLIB%%%%RUBY_LIBDIR%%/debug.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/delegate.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/e2mmap.rb +%%RUBYLIB%%%%RUBY_LIBDIR%%/erb.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/eregex.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/expect.rb %%RUBYLIB%%%%RUBY_LIBDIR%%/fileutils.rb @@ -261,7 +264,6 @@ lib/lib%%RUBY_NAME%%.so.%%RUBY_SHLIBVER%% %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/fullpath.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/getopts.test %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/goodfriday.rb -%%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/irb.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/less.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/list.rb %%PORTDOCS%%%%RUBY_EXAMPLESDIR%%/list2.rb |