-;#
-;# Open source Tcl utilities. This contains material to automatically create
-;# MS project or automake builders from the OpenCascade modules definition.
-;# This file requires:
-;# 1. Tcl utilities of Wok.
-;# 2. Wok commands and workbench environment.
-;#
-;# Author: yolanda_forbes@hotmail.com
-;#
-;# (((((((((((((((((((((((( MS PROJECT )))))))))))))))))))))))
-;#
-;# the full path of a MS project template file.
-;# Should be overwritten
-;#
-proc osutils:dsp:readtemplate { } {
- set loc [wokinfo -p source:template.dsp KAS:dev:ros:WOKTclLib]
- puts stderr "Info : readtemplate : Template for MS project from $loc"
- return [wokUtils:FILES:FileToString $loc]
-}
-proc osutils:dsp:readtemplatex { } {
- puts stderr "Info : readtemplate : Template for MS project from [set loc [wokinfo -p source:template.dspx KAS:dev:ros:WOKTclLib]]"
- return [wokUtils:FILES:FileToString $loc]
-}
-proc osutils:am:readtemplate { } {
- puts stderr "Info : readtemplate : Template for Makefile.am from [set loc [wokinfo -p source:template.mam KAS:dev:ros:WOKTclLib]]"
- return [wokUtils:FILES:FileToString $loc]
-
-}
-proc osutils:am:readtemplatex { } {
- puts stderr "Info : readtemplatex : Template for Makefile.am from [set loc [wokinfo -p source:template.mamx KAS:dev:ros:WOKTclLib]]"
- return [wokUtils:FILES:FileToString $loc]
-
-}
-proc osutils:in:readtemplate { } {
- puts stderr "Info : readtemplate : Template for Makefile.in from [set loc [wokinfo -p source:template.min KAS:dev:ros:WOKTclLib]]"
- return [wokUtils:FILES:FileToString $loc]
-
-}
-proc osutils:in:readtemplatex { } {
- puts stderr "Info : readtemplatex : Template for Makefile.in from [set loc [wokinfo -p source:template.minx KAS:dev:ros:WOKTclLib]]"
- return [wokUtils:FILES:FileToString $loc]
-
-}
-;#
-;#
-;#
-proc osutils:dsw:header { } {
- append var \
- "Microsoft Developer Studio Workspace File, Format Version 6.00" "\n" \
- "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!" "\n" \
- "\n" \
- "###############################################################################" "\n" \
- "\n"
- return $var
-}
-;#
-;# the leaf of a workspace file
-;#
-proc osutils:dsw:projectleaf { TK } {
- append var \
- "Project: \"$TK\"=.\\$TK.dsp - Package Owner=<4>" "\n" \
- "\n" \
- "Package=<5>" "\n" \
- "\{\{\{" "\n" \
- "\}\}\}" "\n" \
- "\n" \
- "Package=<4>" "\n" \
- "\{\{\{" "\n" \
- "\}\}\}" "\n" \
- "\n" \
- "###############################################################################" "\n" \
- "\n"
- return $var
-}
-;#
-;# an item of a workspace file
-;#
-proc osutils:dsw:projectby2 { TK Dep_Name } {
- append var \
- "Project: \"$TK\"=.\\$TK.dsp - Package Owner=<4>" "\n" \
- "\n" \
- "Package=<5>" "\n" \
- "\{\{\{" "\n" \
- "\}\}\}" "\n" \
- "\n" \
- "Package=<4>" "\n" \
- "\{\{\{" "\n"
- if {[wokinfo -x $TK] != "0"} {
- if {[uinfo -t $TK] == "toolkit"} {
- set deplist [LibToLink $TK]
- } else {
- set deplist [LibToLinkX $TK $TK]
- ;#puts $deplist
- }
- foreach deplib $deplist {
- if {$deplib != $TK} {
- append var " Begin Project Dependency" "\n" \
- " Project_Dep_Name $deplib" "\n" \
- " End Project Dependency" "\n"
- }
- }
- }
-
- append var "\}\}\}" "\n" \
- "\n" \
- "###############################################################################" "\n" \
- "\n"
- return $var
-}
-;#
-;#
-;#
-proc osutils:dsw:footer { } {
- append var \
- "Global:" "\n" \
- "\n" \
- "Package=<5>" "\n" \
- "{{{" "\n" \
- "}}}" "\n" \
- "\n" \
- "Package=<3>" "\n" \
- "{{{" "\n" \
- "}}}" "\n" \
- "\n" \
- "###############################################################################" "\n"
- return $var
-}
-;#
-;# An item for compiling a c++ class
-;#
-proc osutils:dsp:fmtcpp { } {
- return {# ADD CPP /I ..\..\inc /I ..\..\drv\%s /I ..\..\src\%s /D "__%s_DLL"}
-}
-;#
-;# An item for compiling a c++ main
-;#
-proc osutils:dsp:fmtcppx { } {
- return {# ADD CPP /I ..\..\inc /I ..\..\drv\%s /I ..\..\src\%s /D "__%s_DLL"}
-}
-;#
-;# List extensions of files devoted to be eaten by cl.exe compiler.
-;#
-proc osutils:dsp:compilable { } {
- return [list .c .cxx .cpp]
-}
-;#
-;# remove from listloc OpenCascade units indesirables on NT
-;#
-proc osutils:justwnt { listloc } {
- set lret {}
- set goaway [list Xdps Xw ImageUtility WOKUnix]
- foreach u $listloc {
- if { [lsearch $goaway [wokinfo -n $u]] == -1 } {
- lappend lret $u
- }
- }
- return $lret
-}
-;#
-;# remove from listloc OpenCascade units indesirables on Unix
-;#
-proc osutils:justunix { listloc } {
- set lret {}
- set goaway [list WNT WOKNT]
- foreach u $listloc {
- if { [lsearch $goaway [wokinfo -n $u]] == -1 } {
- lappend lret $u
- }
- }
- return $lret
-}
-;#
-;# Define libraries to link
-proc LibToLink {tkit} {
- if {[uinfo -t $tkit] == "toolkit"} {
- set l {}
- set LibList [woklocate -p [wokinfo -n $tkit]:stadmfile:[wokinfo -n $tkit]_lib_tks.Out]
- if ![ catch { set id [ open $LibList r ] } status ] {
- while {[gets $id x] >= 0 } {
- if [regexp -- {(-E[^ ]*)} $x] {
- set endnameid [expr { [string wordend $x 4] -1 }]
- set fx [string range $x 3 $endnameid]
- if {[uinfo -t [wokcd]:[file rootname $fx]] == "toolkit"} {
- lappend l $fx
- }
- }
- #if [regexp -- {(-VE[^ ]*)} $x] {
- # set startid [string first CSF $x]
- # set endid [ expr { [string wordend $x $startid] -1 } ]
- # set fx [string range $x $startid $endid]
- # lappend l $fx
- #}
-
- }
- close $id
- } else {
- puts $status
- }
- return $l
- }
-}
-
-proc LibToLinkX {tkit name} {
- if {[uinfo -t $tkit] == "executable"} {
- set l {}
- set LibList [woklocate -p [wokinfo -n $tkit]:stadmfile:[wokinfo -n $tkit]_exec_tks_${name}.Out]
- if ![ catch { set id [ open $LibList r ] } status ] {
- while {[gets $id x] >= 0 } {
- if [regexp -- {(-E[^ ]*)} $x] {
- set endnameid [expr { [string wordend $x 4] -1 }]
- set fx [string range $x 3 $endnameid]
- lappend l $fx
- }
- #if [regexp -- {(-VE[^ ]*)} $x] {
- # set startid [string first CSF $x]
- # set endid [ expr { [string wordend $x $startid] -1 } ]
- # set CSF_fx [string range $x $startid $endid]
- # if { $CSF_fx != "-"} {
- # puts $CSF_fx
- # set fx [file tail [lindex [wokparam -v \%$CSF_fx $tkit] 0]]
- # lappend l $fx
- # }
- #}
-
- }
- close $id
- } else {
- puts $status
- }
- return $l
- }
-}
-
-
-;#
-;# ((((((((WOK toolkits manipulations))))))))
-;#
-;# close dependencies of ltk. (full wok pathes of toolkits)
-;# The CURRENT WOK LOCATION MUST contains ALL TOOLKITS required.
-;# (locate not performed.)
-proc osutils:tk:close { ltk } {
- set result {}
- set recurse {}
- foreach dir $ltk {
- #set ids [woklocate -p [wokinfo -n [wokinfo -u $dir]]:source:EXTERNLIB [wokinfo -w $dir]]
- set ids [LibToLink $dir]
- set eated [osutils:tk:eatpk $ids]
- set result [concat $result $eated]
- set ids [LibToLink $dir]
- set result [concat $result $ids]
- #puts "EXTERNLIB dir = $dir ids = $ids result = $result eated = $eated"
- foreach file $eated {
- set kds [woklocate -p [wokinfo -n [wokinfo -u $file]]:source:EXTERNLIB [wokinfo -w $file]]
- if { [osutils:tk:eatpk $kds] != {} } {
- lappend recurse $file
- }
- }
- }
- ;# if ![lempty $recurse] {
- ;# set result [concat $result [osutils:tk:close $recurse]]
- ;# }
- if { $recurse != {} } {
- set result [concat $result [osutils:tk:close $recurse]]
- }
- #puts $result
- return $result
-}
-;#
-;# Topological sort of toolkits in tklm
-;#
-proc osutils:tk:sort { tklm } {
- set tkby2 {}
- foreach tkloc $tklm {
- set lprg [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]
- foreach tkx $lprg {
- if { [lsearch $tklm $tkx] != -1 } {
- lappend tkby2 [list $tkx $tkloc]
- } else {
- lappend tkby2 [list $tkloc {}]
- }
- }
- }
- set lret {}
- foreach e [wokUtils:EASY:tsort $tkby2] {
- if { $e != {} } {
- lappend lret $e
- }
- }
- return $lret
-}
-
-;#
-;# Returns liste of UD in a toolkit. tkloc is a full path wok.
-;#
-proc osutils:tk:units { tkloc {typed 0} } {
- set l {}
- set PACKAGES [woklocate -p [wokinfo -n [wokinfo -u $tkloc]]:source:PACKAGES [wokinfo -w $tkloc]]
- foreach u [wokUtils:FILES:FileToList $PACKAGES] {
- set fu [woklocate -u $u]
- if { [set fu [woklocate -u $u]] != {} } {
- if { $typed == 0 } {
- lappend l $fu
- }
- if { $typed == 1 } {
- lappend l [list [uinfo -c $fu] [wokinfo -n $fu]]
- }
- if { $typed == 2 } {
- lappend l [list [uinfo -c $fu] $fu]
- }
- if { $typed == 3 } {
- lappend l [list [uinfo -t $fu] [wokinfo -n $fu]]
- }
- if { $typed == 4 } {
- lappend l [list [uinfo -t $fu] $fu]
- }
- } else {
- puts stderr "Unit inconnue $u"
- }
- }
- if { $l == {} } {
- ;#puts stderr "Warning. No devunit included in $tkloc"
- }
- return $l
-}
-;#
-;# for a unit returns a map containing all its file in the current
-;# workbench
-;# local = 1 only local files
-;#
-proc osutils:tk:loadunit { loc map {local 0}} {
- upvar $map TLOC
- catch { unset TLOC }
- if { $local == 1 } {
- set lfiles [uinfo -Fpl $loc]
- } else {
- set lfiles [uinfo -Fp $loc]
- }
- foreach f $lfiles {
- #puts $f
- set t [lindex $f 0]
- set p [lindex $f 2]
- if [info exists TLOC($t)] {
- set l $TLOC($t)
- lappend l $p
- set TLOC($t) $l
- } else {
- set TLOC($t) $p
- }
- }
- return
-}
-;#
-;# Returns the list of all compilable files name in a toolkit, or devunit of any type
-;# Call unit filter on units name to accept or reject a unit
-;# Tfiles lists for each unit the type of file that can be compiled.
-;#
-proc osutils:tk:files { tkloc {l_compilable {} } {justail 1} {unitfilter {}} } {
- set Tfiles(source,package) {source derivated privinclude pubinclude drvfile}
- set Tfiles(source,nocdlpack) {source pubinclude drvfile}
- set Tfiles(source,schema) {source derivated privinclude pubinclude drvfile}
- set Tfiles(source,toolkit) {}
- set Tfiles(source,executable) {source pubinclude drvfile}
- set listloc [concat [osutils:tk:units [woklocate -u $tkloc]] [woklocate -u $tkloc]]
- #puts " listloc = $listloc"
- if { $l_compilable == {} } {
- set l_comp [list .c .cxx .cpp]
- } else {
- set l_comp [$l_compilable]
- }
- if { $unitfilter == {} } {
- set resultloc $listloc
- } else {
- set resultloc [$unitfilter $listloc]
- }
- set lret {}
- foreach loc $resultloc {
- set utyp [uinfo -t $loc]
- if [array exists map] { unset map }
- osutils:tk:loadunit $loc map
- #puts " loc = $loc === > [array names map]"
- set LType $Tfiles(source,${utyp})
- foreach typ [array names map] {
- if { [lsearch $LType $typ] == -1 } {
- unset map($typ)
- }
- }
- foreach type [array names map] {
- #puts $type
- foreach f $map($type) {
- #puts $f
- if { [lsearch $l_comp [file extension $f]] != -1 } {
- if { $justail == 1 } {
- if {$type == "source"} {
- if {[lsearch $lret "@top_srcdir@/drv/[wokinfo -n $loc]/[file tail $f]"] == -1} {
- lappend lret @top_srcdir@/src/[wokinfo -n $loc]/[file tail $f]
- }
- } elseif {$type == "derivated" || $type == "drvfile"} {
- if {[lsearch $lret "@top_srcdir@/src/[wokinfo -n $loc]/[file tail $f]"] == -1} {
- lappend lret @top_srcdir@/drv/[wokinfo -n $loc]/[file tail $f]
- }
- }
- } else {
- lappend lret $f
- }
- }
- }
- }
- }
- return $lret
-}
-;#
-;#
-;#
-proc osutils:tk:eatpk { EXTERNLIB } {
- set l [wokUtils:FILES:FileToList $EXTERNLIB]
- set lret {}
- foreach str $l {
- if ![regexp -- {(CSF_[^ ]*)} $str csf] {
- lappend lret $str
- }
- }
- return $lret
-}
-;#
-;# Return the list of name *CSF_ in a EXTERNLIB description of a toolkit
-;#
-proc osutils:tk:hascsf { EXTERNLIB } {
- set l [wokUtils:FILES:FileToList $EXTERNLIB]
- set lret {}
- foreach str $l {
- if [regexp -- {(CSF_[^ ]*)} $str csf] {
- lappend lret $csf
- }
- }
- return $lret
-}
-;#
-;# Create file tkloc.dsp for a shareable library (dll).
-;# in dir return the full path of the created file
-;#
-proc osutils:mkdsp { dir tkloc {tmplat {} } {fmtcpp {} } } {
- if { $tmplat == {} } {set tmplat [osutils:dsp:readtemplate]}
- if { $fmtcpp == {} } {set fmtcpp [osutils:dsp:fmtcpp]}
- set fp [open [set fdsp [file join $dir ${tkloc}.dsp]] w]
- fconfigure $fp -translation crlf
- set l_compilable [osutils:dsp:compilable]
- regsub -all -- {__TKNAM__} $tmplat $tkloc temp0
- set tkused ""
- foreach tkx [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]] {
- append tkused "${tkx}.lib "
- }
- foreach tk [lappend [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]] $tkloc] {
- foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {
- if {[wokparam -t %$element] != 0} {
- set felem [file tail [lindex [wokparam -v "%$element"] 0]]
- if {[lsearch $tkused $felem] == "-1"} {
- if {$felem != "\{\}"} {
- set tkused [concat $tkused $felem]
- }
- }
- }
- }
- }
-
- #puts "alternative [LibToLink $tkloc]"
- puts "$tkloc requires $tkused"
- regsub -all -- {__TKDEP__} $temp0 $tkused temp1
- set files ""
- ;#set listloc [concat [osutils:tk:units [woklocate -u $tkloc]] [woklocate -u $tkloc]]
- set listloc [osutils:tk:units [woklocate -u $tkloc]]
- set resultloc [osutils:justwnt $listloc]
- ;#puts "result = $resultloc"
- ;#set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justwnt]]
- if [array exists written] { unset written }
- foreach fxlo $resultloc {
- set xlo [wokinfo -n $fxlo]
- append files "# Begin Group \"${xlo}\"" "\n"
- set lsrc [osutils:tk:files $xlo osutils:am:compilable 0]
- set fxloparam [lindex [intersect3 [split [lindex [wokparam -v %CMPLRS_CXX_Options] 0]] [split [lindex [wokparam -v %CMPLRS_CXX_Options $fxlo] 0]] ] 2]
- set needparam ""
- foreach partopt $fxloparam {
- if { "-I[lindex [wokparam -v %CSF_TCL_INCLUDE] 0]" != "$partopt "} {
- if { "-I[lindex [wokparam -v %CSF_JAVA_INCLUDE] 0]" != "$partopt "} {
- set needparam "$needparam $partopt"
- }
- }
- }
- foreach f $lsrc {
- ;#puts " f = $f"
- if { ![info exists written([file tail $f])] } {
- set written([file tail $f]) 1
- append files "# Begin Source File" "\n"
- append files "SOURCE=..\\..\\" [wokUtils:EASY:bs1 [wokUtils:FILES:wtail $f 3]] "\n"
- append files [format $fmtcpp $xlo $xlo $xlo] "$needparam" "\n"
- append files "# End Source File" "\n"
- } else {
- puts "Warning : in dsp more than one occurences for [file tail $f]"
- }
- }
- append files "# End Group" "\n"
- }
-
- regsub -all -- {__FILES__} $temp1 $files temp2
- puts $fp $temp2
- close $fp
- return $fdsp
-}
-;#
-;# Create file tkloc.dsp for a executable "console" application
-;# in dir return the full path of the created file
-;#
-proc osutils:mkdspx { dir tkloc {tmplat {} } {fmtcpp {} } } {
- if { $tmplat == {} } {set tmplat [osutils:dsp:readtemplatex]}
- if { $fmtcpp == {} } {set fmtcpp [osutils:dsp:fmtcppx]}
- foreach f [osutils:tk:files $tkloc osutils:am:compilable 0] {
- set tf [file rootname [file tail $f]]
- set fp [open [set fdsp [file join $dir ${tf}.dsp]] w]
- fconfigure $fp -translation crlf
- set l_compilable [osutils:dsp:compilable]
- regsub -all -- {__XQTNAM__} $tmplat $tf temp0
- set tkused ""
- puts [LibToLinkX $tkloc $tf]
- foreach tkx [LibToLinkX $tkloc $tf] {
- if {[uinfo -t $tkx] == "toolkit"} {
- append tkused "${tkx}.lib "
- }
- if {[lsearch [w_info -l] $tkx] == "-1"} {
- append tkused "${tkx}.lib "
- }
- }
- foreach tk [LibToLinkX $tkloc $tf] {
- foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {
- if {[wokparam -t %$element] != 0} {
- set felem [file tail [lindex [wokparam -v "%$element"] 0]]
- if {[lsearch $tkused $felem] == "-1"} {
- if {$felem != "\{\}"} {
- #puts "was found $element $felem"
- set tkused [concat $tkused $felem]
- }
- }
- }
- }
- }
- if {[wokparam -v %WOKSteps_exec_link $tkloc] == "#WOKStep_DLLink(exec.tks)"} {
- set tkused [concat $tkused "\/dll"]
- regsub -all -- {__DEST__} $temp0 "dll" temp1
- } else {
- regsub -all -- {__DEST__} $temp0 "bin" temp1
- }
- puts "$tf requires $tkused"
- regsub -all -- {__TKDEP__} $temp1 $tkused temp2
- set files ""
- ;#set lsrc [osutils:tk:files $tkloc osutils:am:compilable 0]
- ;#foreach f $lsrc {
- if { ![info exists written([file tail $f])] } {
- set written([file tail $f]) 1
- append files "# Begin Group \"" $tkloc "\" \n"
- append files "# Begin Source File" "\n"
- append files "SOURCE=..\\..\\" [wokUtils:EASY:bs1 [wokUtils:FILES:wtail $f 3]] "\n"
- append files [format $fmtcpp $tkloc $tkloc $tkloc] "\n"
- append files "# End Source File" "\n"
- append files "# End Group" "\n"
- } else {
- puts "Warning : in dsp more than one occurences for [file tail $f]"
- }
- ;#}
-
- regsub -all -- {__FILES__} $temp2 $files temp3
- puts $fp $temp3
- close $fp
- set fout [lappend fout $fdsp]
- }
- return $fout
-}
-;#
-;# (((((((((((((((((((((((( AUTOMAKE/ PROJECTs )))))))))))))))))))))))
-;#
-;# Create in dir the Makefile.am associated with toolkit tkloc.
-;# Returns the full path of the created file.
-;#
-proc osutils:tk:mkam { dir tkloc } {
- set pkgs [woklocate -p ${tkloc}:PACKAGES]
- if { $pkgs == {} } {
- puts stderr "osutils:tk:mkam : Error. File PACKAGES not found for toolkit $tkloc."
- return {}
- }
- set tmplat [osutils:am:readtemplate]
- set lpkgs [osutils:justunix [wokUtils:FILES:FileToList $pkgs]]
- set close [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]
- set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justunix]]
- set lobj [wokUtils:LIST:sanspoint $lsrc]
-
- set lcsf [osutils:tk:hascsf [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]]
-
- set final 0
- set externinc ""
- set externlib ""
- if { $lcsf != {} } {
- set final 1
- set fmtinc "\$(%s_INCLUDES) "
- set fmtlib "\$(%s_LIB) "
- set externinc [wokUtils:EASY:FmtSimple1 $fmtinc $lcsf 0]
- set externlib [wokUtils:EASY:FmtSimple1 $fmtlib $lcsf 0]
- }
-
- regsub -all -- {__TKNAM__} "$tmplat" "$tkloc" temp0
- set vpath [osutils:am:__VPATH__ $lpkgs]
- regsub -all -- {__VPATH__} "$temp0" "$vpath" temp1
- set inclu [osutils:am:__INCLUDES__ $lpkgs]
- regsub -all -- {__INCLUDES__} "$temp1" "$inclu" temp2
- if { $close != {} } {
- set libadd [osutils:am:__LIBADD__ $close $final]
- } else {
- set libadd ""
- }
- regsub -all -- {__LIBADD__} "$temp2" "$libadd" temp3
- set source [osutils:am:__SOURCES__ $lsrc]
- regsub -all -- {__SOURCES__} "$temp3" "$source" temp4
- regsub -all -- {__EXTERNINC__} "$temp4" "$externinc" temp5
- set CXXFl [osutils:am:__CXXFLAG__ $lpkgs]
- regsub -all -- {__CXXFLAG__} "$temp5" "$CXXFl" temp6
- set CFl [osutils:am:__CFLAG__ $lpkgs]
- regsub -all -- {__CFLAG__} "$temp6" "$CFl" temp7
-
- regsub -all -- {__EXTERNLIB__} "$temp7" "$externlib" MakeFile_am
-
- wokUtils:FILES:StringToFile "$MakeFile_am" [set fmam [file join $dir Makefile.am]]
-
- catch { unset temp0 temp1 temp2 temp3 temp4 temp5 temp6 temp7}
-
- #set tmplat [osutils:in:readtemplate]
-
- #regsub -all -- {__TKNAM__} "$tmplat" "$tkloc" temp0
- #if { $close != {} } {
- #set dpncies [osutils:in:__DEPENDENCIES__ $close]
- #} else {
- set dpncies ""
- #}
- #regsub -all -- {__DEPENDENCIES__} "$temp0" "$dpncies" temp1
-
- #set objects [osutils:in:__OBJECTS__ $lobj]
- #regsub -all -- {__OBJECTS__} "$temp1" "$objects" temp2
- #set amdep [osutils:in:__AMPDEP__ $lobj]
- #regsub -all -- {__AMPDEP__} "$temp2" "$amdep" temp3
- #set amdeptrue [osutils:in:__AMDEPTRUE__ $lobj]
- #regsub -all -- {__AMDEPTRUE__} "$temp3" "$amdeptrue" temp4
-;# so easy..
- #regsub -all -- {__MAKEFILEIN__} "$temp4" "$MakeFile_am" MakeFile_in
-
- #wokUtils:FILES:StringToFile "$MakeFile_in" [set fmin [file join $dir Makefile.in]]
- return [list $fmam]
- #return [list $fmam $fmin]
-}
-;#
-;# Create in dir the Makefile.am associated with toolkit tkloc.
-;# Returns the full path of the created file.
-;#
-proc osutils:tk:mkamx { dir tkloc } {
- if { [lsearch [uinfo -f -T source [wokcd]:$tkloc] ${tkloc}_WOKSteps.edl] != "-1"} {
- set pkgs [woklocate -p ${tkloc}:EXTERNLIB]
- if { $pkgs == {} } {
- puts stderr "osutils:tk:mkamx : Error. File EXTERNLIB not found for executable $tkloc."
- #return {}
- }
- set tmplat [osutils:am:readtemplatex]
- set close [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]
- set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justunix]]
- set lobj [wokUtils:LIST:sanspoint $lsrc]
- set CXXList {}
- foreach SourceFile [uinfo -f -T source $tkloc] {
- if {[file extension $SourceFile] == ".cxx"} {
- lappend CXXList [file rootname $SourceFile]
- }
- }
- set pkgs [LibToLinkX $tkloc [lindex $CXXList 0]]
- set lpkgs [osutils:justunix [wokUtils:FILES:FileToList $pkgs]]
- puts "pkgs $pkgs"
- #set lcsf [osutils:tk:hascsf [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]]
-
- set lcsf {}
- foreach tk $pkgs {
- foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {
- if {[lsearch $lcsf $element] == "-1"} {
- set lcsf [concat $lcsf $element]
- }
- }
- }
- set final 0
- set externinc ""
- set externlib ""
- if { $lcsf != {} } {
- set final 1
- set fmtinc "\$(%s_INCLUDES) "
- set fmtlib "\$(%s_LIB) "
- set externinc [wokUtils:EASY:FmtSimple1 $fmtinc $lcsf 0]
- set externlib [wokUtils:EASY:FmtSimple1 $fmtlib $lcsf 0]
- }
- regsub -all -- {__XQTNAM__} "$tmplat" "$tkloc" temp0
- set temp1 "$temp0 \nlib_LTLIBRARIES="
- foreach entity $CXXList {
- set temp1 "${temp1} lib${entity}.la"
- }
- set temp1 "${temp1}\n"
- set inclu [osutils:am:__INCLUDES__ $lpkgs]
- regsub -all -- {__INCLUDES__} "$temp1" "$inclu" temp2
- if { $pkgs != {} } {
- set libadd [osutils:am:__LIBADD__ $pkgs $final]
- } else {
- set libadd ""
- }
- regsub -all -- {__LIBADD__} "$temp2" "$libadd" temp3
- set source [osutils:am:__SOURCES__ $CXXList]
- regsub -all -- {__SOURCES__} "$temp3" "$source" temp4
- regsub -all -- {__EXTERNINC__} "$temp4" "$externinc" MakeFile_am
- foreach entity $CXXList {
- set MakeFile_am "$MakeFile_am lib${entity}_la_SOURCES = @top_srcdir@/src/${tkloc}/${entity}.cxx \n"
- }
- foreach entity $CXXList {
- set MakeFile_am "$MakeFile_am lib${entity}_la_LIB_ADD = $libadd $externlib \n"
- }
- wokUtils:FILES:StringToFile "$MakeFile_am" [set fmam [file join $dir Makefile.am]]
-
- catch { unset temp0 temp1 temp2 temp3 temp4 temp5}
- return [list $fmam]
-
- } else {
- set pkgs [woklocate -p ${tkloc}:EXTERNLIB]
- if { $pkgs == {} } {
- puts stderr "osutils:tk:mkamx : Error. File EXTERNLIB not found for executable $tkloc."
- #return {}
- }
- set tmplat [osutils:am:readtemplatex]
- set close [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]
- set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justunix]]
- set lobj [wokUtils:LIST:sanspoint $lsrc]
- set CXXList {}
- foreach SourceFile [uinfo -f -T source $tkloc] {
- if {[file extension $SourceFile] == ".cxx"} {
- lappend CXXList [file rootname $SourceFile]
- }
- }
- set pkgs [LibToLinkX $tkloc [lindex $CXXList 0]]
- set lpkgs [osutils:justunix [wokUtils:FILES:FileToList $pkgs]]
- set lcsf [osutils:tk:hascsf [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]]
-
- set lcsf {}
- foreach tk $pkgs {
- foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {
- if {[lsearch $lcsf $element] == "-1"} {
- set lcsf [concat $lcsf $element]
- }
- }
- }
- set final 0
- set externinc ""
- set externlib ""
- if { $lcsf != {} } {
- set final 1
- set fmtinc "\$(%s_INCLUDES) "
- set fmtlib "\$(%s_LIB) "
- set externinc [wokUtils:EASY:FmtSimple1 $fmtinc $lcsf 0]
- set externlib [wokUtils:EASY:FmtSimple1 $fmtlib $lcsf 0]
- }
- regsub -all -- {__XQTNAM__} "$tmplat" "$tkloc" temp0
- set temp1 "$temp0 \nbin_PROGRAMS="
- foreach entity $CXXList {
- set temp1 "${temp1} ${entity}"
- }
-
- set temp1 "${temp1}\n"
- set inclu [osutils:am:__INCLUDES__ $lpkgs]
- regsub -all -- {__INCLUDES__} "$temp1" "$inclu" temp2
- if { $pkgs != {} } {
- set libadd [osutils:am:__LIBADD__ $pkgs $final]
- } else {
- set libadd ""
- }
- set source [osutils:am:__SOURCES__ $CXXList]
- regsub -all -- {__SOURCES__} "$temp2" "$source" temp3
- regsub -all -- {__EXTERNINC__} "$temp3" "$externinc" MakeFile_am
- foreach entity $CXXList {
- set MakeFile_am "$MakeFile_am ${entity}_SOURCES = @top_srcdir@/src/${tkloc}/${entity}.cxx \n"
- }
- foreach entity $CXXList {
- set MakeFile_am "$MakeFile_am ${entity}_LDADD = $libadd $externlib \n"
- }
- wokUtils:FILES:StringToFile "$MakeFile_am" [set fmam [file join $dir Makefile.am]]
-
- catch { unset temp0 temp1 temp2 temp3 temp4 temp5}
-
- # set tmplat [osutils:in:readtemplatex]
-
- # regsub -all -- {__XQTNAM__} "$tmplat" "$tkloc" temp0
- # if { $close != {} } {
- #set dpncies [osutils:in:__DEPENDENCIES__ $close]
- # } else {
- #set dpncies ""
- # }
- # regsub -all -- {__DEPENDENCIES__} "$temp0" "$dpncies" temp1
-
- # set objects [osutils:in:__OBJECTS__ $lobj]
- # regsub -all -- {__OBJECTS__} "$temp1" "$objects" temp2
- # #set temp2 $temp1
- # set amdep [osutils:in:__AMPDEP__ $lobj]
- # regsub -all -- {__AMPDEP__} "$temp2" "$amdep" temp3
- #set temp3 $temp2
- # set amdeptrue [osutils:in:__AMDEPTRUE__ $lobj]
- # regsub -all -- {__AMDEPTRUE__} "$temp3" "$amdeptrue" temp4
- #set temp4 $temp3
-;# so easy..
- # regsub -all -- {__MAKEFILEIN__} "$temp4" "$MakeFile_am" MakeFile_in
-
- #wokUtils:FILES:StringToFile "$MakeFile_in" [set fmin [file join $dir Makefile.in]]
- return [list $fmam]
- #return [list $fmam $fmin]
- }
-}
-
-;#
-;# ((((((((((((( Formats in Makefile.am )))))))))))))
-;#
-;# List extensions of files compilable in automake
-;#
-proc osutils:am:compilable { } {
- return [list .c .cxx .cpp]
-}
-;#
-;# Used to replace the string __VPATH__ in Makefile.am
-;# l is the list of the units in a toolkit.
-;#
-proc osutils:am:__VPATH__ { l } {
- set fmt "@top_srcdir@/drv/%s : @top_srcdir@/src/%s:"
- return [wokUtils:EASY:FmtString2 $fmt $l 0 osutils:am:__VPATH__lastoccur]
-}
-;#
-;# remove ":" from last item of dependencies list in target VPATH of Makefile.am
-;#
-proc osutils:am:__VPATH__lastoccur { str } {
- if { [regsub {:$} $str "" u] != 0 } {
- return $u
- }
-}
-proc osutils:am:PkCXXOption ppk {
- set CXXCOMMON [lindex [wokparam -e %CMPLRS_CXX_Options [wokcd]] 0]
- set FoundFlag ""
- foreach pk $ppk {
- if {[lsearch [uinfo -f -T source [wokcd]:$pk] ${pk}_CMPLRS.edl] != "-1"} {
- set CXXStr [lindex [wokparam -e %CMPLRS_CXX_Options $pk] 0]
- set LastIndex [expr {[string length $CXXCOMMON ] - 1}]
- if {[string equal $CXXCOMMON [string range $CXXStr 0 $LastIndex]]} {
- set CXXOption [string range $CXXStr $LastIndex end ]
- } else {
- set CXXOption [string range $CXXStr 0 [expr {[string last $CXXCOMMON $CXXStr] - 1}]]
- }
- if {$CXXOption != " " && $CXXOption != "" && $CXXOption != " " && $CXXOption != " "} {
- set FoundList [split $CXXOption " "]
- foreach elem $FoundList {
- if {$elem != ""} {
- if {[string first "-I" $elem] == "-1" } {
- if {[string first $elem $FoundFlag] == "-1"} {
- set FoundFlag "$FoundFlag $elem"
- }
- }
- }
- }
- }
- }
- }
- return $FoundFlag
-}
-
-proc osutils:am:PkCOption ppk {
- set CCOMMON [lindex [wokparam -e %CMPLRS_C_Options [wokcd]] 0]
- set FoundFlag ""
- foreach pk $ppk {
- if {[lsearch [uinfo -f -T source [wokcd]:$pk] ${pk}_CMPLRS.edl] != "-1"} {
- set CStr [lindex [wokparam -e %CMPLRS_C_Options $pk] 0]
- set LastIndex [expr {[string length $CCOMMON ] - 1}]
- if {[string equal $CCOMMON [string range $CStr 0 $LastIndex]]} {
- set COption [string range $CStr $LastIndex end ]
- } else {
- set COption [string range $CStr 0 [expr {[string last $CCOMMON $CStr] - 1}]]
- }
- if {$COption != " " && $COption != "" && $COption != " " && $COption != " "} {
- set FoundList [split $COption " "]
- foreach elem $FoundList {
- if {$elem != ""} {
- if {[string first "-I" $elem] == "-1" } {
- if {[string first $elem $FoundFlag] == "-1"} {
- set FoundFlag "$FoundFlag $elem"
- }
- }
- }
- }
- }
- }
- }
-return $FoundFlag
-}
-
-proc osutils:am:__CXXFLAG__ { l } {
- set fmt "%s"
- #puts "l is: $l"
- return [wokUtils:EASY:FmtString1 $fmt [osutils:am:PkCXXOption $l]]
-}
-;#
-;# Used to replace the string __CFLAG__ in Makefile.am
-;# l is the list of all compilable files in a toolkit.
-;#
-proc osutils:am:__CFLAG__ { l } {
- set fmt "%s"
- return [wokUtils:EASY:FmtString1 $fmt [osutils:am:PkCOption $l]]
-}
-
-;#
-;# Used to replace the string __INCLUDES__ in Makefile.am
-;# l is the list of packages in a toolkit.
-;#
-proc osutils:am:__INCLUDES__ { l } {
- set fmt "-I@top_srcdir@/drv/%s -I@top_srcdir@/src/%s"
- return [wokUtils:EASY:FmtString2 $fmt $l]
-}
-;#
-;# Used to replace the string __LIBADD__ in Makefile.am
-;# l is the toolkit closure list of a toolkit.
-;#
-proc osutils:am:__LIBADD__ { l {final 0} } {
- set fmt "../%s/lib%s.la"
- return [wokUtils:EASY:FmtString2 $fmt $l $final]
-}
-;#
-;# Used to replace the string __SOURCES__ in Makefile.am
-;# l is the list of all compilable files in a toolkit.
-;#
-proc osutils:am:__SOURCES__ { l } {
- set fmt "%s"
- return [wokUtils:EASY:FmtString1 $fmt $l]
-}
-;#
-;# ((((((((((((( Formats in Makefile.in )))))))))))))
-;#
-;#
-;# Used to replace the string __DEPENDENCIES__ in Makefile.in
-;# l is the toolkit closure list of a toolkit.
-;#
-proc osutils:in:__DEPENDENCIES__ { l } {
- set fmt1 "../%s/lib%s.la"
- set fmt2 "\t../%s/lib%s.la"
- return [wokUtils:EASY:FmtFmtString2 $fmt1 $fmt2 $l]
-}
-;#
-;# Used to replace the string __OBJECTS__ in Makefile.in
-;# l is the list of objects files in toolkit.
-;#
-proc osutils:in:__OBJECTS__ { l } {
- set fmt1 "%s.lo"
- set fmt2 "\t%s.lo"
- return [wokUtils:EASY:FmtFmtString1 $fmt1 $fmt2 $l]
-}
-;#
-;# Used to replace the string __AMDEP__ in Makefile.in
-;# l is the list of objects files in toolkit.
-;#
-proc osutils:in:__AMPDEP__ { l } {
- set fmt1 "\$(DEPDIR)/%s.Plo"
- set fmt2 "@AMDEP_TRUE@\t\$(DEPDIR)/%s.Plo"
- return [wokUtils:EASY:FmtFmtString1 $fmt1 $fmt2 $l]
-}
-;#
-;# Used to replace the string __AMDEPTRUE__ in Makefile.in
-;# l is the list of objects files in toolkit.
-;#
-proc osutils:in:__AMDEPTRUE__ { l } {
- set fmt "@AMDEP_TRUE@@_am_include@ @_am_quote@\$(DEPDIR)/%s.Plo@_am_quote@"
- return [wokUtils:EASY:FmtSimple1 $fmt $l]
-}
-
-
-;#############################################################
-;#
-proc TESTAM { {root /dn04/OS/OCC/RELEASE/ros/adm/make} } {
-
- wokcd KAS:dev:ros
- set ltk [w_info -T toolkit OS:OCC:RELEASE]
- ;#set ltk TKernel
- foreach tkloc $ltk {
- puts " toolkit: $tkloc ==> [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]"
- wokUtils:FILES:mkdir $root/$tkloc
- osutils:tk:mkam $root/$tkloc $tkloc
- #osutils:mkdsp $root/$tkloc $tkloc
- }
- set ltk [w_info -T executable OS:OCC:RELEASE]
- foreach tkloc $ltk {
- wokUtils:FILES:mkdir $root/$tkloc
- osutils:tk:mkamx $root/$tkloc $tkloc
-# osutils:mkdspx $root/$tkloc $tkloc
- }
-}
+;#\r
+;# Open source Tcl utilities. This contains material to automatically create\r
+;# MS project or automake builders from the OpenCascade modules definition.\r
+;# This file requires:\r
+;# 1. Tcl utilities of Wok.\r
+;# 2. Wok commands and workbench environment.\r
+;#\r
+;# Author: yolanda_forbes@hotmail.com\r
+;# \r
+;# (((((((((((((((((((((((( MS PROJECT )))))))))))))))))))))))\r
+;#\r
+;# the full path of a MS project template file.\r
+;# Should be overwritten\r
+;#\r
+proc osutils:dsp:readtemplate { } {\r
+ puts stderr "Info : readtemplate : Template for MS project from [set loc [wokinfo -p source:template.dsp KAS:dev:ros:WOKTclLib]]"\r
+ return [wokUtils:FILES:FileToString $loc]\r
+}\r
+proc osutils:dsp:readtemplatex { } {\r
+ puts stderr "Info : readtemplate : Template for MS project from [set loc [wokinfo -p source:template.dspx KAS:dev:ros:WOKTclLib]]"\r
+ return [wokUtils:FILES:FileToString $loc]\r
+}\r
+proc osutils:am:readtemplate { } {\r
+ puts stderr "Info : readtemplate : Template for Makefile.am from [set loc [wokinfo -p source:template.mam KAS:dev:ros:WOKTclLib]]"\r
+ #puts stderr "Info : readtemplate : Template for Makefile.am from [set loc /dn02/users_SUN/cascade/template.mam]"\r
+ return [wokUtils:FILES:FileToString $loc]\r
+\r
+}\r
+proc osutils:am:readtemplatex { } {\r
+# puts stderr "Info : readtemplatex : Template for Makefile.am from [set loc [wokinfo -p source:template.mamx KAS:dev:ros:WOKTclLib]]"\r
+ puts stderr "Info : readtemplatex : Template for Makefile.am from [set loc /dn02/users_SUN/cascade/template.mamx]"\r
+\r
+ return [wokUtils:FILES:FileToString $loc]\r
+\r
+}\r
+proc osutils:in:readtemplate { } {\r
+ puts stderr "Info : readtemplate : Template for Makefile.in from [set loc /dn01/KAS/dev/ros/src/WOKTclLib/template.min]"\r
+ return [wokUtils:FILES:FileToString $loc]\r
+\r
+}\r
+proc osutils:in:readtemplatex { } {\r
+ puts stderr "Info : readtemplatex : Template for Makefile.in from [set loc /dn01/KAS/dev/ros/src/WOKTclLib/template.minx]"\r
+ return [wokUtils:FILES:FileToString $loc]\r
+\r
+}\r
+;#\r
+;# \r
+;#\r
+proc osutils:dsw:header { } {\r
+ append var \\r
+ "Microsoft Developer Studio Workspace File, Format Version 6.00" "\n" \\r
+ "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!" "\n" \\r
+ "\n" \\r
+ "###############################################################################" "\n" \\r
+ "\n"\r
+ return $var\r
+}\r
+;#\r
+;# the leaf of a workspace file\r
+;#\r
+proc osutils:dsw:projectleaf { TK } {\r
+ append var \\r
+ "Project: \"$TK\"=.\\$TK.dsp - Package Owner=<4>" "\n" \\r
+ "\n" \\r
+ "Package=<5>" "\n" \\r
+ "\{\{\{" "\n" \\r
+ "\}\}\}" "\n" \\r
+ "\n" \\r
+ "Package=<4>" "\n" \\r
+ "\{\{\{" "\n" \\r
+ "\}\}\}" "\n" \\r
+ "\n" \\r
+ "###############################################################################" "\n" \\r
+ "\n"\r
+ return $var\r
+}\r
+;#\r
+;# an item of a workspace file\r
+;#\r
+proc osutils:dsw:projectby2 { TK Dep_Name } {\r
+ append var \\r
+ "Project: \"$TK\"=.\\$TK.dsp - Package Owner=<4>" "\n" \\r
+ "\n" \\r
+ "Package=<5>" "\n" \\r
+ "\{\{\{" "\n" \\r
+ "\}\}\}" "\n" \\r
+ "\n" \\r
+ "Package=<4>" "\n" \\r
+ "\{\{\{" "\n" \r
+ if {[wokinfo -x $TK] != "0"} {\r
+ if {[uinfo -t $TK] == "toolkit"} {\r
+ set deplist [LibToLink $TK]\r
+ } else {\r
+ set deplist [LibToLinkX $TK $TK]\r
+ ;#puts $deplist\r
+ }\r
+ foreach deplib $deplist {\r
+ if {$deplib != $TK} {\r
+ append var " Begin Project Dependency" "\n" \\r
+ " Project_Dep_Name $deplib" "\n" \\r
+ " End Project Dependency" "\n" \r
+ }\r
+ }\r
+ }\r
+ \r
+ append var "\}\}\}" "\n" \\r
+ "\n" \\r
+ "###############################################################################" "\n" \\r
+ "\n" \r
+ return $var\r
+}\r
+;#\r
+;#\r
+;#\r
+proc osutils:dsw:footer { } {\r
+ append var \\r
+ "Global:" "\n" \\r
+ "\n" \\r
+ "Package=<5>" "\n" \\r
+ "{{{" "\n" \\r
+ "}}}" "\n" \\r
+ "\n" \\r
+ "Package=<3>" "\n" \\r
+ "{{{" "\n" \\r
+ "}}}" "\n" \\r
+ "\n" \\r
+ "###############################################################################" "\n" \r
+ return $var\r
+}\r
+;#\r
+;# An item for compiling a c++ class\r
+;#\r
+proc osutils:dsp:fmtcpp { } {\r
+ return {# ADD CPP /I ..\..\inc /I ..\..\drv\%s /I ..\..\src\%s /D "__%s_DLL"}\r
+}\r
+;#\r
+;# An item for compiling a c++ main\r
+;#\r
+proc osutils:dsp:fmtcppx { } {\r
+ return {# ADD CPP /I ..\..\inc /I ..\..\drv\%s /I ..\..\src\%s /D "__%s_DLL"}\r
+}\r
+;#\r
+;# List extensions of files devoted to be eaten by cl.exe compiler.\r
+;#\r
+proc osutils:dsp:compilable { } {\r
+ return [list .c .cxx .cpp]\r
+}\r
+;#\r
+;# remove from listloc OpenCascade units indesirables on NT\r
+;#\r
+proc osutils:justwnt { listloc } {\r
+ set lret {}\r
+ set goaway [list Xdps Xw ImageUtility WOKUnix]\r
+ foreach u $listloc {\r
+ if { [lsearch $goaway [wokinfo -n $u]] == -1 } {\r
+ lappend lret $u\r
+ }\r
+ }\r
+ return $lret\r
+}\r
+;#\r
+;# remove from listloc OpenCascade units indesirables on Unix\r
+;#\r
+proc osutils:justunix { listloc } {\r
+ set lret {}\r
+ set goaway [list WNT WOKNT]\r
+ foreach u $listloc {\r
+ if { [lsearch $goaway [wokinfo -n $u]] == -1 } {\r
+ lappend lret $u\r
+ }\r
+ }\r
+ return $lret\r
+}\r
+;#\r
+;# Define libraries to link\r
+proc LibToLink {tkit} {\r
+ if {[uinfo -t $tkit] == "toolkit"} {\r
+ set l {}\r
+ set LibList [woklocate -p [wokinfo -n $tkit]:stadmfile:[wokinfo -n $tkit]_lib_tks.Out]\r
+ if ![ catch { set id [ open $LibList r ] } status ] {\r
+ while {[gets $id x] >= 0 } {\r
+ if [regexp -- {(-E[^ ]*)} $x] {\r
+ set endnameid [expr { [string wordend $x 4] -1 }]\r
+ set fx [string range $x 3 $endnameid]\r
+ if {[uinfo -t [wokcd]:[file rootname $fx]] == "toolkit"} { \r
+ lappend l $fx\r
+ }\r
+ }\r
+ #if [regexp -- {(-VE[^ ]*)} $x] {\r
+ # set startid [string first CSF $x]\r
+ # set endid [ expr { [string wordend $x $startid] -1 } ]\r
+ # set fx [string range $x $startid $endid]\r
+ # lappend l $fx\r
+ #}\r
+\r
+ }\r
+ close $id\r
+ } else {\r
+ puts $status\r
+ }\r
+ return $l\r
+ }\r
+}\r
+\r
+proc LibToLinkX {tkit name} {\r
+ if {[uinfo -t $tkit] == "executable"} {\r
+ set l {}\r
+ set LibList [woklocate -p [wokinfo -n $tkit]:stadmfile:[wokinfo -n $tkit]_exec_tks_${name}.Out]\r
+ if ![ catch { set id [ open $LibList r ] } status ] {\r
+ while {[gets $id x] >= 0 } {\r
+ if [regexp -- {(-E[^ ]*)} $x] {\r
+ set endnameid [expr { [string wordend $x 4] -1 }]\r
+ set fx [string range $x 3 $endnameid]\r
+ lappend l $fx\r
+ }\r
+ #if [regexp -- {(-VE[^ ]*)} $x] {\r
+ # set startid [string first CSF $x]\r
+ # set endid [ expr { [string wordend $x $startid] -1 } ]\r
+ # set CSF_fx [string range $x $startid $endid]\r
+ # if { $CSF_fx != "-"} {\r
+ # puts $CSF_fx\r
+ # set fx [file tail [lindex [wokparam -v \%$CSF_fx $tkit] 0]]\r
+ # lappend l $fx\r
+ # }\r
+ #}\r
+\r
+ }\r
+ close $id\r
+ } else {\r
+ puts $status\r
+ }\r
+ return $l\r
+ }\r
+}\r
+\r
+\r
+;#\r
+;# ((((((((WOK toolkits manipulations))))))))\r
+;#\r
+;# close dependencies of ltk. (full wok pathes of toolkits)\r
+;# The CURRENT WOK LOCATION MUST contains ALL TOOLKITS required. \r
+;# (locate not performed.)\r
+proc osutils:tk:close { ltk } {\r
+ set result {}\r
+ set recurse {}\r
+ foreach dir $ltk {\r
+ #set ids [woklocate -p [wokinfo -n [wokinfo -u $dir]]:source:EXTERNLIB [wokinfo -w $dir]]\r
+ set ids [LibToLink $dir]\r
+ set eated [osutils:tk:eatpk $ids]\r
+ set result [concat $result $eated]\r
+ set ids [LibToLink $dir]\r
+ set result [concat $result $ids]\r
+ #puts "EXTERNLIB dir = $dir ids = $ids result = $result eated = $eated"\r
+ foreach file $eated {\r
+ set kds [woklocate -p [wokinfo -n [wokinfo -u $file]]:source:EXTERNLIB [wokinfo -w $file]]\r
+ if { [osutils:tk:eatpk $kds] != {} } {\r
+ lappend recurse $file\r
+ }\r
+ }\r
+ }\r
+ ;# if ![lempty $recurse] {\r
+ ;# set result [concat $result [osutils:tk:close $recurse]]\r
+ ;# }\r
+ if { $recurse != {} } {\r
+ set result [concat $result [osutils:tk:close $recurse]]\r
+ }\r
+ #puts $result\r
+ return $result\r
+}\r
+;#\r
+;# Topological sort of toolkits in tklm\r
+;#\r
+proc osutils:tk:sort { tklm } {\r
+ set tkby2 {}\r
+ foreach tkloc $tklm {\r
+ set lprg [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]\r
+ foreach tkx $lprg {\r
+ if { [lsearch $tklm $tkx] != -1 } {\r
+ lappend tkby2 [list $tkx $tkloc]\r
+ } else {\r
+ lappend tkby2 [list $tkloc {}]\r
+ }\r
+ }\r
+ }\r
+ set lret {}\r
+ foreach e [wokUtils:EASY:tsort $tkby2] {\r
+ if { $e != {} } {\r
+ lappend lret $e\r
+ }\r
+ }\r
+ return $lret\r
+}\r
+\r
+;#\r
+;# Returns liste of UD in a toolkit. tkloc is a full path wok.\r
+;# \r
+proc osutils:tk:units { tkloc {typed 0} } {\r
+ set l {}\r
+ set PACKAGES [woklocate -p [wokinfo -n [wokinfo -u $tkloc]]:source:PACKAGES [wokinfo -w $tkloc]]\r
+ foreach u [wokUtils:FILES:FileToList $PACKAGES] {\r
+ set fu [woklocate -u $u]\r
+ if { [set fu [woklocate -u $u]] != {} } {\r
+ if { $typed == 0 } {\r
+ lappend l $fu\r
+ } \r
+ if { $typed == 1 } {\r
+ lappend l [list [uinfo -c $fu] [wokinfo -n $fu]]\r
+ }\r
+ if { $typed == 2 } {\r
+ lappend l [list [uinfo -c $fu] $fu]\r
+ }\r
+ if { $typed == 3 } {\r
+ lappend l [list [uinfo -t $fu] [wokinfo -n $fu]]\r
+ }\r
+ if { $typed == 4 } {\r
+ lappend l [list [uinfo -t $fu] $fu]\r
+ }\r
+ } else {\r
+ puts stderr "Unit inconnue $u"\r
+ }\r
+ }\r
+ if { $l == {} } {\r
+ ;#puts stderr "Warning. No devunit included in $tkloc"\r
+ }\r
+ return $l\r
+}\r
+;#\r
+;# for a unit returns a map containing all its file in the current\r
+;# workbench\r
+;# local = 1 only local files\r
+;#\r
+proc osutils:tk:loadunit { loc map {local 0}} {\r
+ upvar $map TLOC\r
+ catch { unset TLOC }\r
+ if { $local == 1 } {\r
+ set lfiles [uinfo -Fpl $loc]\r
+ } else {\r
+ set lfiles [uinfo -Fp $loc]\r
+ }\r
+ foreach f $lfiles { \r
+ #puts $f\r
+ set t [lindex $f 0]\r
+ set p [lindex $f 2]\r
+ if [info exists TLOC($t)] {\r
+ set l $TLOC($t)\r
+ lappend l $p\r
+ set TLOC($t) $l\r
+ } else {\r
+ set TLOC($t) $p\r
+ }\r
+ }\r
+ return\r
+}\r
+;#\r
+;# Returns the list of all compilable files name in a toolkit, or devunit of any type\r
+;# Call unit filter on units name to accept or reject a unit\r
+;# Tfiles lists for each unit the type of file that can be compiled.\r
+;#\r
+proc osutils:tk:files { tkloc {l_compilable {} } {justail 1} {unitfilter {}} } {\r
+ set Tfiles(source,package) {source derivated privinclude pubinclude drvfile}\r
+ set Tfiles(source,nocdlpack) {source pubinclude drvfile}\r
+ set Tfiles(source,schema) {source derivated privinclude pubinclude drvfile}\r
+ set Tfiles(source,toolkit) {}\r
+ set Tfiles(source,executable) {source pubinclude drvfile}\r
+ set listloc [concat [osutils:tk:units [woklocate -u $tkloc]] [woklocate -u $tkloc]]\r
+ #puts " listloc = $listloc"\r
+ if { $l_compilable == {} } {\r
+ set l_comp [list .c .cxx .cpp]\r
+ } else {\r
+ set l_comp [$l_compilable]\r
+ }\r
+ if { $unitfilter == {} } {\r
+ set resultloc $listloc\r
+ } else {\r
+ set resultloc [$unitfilter $listloc]\r
+ }\r
+ set lret {}\r
+ foreach loc $resultloc {\r
+ set utyp [uinfo -t $loc]\r
+ if [array exists map] { unset map } \r
+ osutils:tk:loadunit $loc map\r
+ #puts " loc = $loc === > [array names map]"\r
+ set LType $Tfiles(source,${utyp})\r
+ foreach typ [array names map] {\r
+ if { [lsearch $LType $typ] == -1 } {\r
+ unset map($typ)\r
+ }\r
+ }\r
+ foreach type [array names map] {\r
+ #puts $type\r
+ foreach f $map($type) {\r
+ #puts $f\r
+ if { [lsearch $l_comp [file extension $f]] != -1 } {\r
+ if { $justail == 1 } {\r
+ if {$type == "source"} {\r
+ if {[lsearch $lret "@top_srcdir@/drv/[wokinfo -n $loc]/[file tail $f]"] == -1} {\r
+ lappend lret @top_srcdir@/src/[wokinfo -n $loc]/[file tail $f]\r
+ }\r
+ } elseif {$type == "derivated" || $type == "drvfile"} {\r
+ if {[lsearch $lret "@top_srcdir@/src/[wokinfo -n $loc]/[file tail $f]"] == -1} {\r
+ lappend lret @top_srcdir@/drv/[wokinfo -n $loc]/[file tail $f]\r
+ }\r
+ }\r
+ } else {\r
+ lappend lret $f\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return $lret\r
+}\r
+;#\r
+;# \r
+;#\r
+proc osutils:tk:eatpk { EXTERNLIB } {\r
+ set l [wokUtils:FILES:FileToList $EXTERNLIB]\r
+ set lret {}\r
+ foreach str $l {\r
+ if ![regexp -- {(CSF_[^ ]*)} $str csf] {\r
+ lappend lret $str\r
+ }\r
+ }\r
+ return $lret\r
+}\r
+;#\r
+;# Return the list of name *CSF_ in a EXTERNLIB description of a toolkit\r
+;#\r
+proc osutils:tk:hascsf { EXTERNLIB } {\r
+ set l [wokUtils:FILES:FileToList $EXTERNLIB]\r
+ set lret {}\r
+ foreach str $l {\r
+ if [regexp -- {(CSF_[^ ]*)} $str csf] {\r
+ lappend lret $csf\r
+ }\r
+ }\r
+ return $lret\r
+}\r
+;#\r
+;# Create file tkloc.dsp for a shareable library (dll).\r
+;# in dir return the full path of the created file\r
+;#\r
+proc osutils:mkdsp { dir tkloc {tmplat {} } {fmtcpp {} } } {\r
+ if { $tmplat == {} } {set tmplat [osutils:dsp:readtemplate]}\r
+ if { $fmtcpp == {} } {set fmtcpp [osutils:dsp:fmtcpp]}\r
+ set fp [open [set fdsp [file join $dir ${tkloc}.dsp]] w]\r
+ fconfigure $fp -translation crlf\r
+ set l_compilable [osutils:dsp:compilable]\r
+ regsub -all -- {__TKNAM__} $tmplat $tkloc temp0\r
+ set tkused ""\r
+ foreach tkx [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]] {\r
+ append tkused "${tkx}.lib "\r
+ }\r
+ foreach tk [lappend [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]] $tkloc] {\r
+ foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {\r
+ if {[wokparam -t %$element] != 0} {\r
+ set felem [file tail [lindex [wokparam -v "%$element"] 0]]\r
+ if {[lsearch $tkused $felem] == "-1"} {\r
+ if {$felem != "\{\}"} {\r
+ set tkused [concat $tkused $felem]\r
+ }\r
+ } \r
+ }\r
+ }\r
+ }\r
+\r
+ #puts "alternative [LibToLink $tkloc]"\r
+ puts "$tkloc requires $tkused"\r
+ regsub -all -- {__TKDEP__} $temp0 $tkused temp1\r
+ set files ""\r
+ ;#set listloc [concat [osutils:tk:units [woklocate -u $tkloc]] [woklocate -u $tkloc]]\r
+ set listloc [osutils:tk:units [woklocate -u $tkloc]]\r
+ set resultloc [osutils:justwnt $listloc]\r
+ ;#puts "result = $resultloc"\r
+ ;#set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justwnt]]\r
+ if [array exists written] { unset written }\r
+ foreach fxlo $resultloc {\r
+ set xlo [wokinfo -n $fxlo]\r
+ append files "# Begin Group \"${xlo}\"" "\n" \r
+ set lsrc [osutils:tk:files $xlo osutils:am:compilable 0]\r
+ set fxloparam [lindex [intersect3 [split [lindex [wokparam -v %CMPLRS_CXX_Options] 0]] [split [lindex [wokparam -v %CMPLRS_CXX_Options $fxlo] 0]] ] 2]\r
+ set needparam ""\r
+ foreach partopt $fxloparam {\r
+ if { "-I[lindex [wokparam -v %CSF_TCL_INCLUDE] 0]" != "$partopt "} {\r
+ if { "-I[lindex [wokparam -v %CSF_JAVA_INCLUDE] 0]" != "$partopt "} {\r
+ set needparam "$needparam $partopt"\r
+ }\r
+ }\r
+ }\r
+ foreach f $lsrc {\r
+ ;#puts " f = $f"\r
+ if { ![info exists written([file tail $f])] } {\r
+ set written([file tail $f]) 1\r
+ append files "# Begin Source File" "\n"\r
+ append files "SOURCE=..\\..\\" [wokUtils:EASY:bs1 [wokUtils:FILES:wtail $f 3]] "\n"\r
+ append files [format $fmtcpp $xlo $xlo $xlo] "$needparam" "\n"\r
+ append files "# End Source File" "\n"\r
+ } else {\r
+ puts "Warning : in dsp more than one occurences for [file tail $f]"\r
+ }\r
+ }\r
+ append files "# End Group" "\n"\r
+ }\r
+ \r
+ regsub -all -- {__FILES__} $temp1 $files temp2\r
+ puts $fp $temp2\r
+ close $fp\r
+ return $fdsp\r
+}\r
+;#\r
+;# Create file tkloc.dsp for a executable "console" application\r
+;# in dir return the full path of the created file\r
+;#\r
+proc osutils:mkdspx { dir tkloc {tmplat {} } {fmtcpp {} } } {\r
+ if { $tmplat == {} } {set tmplat [osutils:dsp:readtemplatex]}\r
+ if { $fmtcpp == {} } {set fmtcpp [osutils:dsp:fmtcppx]}\r
+ foreach f [osutils:tk:files $tkloc osutils:am:compilable 0] {\r
+ set tf [file rootname [file tail $f]] \r
+ set fp [open [set fdsp [file join $dir ${tf}.dsp]] w]\r
+ puts $fdsp\r
+ fconfigure $fp -translation crlf\r
+ set l_compilable [osutils:dsp:compilable]\r
+ regsub -all -- {__XQTNAM__} $tmplat $tf temp0\r
+ set tkused ""\r
+ puts [LibToLinkX $tkloc $tf]\r
+ foreach tkx [LibToLinkX $tkloc $tf] {\r
+ if {[uinfo -t $tkx] == "toolkit"} {\r
+ append tkused "${tkx}.lib "\r
+ }\r
+ if {[lsearch [w_info -l] $tkx] == "-1"} {\r
+ append tkused "${tkx}.lib "\r
+ }\r
+ }\r
+ foreach tk [LibToLinkX $tkloc $tf] {\r
+ foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {\r
+ if {[wokparam -t %$element] != 0} {\r
+ set felem [file tail [lindex [wokparam -v "%$element"] 0]] \r
+ if {[lsearch $tkused $felem] == "-1"} {\r
+ if {$felem != "\{\}"} {\r
+ #puts "was found $element $felem" \r
+ set tkused [concat $tkused $felem]\r
+ }\r
+ } \r
+ }\r
+ }\r
+ }\r
+ if {[wokparam -v %WOKSteps_exec_link $tkloc] == "#WOKStep_DLLink(exec.tks)"} { \r
+ set tkused [concat $tkused "\/dll"]\r
+ regsub -all -- {__COMPOPT__} $temp0 "\/MD" temp1 \r
+ regsub -all -- {__COMPOPTD__} $temp1 "/\MDd" temp2 \r
+ } else {\r
+ regsub -all -- {__COMPOPT__} $temp0 "\/MT" temp1\r
+ regsub -all -- {__COMPOPTD__} $temp1 "\/MTd" temp2 \r
+ }\r
+ puts "$tf requires $tkused"\r
+ regsub -all -- {__TKDEP__} $temp2 $tkused temp3\r
+ set files ""\r
+ ;#set lsrc [osutils:tk:files $tkloc osutils:am:compilable 0]\r
+ ;#foreach f $lsrc {\r
+ if { ![info exists written([file tail $f])] } {\r
+ set written([file tail $f]) 1\r
+ append files "# Begin Group \"" $tkloc "\" \n"\r
+ append files "# Begin Source File" "\n"\r
+ append files "SOURCE=..\\..\\" [wokUtils:EASY:bs1 [wokUtils:FILES:wtail $f 3]] "\n"\r
+ append files [format $fmtcpp $tkloc $tkloc $tkloc] "\n"\r
+ append files "# End Source File" "\n"\r
+ append files "# End Group" "\n"\r
+ } else {\r
+ puts "Warning : in dsp more than one occurences for [file tail $f]"\r
+ }\r
+ ;#}\r
+ \r
+ regsub -all -- {__FILES__} $temp3 $files temp4\r
+ puts $fp $temp4\r
+ close $fp\r
+ set fout [lappend fout $fdsp]\r
+ }\r
+ return $fout\r
+}\r
+;# \r
+;# (((((((((((((((((((((((( AUTOMAKE/ PROJECTs )))))))))))))))))))))))\r
+;#\r
+;# Create in dir the Makefile.am associated with toolkit tkloc.\r
+;# Returns the full path of the created file.\r
+;#\r
+proc osutils:tk:mkam { dir tkloc } {\r
+ set pkgs [woklocate -p ${tkloc}:PACKAGES]\r
+ if { $pkgs == {} } {\r
+ puts stderr "osutils:tk:mkam : Error. File PACKAGES not found for toolkit $tkloc."\r
+ return {}\r
+ }\r
+\r
+ set tmplat [osutils:am:readtemplate]\r
+ set lpkgs [osutils:justunix [wokUtils:FILES:FileToList $pkgs]]\r
+ set close [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]\r
+ set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justunix]]\r
+ set lobj [wokUtils:LIST:sanspoint $lsrc]\r
+\r
+ set lcsf [osutils:tk:hascsf [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]]\r
+\r
+ set final 0\r
+ set externinc ""\r
+ set externlib ""\r
+ if { $lcsf != {} } {\r
+ set final 1\r
+ set fmtinc "\$(%s_INCLUDES) "\r
+ set fmtlib "\$(%s_LIB) "\r
+ set externinc [wokUtils:EASY:FmtSimple1 $fmtinc $lcsf 0]\r
+ set externlib [wokUtils:EASY:FmtSimple1 $fmtlib $lcsf 0]\r
+ }\r
+\r
+ regsub -all -- {__TKNAM__} "$tmplat" "$tkloc" temp0\r
+ set vpath [osutils:am:__VPATH__ $lpkgs]\r
+ regsub -all -- {__VPATH__} "$temp0" "$vpath" temp1\r
+ set inclu [osutils:am:__INCLUDES__ $lpkgs]\r
+ regsub -all -- {__INCLUDES__} "$temp1" "$inclu" temp2\r
+ if { $close != {} } {\r
+ set libadd [osutils:am:__LIBADD__ $close $final]\r
+ } else {\r
+ set libadd ""\r
+ }\r
+ regsub -all -- {__LIBADD__} "$temp2" "$libadd" temp3\r
+ set source [osutils:am:__SOURCES__ $lsrc]\r
+ regsub -all -- {__SOURCES__} "$temp3" "$source" temp4\r
+ regsub -all -- {__EXTERNINC__} "$temp4" "$externinc" temp5\r
+ set CXXFl [osutils:am:__CXXFLAG__ $lpkgs]\r
+ regsub -all -- {__CXXFLAG__} "$temp5" "$CXXFl" temp6\r
+ set CFl [osutils:am:__CFLAG__ $lpkgs]\r
+ regsub -all -- {__CFLAG__} "$temp6" "$CFl" temp7\r
+\r
+ regsub -all -- {__EXTERNLIB__} "$temp7" "$externlib" MakeFile_am\r
+\r
+ wokUtils:FILES:StringToFile "$MakeFile_am" [set fmam [file join $dir Makefile.am]]\r
+\r
+ catch { unset temp0 temp1 temp2 temp3 temp4 temp5 temp6 temp7}\r
+\r
+ set tmplat [osutils:in:readtemplate]\r
+ \r
+ regsub -all -- {__TKNAM__} "$tmplat" "$tkloc" temp0\r
+ if { $close != {} } {\r
+ set dpncies [osutils:in:__DEPENDENCIES__ $close]\r
+ } else {\r
+ set dpncies ""\r
+ }\r
+ regsub -all -- {__DEPENDENCIES__} "$temp0" "$dpncies" temp1\r
+\r
+ set objects [osutils:in:__OBJECTS__ $lobj]\r
+ regsub -all -- {__OBJECTS__} "$temp1" "$objects" temp2\r
+ set amdep [osutils:in:__AMPDEP__ $lobj]\r
+ regsub -all -- {__AMPDEP__} "$temp2" "$amdep" temp3\r
+ set amdeptrue [osutils:in:__AMDEPTRUE__ $lobj]\r
+ regsub -all -- {__AMDEPTRUE__} "$temp3" "$amdeptrue" temp4\r
+;# so easy.. \r
+ regsub -all -- {__MAKEFILEIN__} "$temp4" "$MakeFile_am" MakeFile_in\r
+\r
+ wokUtils:FILES:StringToFile "$MakeFile_in" [set fmin [file join $dir Makefile.in]]\r
+\r
+ return [list $fmam $fmin]\r
+}\r
+;#\r
+;# Create in dir the Makefile.am associated with toolkit tkloc.\r
+;# Returns the full path of the created file.\r
+;#\r
+proc osutils:tk:mkamx { dir tkloc } {\r
+ if { [lsearch [uinfo -f -T source [wokcd]:$tkloc] ${tkloc}_WOKSteps.edl] != "-1"} {\r
+ set pkgs [woklocate -p ${tkloc}:EXTERNLIB]\r
+ if { $pkgs == {} } {\r
+ puts stderr "osutils:tk:mkamx : Error. File EXTERNLIB not found for executable $tkloc."\r
+ #return {}\r
+ }\r
+ set tmplat [osutils:am:readtemplatex]\r
+ set close [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]\r
+ set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justunix]]\r
+ set lobj [wokUtils:LIST:sanspoint $lsrc]\r
+ set CXXList {}\r
+ foreach SourceFile [uinfo -f -T source $tkloc] { \r
+ if {[file extension $SourceFile] == ".cxx"} { \r
+ lappend CXXList [file rootname $SourceFile]\r
+ }\r
+ }\r
+ set pkgs [LibToLinkX $tkloc [lindex $CXXList 0]]\r
+ set lpkgs [osutils:justunix [wokUtils:FILES:FileToList $pkgs]]\r
+ puts "pkgs $pkgs"\r
+ #set lcsf [osutils:tk:hascsf [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]]\r
+\r
+ set lcsf {}\r
+ foreach tk $pkgs {\r
+ foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {\r
+ if {[lsearch $lcsf $element] == "-1"} { \r
+ set lcsf [concat $lcsf $element]\r
+ }\r
+ }\r
+ }\r
+ set final 0\r
+ set externinc ""\r
+ set externlib ""\r
+ if { $lcsf != {} } {\r
+ set final 1\r
+ set fmtinc "\$(%s_INCLUDES) "\r
+ set fmtlib "\$(%s_LIB) "\r
+ set externinc [wokUtils:EASY:FmtSimple1 $fmtinc $lcsf 0]\r
+ set externlib [wokUtils:EASY:FmtSimple1 $fmtlib $lcsf 0]\r
+ }\r
+ regsub -all -- {__XQTNAM__} "$tmplat" "$tkloc" temp0\r
+ set temp1 "$temp0 \nlib_LTLIBRARIES="\r
+ foreach entity $CXXList {\r
+ set temp1 "${temp1} lib${entity}.la"\r
+ }\r
+ set temp1 "${temp1}\n"\r
+ set inclu [osutils:am:__INCLUDES__ $lpkgs]\r
+ regsub -all -- {__INCLUDES__} "$temp1" "$inclu" temp2\r
+ if { $pkgs != {} } {\r
+ set libadd [osutils:am:__LIBADD__ $pkgs $final]\r
+ } else {\r
+ set libadd ""\r
+ }\r
+ regsub -all -- {__LIBADD__} "$temp2" "$libadd" temp3\r
+ set source [osutils:am:__SOURCES__ $CXXList]\r
+ regsub -all -- {__SOURCES__} "$temp3" "$source" temp4\r
+ regsub -all -- {__EXTERNINC__} "$temp4" "$externinc" MakeFile_am\r
+ foreach entity $CXXList {\r
+ set MakeFile_am "$MakeFile_am lib${entity}_la_SOURCES = @top_srcdir@/src/${tkloc}/${entity}.cxx \n"\r
+ }\r
+ foreach entity $CXXList {\r
+ set MakeFile_am "$MakeFile_am lib${entity}_la_LIB_ADD = $libadd $externlib \n"\r
+ }\r
+ wokUtils:FILES:StringToFile "$MakeFile_am" [set fmam [file join $dir Makefile.am]]\r
+\r
+ catch { unset temp0 temp1 temp2 temp3 temp4 temp5}\r
+ return [list $fmam]\r
+\r
+ } else {\r
+ set pkgs [woklocate -p ${tkloc}:EXTERNLIB]\r
+ if { $pkgs == {} } {\r
+ puts stderr "osutils:tk:mkamx : Error. File EXTERNLIB not found for executable $tkloc."\r
+ #return {}\r
+ }\r
+ set tmplat [osutils:am:readtemplatex]\r
+ set close [wokUtils:LIST:Purge [osutils:tk:close [woklocate -u $tkloc]]]\r
+ set lsrc [lsort [osutils:tk:files $tkloc osutils:am:compilable 1 osutils:justunix]]\r
+ set lobj [wokUtils:LIST:sanspoint $lsrc]\r
+ set CXXList {}\r
+ foreach SourceFile [uinfo -f -T source $tkloc] { \r
+ if {[file extension $SourceFile] == ".cxx"} { \r
+ lappend CXXList [file rootname $SourceFile]\r
+ }\r
+ }\r
+ set pkgs [LibToLinkX $tkloc [lindex $CXXList 0]]\r
+ set lpkgs [osutils:justunix [wokUtils:FILES:FileToList $pkgs]]\r
+ set lcsf [osutils:tk:hascsf [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]]\r
+\r
+ set lcsf {}\r
+ foreach tk $pkgs {\r
+ foreach element [osutils:tk:hascsf [woklocate -p ${tk}:source:EXTERNLIB [wokcd]]] {\r
+ if {[lsearch $lcsf $element] == "-1"} { \r
+ set lcsf [concat $lcsf $element]\r
+ }\r
+ }\r
+ }\r
+ set final 0\r
+ set externinc ""\r
+ set externlib ""\r
+ if { $lcsf != {} } {\r
+ set final 1\r
+ set fmtinc "\$(%s_INCLUDES) "\r
+ set fmtlib "\$(%s_LIB) "\r
+ set externinc [wokUtils:EASY:FmtSimple1 $fmtinc $lcsf 0]\r
+ set externlib [wokUtils:EASY:FmtSimple1 $fmtlib $lcsf 0]\r
+ }\r
+ regsub -all -- {__XQTNAM__} "$tmplat" "$tkloc" temp0\r
+ set temp1 "$temp0 \nbin_PROGRAMS="\r
+ foreach entity $CXXList {\r
+ set temp1 "${temp1} ${entity}"\r
+ }\r
+ \r
+ set temp1 "${temp1}\n"\r
+ set inclu [osutils:am:__INCLUDES__ $lpkgs]\r
+ regsub -all -- {__INCLUDES__} "$temp1" "$inclu" temp2\r
+ if { $pkgs != {} } {\r
+ set libadd [osutils:am:__LIBADD__ $pkgs $final]\r
+ } else {\r
+ set libadd ""\r
+ }\r
+ set source [osutils:am:__SOURCES__ $CXXList]\r
+ regsub -all -- {__SOURCES__} "$temp2" "$source" temp3\r
+ regsub -all -- {__EXTERNINC__} "$temp3" "$externinc" MakeFile_am\r
+ foreach entity $CXXList {\r
+ set MakeFile_am "$MakeFile_am ${entity}_SOURCES = @top_srcdir@/src/${tkloc}/${entity}.cxx \n"\r
+ }\r
+ foreach entity $CXXList {\r
+ set MakeFile_am "$MakeFile_am ${entity}_LDADD = $libadd $externlib \n"\r
+ }\r
+ wokUtils:FILES:StringToFile "$MakeFile_am" [set fmam [file join $dir Makefile.am]]\r
+\r
+ catch { unset temp0 temp1 temp2 temp3 temp4 temp5}\r
+\r
+ # set tmplat [osutils:in:readtemplatex]\r
+ \r
+ # regsub -all -- {__XQTNAM__} "$tmplat" "$tkloc" temp0\r
+ # if { $close != {} } {\r
+ #set dpncies [osutils:in:__DEPENDENCIES__ $close]\r
+ # } else {\r
+ #set dpncies ""\r
+ # }\r
+ # regsub -all -- {__DEPENDENCIES__} "$temp0" "$dpncies" temp1\r
+\r
+ # set objects [osutils:in:__OBJECTS__ $lobj]\r
+ # regsub -all -- {__OBJECTS__} "$temp1" "$objects" temp2\r
+ # #set temp2 $temp1\r
+ # set amdep [osutils:in:__AMPDEP__ $lobj]\r
+ # regsub -all -- {__AMPDEP__} "$temp2" "$amdep" temp3\r
+ #set temp3 $temp2\r
+ # set amdeptrue [osutils:in:__AMDEPTRUE__ $lobj]\r
+ # regsub -all -- {__AMDEPTRUE__} "$temp3" "$amdeptrue" temp4\r
+ #set temp4 $temp3\r
+;# so easy.. \r
+ # regsub -all -- {__MAKEFILEIN__} "$temp4" "$MakeFile_am" MakeFile_in\r
+\r
+ #wokUtils:FILES:StringToFile "$MakeFile_in" [set fmin [file join $dir Makefile.in]]\r
+ return [list $fmam]\r
+ #return [list $fmam $fmin]\r
+ }\r
+}\r
+\r
+;#\r
+;# ((((((((((((( Formats in Makefile.am )))))))))))))\r
+;#\r
+;# List extensions of files compilable in automake\r
+;#\r
+proc osutils:am:compilable { } {\r
+ return [list .c .cxx .cpp]\r
+}\r
+;#\r
+;# Used to replace the string __VPATH__ in Makefile.am\r
+;# l is the list of the units in a toolkit.\r
+;#\r
+proc osutils:am:__VPATH__ { l } {\r
+ set fmt "@top_srcdir@/drv/%s : @top_srcdir@/src/%s:"\r
+ return [wokUtils:EASY:FmtString2 $fmt $l 0 osutils:am:__VPATH__lastoccur]\r
+}\r
+;#\r
+;# remove ":" from last item of dependencies list in target VPATH of Makefile.am\r
+;#\r
+proc osutils:am:__VPATH__lastoccur { str } {\r
+ if { [regsub {:$} $str "" u] != 0 } {\r
+ return $u\r
+ }\r
+}\r
+proc osutils:am:PkCXXOption ppk {\r
+ set CXXCOMMON [lindex [wokparam -e %CMPLRS_CXX_Options [wokcd]] 0]\r
+ set FoundFlag ""\r
+ foreach pk $ppk {\r
+ if {[lsearch [uinfo -f -T source [wokcd]:$pk] ${pk}_CMPLRS.edl] != "-1"} {\r
+ set CXXStr [lindex [wokparam -e %CMPLRS_CXX_Options $pk] 0]\r
+ set LastIndex [expr {[string length $CXXCOMMON ] - 1}]\r
+ if {[string equal $CXXCOMMON [string range $CXXStr 0 $LastIndex]]} {\r
+ set CXXOption [string range $CXXStr $LastIndex end ]\r
+ } else {\r
+ set CXXOption [string range $CXXStr 0 [expr {[string last $CXXCOMMON $CXXStr] - 1}]]\r
+ }\r
+ if {$CXXOption != " " && $CXXOption != "" && $CXXOption != " " && $CXXOption != " "} {\r
+ set FoundList [split $CXXOption " "]\r
+ foreach elem $FoundList {\r
+ if {$elem != ""} {\r
+ if {[string first "-I" $elem] == "-1" } {\r
+ if {[string first $elem $FoundFlag] == "-1"} {\r
+ set FoundFlag "$FoundFlag $elem"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return $FoundFlag\r
+}\r
+\r
+proc osutils:am:PkCOption ppk {\r
+ set CCOMMON [lindex [wokparam -e %CMPLRS_C_Options [wokcd]] 0]\r
+ set FoundFlag ""\r
+ foreach pk $ppk {\r
+ if {[lsearch [uinfo -f -T source [wokcd]:$pk] ${pk}_CMPLRS.edl] != "-1"} {\r
+ set CStr [lindex [wokparam -e %CMPLRS_C_Options $pk] 0]\r
+ set LastIndex [expr {[string length $CCOMMON ] - 1}]\r
+ if {[string equal $CCOMMON [string range $CStr 0 $LastIndex]]} {\r
+ set COption [string range $CStr $LastIndex end ]\r
+ } else {\r
+ set COption [string range $CStr 0 [expr {[string last $CCOMMON $CStr] - 1}]]\r
+ }\r
+ if {$COption != " " && $COption != "" && $COption != " " && $COption != " "} {\r
+ set FoundList [split $COption " "]\r
+ foreach elem $FoundList {\r
+ if {$elem != ""} {\r
+ if {[string first "-I" $elem] == "-1" } {\r
+ if {[string first $elem $FoundFlag] == "-1"} {\r
+ set FoundFlag "$FoundFlag $elem"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } \r
+return $FoundFlag\r
+}\r
+\r
+proc osutils:am:__CXXFLAG__ { l } {\r
+ set fmt "%s"\r
+ #puts "l is: $l"\r
+ return [wokUtils:EASY:FmtString1 $fmt [osutils:am:PkCXXOption $l]]\r
+}\r
+;#\r
+;# Used to replace the string __CFLAG__ in Makefile.am\r
+;# l is the list of all compilable files in a toolkit.\r
+;#\r
+proc osutils:am:__CFLAG__ { l } {\r
+ set fmt "%s"\r
+ return [wokUtils:EASY:FmtString1 $fmt [osutils:am:PkCOption $l]]\r
+}\r
+\r
+;#\r
+;# Used to replace the string __INCLUDES__ in Makefile.am\r
+;# l is the list of packages in a toolkit.\r
+;#\r
+proc osutils:am:__INCLUDES__ { l } {\r
+ set fmt "-I@top_srcdir@/drv/%s -I@top_srcdir@/src/%s"\r
+ return [wokUtils:EASY:FmtString2 $fmt $l] \r
+}\r
+;#\r
+;# Used to replace the string __LIBADD__ in Makefile.am\r
+;# l is the toolkit closure list of a toolkit.\r
+;#\r
+proc osutils:am:__LIBADD__ { l {final 0} } {\r
+ set fmt "../%s/lib%s.la"\r
+ return [wokUtils:EASY:FmtString2 $fmt $l $final]\r
+}\r
+;#\r
+;# Used to replace the string __SOURCES__ in Makefile.am\r
+;# l is the list of all compilable files in a toolkit.\r
+;#\r
+proc osutils:am:__SOURCES__ { l } {\r
+ set fmt "%s"\r
+ return [wokUtils:EASY:FmtString1 $fmt $l]\r
+}\r
+;#\r
+;# ((((((((((((( Formats in Makefile.in )))))))))))))\r
+;#\r
+;#\r
+;# Used to replace the string __DEPENDENCIES__ in Makefile.in\r
+;# l is the toolkit closure list of a toolkit.\r
+;# \r
+proc osutils:in:__DEPENDENCIES__ { l } {\r
+ set fmt1 "../%s/lib%s.la"\r
+ set fmt2 "\t../%s/lib%s.la"\r
+ return [wokUtils:EASY:FmtFmtString2 $fmt1 $fmt2 $l]\r
+}\r
+;#\r
+;# Used to replace the string __OBJECTS__ in Makefile.in\r
+;# l is the list of objects files in toolkit.\r
+;#\r
+proc osutils:in:__OBJECTS__ { l } {\r
+ set fmt1 "%s.lo"\r
+ set fmt2 "\t%s.lo"\r
+ return [wokUtils:EASY:FmtFmtString1 $fmt1 $fmt2 $l]\r
+}\r
+;#\r
+;# Used to replace the string __AMDEP__ in Makefile.in\r
+;# l is the list of objects files in toolkit.\r
+;#\r
+proc osutils:in:__AMPDEP__ { l } {\r
+ set fmt1 "\$(DEPDIR)/%s.Plo"\r
+ set fmt2 "@AMDEP_TRUE@\t\$(DEPDIR)/%s.Plo"\r
+ return [wokUtils:EASY:FmtFmtString1 $fmt1 $fmt2 $l]\r
+}\r
+;#\r
+;# Used to replace the string __AMDEPTRUE__ in Makefile.in\r
+;# l is the list of objects files in toolkit.\r
+;#\r
+proc osutils:in:__AMDEPTRUE__ { l } {\r
+ set fmt "@AMDEP_TRUE@@_am_include@ @_am_quote@\$(DEPDIR)/%s.Plo@_am_quote@"\r
+ return [wokUtils:EASY:FmtSimple1 $fmt $l]\r
+}\r
+\r
+\r
+;#############################################################\r
+;#\r
+proc TESTAM { {root /dn04/OS/OCC/RELEASE/ros/adm/make} } {\r
+\r
+ wokcd KAS:dev:ros\r
+ set ltk [w_info -T toolkit OS:OCC:RELEASE]\r
+ ;#set ltk TKernel\r
+ foreach tkloc $ltk {\r
+ puts " toolkit: $tkloc ==> [woklocate -p ${tkloc}:source:EXTERNLIB [wokcd]]"\r
+ wokUtils:FILES:mkdir $root/$tkloc\r
+ osutils:tk:mkam $root/$tkloc $tkloc \r
+ #osutils:mkdsp $root $tkloc \r
+ }\r
+ set ltk [w_info -T executable OS:OCC:RELEASE]\r
+ foreach tkloc $ltk {\r
+ wokUtils:FILES:mkdir $root/$tkloc\r
+ osutils:tk:mkamx $root/$tkloc $tkloc \r
+ #osutils:mkdspx $root $tkloc \r
+ }\r
+}\r