@@ -46,33 +46,40 @@ namespace eval ::osvvm {
4646# -------------------------------------------------
4747# FindOsvvmSettingsDirectory
4848#
49- proc FindOsvvmSettingsDirectory {{Subdirectory " osvvm" }} {
50- # note that OsvvmSettingsSubDirectory is "" for Scripts
51- if {! $::osvvm::SettingsAreRelativeToSimulationDirectory } {
52- if {[info exists ::env(OSVVM_SETTINGS_DIR)]} {
53- set SettingsDirectory [file normalize [file join ${::osvvm::OsvvmHomeDirectory} $::env(OSVVM_SETTINGS_DIR) ${::osvvm::OsvvmSettingsSubDirectory} ]]
54- } elseif {[file isdirectory ${::osvvm::OsvvmHomeDirectory} /../OsvvmSettings]} {
55- set SettingsDirectory [file normalize [file join ${::osvvm::OsvvmHomeDirectory} /../OsvvmSettings ${::osvvm::OsvvmSettingsSubDirectory} ]]
56- } else {
57- puts " Caution: Putting setting in OsvvmLibraries directory structure"
58- set SettingsDirectory [file join ${::osvvm::OsvvmHomeDirectory} ${Subdirectory} ${::osvvm::OsvvmSettingsSubDirectory} ]
59- }
49+ proc FindOsvvmSettingsDirectory {{OsvvmSubdirectory " osvvm" }} {
50+ # When StartUpShared.tcl calls this to determine the value of ::osvvm::OsvvmUserSettingsDirectory,
51+ # OsvvmSettingsLocal.tcl has not been run yet, as a result,
52+ # * OsvvmSettingsSubDirectory will have its default value of "" and
53+ # * SettingsAreRelativeToSimulationDirectory will have its default value of false.
54+ # For OsvvmSettingsSubDirectory, this is ok as it is only needed to differentiate the VHDL code and not the settings.
55+ # SettingsAreRelativeToSimulationDirectory this is not ok and it usage has been deprecated.
56+ # This was used to differentiate VHDL sources for different simulators - use OsvvmSettingsSubDirectory instead
57+ #
58+
59+ set SettingsRootDirectory ${::osvvm::OsvvmHomeDirectory}
60+ if {$::osvvm::SettingsAreRelativeToSimulationDirectory } {
61+ puts " WARNING: SettingsAreRelativeToSimulationDirectory is deprecated. Usage will generate an error in the future"
62+ set SettingsRootDirectory [file normalize ${::osvvm::CurrentSimulationDirectory} ]
63+ }
64+
65+ if {[info exists ::env(OSVVM_SETTINGS_DIR)]} {
66+ # Note that OSVVM_SETTINGS_DIR may be either a absolute or relative path
67+ # For relative paths, use OsvvmHomeDirectory (location of OsvvmLibraries) as the base
68+ set SettingsDirectory $::env(OSVVM_SETTINGS_DIR)
69+ } elseif {[file isdirectory ${SettingsRootDirectory} /../OsvvmSettings]} {
70+ set SettingsDirectory ../OsvvmSettings
6071 } else {
61- puts " Warning: ::osvvm::SettingsAreRelativeToSimulationDirectory is false for Script settings and true for VHDL Settings"
62- if {[info exists ::env(OSVVM_SETTINGS_DIR)]} {
63- set SettingsDirectory [file normalize [file join ${::osvvm::CurrentSimulationDirectory} $::env(OSVVM_SETTINGS_DIR) ${::osvvm::OsvvmSettingsSubDirectory} ]]
64- } elseif {[file isdirectory ${::osvvm::CurrentSimulationDirectory} /../OsvvmSettings]} {
65- set SettingsDirectory [file normalize [file join ${::osvvm::CurrentSimulationDirectory} /../OsvvmSettings ${::osvvm::OsvvmSettingsSubDirectory} ]]
66- } else {
67- set SettingsDirectory [file join ${::osvvm::CurrentSimulationDirectory} ${Subdirectory} ${::osvvm::OsvvmSettingsSubDirectory} ]
68- }
72+ puts " Note: Putting setting in directory OsvvmLibraries/${OsvvmSubdirectory} "
73+ set SettingsDirectory ${OsvvmSubdirectory}
6974 }
7075
71- CreateDirectory $SettingsDirectory
72- # set RelativeSettingsDirectory [::fileutil::relative [pwd] $SettingsDirectory]
76+ set SettingsDirectoryFullPath [file normalize [file join ${SettingsRootDirectory} ${SettingsDirectory} ${::osvvm::OsvvmSettingsSubDirectory} ]]
77+
78+ CreateDirectory $SettingsDirectoryFullPath
79+ # set RelativeSettingsDirectory [::fileutil::relative [pwd] $SettingsDirectoryFullPath]
7380# return $RelativeSettingsDirectory
7481 # Needs to be a normalized path
75- return $SettingsDirectory
82+ return $SettingsDirectoryFullPath
7683}
7784
7885
0 commit comments