diff options
author | hobbs <hobbs@noemail.net> | 2001-11-20 10:15:05 (GMT) |
---|---|---|
committer | hobbs <hobbs@noemail.net> | 2001-11-20 10:15:05 (GMT) |
commit | f96da2d0de5f73cbc125621b79a8dab8953f543f (patch) | |
tree | 1a4871a876a13bf1b592ba2e1949ebc452237cf9 | |
parent | 22476d3476832e64d5aa8e4aebb502c11d4772eb (diff) | |
download | tcl-f96da2d0de5f73cbc125621b79a8dab8953f543f.zip tcl-f96da2d0de5f73cbc125621b79a8dab8953f543f.tar.gz tcl-f96da2d0de5f73cbc125621b79a8dab8953f543f.tar.bz2 |
* tools/eolFix.tcl (new-file):
* unix/Makefile.in: added EOL correction for Windows bat files to
dist target. [Bug #219409] (davygrvy)
FossilOrigin-Name: 977e6ec0414370630ace917c2ed58b606360947b
-rw-r--r-- | tools/eolFix.tcl | 78 | ||||
-rw-r--r-- | unix/Makefile.in | 6 |
2 files changed, 83 insertions, 1 deletions
diff --git a/tools/eolFix.tcl b/tools/eolFix.tcl new file mode 100644 index 0000000..11c410d --- /dev/null +++ b/tools/eolFix.tcl @@ -0,0 +1,78 @@ +## Super aggressive EOL-fixer! +## +## Will even understand screwed up ones like CRCRLF. +## (found in bad CVS repositories, caused by spacey developers +## abusing CVS) +## +## davygrvy@pobox.com 3:41 PM 10/12/2001 +## + +package provide EOL-fix 1.1 + +namespace eval ::EOL { + variable outMode crlf +} + +proc EOL::fix {filename {newfilename ""}} { + variable outMode + + if {![file exist $filename]} { return } + puts "EOL Fixing: $filename" + + file rename ${filename} ${filename}.o + set fhnd [open ${filename}.o r] + + if {$newfilename != ""} { + set newfhnd [open ${newfilename} w] + } else { + set newfhnd [open ${filename} w] + } + + fconfigure $newfhnd -translation [list auto $outMode] + seek $fhnd 0 end + set theEnd [tell $fhnd] + seek $fhnd 0 start + + fconfigure $fhnd -translation binary -buffersize $theEnd + set rawFile [read $fhnd $theEnd] + close $fhnd + + regsub -all {(\r)|(\r){1,2}(\n)} $rawFile "\n" rawFile + + set lineList [split $rawFile \n] + + foreach line $lineList { + puts $newfhnd $line + } + + close $newfhnd + file delete ${filename}.o +} + +proc EOL::fixall {args} { + if {[llength $args] == 0} { + puts stderr "no files to fix" + exit 1 + } else { + set cmd [lreplace $args -1 -1 glob -nocomplain] + } + + foreach f [eval $cmd] { + if {[file isfile $f]} {fix $f} + } +} + +if {$tcl_interactive == 0 && $argc > 0} { + if {[string index [lindex $argv 0] 0] == "-"} { + switch -- [lindex $argv 0] { + -cr { set ::EOL::outMode cr } + -crlf { set ::EOL::outMode crlf } + -lf { set ::EOL::outMode lf } + default { puts stderr "improper mode switch" ; exit 1 } + } + set argv [lrange $argv 1 end] + } + eval EOL::fixall $argv +} else { + return +} diff --git a/unix/Makefile.in b/unix/Makefile.in index f7400ab..17fbffd 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -5,7 +5,7 @@ # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.86 2001/11/11 03:16:10 mdejong Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.87 2001/11/20 10:15:06 hobbs Exp $ VERSION = @TCL_VERSION@ @@ -1211,8 +1211,10 @@ dist: $(UNIX_DIR)/configure mklinks $(TOP_DIR)/win/*.ico $(TOP_DIR)/win/*.rc \ $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win + $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/*.bat cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win cp -p $(TOP_DIR)/win/tcl.hpj.in $(DISTDIR)/win + $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/tcl.hpj.in cp -p $(TOP_DIR)/win/README $(DISTDIR)/win cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win mkdir $(DISTDIR)/mac @@ -1235,6 +1237,8 @@ dist: $(UNIX_DIR)/configure mklinks $(TOP_DIR)/tools/tcl.wse.in $(TOP_DIR)/tools/*.bmp \ $(TOP_DIR)/tools/tcl.hpj.in \ $(DISTDIR)/tools + $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/tcl.hpj.in \ + $(TOP_DIR)/tools/tcl.wse.in # # The following target can only be used for non-patch releases. Use |