You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When I implemented the logic to export package enable vars in <Package>Config.cmake files in #516, I put in the function tribits_assert_cache_and_local_vars_same_value(<varName>) which checks that the cache var is the same value as the local var. But that is not the correct logic because it is fine to hide the cache enable var with a project-level local var which the enable/disable logic does in TriBITS.
As a result, we are getting configure errors with Trilinos like:
CMake Error at TriBITS/tribits/core/utils/MessageWrapper.cmake:77 (message):
ERROR: The cache variable TpetraTSQR_ENABLE_CUBLAS with the cache var value
'' is not the same value as the local variable TpetraTSQR_ENABLE_CUBLAS
with value 'OFF'!
Call Stack (most recent call first):
TriBITS/tribits/core/package_arch/TribitsPkgExportCacheVars.cmake:92 (message_wrapper)
TriBITS/tribits/core/package_arch/TribitsPkgExportCacheVars.cmake:125 (tribits_assert_cache_and_local_vars_same_value)
TriBITS/tribits/core/package_arch/TribitsWriteClientExportFiles.cmake:469 (tribits_pkg_append_set_commands_for_exported_vars)
TriBITS/tribits/core/package_arch/TribitsWriteClientExportFiles.cmake:263 (tribits_append_dependent_package_config_file_includes_and_enables)
TriBITS/tribits/core/package_arch/TribitsWriteClientExportFiles.cmake:201 (tribits_generate_package_config_file_for_build_tree)
TriBITS/tribits/core/package_arch/TribitsWriteClientExportFiles.cmake:599 (tribits_write_flexible_package_client_export_files)
TriBITS/tribits/core/package_arch/TribitsPackageMacros.cmake:656 (tribits_write_package_client_export_files)
TriBITS/tribits/core/package_arch/TribitsSubPackageMacros.cmake:162 (tribits_package_postprocess_common)
packages/tpetra/tsqr/CMakeLists.txt:49 (TRIBITS_SUBPACKAGE_POSTPROCESS)
Proposed solution
The correct solution is to check that the local var value is the same as the project-level local var value. But the problem is that it is not clear how to do that from another scope (like multiple add_directory() and function() calls deep).
How to check this?
The text was updated successfully, but these errors were encountered:
bartlettroscoe
changed the title
Fix logic for checking value of exported enable variable
Fix logic for checking value of exported enable variable (#516, #63)
Dec 12, 2022
One way to address this is to change tribits_assert_cache_and_local_vars_same_value() to tribits_assert_dual_scope_local_vars_same_value(). That will catch if the current scope has the same value as the parent scope. But is that possible? You can set the value of a variable in the direct parent scope, but can you read the value of a variable in a direct parent scope?
For now, I will just comment out that check and see if that fixes the problem for now.
Longer term, I will need find a way to assert this. I think that can be done by setting up a data-structure that remembers what enable vars are exported and then checks them once we get back to the base-level project scope.
Turns out this is the wrong assert to do. For now just commenting out
tribits_assert_cache_and_local_vars_same_value() and will decide how to fix
this for real later.
I am going to put this back into the backlog for now. Adding this check will be important for catching mistakes in the future when we start to build and install more TriBITS packages independently.
Description
When I implemented the logic to export package enable vars in
<Package>Config.cmake
files in #516, I put in the functiontribits_assert_cache_and_local_vars_same_value(<varName>)
which checks that the cache var is the same value as the local var. But that is not the correct logic because it is fine to hide the cache enable var with a project-level local var which the enable/disable logic does in TriBITS.As a result, we are getting configure errors with Trilinos like:
Proposed solution
The correct solution is to check that the local var value is the same as the project-level local var value. But the problem is that it is not clear how to do that from another scope (like multiple
add_directory()
andfunction()
calls deep).How to check this?
The text was updated successfully, but these errors were encountered: