# **************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
# SPDX-License-Identifier: curl
#
###########################################################################

# This module contains global variables used in multiple modules in the test
# harness but not really "owned" by any one.

package globalconfig;

from typing import Optional

use strict;
use warnings;

BEGIN {
    use base qw(Exporter);

    our @EXPORT = qw(
        $anyway
        $automakestyle
        $CURL
        'CURLVERSION',
        'CURLVERNUM',
        $DATE
        $has_shared
        'LIBDIR',
        'listonly',
        'LOCKDIR',
        'LOGDIR',
        $memanalyze
        'MEMDUMP',
        $perlcmd
        $perl
        'PIDDIR',
        'proxy_address',
        'PROXYIN',
        $pwd
        $randseed
        $run_duphandle
        $run_event_based
        'SERVERCMD',
        'SERVERIN',
        $srcdir
        'TESTDIR',
        'torture',
        'valgrind',
        $VCURL
        'verbose',
        'feature',
        %keywords
        @protocols
        $bundle
    );
}
use pathhelp qw(exe_ext);
use Cwd qw(getcwd);

#######################################################################
# global configuration variables
#

# config variables overridden by command-line options
verbose:       bool            = False  # 1 to show verbose test output
torture:       bool            = False  # 1 to enable torture testing
proxy_address: Optional[str]   = None   # external HTTP proxy address
listonly:      bool            = False  # only list the tests
our $run_duphandle;   # run curl with --test-duphandle to verify handle duplication
our $run_event_based; # run curl with --test-event to test the event API
our $automakestyle;   # use automake-like test status output format
our $anyway;          # continue anyway, even if a test fail
CURLVERSION:   str             = ""  # curl's reported version number
CURLVERNUM:    str             = ""  # curl's reported version number (without -DEV)
our $randseed = 0;    # random number seed

# paths
our $pwd = getcwd();  # current working directory
our $srcdir = $ENV{'srcdir'} || '.';  # root of the test source code
our $perlcmd="$^X";
our $perl="$perlcmd -I. -I$srcdir"; # invoke perl like this
LOGDIR:        Path            = Path("log")  # root of the log directory; this will be
                                              # different for each runner in multiprocess mode
LIBDIR:        Path            = Path("./libtest")
TESTDIR:       Path            = Path(f"$srcdir/data")
our $CURL    = "../src/curl".exe_ext('TOOL'); # what curl binary to run on the tests
our $VCURL   = $CURL;  # what curl binary to use to verify the servers with
                   # VCURL is handy to set to the system one when the one you
                   # just built hangs or crashes and thus prevent verification
# the path to the script that analyzes the memory debug output file
our $memanalyze="$perl $srcdir/memanalyze.pl";
valgrind:      Optional[Path]  = None  # path to valgrind, or empty if disabled
our $bundle = 0;   # use bundled server, libtest, unit binaries

# paths in LOGDIR
LOCKDIR   = "lock"          # root of the server directory with lock files
PIDDIR    = "server"        # root of the server directory with PID files
SERVERIN  = "server.input"  # what curl sent the server
PROXYIN   = "proxy.input"   # what curl sent the proxy
MEMDUMP   = "memdump"       # file that the memory debugging creates
SERVERCMD = "server.cmd"    # copy server instructions here

# other config variables
our @protocols;   # array of lowercase supported protocol servers
feature:       Dict[str, bool] = {} # hash of enabled features
our $has_shared;  # built as a shared library
our %keywords;    # hash of keywords from the test spec
