# Top level configure fragment for GNU Objective-C++.
#   Copyright (C) 2005-2021 Free Software Foundation, Inc.
#   Contributed by Ziemowit Laski <zlaski@apple.com>

#This file is part of GCC.

#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)
# compilers	- value to add to $(COMPILERS)

language="obj-c++"

compilers="cc1objplus\$(exeext)"

# Per GCC Steering Committee.
build_by_default="no"

# By building the Objective-C and C++ front-ends, we will get
# the object files we need, along with the libraries (libstdc++,
# libobjc).
lang_requires="objc c++"
subdir_requires="objc cp"

# When you add to this gtfiles list a header which comes from a
# directory belonging to another language (ie, C++ or ObjC), you need
# to also edit gengtype.c adding a special rule for the header to
# avoid having the GC stuff from that header being added to gtype-cp.h
# or gtype-objc.h.

# Get the C++ FE's gtfiles list.  Do this in a subshell, so we can
# extract exactly the gtfiles var, but munge cp-lang.c into objcp-lang.c.
gtfiles="$(. $srcdir/cp/config-lang.in ; \
  echo $gtfiles | sed 's+/cp/cp-lang.c +/objcp/objcp-lang.c +')"

# Now add our special bits to it.  Please keep this list sorted.
gtfiles="$gtfiles \
\$(srcdir)/objc/objc-act.h \
\$(srcdir)/objc/objc-map.h \
\$(srcdir)/objc/objc-act.c \
\$(srcdir)/objc/objc-gnu-runtime-abi-01.c \
\$(srcdir)/objc/objc-next-runtime-abi-01.c \
\$(srcdir)/objc/objc-next-runtime-abi-02.c \
\$(srcdir)/objc/objc-runtime-shared-support.c \
"

