#!/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 "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 } } }