# Top level configure fragment for GNU Objective-C++.
#   Copyright (C) 2005-2022 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.cc 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.cc into objcp-lang.cc.
gtfiles="$(. $srcdir/cp/config-lang.in ; \
  echo $gtfiles | sed 's+/cp/cp-lang.cc +/objcp/objcp-lang.cc +')"

# 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.cc \
\$(srcdir)/objc/objc-gnu-runtime-abi-01.cc \
\$(srcdir)/objc/objc-next-runtime-abi-01.cc \
\$(srcdir)/objc/objc-next-runtime-abi-02.cc \
\$(srcdir)/objc/objc-runtime-shared-support.cc \
"

