parameters: (base_path, rel_path)
return_statement: return os.path.join(
          "${CMAKE_CURRENT_LIST_DIR}", os.path.normpath(os.path.join(base_path, rel_path))
      )
docstring: Resolves rel_path against base_path and returns the result.
  
    If rel_path is an absolute path it is returned unchanged.
    Otherwise it is resolved against base_path and normalized.
    If the result is a relative path, it is forced to be relative to the
    CMakeLists.txt.
docstring_summary: Resolves rel_path against base_path and returns the result.
docstring_tokens: Resolves rel_path against base_path and returns the result .
function: def NormjoinPathForceCMakeSource(base_path, rel_path):
      """Resolves rel_path against base_path and returns the result.
  
    If rel_path is an absolute path it is returned unchanged.
    Otherwise it is resolved against base_path and normalized.
    If the result is a relative path, it is forced to be relative to the
    CMakeLists.txt.
    """
      if os.path.isabs(rel_path):
          return rel_path
      if any([rel_path.startswith(var) for var in FULL_PATH_VARS]):
          return rel_path
      # TODO: do we need to check base_path for absolute variables as well?
      return os.path.join(
          "${CMAKE_CURRENT_LIST_DIR}", os.path.normpath(os.path.join(base_path, rel_path))
      )
function_tokens: def NormjoinPathForceCMakeSource ( base_path , rel_path ) : if os . path . isabs ( rel_path ) : return rel_path if any ( [ rel_path . startswith ( var ) for var in FULL_PATH_VARS ] ) : return rel_path # TODO: do we need to check base_path for absolute variables as well? return os . path . join ( "${CMAKE_CURRENT_LIST_DIR}" , os . path . normpath ( os . path . join ( base_path , rel_path ) ) )