# Makefile for gnattools
#   Copyright 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
#
# This file 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; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# Default target; must be first.
all: gnattools

# Standard autoconf-set variables.
SHELL = @SHELL@
srcdir = @srcdir@
libdir = @libdir@
build = @build@
target = @target@
host = @host@
host_alias = @host_alias@
prefix = @prefix@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@

# Nonstandard autoconf-set variables.
LN_S=@LN_S@
target_noncanonical=@target_noncanonical@

# Variables for the user (or the top level) to override.
exeext = @EXEEXT@
objext=.o
TRACE=no
ADA_FOR_BUILD=
ADA_FOR_TARGET=
LDFLAGS=
PWD_COMMAND = $${PWDCMD-pwd}

# The tedious process of getting CFLAGS right.
CFLAGS=-g
GCC_WARN_CFLAGS = -W -Wall
WARN_CFLAGS = @warn_cflags@

ADA_CFLAGS=@ADA_CFLAGS@

# Variables for gnattools.
ADAFLAGS= -gnatpg -gnata

# For finding the GCC build dir, which is used far too much
GCC_DIR=../gcc

# Absolute srcdir for gcc (why do we want absolute?  I dunno)
fsrcdir := $(shell cd $(srcdir)/../gcc/; ${PWD_COMMAND})

# Useful "subroutines" for the excess includes
INCLUDES_FOR_SUBDIR = -I. -I.. -I../.. -I$(fsrcdir)/ada -I$(fsrcdir)/config \
	-I$(fsrcdir)/../include -I$(fsrcdir)
ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)/ada

CXX_LFLAGS = \
 -B../../../$(target_noncanonical)/libstdc++-v3/src/.libs \
 -B../../../$(target_noncanonical)/libstdc++-v3/libsupc++/.libs \
 -L../../../$(target_noncanonical)/libstdc++-v3/src/.libs \
 -L../../../$(target_noncanonical)/libstdc++-v3/libsupc++/.libs

# Variables for gnattools, native
TOOLS_FLAGS_TO_PASS_NATIVE= \
	"CC=../../xgcc -B../../" \
	"CXX=../../xg++ -B../../ $(CXX_LFLAGS)" \
	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
	"LDFLAGS=$(LDFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)" \
	"ADA_CFLAGS=$(ADA_CFLAGS)" \
	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
	"ADA_INCLUDES=-I- -I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
	"exeext=$(exeext)" \
	"fsrcdir=$(fsrcdir)" \
	"srcdir=$(fsrcdir)" \
	"GNATMAKE=../../gnatmake" \
	"GNATLINK=../../gnatlink" \
	"GNATBIND=../../gnatbind" \
	"TOOLSCASE=native"

# Variables for regnattools
TOOLS_FLAGS_TO_PASS_RE= \
	"CC=../../xgcc -B../../" \
	"CXX=../../xg++ -B../../ $(CXX_LFLAGS)" \
	"CFLAGS=$(CFLAGS)" \
	"LDFLAGS=$(LDFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)" \
	"ADA_CFLAGS=$(ADA_CFLAGS)" \
	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
	"ADA_INCLUDES=-I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
	"exeext=$(exeext)" \
	"fsrcdir=$(fsrcdir)" \
	"srcdir=$(fsrcdir)" \
	"GNATMAKE=../../gnatmake" \
	"GNATLINK=../../gnatlink" \
	"GNATBIND=../../gnatbind" \
	"TOOLSCASE=cross"

# Variables for gnattools, cross
ifeq ($(build), $(host))
  GNATMAKE_FOR_HOST=gnatmake
  GNATLINK_FOR_HOST=gnatlink
  GNATBIND_FOR_HOST=gnatbind
  GNATLS_FOR_HOST=gnatls
else
  GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
  GNATLINK_FOR_HOST=$(host_alias)-gnatlink
  GNATBIND_FOR_HOST=$(host_alias)-gnatbind
  GNATLS_FOR_HOST=$(host_alias)-gnatls
endif

# Put the host RTS dir first in the PATH to hide the default runtime
# files that are among the sources
RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))

TOOLS_FLAGS_TO_PASS_CROSS= \
	"CC=$(CC)" \
	"CXX=$(CXX)" \
	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
	"LDFLAGS=$(LDFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)"	\
	"ADA_CFLAGS=$(ADA_CFLAGS)" \
	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
	"ADA_INCLUDES=-I$(RTS_DIR)/../adainclude -I$(RTS_DIR) $(ADA_INCLUDES_FOR_SUBDIR)" \
	"exeext=$(exeext)" \
	"fsrcdir=$(fsrcdir)" \
	"srcdir=$(fsrcdir)" \
	"GNATMAKE=$(GNATMAKE_FOR_HOST)" \
	"GNATLINK=$(GNATLINK_FOR_HOST)" \
	"GNATBIND=$(GNATBIND_FOR_HOST)" \
	"TOOLSCASE=cross" \
	"LIBGNAT="

# File lists
# ----------

# File associations set by configure
EXTRA_GNATTOOLS = @EXTRA_GNATTOOLS@
TOOLS_TARGET_PAIRS = @TOOLS_TARGET_PAIRS@

# Makefile targets
# ----------------

