# config-lang.in -- Top level configure fragment for gcc D frontend.
# Copyright (C) 2006-2023 Free Software Foundation, Inc.

# GCC 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, or (at your option)
# any later version.

# GCC 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 GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# Configure looks for the existence of this file to auto-config each language.
# We define several parameters used by configure:
#
# language	- name of language as it would appear in $(LANGUAGES)
# boot_language	- "yes" if we need to build this language in stage1
# compilers	- value to add to $(COMPILERS)

language="d"

boot_language=yes
compilers="d21\$(exeext)"

phobos_target_deps="target-zlib target-libbacktrace"
phobos_target_libs="target-libphobos $phobos_target_deps"

case "${noconfigdirs}" in
  # Check if phobos was disabled as unsupported
  *target-libphobos*)
    disabled_target_libs="$disabled_target_libs $phobos_target_deps"
    ;;
  *)
    # The --disable-<component> handler in configure.ac is called after
    # config-lang.in. So when using --disable-libphobos, it has not been
    # added to noconfigdirs here yet
    if test x${enable_libphobos} != xno; then
      target_libs="$phobos_target_libs"
    else
      disabled_target_libs="$disabled_target_libs $phobos_target_libs"
    fi
    ;;
esac

gtfiles="\$(srcdir)/d/d-tree.h \$(srcdir)/d/d-builtins.cc \$(srcdir)/d/d-lang.cc \$(srcdir)/d/typeinfo.cc"

# Do not build by default.
build_by_default="no"
