#!/bin/bash
# Copyright (c) 1998 Lawrence Livermore National Security, LLC and other
# HYPRE Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

INTERNAL_HEADER=_hypre_krylov.h

#===========================================================================
# Include guards and other includes
#===========================================================================

cat > $INTERNAL_HEADER <<@

/*** DO NOT EDIT THIS FILE DIRECTLY (use 'headers' to generate) ***/

#ifndef hypre_KRYLOV_HEADER
#define hypre_KRYLOV_HEADER

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include "HYPRE_krylov.h"
#include "_hypre_utilities.h"

#ifdef HYPRE_MIXED_PRECISION
#include "_hypre_krylov_mup_def.h"
#endif

#define hypre_CTAllocF(type, count, funcs, location) \\
  ( (type *)(*(funcs->CAlloc))((size_t)(count), (size_t)sizeof(type), location) )

#define hypre_TFreeF( ptr, funcs ) ( (*(funcs->Free))((void *)ptr), ptr = NULL )

#ifdef __cplusplus
extern "C" {
#endif

@

#===========================================================================
# Structures and prototypes
#===========================================================================

cat krylov_solver_ptrs.h  >> $INTERNAL_HEADER
cat bicgstab.h            >> $INTERNAL_HEADER
cat cgnr.h                >> $INTERNAL_HEADER
cat gmres.h               >> $INTERNAL_HEADER
cat cogmres.h             >> $INTERNAL_HEADER
cat lgmres.h              >> $INTERNAL_HEADER
cat flexgmres.h           >> $INTERNAL_HEADER
cat pcg.h                 >> $INTERNAL_HEADER
cat protos.h              >> $INTERNAL_HEADER

#../utilities/protos [!F]*.c               >> $INTERNAL_HEADER

#===========================================================================
# Include guards
#===========================================================================

cat >> $INTERNAL_HEADER <<@

#ifdef __cplusplus
}
#endif

#ifdef HYPRE_MIXED_PRECISION
/* The following is for user compiles and the order is important.  The first
 * header ensures that we do not change prototype names in user files or in the
 * second header file.  The second header contains all the prototypes needed by
 * users for mixed precision. */
#ifndef hypre_MP_BUILD
#include "_hypre_krylov_mup_undef.h"
#include "_hypre_krylov_mup.h"
#endif
#endif

#endif

@

