default_periodic_cache_directory Function

public function default_periodic_cache_directory(missing_ok) result(path)

User cache shared across working directories; an explicit configuration path takes precedence.

Arguments

Type IntentOptional Attributes Name
logical, intent(in), optional :: missing_ok

Return Value character(len=:), allocatable


Called by

proc~~default_periodic_cache_directory~~CalledByGraph proc~default_periodic_cache_directory default_periodic_cache_directory proc~core_build_plan_impl core_build_plan_impl proc~core_build_plan_impl->proc~default_periodic_cache_directory proc~core_prepare_panel_sources_impl core_prepare_panel_sources_impl proc~core_prepare_panel_sources_impl->proc~default_periodic_cache_directory proc~default_app_config default_app_config proc~default_app_config->proc~default_periodic_cache_directory proc~core_build_panel_plan_impl core_build_panel_plan_impl proc~core_build_panel_plan_impl->proc~core_prepare_panel_sources_impl proc~handle_early_cli handle_early_cli proc~handle_early_cli->proc~default_app_config proc~load_or_init_run_state load_or_init_run_state proc~load_or_init_run_state->proc~default_app_config program~main main program~main->proc~handle_early_cli program~main->proc~load_or_init_run_state

Source Code

  function default_periodic_cache_directory(missing_ok) result(path)
    logical, intent(in), optional :: missing_ok
    character(len=:), allocatable :: path, base
    integer :: length, status

    call get_environment_variable('BEACH_CACHE_DIR', length=length, status=status)
    if (status == 0 .and. length > 0) then
      allocate (character(len=length) :: base)
      call get_environment_variable('BEACH_CACHE_DIR', base)
      path = base//'/periodic2'
      return
    end if
    call get_environment_variable('XDG_CACHE_HOME', length=length, status=status)
    if (status == 0 .and. length > 0) then
      allocate (character(len=length) :: base)
      call get_environment_variable('XDG_CACHE_HOME', base)
      path = base//'/beach/periodic2'
      return
    end if
    call get_environment_variable('HOME', length=length, status=status)
    if (status /= 0 .or. length == 0) then
      ! Defaults are formed before TOML is read; an explicit path must still work without these variables.
      if (present(missing_ok)) then
        if (missing_ok) then
          path = ''
          return
        end if
      end if
      error stop 'Default BEACH cache requires HOME, XDG_CACHE_HOME or BEACH_CACHE_DIR.'
    end if
    allocate (character(len=length) :: base)
    call get_environment_variable('HOME', base)
    path = base//'/.cache/beach/periodic2'
  end function default_periodic_cache_directory