## Fragment to pass common settings into arch subdir builds.
## NB: This should eventually be merged into sim/Makefile.am once there are no
## subdir configure scripts.
#
#   Copyright (C) 1993-2021 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 this program.  If not, see <http://www.gnu.org/licenses/>.

host_alias = @host_alias@
target_alias = @target_alias@
program_transform_name = @program_transform_name@

EXEEXT = @EXEEXT@

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
LN_S = @LN_S@

CC = @CC@
C_DIALECT = @C_DIALECT@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
CXXFLAGS = @CXXFLAGS@
LDFLAGS = @LDFLAGS@

AR = @AR@
AR_FLAGS = rc
RANLIB = @RANLIB@
DTC = @DTC@

DEPMODE = @CCDEPMODE@
DEPDIR = @DEPDIR@

zlibdir = @zlibdir@
@PLUGINS_TRUE@LIBDL = @lt_cv_dlopen_libs@
LIBINTL = @LIBINTL@
LIBINTL_DEP = @LIBINTL_DEP@
INTL_CFLAGS = @INCINTL@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_LIBS = @SDL_LIBS@
TERMCAP_LIB = @TERMCAP_LIB@
READLINE_LIB = @READLINE_LIB@
READLINE_CFLAGS = @READLINE_CFLAGS@

COMMON_LIBS = @LIBS@
WARN_CFLAGS = @WARN_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@

# Maintainer support, enable with --enable-maintainer-mode.
# Once all subdirs are moved to automake, we can drop this custom logic and
# switch back to using @MAINTAINER_MODE_TRUE@ directly.
MAINT = ; @true
# The following line is commented depending upon --enable-maintainer-mode.
@MAINTAINER_MODE_TRUE@MAINT =

# cgen support, enable with --enable-cgen-maint
CGEN_MAINT = ; @true
# The following line is commented in or out depending upon --enable-cgen-maint.
@CGEN_MAINT@CGEN_MAINT =
CGENDIR = @cgendir@

SIM_INLINE = @SIM_INLINE@

SIM_HW_CFLAGS = @sim_hw_cflags@
SIM_HW_SOCKSER = @sim_hw_sockser@
SIM_HW_OBJS = $(SIM_COMMON_HW_OBJS) $(SIM_HW_DEVICES:%=dv-%.o) $(SIM_HW_SOCKSER)
@SIM_ENABLE_HW_FALSE@SIM_HW_OBJS =
