1#!/bin/sh 2 3# Copyright (C) 2013-2023 Free Software Foundation, Inc. 4# 5# This file is part of GDB. 6# 7# This program is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 3 of the License, or 10# (at your option) any later version. 11# 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16# 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <http://www.gnu.org/licenses/>. 19 20# Generate the init.c source file. 21# 22# Usage: 23# 24# ./make-init-c source-files > init.c-tmp 25# 26# Where SOURCE-FILES is the list of source files to extract init functions from. 27# 28# Formatting conventions: The name of the initialization routines must begin 29# with `_initialize_`, must start in column zero, and be followed with exactly 30# ` ()`. For example: 31# 32# void 33# _initialize_foo () 34# { 35# ... 36# } 37# 38 39# Abort on command error. 40set -e 41 42echo "/* Do not modify this file. */" 43echo "/* It is created automatically by the Makefile. */" 44echo "#include \"defs.h\" /* For initialize_file_ftype. */" 45echo "#include <algorithm>" 46echo "" 47sed -n -e 's/^\(_initialize_[a-zA-Z0-9_]*\) ()$/\1/p' "$@" | while read -r name; do 48 echo "extern initialize_file_ftype $name;" 49done 50echo "" 51echo "void initialize_all_files ();" 52echo "void" 53echo "initialize_all_files ()" 54echo "{" 55echo " std::vector<initialize_file_ftype *> functions =" 56echo " {" 57sed -n -e 's/^\(_initialize_[a-zA-Z0-9_]*\) ()$/\1/p' "$@" | while read -r name; do 58 echo " $name," 59done 60echo " };" 61echo "" 62echo " /* If GDB_REVERSE_INIT_FUNCTIONS is set (any value), reverse the" 63echo " order in which initialization functions are called. This is" 64echo " used by the testsuite. */" 65echo " if (getenv (\"GDB_REVERSE_INIT_FUNCTIONS\") != nullptr)" 66echo " std::reverse (functions.begin (), functions.end ());" 67echo "" 68echo " for (initialize_file_ftype *function : functions)" 69echo " function ();" 70echo "}" 71