.PHONY: gnattools gnattools-native gnattools-cross regnattools
gnattools: @default_gnattools_target@

# Sanity check
$(GCC_DIR)/stamp-gnatlib-rts:
	@if [ ! -f $(GCC_DIR)/stamp-gnatlib-rts ] ; \
        then \
          echo "Cannot build gnattools while gnatlib is out of date or unbuilt" ; \
          false; \
        else \
          true; \
        fi


# Build directory for the tools. Let's copy the target-dependent
# sources using the same mechanism as for gnatlib. The other sources are
# accessed using the vpath directive in ada/Makefile.in

$(GCC_DIR)/stamp-tools:
	-rm -rf $(GCC_DIR)/ada/tools
	-mkdir -p $(GCC_DIR)/ada/tools
	-(cd $(GCC_DIR)/ada/tools; $(LN_S) ../sdefault.adb ../snames.ads ../snames.adb .)
	-$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
	          rm -f $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));\
	          $(LN_S) $(fsrcdir)/ada/$(word 2,$(subst <, ,$(PAIR))) \
	                $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));)
	touch $(GCC_DIR)/stamp-tools

# gnatmake/link tools cannot always be built with gnatmake/link for bootstrap 
# reasons: gnatmake should be built with a recent compiler, a recent compiler
# may not generate ALI files compatible with an old gnatmake so it is important
# to be able to build gnatmake without a version of gnatmake around. Once 
# everything has been compiled once, gnatmake can be recompiled with itself 
# (see target regnattools) 
gnattools-native: $(GCC_DIR)/stamp-tools $(GCC_DIR)/stamp-gnatlib-rts
	# gnattools1
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_NATIVE) \
	  ../../gnatmake$(exeext) ../../gnatlink$(exeext)
	# gnattools2
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools

# gnatmake/link can be built with recent gnatmake/link if they are available.
# This is especially convenient for building cross tools or for rebuilding
# the tools when the original bootstrap has already be done.
regnattools: $(GCC_DIR)/stamp-gnatlib-rts
	# gnattools1-re
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_RE) INCLUDES="" \
	  gnatmake-re gnatlink-re
	# gnattools2
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools

gnattools-cross: $(GCC_DIR)/stamp-tools
	# gnattools1-re
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_CROSS) INCLUDES="" \
	  gnatmake-re gnatlink-re
	# gnattools2
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_CROSS) common-tools
	# Rename cross tools to where the GCC makefile wants them when
	# installing.  FIXME: installation should be done elsewhere.
	if [ -f $(GCC_DIR)/gnatbind$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatbind$(exeext) $(GCC_DIR)/gnatbind-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatchop$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatchop$(exeext) $(GCC_DIR)/gnatchop-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnat$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnat$(exeext) $(GCC_DIR)/gnat-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatkr$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatkr$(exeext) $(GCC_DIR)/gnatkr-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatlink$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatlink$(exeext) $(GCC_DIR)/gnatlink-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatls$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatls$(exeext) $(GCC_DIR)/gnatls-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatmake$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatmake$(exeext) $(GCC_DIR)/gnatmake-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatmem$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatmem$(exeext) $(GCC_DIR)/gnatmem-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatname$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatname$(exeext) $(GCC_DIR)/gnatname-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatprep$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatprep$(exeext) $(GCC_DIR)/gnatprep-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatxref$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatxref$(exeext) $(GCC_DIR)/gnatxref-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatfind$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatfind$(exeext) $(GCC_DIR)/gnatfind-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatclean$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatclean$(exeext) $(GCC_DIR)/gnatclean-cross$(exeext); \
	fi
	if [ -f $(GCC_DIR)/gnatsym$(exeext) ] ; then \
	  mv $(GCC_DIR)/gnatsym$(exeext) $(GCC_DIR)/gnatsym-cross$(exeext); \
	fi

# Other
# -----

# Check uninstalled version.
check:

# Check installed version.
installcheck:

# Build info (none here).
info:

# Build DVI (none here).
dvi:

# Build PDF (none here).
pdf:

# Build HTML (none here).
html:

.PHONY: check installcheck info dvi pdf html

# Build TAGS (none here).
TAGS:

# Installation rules.
install:

install-strip: install

install-info:

install-pdf:

install-html:

.PHONY: install install-strip install-info install-pdf install-html

# Cleaning rules.
mostlyclean:

clean:

distclean:
	$(RM) Makefile config.status config.log

maintainer-clean:

.PHONY: mostlyclean clean distclean maintainer-clean

# Rules for rebuilding this Makefile.
Makefile: $(srcdir)/Makefile.in config.status
	CONFIG_FILES=$@ ; \
	CONFIG_HEADERS= ; \
	$(SHELL) ./config.status

config.status: $(srcdir)/configure
	$(SHELL) ./config.status --recheck

AUTOCONF = autoconf
configure_deps = \
	$(srcdir)/configure.ac \
	$(srcdir)/../config/acx.m4 \
	$(srcdir)/../config/override.m4

$(srcdir)/configure: @MAINT@ $(configure_deps)
	cd $(srcdir) && $(AUTOCONF)

# Don't export variables to the environment, in order to not confuse
# configure.
.NOEXPORT:

