#   Copyright (C) 2018-2022 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

load_lib "target-supports.exp"

proc gcc_src_run_maintainers_verify_sh {} {
    set script check-MAINTAINERS.py

    global srcdir
    set rootdir $srcdir/../..
    set contrib $rootdir/contrib
    set maintainers $rootdir/MAINTAINERS

    if { ![check_effective_target_recent_python3] } {
      unsupported "$script recent python3 is missing"
      return
    }

    if { ![check_effective_target_python3_module "unidecode"] } {
      unsupported "$script 'unidecode' python3 module is missing"
      return
    }


    set result [remote_exec host $contrib/$script $maintainers]
    set status [lindex $result 0]
    if { $status == 0 } then {
	pass "$script"
    } else {
	send_log "$result\n"
	fail "$script"
    }
}

if ![gcc_parallel_test_run_p maintainers] {
    return
}
gcc_parallel_test_enable 0
gcc_src_run_maintainers_verify_sh
gcc_parallel_test_enable 1
