#!/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.
#

# An initialization function is introduced using the "INIT_GDB_FILE"
# macro.  In ordinary code this expands to a function declaration (to
# avoid a warning) and then the start of a definition.  In the
# generated init.c, though, it is expanded differently.  For example:
#
# INIT_GDB_FILE (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 ""
echo "#undef INIT_GDB_FILE"
echo "#define INIT_GDB_FILE(NAME) extern void _initialize_ ## NAME ();"
grep -h '^[ 	]*INIT_GDB_FILE\b' "$@"
echo ""
echo "void initialize_all_files ();"
echo "void"
echo "initialize_all_files ()"
echo "{"
echo "  typedef void initialize_file_ftype (void);"
echo ""
echo "  std::vector<initialize_file_ftype *> functions ="
echo "    {"
echo "#undef INIT_GDB_FILE"
echo "#define INIT_GDB_FILE(NAME) _initialize_ ## NAME,"
grep -h '^[ 	]*INIT_GDB_FILE\b' "$@"
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 "}"
