return ""
}
-proc _get_used_files { pk {inc true} {src true} } {
+proc _get_used_files { pk theSrcDir {inc true} {src true} } {
global path
set type [_get_type $pk]
set lret {}
- set pk_path "$path/src/$pk"
- set FILES_path "$path/src/$pk/FILES"
+ set pk_path "$path/$theSrcDir/$pk"
+ set FILES_path "$path/$theSrcDir/$pk/FILES"
set FILES {}
if {[file exists $FILES_path]} {
set fd [open $FILES_path rb]
return $lret
}
-# return location of the path within src directory
-proc osutils:findSrcSubPath {theSubPath} {
- if {[file exists "$::path/src/$theSubPath"]} {
- return "$::path/src/$theSubPath"
+# return location of the path within source directory
+proc osutils:findSrcSubPath {theSrcDir theSubPath} {
+ if {[file exists "$::path/$theSrcDir/$theSubPath"]} {
+ return "$::path/$theSrcDir/$theSubPath"
}
- return "$::THE_CASROOT/src/$theSubPath"
+ return "$::THE_CASROOT/$theSrcDir/$theSubPath"
}
# Auxiliary tool comparing content of two files line-by-line.
}
# Function re-generating header files for specified text resource
-proc genResources { theResource } {
+proc genResources { theSrcDir theResource } {
global path
set aResFileList {}
- set aResourceAbsPath [file normalize "${path}/src/${theResource}"]
+ set aResourceAbsPath [file normalize "${path}/$theSrcDir/${theResource}"]
set aResourceDirectory ""
set isResDirectory false
# generate
set aContent {}
- lappend aContent "// This file has been automatically generated from resource file src/${aResourceDirectory}/${aResFileIter}"
+ lappend aContent "// This file has been automatically generated from resource file $theSrcDir/${aResourceDirectory}/${aResFileIter}"
lappend aContent ""
# generate necessary structures
set aLineList {}
- if {[file exists "${path}/src/${aResourceDirectory}/${aResFileIter}"]} {
- set anInputFile [open "${path}/src/${aResourceDirectory}/${aResFileIter}" rb]
+ if {[file exists "${path}/$theSrcDir/${aResourceDirectory}/${aResFileIter}"]} {
+ set anInputFile [open "${path}/$theSrcDir/${aResourceDirectory}/${aResFileIter}" rb]
fconfigure $anInputFile -translation crlf
set aLineList [split [read $anInputFile] "\n"]
close $anInputFile
}
# Save generated content to header file
- set aHeaderFilePath "${path}/src/${aResourceDirectory}/${aHeaderFileName}"
+ set aHeaderFilePath "${path}/$theSrcDir/${aResourceDirectory}/${aHeaderFileName}"
if { [osutils:writeTextFile $aHeaderFilePath $aContent] == true } {
- puts "Generating header file from resource file: ${path}/src/${aResourceDirectory}/${aResFileIter}"
+ puts "Generating header file from resource file: ${path}/$theSrcDir/${aResourceDirectory}/${aResFileIter}"
} else {
#puts "Header file from resource ${path}/src/${aResourceDirectory}/${aResFileIter} is up-to-date"
}
}
# Function re-generating header files for all text resources
-proc genAllResources {} {
+proc genAllResources { theSrcDir } {
global path
set aCasRoot [file normalize $path]
if {![file exists "$aCasRoot/adm/RESOURCES"]} {
set anAdmResources [lsearch -inline -all -not -exact $anAdmResources ""]
foreach line $anAdmResources {
- genResources "${line}"
+ genResources $theSrcDir "${line}"
}
}
OS:MKPRC "$anAdmPath" "$theFormat" "$aLibType" "$aPlatform" "$aCmpl" "$aSolution"
genprojbat "$theFormat" "$aPlatform" "$aSolution"
- genAllResources
+ genAllResources "src"
}
# copy file providing warning if the target file exists and has
}
copy_with_warning "$::THE_CASROOT/adm/templates/draw.${aTargetPlatformExt}" "$::path/draw.${aTargetPlatformExt}"
+
+ if { "$::BUILD_Inspector" == "true" } {
+ copy_with_warning "$::THE_CASROOT/adm/templates/inspector.${aTargetPlatformExt}" "$::path/inspector.${aTargetPlatformExt}"
+ }
}
set aSolShList ""
}
# make list of modules and platforms
- set aModules [OS:init]
+ set aModules [OS:init Modules]
if { "$thePlatform" == "ios" } {
set goaway [list Draw]
set aModules [osutils:juststation $goaway $aModules]
# collect all required header files
puts "Collecting required header files into $path/inc ..."
- osutils:collectinc $aModules $path/inc
+ osutils:collectinc $aModules "src" $path/inc
+
+ # make list of Inspector tools
+ set aTools {}
+ if { "$::BUILD_Inspector" == "true" } {
+ set aTools [OS:init Tools]
+
+ # create the out dir if it does not exist
+ if (![file isdirectory $path/inc/inspector]) {
+ puts "$path/inc/inspector folder does not exists and will be created"
+ wokUtils:FILES:mkdir $path/inc/inspector
+ }
+
+ # collect all required header files
+ puts "Collecting required tools header files into $path/inc/inspector ..."
+ osutils:collectinc $aTools "tools" $path/inc/inspector
+ }
if { "$theFormat" == "pro" } {
return
"vc14" -
"vc141" -
"vc142" -
- "vclang" { OS:MKVC $anOutDir $aModules $theSolution $theFormat $isUWP}
+ "vclang" { OS:MKVC $anOutDir $aModules $aTools $theSolution $theFormat $isUWP}
"cbp" { OS:MKCBP $anOutDir $aModules $theSolution $thePlatform $theCmpl }
"xcd" {
set ::THE_GUIDS_LIST($::aTKNullKey) "000000000000000000000000"
}
# Function to generate Visual Studio solution and project files
-proc OS:MKVC { theOutDir theModules theAllSolution theVcVer isUWP } {
+proc OS:MKVC { theOutDir theModules theTools theAllSolution theVcVer isUWP } {
puts stderr "Generating VS project files for $theVcVer"
# generate projects for toolkits and separate solution for each module
foreach aModule $theModules {
- OS:vcsolution $theVcVer $aModule $aModule $theOutDir ::THE_GUIDS_LIST
- OS:vcproj $theVcVer $isUWP $aModule $theOutDir ::THE_GUIDS_LIST
+ OS:vcsolution $theVcVer $aModule $aModule $theOutDir ::THE_GUIDS_LIST "src" "" ""
+ OS:vcproj $theVcVer $isUWP $aModule $theOutDir ::THE_GUIDS_LIST "src" ""
+ }
+
+ # generate projects for toolkits and separate solution for each tool
+ foreach aTool $theTools {
+ OS:vcsolution $theVcVer $aTool $aTool $theOutDir ::THE_GUIDS_LIST "tools" "" "src"
+ OS:vcproj $theVcVer $isUWP $aTool $theOutDir ::THE_GUIDS_LIST "tools" "src"
}
# generate single solution "OCCT" containing projects from all modules
if { "$theAllSolution" != "" } {
- OS:vcsolution $theVcVer $theAllSolution $theModules $theOutDir ::THE_GUIDS_LIST
+ OS:vcsolution $theVcVer $theAllSolution $theModules $theOutDir ::THE_GUIDS_LIST "src" $theTools "tools"
}
puts "The Visual Studio solution and project files are stored in the $theOutDir directory"
}
-proc OS:init {{os {}}} {
+proc OS:init {theNameOfDefFile {os {}}} {
set askplat $os
set aModules {}
if { "$os" == "" } {
set os $::tcl_platform(os)
}
- if [file exists "$::path/src/VAS/Products.tcl"] {
- source "$::path/src/VAS/Products.tcl"
- foreach aModuleIter [VAS:Products] {
- set aFileTcl "$::path/src/VAS/${aModuleIter}.tcl"
- if [file exists $aFileTcl] {
- source $aFileTcl
- lappend aModules $aModuleIter
- } else {
- puts stderr "Definition file for module $aModuleIter is not found in unit VAS"
- }
- }
- return $aModules
- }
-
# Load list of OCCT modules and their definitions
- source "$::path/src/OS/Modules.tcl"
+ source "$::path/src/OS/${theNameOfDefFile}.tcl"
foreach aModuleIter [OS:Modules] {
set aFileTcl "$::path/src/OS/${aModuleIter}.tcl"
if [file exists $aFileTcl] {
source $aFileTcl
lappend aModules $aModuleIter
} else {
- puts stderr "Definition file for module $aModuleIter is not found in unit OS"
+ puts stderr "Definition file for $aModuleIter is not found in unit OS"
}
}
}
# Topological sort of toolkits in tklm
-proc osutils:tk:sort { tklm } {
+proc osutils:tk:sort { tklm theSrcDir theSourceDirOther } {
set tkby2 {}
foreach tkloc $tklm {
- set lprg [wokUtils:LIST:Purge [osutils:tk:close $tkloc]]
+ set lprg [wokUtils:LIST:Purge [osutils:tk:close $tkloc $theSrcDir $theSourceDirOther]]
foreach tkx $lprg {
if { [lsearch $tklm $tkx] != -1 } {
lappend tkby2 [list $tkx $tkloc]
# 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 } {
+proc osutils:tk:close { ltk theSrcDir theSourceDirOther } {
set result {}
set recurse {}
foreach dir $ltk {
- set ids [LibToLink $dir]
+ set ids [LibToLink $dir $theSrcDir $theSourceDirOther]
# puts "osutils:tk:close($ltk) ids='$ids'"
set eated [osutils:tk:eatpk $ids]
set result [concat $result $eated]
- set ids [LibToLink $dir]
+ set ids [LibToLink $dir $theSrcDir $theSourceDirOther]
set result [concat $result $ids]
foreach file $eated {
- set kds [osutils:findSrcSubPath "$file/EXTERNLIB"]
+ set kds [osutils:findSrcSubPath $theSrcDir "$file/EXTERNLIB"]
if { [osutils:tk:eatpk $kds] != {} } {
lappend recurse $file
}
}
}
if { $recurse != {} } {
- set result [concat $result [osutils:tk:close $recurse]]
+ set result [concat $result [osutils:tk:close $recurse $theSrcDir $theSourceDirOther]]
}
return $result
}
}
# Define libraries to link using only EXTERNLIB file
-proc LibToLink {theTKit} {
+proc LibToLink {theTKit theSrcDir theSourceDirOther} {
regexp {^.*:([^:]+)$} $theTKit dummy theTKit
set type [_get_type $theTKit]
if {$type != "t" && $type != "x"} {
return
}
set aToolkits {}
- set anExtLibList [osutils:tk:eatpk [osutils:findSrcSubPath "$theTKit/EXTERNLIB"]]
+ set anExtLibList [osutils:tk:eatpk [osutils:findSrcSubPath $theSrcDir "$theTKit/EXTERNLIB"]]
foreach anExtLib $anExtLibList {
- set aFullPath [LocateRecur $anExtLib]
+ set aFullPath [LocateRecur $anExtLib $theSrcDir]
+ if { "$aFullPath" == "" && "$theSourceDirOther" != "" } {
+ set aFullPath [LocateRecur $anExtLib $theSourceDirOther]
+ }
if { "$aFullPath" != "" && [_get_type $anExtLib] == "t" } {
lappend aToolkits $anExtLib
}
}
# Search unit recursively
-proc LocateRecur {theName} {
- set theNamePath [osutils:findSrcSubPath "$theName"]
+proc LocateRecur {theName theSrcDir} {
+ set theNamePath [osutils:findSrcSubPath $theSrcDir "$theName"]
if {[file isdirectory $theNamePath]} {
return $theNamePath
}
}
# collect all include file that required for theModules in theOutDir
-proc osutils:collectinc {theModules theIncPath} {
+proc osutils:collectinc {theModules theSrcDir theIncPath} {
global path
set aCasRoot [file normalize $path]
set anIncPath [file normalize $theIncPath]
foreach aToolKit [${aModule}:toolkits] {
lappend anUsedToolKits $aToolKit
- foreach aDependency [LibToLink $aToolKit] {
+ foreach aDependency [LibToLink $aToolKit $theSrcDir ""] {
lappend anUsedToolKits $aDependency
}
}
foreach anExecutable [OS:executable ${aModule}] {
lappend anUsedToolKits $anExecutable
- foreach aDependency [LibToLink $anExecutable] {
+ foreach aDependency [LibToLink $anExecutable $theSrcDir ""] {
lappend anUsedToolKits $aDependency
}
}
set anUnits {}
foreach anUsedToolKit $anUsedToolKits {
- set anUnits [concat $anUnits [osutils:tk:units $anUsedToolKit]]
+ set anUnits [concat $anUnits [osutils:tk:units $anUsedToolKit $theSrcDir] ]
}
set anUnits [lsort -unique $anUnits]
}
set aHeaderTmpl [wokUtils:FILES:FileToString $::THE_CASROOT/adm/templates/header.in]
- # relative anIncPath in connection with aCasRoot/src
- set aFromBuildIncToSrcPath [relativePath "$anIncPath" "$aCasRoot/src"]
+ # relative anIncPath in connection with aCasRoot/$theSrcDir
+ set aFromBuildIncToSrcPath [relativePath "$anIncPath" "$aCasRoot/$theSrcDir"]
# create and copy short-cut header files
foreach anUnit $anUnits {
- osutils:checksrcfiles ${anUnit}
+ osutils:checksrcfiles ${anUnit} $theSrcDir
- set aHFiles [_get_used_files ${anUnit} true false]
+ set aHFiles [_get_used_files ${anUnit} $theSrcDir true false]
foreach aHeaderFile ${aHFiles} {
set aHeaderFileName [lindex ${aHeaderFile} 1]
lappend allHeaderFiles "${aHeaderFileName}"
} else {
set nbcopied 0
foreach anUnit $anUnits {
- osutils:checksrcfiles ${anUnit}
+ osutils:checksrcfiles ${anUnit} $theSrcDir
- set aHFiles [_get_used_files ${anUnit} true false]
+ set aHFiles [_get_used_files ${anUnit} $theSrcDir true false]
foreach aHeaderFile ${aHFiles} {
set aHeaderFileName [lindex ${aHeaderFile} 1]
lappend allHeaderFiles "${aHeaderFileName}"
# copy file only if target does not exist or is older than original
- set torig [file mtime $aCasRoot/src/$anUnit/$aHeaderFileName]
+ set torig [file mtime $aCasRoot/$theSrcDir/$anUnit/$aHeaderFileName]
set tcopy 0
if { [file isfile $anIncPath/$aHeaderFileName] } {
set tcopy [file mtime $anIncPath/$aHeaderFileName]
if { $tcopy != 0 } {
file delete -force "$theIncPath/$aHeaderFileName"
}
- file link -hard $anIncPath/$aHeaderFileName $aCasRoot/src/$anUnit/$aHeaderFileName
+ file link -hard $anIncPath/$aHeaderFileName $aCasRoot/$theSrcDir/$anUnit/$aHeaderFileName
} else {
- file copy -force $aCasRoot/src/$anUnit/$aHeaderFileName $anIncPath/$aHeaderFileName
+ file copy -force $aCasRoot/$theSrcDir/$anUnit/$aHeaderFileName $anIncPath/$aHeaderFileName
}
} elseif { $tcopy != $torig } {
- puts "Warning: file $anIncPath/$aHeaderFileName is newer than $aCasRoot/src/$anUnit/$aHeaderFileName, not changed!"
+ puts "Warning: file $anIncPath/$aHeaderFileName is newer than $aCasRoot/$theSrcDir/$anUnit/$aHeaderFileName, not changed!"
}
}
}
# generate Visual Studio solution file
# if module is empty, generates one solution for all known modules
-proc OS:vcsolution { theVcVer theSolName theModules theOutDir theGuidsMap } {
+proc OS:vcsolution { theVcVer theSolName theModules theOutDir theGuidsMap theSrcDir theModulesOther theSourceDirOther } {
global path
upvar $theGuidsMap aGuidsMap
# collect list of projects to be created
set aProjects {}
set aDependencies {}
- foreach aModule $theModules {
- # toolkits
- foreach aToolKit [osutils:tk:sort [${aModule}:toolkits]] {
- lappend aProjects $aToolKit
- lappend aProjectsInModule($aModule) $aToolKit
- lappend aDependencies [LibToLink $aToolKit]
- }
- # executables, assume one project per cxx file...
- foreach aUnit [OS:executable ${aModule}] {
- set aUnitLoc $aUnit
- set src_files [_get_used_files $aUnit false]
- set aSrcFiles {}
- foreach s $src_files {
- regexp {source ([^\s]+)} $s dummy name
- lappend aSrcFiles $name
- }
- foreach aSrcFile $aSrcFiles {
- set aFileExtension [file extension $aSrcFile]
- if { $aFileExtension == ".cxx" } {
- set aPrjName [file rootname $aSrcFile]
- lappend aProjects $aPrjName
- lappend aProjectsInModule($aModule) $aPrjName
- if {[file isdirectory $path/src/$aUnitLoc]} {
- lappend aDependencies [LibToLinkX $aUnitLoc [file rootname $aSrcFile]]
- } else {
- lappend aDependencies {}
- }
- }
- }
- }
- }
+
+ osutils:convertModules $theModules $theSrcDir $theSourceDirOther aProjects aProjectsInModule aDependencies
+ osutils:convertModules $theModulesOther $theSourceDirOther $theSrcDir aProjects aProjectsInModule aDependencies
# generate GUIDs for projects (unless already known)
foreach aProject $aProjects {
}
}
+ if { "$theVcVer" != "vc7" && [llength "$theModulesOther"] > 1 } {
+ set aModule "Tools"
+ if { ! [info exists aGuidsMap(_$aModule)] } {
+ set aGuidsMap(_$aModule) [OS:genGUID]
+ }
+ set aGuid $aGuidsMap(_$aModule)
+ append aFileBuff "Project(\"${VC_GROUP_GUID}\") = \"$aModule\", \"$aModule\", \"$aGuid\"\nEndProject\n"
+ }
+
# extension of project files
set aProjExt [osutils:vcproj:ext $theVcVer]
append aFileBuff " $aGuidsMap($aProject) = $aGuidsMap(_$aModule)\n"
}
}
+ set aToolsName "Tools"
+ foreach aModule $theModulesOther {
+ if { ! [info exists aProjectsInModule($aModule)] } { continue }
+ foreach aProject $aProjectsInModule($aModule) {
+ append aFileBuff " $aGuidsMap($aProject) = $aGuidsMap(_$aToolsName)\n"
+ }
+ }
append aFileBuff " EndGlobalSection\n"
}
close $aFile
return [file join $theOutDir ${theSolName}.sln]
}
+
+# Generate auxiliary containers with information about modules.
+# @param theModules List of modules
+# @param theSrcDir Directory of module toolkits
+# @param theSourceDirOther Directory with other additional sources to find out toolkits in dependencies
+# @param theProjects list of all found projects/toolkits
+# @param theProjectsInModule map of module into toolkits/projects
+# @param theDependencies list of the project dependencies. To find the project dependencies, get it by the index in project container
+proc osutils:convertModules { theModules theSrcDir theSourceDirOther theProjects theProjectsInModule theDependencies } {
+ global path
+ upvar $theProjectsInModule aProjectsInModule
+ upvar $theProjects aProjects
+ upvar $theDependencies aDependencies
+
+ foreach aModule $theModules {
+ # toolkits
+ foreach aToolKit [osutils:tk:sort [${aModule}:toolkits] $theSrcDir $theSourceDirOther] {
+ lappend aProjects $aToolKit
+ lappend aProjectsInModule($aModule) $aToolKit
+ lappend aDependencies [LibToLink $aToolKit $theSrcDir $theSourceDirOther]
+ }
+ # executables, assume one project per cxx file...
+ foreach aUnit [OS:executable ${aModule}] {
+ set aUnitLoc $aUnit
+ set src_files [_get_used_files $aUnit $theSrcDir false]
+ set aSrcFiles {}
+ foreach s $src_files {
+ regexp {source ([^\s]+)} $s dummy name
+ lappend aSrcFiles $name
+ }
+ foreach aSrcFile $aSrcFiles {
+ set aFileExtension [file extension $aSrcFile]
+ if { $aFileExtension == ".cxx" } {
+ set aPrjName [file rootname $aSrcFile]
+ lappend aProjects $aPrjName
+ lappend aProjectsInModule($aModule) $aPrjName
+ if {[file isdirectory $path/$theSrcDir/$aUnitLoc]} {
+ lappend aDependencies [LibToLinkX $aUnitLoc [file rootname $aSrcFile] $theSrcDir $theSourceDirOther]
+ } else {
+ lappend aDependencies {}
+ }
+ }
+ }
+ }
+ }
+}
# Generate Visual Studio projects for specified version
-proc OS:vcproj { theVcVer isUWP theModules theOutDir theGuidsMap } {
+proc OS:vcproj { theVcVer isUWP theModules theOutDir theGuidsMap theSrcDir theSourceDirOther } {
upvar $theGuidsMap aGuidsMap
set aProjectFiles {}
foreach aModule $theModules {
foreach aToolKit [${aModule}:toolkits] {
- lappend aProjectFiles [osutils:vcproj $theVcVer $isUWP $theOutDir $aToolKit aGuidsMap]
+ lappend aProjectFiles [osutils:vcproj $theVcVer $isUWP $theOutDir $aToolKit aGuidsMap $theSrcDir $theSourceDirOther]
}
foreach anExecutable [OS:executable ${aModule}] {
- lappend aProjectFiles [osutils:vcprojx $theVcVer $isUWP $theOutDir $anExecutable aGuidsMap]
+ lappend aProjectFiles [osutils:vcprojx $theVcVer $isUWP $theOutDir $anExecutable aGuidsMap $theSrcDir $theSourceDirOther]
}
}
return $aProjectFiles
return [list .h .hxx .hpp .lxx .pxx .gxx .mm ]
}
-proc osutils:commonUsedTK { theToolKit } {
+# List extensions of Qt resource file in OCCT
+proc osutils:fileExtensionsResources {thePlatform} {
+ return [list .qrc ]
+}
+
+proc osutils:commonUsedTK { theToolKit theSrcDir theSourceDirOther} {
set anUsedToolKits [list]
- set aDepToolkits [LibToLink $theToolKit]
+ set aDepToolkits [LibToLink $theToolKit $theSrcDir $theSourceDirOther]
foreach tkx $aDepToolkits {
if {[_get_type $tkx] == "t"} {
lappend anUsedToolKits "${tkx}"
# @param theOS - target OS
# @param theCsfLibsMap - libraries map
# @param theCsfFrmsMap - frameworks map, OS X specific
-proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap } {
+proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap theRelease} {
upvar $theCsfLibsMap aLibsMap
upvar $theCsfFrmsMap aFrmsMap
# the naming is different on Windows
set aLibsMap(CSF_TclLibs) "tcl86"
set aLibsMap(CSF_TclTkLibs) "tk86"
-
- set aLibsMap(CSF_QT) "QtCore4 QtGui4"
+ if { "$theRelease" == "true" } {
+ set aLibsMap(CSF_QT) "Qt5Gui Qt5Widgets Qt5Xml Qt5Core"
+ } else {
+ set aLibsMap(CSF_QT) "Qt5Guid Qt5Widgetsd Qt5Xmld Qt5Cored"
+ }
# tbb headers define different pragma lib depending on debug/release
set aLibsMap(CSF_TBB) ""
# @param theLibsList - dependencies (libraries list)
# @param theFrameworks - dependencies (frameworks list, OS X specific)
-proc osutils:usedOsLibs { theToolKit theOS theLibsList theFrameworks } {
+proc osutils:usedOsLibs { theToolKit theOS theLibsList theFrameworks theSrcDir { theRelease true } } {
global path
upvar $theLibsList aLibsList
upvar $theFrameworks aFrameworks
set aLibsList [list]
set aFrameworks [list]
- osutils:csfList $theOS aLibsMap aFrmsMap
+ osutils:csfList $theOS aLibsMap aFrmsMap $theRelease
- foreach aCsfElem [osutils:tk:csfInExternlib "$path/src/${theToolKit}/EXTERNLIB"] {
+ foreach aCsfElem [osutils:tk:csfInExternlib "$path/$theSrcDir/${theToolKit}/EXTERNLIB"] {
if [info exists aLibsMap($aCsfElem)] {
foreach aLib [split "$aLibsMap($aCsfElem)"] {
if { [lsearch $aLibsList $aLib] == "-1" } {
}
# Returns liste of UD in a toolkit. tkloc is a full path wok.
-proc osutils:tk:units { tkloc } {
+proc osutils:tk:units { tkloc theSrcDir } {
global path
set l {}
- set PACKAGES "$path/src/$tkloc/PACKAGES"
+ set PACKAGES "$path/$theSrcDir/$tkloc/PACKAGES"
foreach u [wokUtils:FILES:FileToList $PACKAGES] {
- if {[file isdirectory "$path/src/$u"]} {
+ if {[file isdirectory "$path/$theSrcDir/$u"]} {
lappend l $u
}
}
}
# Generate entry for one source file in Visual Studio 10 project file
-proc osutils:vcxproj:cxxfile { theFile theParams } {
+proc osutils:vcxproj:cxxfile { theFile theParams theSrcFileLevel } {
if { $theParams == "" } {
- return " <ClCompile Include=\"..\\..\\..\\[wokUtils:EASY:bs1 [wokUtils:FILES:wtail $theFile 3]]\" />\n"
+ return " <ClCompile Include=\"..\\..\\..\\[wokUtils:EASY:bs1 [wokUtils:FILES:wtail $theFile $theSrcFileLevel]]\" />\n"
}
set aParams [string trim ${theParams}]
}
# Generate Visual Studio project file for ToolKit
-proc osutils:vcproj { theVcVer isUWP theOutDir theToolKit theGuidsMap } {
+proc osutils:vcproj { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir theSourceDirOther } {
+ global path
+
+ set aHasQtDep "false"
+ foreach aCsfElem [osutils:tk:csfInExternlib "$path/$theSrcDir/${theToolKit}/EXTERNLIB"] {
+ if { "$aCsfElem" == "CSF_QT" } {
+ set aHasQtDep "true"
+ }
+ }
set theProjTmpl [osutils:vcproj:readtemplate $theVcVer $isUWP 0]
set l_compilable [osutils:compilable wnt]
lappend aUsedLibs "WindowsApp.lib"
}
- foreach tkx [osutils:commonUsedTK $theToolKit] {
+ foreach tkx [osutils:commonUsedTK $theToolKit $theSrcDir $theSourceDirOther] {
lappend aUsedLibs "${tkx}.lib"
}
- osutils:usedOsLibs $theToolKit "wnt" aLibs aFrameworks
- foreach aLibIter $aLibs {
- lappend aUsedLibs "${aLibIter}.lib"
- }
+ set anOsReleaseLibs {}
+ set anOsDebugLibs {}
+ osutils:usedOsLibs $theToolKit "wnt" anOsReleaseLibs aFrameworks $theSrcDir true
+ osutils:usedOsLibs $theToolKit "wnt" anOsDebugLibs aFrameworks $theSrcDir false
# correct names of referred third-party libraries that are named with suffix
# depending on VC version
- set aVCRTVer [string range $theVcVer 0 3]
- regsub -all -- {vc[0-9]+} $aUsedLibs $aVCRTVer aUsedLibs
-
- # and put this list to project file
- #puts "$theToolKit requires $aUsedLibs"
- if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
- set aUsedLibs [join $aUsedLibs {;}]
- }
- regsub -all -- {__TKDEP__} $theProjTmpl $aUsedLibs theProjTmpl
+ regsub -all -- {__TKDEP__} $theProjTmpl [osutils:depLibraries $aUsedLibs $anOsReleaseLibs $theVcVer] theProjTmpl
+ regsub -all -- {__TKDEP_DEBUG__} $theProjTmpl [osutils:depLibraries $aUsedLibs $anOsDebugLibs $theVcVer] theProjTmpl
set anIncPaths "..\\..\\..\\inc"
# set aTKDefines ""
set aFilesSection ""
set aVcFilesCxx(units) ""
set aVcFilesHxx(units) ""
- set listloc [osutils:tk:units $theToolKit]
+ set listloc [osutils:tk:units $theToolKit $theSrcDir]
if [array exists written] { unset written }
#puts "\t1 [wokparam -v %CMPLRS_CXX_Options [w_info -f]] father"
#puts "\t2 [wokparam -v %CMPLRS_CXX_Options] branch"
set fxloparam ""
foreach fxlo $listloc {
set xlo $fxlo
- set aSrcFiles [osutils:tk:cxxfiles $xlo wnt]
- set aHxxFiles [osutils:tk:hxxfiles $xlo wnt]
- set fxlo_cmplrs_options_cxx [_get_options wnt cmplrs_cxx $fxlo]
+ set aSrcFiles [osutils:tk:cxxfiles $xlo wnt $theSrcDir]
+ set aHxxFiles [osutils:tk:hxxfiles $xlo wnt $theSrcDir]
+
+ # prepare Qt moc files, appears only in Inspector - directory tools
+ set aGeneratedFiles {}
+ if { "$aHasQtDep" == "true" } {
+ set aMocResFiles [osutils:tk:mocfiles $aHxxFiles $theOutDir]
+ set aGeneratedFiles [osutils:tk:execfiles $aMocResFiles $theOutDir moc${::SYS_EXE_SUFFIX} moc cpp]
+
+ set aQrcResFiles [osutils:tk:qrcfiles $xlo wnt $theSrcDir]
+ set aQrcFiles [osutils:tk:execfiles $aQrcResFiles $theOutDir rcc${::SYS_EXE_SUFFIX} rcc cpp]
+ foreach resFile $aQrcFiles {
+ lappend aGeneratedFiles $resFile
+ }
+ }
+
+ set fxlo_cmplrs_options_cxx [_get_options wnt cmplrs_cxx $fxlo]
if {$fxlo_cmplrs_options_cxx == ""} {
set fxlo_cmplrs_options_cxx [_get_options wnt cmplrs_cxx b]
}
foreach aSrcFile [lsort $aSrcFiles] {
if { ![info exists written([file tail $aSrcFile])] } {
set written([file tail $aSrcFile]) 1
- append aFilesSection [osutils:vcxproj:cxxfile $aSrcFile $needparam]
+ append aFilesSection [osutils:vcxproj:cxxfile $aSrcFile $needparam 3]
} else {
puts "Warning : in vcproj more than one occurences for [file tail $aSrcFile]"
}
if { ! [info exists aVcFilesHxx($xlo)] } { lappend aVcFilesHxx(units) $xlo }
lappend aVcFilesHxx($xlo) $aHxxFile
}
+ foreach aGenFile [lsort $aGeneratedFiles] {
+ if { ![info exists written([file tail $aGenFile])] } {
+ set written([file tail $aGenFile]) 1
+ append aFilesSection [osutils:vcxproj:cxxfile $aGenFile $needparam 5]
+ } else {
+ puts "Warning : in vcproj more than one occurences for [file tail $aGenFile]"
+ }
+ if { ! [info exists aVcFilesCxx($xlo)] } { lappend aVcFilesCxx(units) $xlo }
+ lappend aVcFilesCxx($xlo) $aGenFile
+ }
} else {
append aFilesSection "\t\t\t<Filter\n"
append aFilesSection "\t\t\t\tName=\"${xlo}\"\n"
return $aVcFiles
}
+# Appends OS libraries into the list of used libraries.
+# Corrects list of referred third-party libraries that are named with suffix
+# depending on VC version
+# Unites list of used libraries into a variable with separator for VStudio older than vc9
+# @param theUsedLibs List of libraries, to be changed
+# @param theOsLibs List of Os library names, before using an extension should be added
+# @param theVcVer version of VStudio
+
+proc osutils:depLibraries { theUsedLibs theOsLibs theVcVer } {
+ foreach aLibIter $theOsLibs {
+ lappend theUsedLibs "${aLibIter}.${::SYS_LIB_SUFFIX}"
+ }
+
+ # correct names of referred third-party libraries that are named with suffix
+ # depending on VC version
+ set aVCRTVer [string range $theVcVer 0 3]
+ regsub -all -- {vc[0-9]+} $theUsedLibs $aVCRTVer theUsedLibs
+
+ # and put this list to project file
+ if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
+ set theUsedLibs [join $theUsedLibs {;}]
+ }
+
+ return $theUsedLibs
+}
+
# 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 } {
+proc osutils:tk:loadunit { loc map theSrcDir} {
#puts $loc
upvar $map TLOC
catch { unset TLOC }
- set lfiles [_get_used_files $loc]
+ set lfiles [_get_used_files $loc $theSrcDir]
foreach f $lfiles {
#puts "\t$f"
set t [lindex $f 0]
}
# Returns the list of all files name in a toolkit within specified list of file extensions.
-proc osutils:tk:files { tkloc theExtensions } {
+proc osutils:tk:files { tkloc theExtensions theSrcDir } {
set Tfiles(source,nocdlpack) {source pubinclude}
set Tfiles(source,toolkit) {}
set Tfiles(source,executable) {source pubinclude}
- set listloc [concat [osutils:tk:units $tkloc] $tkloc]
+ set listloc [concat [osutils:tk:units $tkloc $theSrcDir] $tkloc ]
#puts " listloc = $listloc"
set resultloc $listloc
default { error "Error: Cannot determine type of unit $loc, check adm/UDLIST!" }
}
if [array exists map] { unset map }
- osutils:tk:loadunit $loc map
+ osutils:tk:loadunit $loc map $theSrcDir
#puts " loc = $loc === > [array names map]"
set LType $Tfiles(source,${utyp})
foreach typ [array names map] {
}
# Returns the list of all compilable files name in a toolkit.
-proc osutils:tk:cxxfiles { tkloc thePlatform } { return [osutils:tk:files $tkloc [osutils:compilable $thePlatform]] }
+proc osutils:tk:cxxfiles { tkloc thePlatform theSrcDir } { return [osutils:tk:files $tkloc [osutils:compilable $thePlatform] $theSrcDir] }
# Returns the list of all header files name in a toolkit.
-proc osutils:tk:hxxfiles { tkloc thePlatform } { return [osutils:tk:files $tkloc [osutils:fileExtensionsHeaders $thePlatform]] }
+proc osutils:tk:hxxfiles { tkloc thePlatform theSrcDir } { return [osutils:tk:files $tkloc [osutils:fileExtensionsHeaders $thePlatform] $theSrcDir] }
+
+# Returns the list of all resource (qrc) files name in a toolkit.
+proc osutils:tk:qrcfiles { tkloc thePlatform theSourceDir } { return [osutils:tk:files $tkloc [osutils:fileExtensionsResources $thePlatform] $theSourceDir] }
+
+# Returns the list of all header files name in a toolkit.
+proc osutils:tk:mocfiles { HxxFiles theOutDir } {
+ set lret {}
+ foreach file $HxxFiles {
+ # processing only files where Q_OBJECT exists
+ set fd [open "$file" rb]
+ set FILES [split [read $fd] "\n"]
+ close $fd
+
+ set isQObject [expr [regexp "Q_OBJECT" $FILES]]
+ if { ! $isQObject } {
+ continue;
+ }
+ lappend lret $file
+ }
+ return $lret
+}
+
+# Returns the list of all header files name in a toolkit.
+proc osutils:tk:execfiles { theFiles theOutDir theCommand thePrefix theExtension} {
+ set lret {}
+ set anOutDir $theOutDir/$thePrefix
+ file mkdir $anOutDir
+
+ foreach file $theFiles {
+ set aResourceName [file tail $file]
+ set anOutFile $anOutDir/${thePrefix}_[file rootname $aResourceName].$theExtension
+
+ exec $theCommand $file -o $anOutFile
+ lappend lret $anOutFile
+ }
+ return $lret
+}
# Generate Visual Studio project file for executable
-proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap } {
+proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir theSourceDirOther } {
set aVcFiles {}
- foreach f [osutils:tk:cxxfiles $theToolKit wnt] {
+ foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
set aProjTmpl [osutils:vcproj:readtemplate $theVcVer $isUWP 1]
set aProjName [file rootname [file tail $f]]
regsub -all -- {__PROJECT_GUID__} $aProjTmpl $aGuidsMap($aProjName) aProjTmpl
set aUsedLibs [list]
- foreach tkx [osutils:commonUsedTK $theToolKit] {
+ foreach tkx [osutils:commonUsedTK $theToolKit $theSrcDir $theSourceDirOther] {
lappend aUsedLibs "${tkx}.lib"
}
- osutils:usedOsLibs $theToolKit "wnt" aLibs aFrameworks
- foreach aLibIter $aLibs {
- lappend aUsedLibs "${aLibIter}.lib"
- }
+ set anOsReleaseLibs {}
+ set anOsDebugLibs {}
+ osutils:usedOsLibs $theToolKit "wnt" anOsReleaseLibs aFrameworks $theSrcDir true
+ osutils:usedOsLibs $theToolKit "wnt" anOsDebugLibs aFrameworks $theSrcDir false
- # correct names of referred third-party libraries that are named with suffix
- # depending on VC version
set aVCRTVer [string range $theVcVer 0 3]
- regsub -all -- {vc[0-9]+} $aUsedLibs $aVCRTVer aUsedLibs
-
-# puts "$aProjName requires $aUsedLibs"
- if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
- set aUsedLibs [join $aUsedLibs {;}]
- }
- regsub -all -- {__TKDEP__} $aProjTmpl $aUsedLibs aProjTmpl
+ regsub -all -- {__TKDEP__} $aProjTmpl [osutils:depLibraries $aUsedLibs $anOsReleaseLibs $theVcVer] aProjTmpl
+ regsub -all -- {__TKDEP_DEBUG__} $aProjTmpl [osutils:depLibraries $aUsedLibs $anOsDebugLibs $theVcVer] aProjTmpl
set aFilesSection ""
set aVcFilesCxx(units) ""
set written([file tail $f]) 1
if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
- append aFilesSection [osutils:vcxproj:cxxfile $f ""]
+ append aFilesSection [osutils:vcxproj:cxxfile $f "" 3]
if { ! [info exists aVcFilesCxx($theToolKit)] } { lappend aVcFilesCxx(units) $theToolKit }
lappend aVcFilesCxx($theToolKit) $f
} else {
append aFilesSection "\t\t\t</Filter>"
}
} else {
- puts "Warning : in vcproj there are than one occurences for [file tail $f]"
+ puts "Warning : in vcproj there are more than one occurences for [file tail $f]"
}
#puts "$aProjTmpl $aFilesSection"
set anIncPaths "..\\..\\..\\inc"
set aTKSrcFiles [list]
# collect list of referred libraries to link with
- osutils:usedOsLibs $theToolKit $thePlatform aUsedLibs aFrameworks
- set aDepToolkits [wokUtils:LIST:Purge [osutils:tk:close $theToolKit]]
+ osutils:usedOsLibs $theToolKit $thePlatform aUsedLibs aFrameworks "src"
+ set aDepToolkits [wokUtils:LIST:Purge [osutils:tk:close $theToolKit "src" ""]]
foreach tkx $aDepToolkits {
lappend aUsedLibs "${tkx}"
}
lappend anIncPaths "../../../inc"
- set listloc [osutils:tk:units $theToolKit]
+ set listloc [osutils:tk:units $theToolKit "src"]
if { [llength $listloc] == 0 } {
set listloc $theToolKit
if [array exists written] { unset written }
foreach fxlo $resultloc {
set xlo $fxlo
- set aSrcFiles [osutils:tk:cxxfiles $xlo $thePlatform]
+ set aSrcFiles [osutils:tk:cxxfiles $xlo $thePlatform "src"]
foreach aSrcFile [lsort $aSrcFiles] {
if { ![info exists written([file tail $aSrcFile])] } {
set written([file tail $aSrcFile]) 1
# collect list of projects to be created
foreach aModule $theModules {
# toolkits
- foreach aToolKit [osutils:tk:sort [${aModule}:toolkits]] {
- set aDependencies [LibToLink $aToolKit]
+ foreach aToolKit [osutils:tk:sort [${aModule}:toolkits] "src" ""] {
+ set aDependencies [LibToLink $aToolKit "src" ""]
if { [llength $aDependencies] == 0 } {
puts $aFile "\t\t<Project filename=\"${aToolKit}.cbp\" />"
} else {
# executables, assume one project per cxx file...
foreach aUnit [OS:executable ${aModule}] {
set aUnitLoc $aUnit
- set src_files [_get_used_files $aUnit false]
+ set src_files [_get_used_files $aUnit "src" false]
set aSrcFiles {}
foreach s $src_files {
regexp {source ([^\s]+)} $s dummy name
set aPrjName [file rootname $aSrcFile]
set aDependencies [list]
if {[file isdirectory $path/src/$aUnitLoc]} {
- set aDependencies [LibToLinkX $aUnitLoc [file rootname $aSrcFile]]
+ set aDependencies [LibToLinkX $aUnitLoc [file rootname $aSrcFile] "src" ""]
}
set anActiveState ""
if { $isActiveSet == 0 } {
set aWokArch "$::env(ARCH)"
set aCbpFiles {}
- foreach aSrcFile [osutils:tk:cxxfiles $theToolKit $thePlatform] {
+ foreach aSrcFile [osutils:tk:cxxfiles $theToolKit $thePlatform "src"] {
# collect list of referred libraries to link with
set aUsedLibs [list]
set aFrameworks [list]
set aTKSrcFiles [list]
set aProjName [file rootname [file tail $aSrcFile]]
- osutils:usedOsLibs $theToolKit $thePlatform aUsedLibs aFrameworks
+ osutils:usedOsLibs $theToolKit $thePlatform aUsedLibs aFrameworks "src"
- set aDepToolkits [LibToLinkX $theToolKit $aProjName]
+ set aDepToolkits [LibToLinkX $theToolKit $aProjName "src" ""]
foreach tkx $aDepToolkits {
if {[_get_type $tkx] == "t"} {
lappend aUsedLibs "${tkx}"
}
# Define libraries to link using only EXTERNLIB file
-proc LibToLinkX {thePackage theDummyName} {
- set aToolKits [LibToLink $thePackage]
+proc LibToLinkX {thePackage theDummyName theSrcDir theSourceDirOther} {
+ set aToolKits [LibToLink $thePackage $theSrcDir $theSourceDirOther]
return $aToolKits
}
set aBuff ""
# Adding toolkits for module in workspace.
- foreach aToolKit [osutils:tk:sort [${theModule}:toolkits]] {
+ foreach aToolKit [osutils:tk:sort [${theModule}:toolkits] "src" ""] {
append aBuff " <FileRef\n"
append aBuff " location = \"group:${aToolKit}.xcodeproj\">\n"
append aBuff " </FileRef>\n"
# Adding executables for module, assume one project per cxx file...
foreach aUnit [OS:executable ${theModule}] {
set aUnitLoc $aUnit
- set src_files [_get_used_files $aUnit false]
+ set src_files [_get_used_files $aUnit "src" false]
set aSrcFiles {}
foreach s $src_files {
regexp {source ([^\s]+)} $s dummy name
upvar $theDepsRefGuids aDepsRefGuids
set aBuildFileSection ""
- set aUsedLibs [wokUtils:LIST:Purge [osutils:tk:close $theToolKit]]
- set aDepToolkits [lappend [wokUtils:LIST:Purge [osutils:tk:close $theToolKit]] $theToolKit]
+ set aUsedLibs [wokUtils:LIST:Purge [osutils:tk:close $theToolKit "src" ""]]
+ set aDepToolkits [lappend [wokUtils:LIST:Purge [osutils:tk:close $theToolKit "src" ""]] $theToolKit]
if { "$theTargetType" == "executable" } {
- set aFile [osutils:tk:cxxfiles $theToolKit mac]
+ set aFile [osutils:tk:cxxfiles $theToolKit mac "src"]
set aProjName [file rootname [file tail $aFile]]
- set aDepToolkits [LibToLinkX $theToolKit $aProjName]
+ set aDepToolkits [LibToLinkX $theToolKit $aProjName "src" ""]
}
set aLibExt "dylib"
}
}
- osutils:usedOsLibs $theToolKit $thePlatform aLibs aFrameworks
+ osutils:usedOsLibs $theToolKit $thePlatform aLibs aFrameworks "src"
set aUsedLibs [concat $aUsedLibs $aLibs]
set aUsedLibs [concat $aUsedLibs $aFrameworks]
foreach tkx $aUsedLibs {
upvar $theGuidsMap aGuidsMap
upvar $theIncPaths anIncPaths
- set listloc [osutils:tk:units $theToolKit]
+ set listloc [osutils:tk:units $theToolKit "src"]
set resultloc [osutils:justunix $listloc]
set aBuildFileSection ""
set aPackages [lsort -nocase $resultloc]
set aGuidsMap($aPackage) [OS:genGUID "xcd"]
}
- set aSrcFiles [osutils:tk:cxxfiles $xlo mac]
+ set aSrcFiles [osutils:tk:cxxfiles $xlo mac "src"]
foreach aSrcFile [lsort $aSrcFiles] {
set aFileExt "sourcecode.cpp.cpp"
}
# Report all files found in package directory but not listed in FILES
-proc osutils:checksrcfiles { theUnit } {
+proc osutils:checksrcfiles { theUnit theSrcDir} {
global path
set aCasRoot [file normalize ${path}]
return
}
- set anUnitAbsPath [file normalize "${aCasRoot}/src/${theUnit}"]
+ set anUnitAbsPath [file normalize "${aCasRoot}/$theSrcDir/${theUnit}"]
if {[file exists "${anUnitAbsPath}/FILES"]} {
set aFilesFile [open "${anUnitAbsPath}/FILES" rb]
if { "${aFile}" == "FILES" } {
continue
}
+ if { "${aFile}" == "icons" } {
+ continue
+ }
if { [lsearch -exact ${aFilesFileList} ${aFile}] == -1 } {
puts "Warning: file ${anUnitAbsPath}/${aFile} is not listed in ${anUnitAbsPath}/FILES!"
}