#!/bin/sh

# Copyright (C) 2013-2025 Free Software Foundation, Inc.
#
# This file is part of GDB.
#
# 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 this program.  If not, see <http://www.gnu.org/licenses/>.

# Generate the init.c source file.
#
# Usage:
#
#    ./make-init-c source-files > init.c-tmp
#
# Where SOURCE-FILES is the list of source files to extract init functions from.
#
# Formatting conventions:  The name of the initialization routines must begin
# with `_initialize_`, must start in column zero, and be followed with exactly
# ` ()`.  For example:
#
# void
# _initialize_foo ()
# {
#   ...
# }
#

# Abort on command error.
set -e

echo "/* Do not modify this file.  */"
echo "/* It is created automatically by the Makefile.  */"
echo "#include <algorithm>"
echo ""
sed -n -e 's/^\(void \|\)\(_initialize_[a-zA-Z0-9_]*\) ()$/\2/p' "$@" | while read -r name; do
  echo "extern initialize_file_ftype $name;"
done
echo ""
echo "void initialize_all_files ();"
echo "void"
echo "initialize_all_files ()"
echo "{"
echo "  std::vector<initialize_file_ftype *> functions ="
echo "    {"
sed -n -e 's/^\(void \|\)\(_initialize_[a-zA-Z0-9_]*\) ()$/\2/p' "$@" | while read -r name; do
  echo "      $name,"
done
echo "    };"
echo ""
echo "  /* If GDB_REVERSE_INIT_FUNCTIONS is set (any value), reverse the"
echo "     order in which initialization functions are called.  This is"
echo "     used by the testsuite.  */"
echo "  if (getenv (\"GDB_REVERSE_INIT_FUNCTIONS\") != nullptr)"
echo "    std::reverse (functions.begin (), functions.end ());"
echo ""
echo "  for (initialize_file_ftype *function : functions)"
echo "    function ();"
echo "}"
