385 lines
13 KiB
Tcl
Executable File
385 lines
13 KiB
Tcl
Executable File
#!/usr/bin/wish
|
|
|
|
###########################################################
|
|
# Tcl/Tk Project Manager #
|
|
# install script #
|
|
# Copyright (c) "Sergey Kalinin", 2001, http://nuk-svk.ru #
|
|
# Author: Sergey Kalinin banzaj28@yandex.ru #
|
|
###########################################################
|
|
|
|
|
|
## SETTING VARIABLES AND DIRECTORYES ##
|
|
set ver "0.4.5"
|
|
set imgDir img
|
|
set msgDir msgs
|
|
set docDir hlp
|
|
set hlDir highlight
|
|
set fontNormal "helvetica 12 normal roman"
|
|
package require msgcat
|
|
package require BWidget
|
|
|
|
::msgcat::mclocale en
|
|
::msgcat::mcload msgs
|
|
|
|
if {$tcl_platform(platform) == "unix"} {
|
|
set initDir "$env(HOME)"
|
|
set rootDir "/usr/local"
|
|
set tmpDir "$env(HOME)/tmp"
|
|
set tclDir "/usr/bin"
|
|
} elseif {$tcl_platform(platform) == "windows"} {
|
|
set initDir "c:\\"
|
|
set rootDir "c:\\Tcl"
|
|
set tmpDir "c:\\temp"
|
|
set tclDir "C:\\Tcl\\bin"
|
|
}
|
|
|
|
proc InsertEnt {entry text} {
|
|
$entry delete 0 end
|
|
$entry insert end $text
|
|
}
|
|
proc SelectDir {dir} {
|
|
set dirName [tk_chooseDirectory -initialdir $dir\
|
|
-title "[::msgcat::mc "Select directory"]"\
|
|
-parent .]
|
|
return $dirName
|
|
}
|
|
## GET HELP DIRECTORYES ##
|
|
proc GetHelp {} {
|
|
global docDir localeList
|
|
set localeList ""
|
|
if {[catch {cd $docDir}] != 0} {
|
|
return ""
|
|
}
|
|
foreach file [lsort [glob -nocomplain *]] {
|
|
if {[file isdirectory $file] == 1 && $file != "CVS"} {
|
|
lappend localeList [list [file rootname $file]]
|
|
}
|
|
}
|
|
catch {cd ..}
|
|
return $localeList
|
|
}
|
|
|
|
proc GetLocale {} {
|
|
global msgDir locList
|
|
set locList ""
|
|
if {[catch {cd $msgDir}] != 0} {
|
|
return ""
|
|
}
|
|
foreach file [lsort [glob -nocomplain *.msg]] {
|
|
puts $file
|
|
if {[file isdirectory $file] == 0} {
|
|
puts [file rootname $file]
|
|
lappend locList [list [file rootname $file]]
|
|
}
|
|
}
|
|
catch {cd ..}
|
|
return $locList
|
|
}
|
|
|
|
set w .
|
|
wm title $w "Install Tcl/Tk Project Manager"
|
|
#wm resizable $w 0 0
|
|
#wm geometry $w 400x350
|
|
set top [frame .frmTop -relief groove -borderwidth 1 -background white]
|
|
pack $top -fill x
|
|
|
|
image create photo imgAbout -format gif -file [file join img projman.gif]
|
|
label $top.lblImg -image imgAbout -background white
|
|
pack $top.lblImg -side top -pady 5 -padx 5
|
|
|
|
set frm [frame .frmMain -relief groove -borderwidth 1]
|
|
pack $frm -expand 1 -fill both
|
|
|
|
set btn [frame .frmButton -relief groove -borderwidth 1]
|
|
pack $btn -fill x
|
|
|
|
image create photo imgFold -format gif -file [file join img folder.gif]
|
|
|
|
set frm1 [frame $frm.frmRootDir]
|
|
pack $frm1 -fill x -pady 2
|
|
label $frm1.lblRootDir -text "Install dir" -width 23 -anchor w
|
|
entry $frm1.txtRootDir
|
|
button $frm1.btnRootDir -borderwidth {1} -image imgFold\
|
|
-command {
|
|
$frm1.txtRootDir delete 0 end
|
|
$frm1.txtRootDir insert end [SelectDir $initDir]
|
|
}
|
|
pack $frm1.lblRootDir -side left
|
|
pack $frm1.txtRootDir -side left -fill x -expand true
|
|
|
|
pack $frm1.btnRootDir -side left
|
|
set frm4 [frame $frm.frmTclDir]
|
|
pack $frm4 -fill x -pady 2
|
|
label $frm4.lblTclDir -text "Tcl bin dir" -width 23 -anchor w
|
|
entry $frm4.txtTclDir
|
|
button $frm4.btnTclDir -borderwidth {1} -image imgFold\
|
|
-command {
|
|
$frm4.txtTclDir delete 0 end
|
|
$frm4.txtTclDir insert end [SelectDir $initDir]
|
|
}
|
|
pack $frm4.lblTclDir -side left
|
|
pack $frm4.txtTclDir -side left -fill x -expand true
|
|
pack $frm4.btnTclDir -side left
|
|
|
|
set frm6 [frame $frm.frmDocLang]
|
|
pack $frm6 -fill x -pady 2
|
|
label $frm6.lblLang -text [::msgcat::mc "Documentation language"]\
|
|
-width 23 -anchor w
|
|
set combo [ComboBox $frm6.txtLang\
|
|
-textvariable langDoc -command "puts 123"\
|
|
-selectbackground "#55c4d1" -selectborderwidth 0\
|
|
-values [GetHelp]]
|
|
pack $frm6.lblLang -side left
|
|
pack $frm6.txtLang -side left -fill x -expand true
|
|
|
|
set frm7 [frame $frm.frmLocale]
|
|
pack $frm7 -fill x -pady 2
|
|
label $frm7.lblLocale -text [::msgcat::mc "Interface language"]\
|
|
-width 23 -anchor w
|
|
set comboLocale [ComboBox $frm7.txtLocale\
|
|
-textvariable localeSet -command "puts 123"\
|
|
-selectbackground "#55c4d1" -selectborderwidth 0\
|
|
-values [GetLocale]]
|
|
pack $frm7.lblLocale -side left
|
|
pack $frm7.txtLocale -side left -fill x -expand true
|
|
|
|
|
|
button $btn.btnOk -text "Next" -width 10 -borderwidth {1}\
|
|
-command {
|
|
CopyFiles [$frm1.txtRootDir get] [$frm4.txtTclDir get] $langDoc $localeSet
|
|
}
|
|
button $btn.btnCancel -text "Exit" -width 10 -borderwidth {1}\
|
|
-command {exit}
|
|
|
|
pack $btn.btnOk $btn.btnCancel -side left -padx 2 -pady 2 -expand 1
|
|
|
|
bind $w <Escape> "exit"
|
|
|
|
InsertEnt $frm1.txtRootDir $rootDir
|
|
InsertEnt $frm4.txtTclDir $tclDir
|
|
$combo setvalue @0
|
|
$comboLocale setvalue @0
|
|
|
|
proc CopyFiles {rootDir tclDir langDoc locale} {
|
|
global ver tcl_platform binDir hlDir
|
|
set exeName projman
|
|
set modules {
|
|
editor.tcl help.tcl html_lib.tcl procedure.tcl
|
|
main.tcl settings.tcl projects.tcl imgviewer.tcl
|
|
baloon.tcl completition.tcl taglist.tcl supertext.tcl
|
|
pane.tcl highlight/html.tcl highlight/spec.tcl highlight/tcl.tcl highlight/tex.tcl
|
|
highlight/caml.tcl highlight/fortran.tcl highlight/java.tcl
|
|
highlight/perl.tcl highlight/php.tcl highlight/rivet.tcl highlight/ruby.tcl
|
|
}
|
|
set docFiles {TODO README INSTALL CHANGELOG COPYING THANKS}
|
|
set confFiles {projman.spec projman.conf}
|
|
|
|
if {[string length [string trim $rootDir]]} {
|
|
regsub -all {\\} $rootDir {\\\\} rootDir_
|
|
set rootDir $rootDir_
|
|
}
|
|
if {[string length [string trim $tclDir]]} {
|
|
regsub -all {\\} $tclDir {\\\\} tclDir_
|
|
set tclDir $tclDir_
|
|
}
|
|
destroy .frmMain.frmRootDir
|
|
destroy .frmMain.frmTclDir
|
|
destroy .frmMain.frmLocale
|
|
destroy .frmMain.frmDocLang
|
|
set frm ".frmMain"
|
|
pack $frm -expand 1 -fill both
|
|
set text [text $frm.text -yscrollcommand "$frm.yscroll set" \
|
|
-relief sunken -wrap word -highlightthickness 0\
|
|
-selectborderwidth 0 -selectbackground #55c4d1 -height 15 -width 30]
|
|
scrollbar $frm.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
|
|
-command "$frm.text yview"
|
|
pack $frm.text -side left -fill both -expand true
|
|
pack $frm.yscroll -side left -fill y
|
|
|
|
$text insert end "Root dir - $rootDir\nTcl dir - $tclDir"
|
|
$text insert end "\n-- Copying files --\n"
|
|
|
|
set binDir [file join $rootDir bin ]
|
|
set dataDir [file join $rootDir share projman ]
|
|
set docDir [file join $rootDir share doc projman-$ver]
|
|
set imgDir [file join $dataDir img ]
|
|
set msgDir [file join $dataDir msgs ]
|
|
set hlDir [file join $dataDir highlight ]
|
|
|
|
## CREATE DIRECTORYES ##
|
|
if {[file exists $rootDir] != 1} {file mkdir $rootDir}
|
|
if {[file exists $binDir ] != 1} {file mkdir $binDir }
|
|
if {[file exists $dataDir] != 1} {file mkdir $dataDir}
|
|
if {[file exists $docDir ] != 1} {file mkdir $docDir }
|
|
if {[file exists $imgDir ] != 1} {file mkdir $imgDir }
|
|
if {[file exists $msgDir ] != 1} {file mkdir $msgDir }
|
|
if {[file exists $hlDir ] != 1} {file mkdir $hlDir }
|
|
|
|
## CREATE EXECUTION FILE ##
|
|
puts [pwd]
|
|
set source [open "projman.tcl" "r"]
|
|
set exe [open [file join $binDir $exeName] "w"]
|
|
while {[gets $source line]>=0} {
|
|
if {[string match "set rootDir \"/usr\"" [string trim $line]] == 1} {
|
|
puts $exe "set rootDir \"$rootDir_\""
|
|
} elseif {[string match "set tclDir \"/usr/bin\"" [string trim $line]] == 1} {
|
|
puts $exe "set tclDir \"$tclDir_\""
|
|
} else {
|
|
puts $exe $line
|
|
}
|
|
}
|
|
close $source
|
|
close $exe
|
|
|
|
## SET PERMISSIONS ON FILE FOR UNIX OR CREATE start.bat FILE FOR WINDOWS ##
|
|
if {$tcl_platform(platform) == "unix"} {
|
|
file attributes [file join $binDir $exeName] -permissions 00755
|
|
} elseif {$tcl_platform(platform) == "windows"} {
|
|
set bat [open [file join $binDir projman.bat] "w"]
|
|
set progPath "[file join $binDir $exeName.tcl]"
|
|
file rename -force [file join $binDir $exeName] $progPath
|
|
regsub -all {/} $progPath "\\" progPath
|
|
set tclPath "[file join $tclDir wish.exe]"
|
|
regsub -all {/} $tclPath "\\" tclPath
|
|
puts $bat "\"$tclPath\" \"$progPath\""
|
|
close $bat
|
|
}
|
|
## COPYING MODULES FILES (*.tcl) ##
|
|
foreach file $modules {
|
|
lappend rList [list [file join . $file]]
|
|
set fileName [file join $file]
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $dataDir $fileName]
|
|
}
|
|
|
|
## COPYING CONFIG FILE ##
|
|
foreach fileName $confFiles {
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $dataDir $fileName]
|
|
}
|
|
## COPYING DOCUMENTATION (HELP) FILES ##
|
|
foreach fileName $docFiles {
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $docDir $fileName]
|
|
}
|
|
if {$locale == ""} {
|
|
set locale "en"
|
|
}
|
|
if {$langDoc == ""} {
|
|
set langDoc "en"
|
|
}
|
|
puts "Locale - $locale LangDoc - $langDoc"
|
|
if {[catch {cd [file join hlp $langDoc]}] != 0} {
|
|
return ""
|
|
}
|
|
foreach dir [lsort [glob -nocomplain *]] {
|
|
if {[file isdirectory $dir] == 1 && $dir != "CVS"} {
|
|
if {[file exists [file join $docDir $dir]] != 1} {
|
|
file mkdir [file join $docDir $dir]
|
|
#puts [file join $docDir $dir]
|
|
}
|
|
foreach file [lsort [glob -nocomplain [file join $dir *.*]]] {
|
|
#puts $file
|
|
lappend rList [list [file join . $file]]
|
|
set fileName [file join $file]
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $docDir $fileName]
|
|
}
|
|
}
|
|
}
|
|
## COPYING IMAGE FILES ##
|
|
if {[catch {cd [file join .. .. img]}] != 0} {
|
|
return ""
|
|
}
|
|
foreach file [lsort [glob -nocomplain *.gif]] {
|
|
lappend rList [list [file join . $file]]
|
|
set fileName [file join $file]
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $imgDir $fileName]
|
|
}
|
|
foreach file [lsort [glob -nocomplain *.png]] {
|
|
lappend rList [list [file join . $file]]
|
|
set fileName [file join $file]
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $imgDir $fileName]
|
|
}
|
|
## COPYING MESSAGES FILES ##
|
|
if {[catch {cd [file join .. msgs]}] != 0} {
|
|
return ""
|
|
}
|
|
foreach file [lsort [glob -nocomplain *.msg]] {
|
|
lappend rList [list [file join . $file]]
|
|
set fileName [file join $file]
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $msgDir $fileName]
|
|
}
|
|
## COPYING HIGHLIGHT FILES ##
|
|
if {[catch {cd [file join .. highlight]}] != 0} {
|
|
return ""
|
|
}
|
|
foreach file [lsort [glob -nocomplain *.tcl]] {
|
|
lappend rList [list [file join . $file]]
|
|
set fileName [file join $file]
|
|
$text insert end "$fileName\n"
|
|
$text mark set insert end
|
|
$text see insert
|
|
file copy -force -- $fileName [file join $hlDir $fileName]
|
|
}
|
|
$text insert end "-- Copying file complite --"
|
|
$text mark set insert end
|
|
$text see insert
|
|
destroy .frmButton.btnOk
|
|
.frmButton.btnCancel configure -text "Finish" -command {exit}
|
|
|
|
SetVarLang $locale
|
|
}
|
|
|
|
|
|
#Michel SALVAGNIAC 7 avril 2002
|
|
#positionne la variable d'environnement LANG
|
|
#n?cessaire pour msgcat
|
|
#version de tcl/tk :8.3
|
|
#test? avec Windows 95,Windows NT4,Windows 2000, Windows XP pro
|
|
|
|
proc SetVarLang {lang} {
|
|
global tcl_platform rootDir
|
|
set language $lang
|
|
if {$tcl_platform(platform) == "windows"} {
|
|
#Windows NT,2000,XP PRO
|
|
if {$tcl_platform(os) == "Windows NT"} {
|
|
package require registry
|
|
tk_messageBox -type ok -icon warning \
|
|
-message "Modifying the Registry..."
|
|
set clebase "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment"
|
|
registry set $clebase LANG $language sz
|
|
#Windows 95
|
|
} elseif {$tcl_platform(os) == "Windows 95"} {
|
|
tk_messageBox -type ok -icon warning \
|
|
-message "Modifying the C:\\Autoexec.bat"
|
|
file copy -force c:/Autoexec.bat c:/autoexec.sav
|
|
set ficsys [open "c:/autoexec.bat" a+]
|
|
puts $ficsys "SET LANG=$language "
|
|
puts $ficsys "SET HOMEDRIVE=C:\\"
|
|
set workDir [file join $rootDir work]
|
|
regsub -all {/} $workDir {\\} home
|
|
puts $ficsys "SET HOMEPATH=$home"
|
|
close $ficsys
|
|
}
|
|
}
|
|
}
|
|
|