# 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@
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
LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
GCC_WARN_CFLAGS = $(LOOSE_WARN)
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

# Variables for gnattools1, native
TOOLS_FLAGS_TO_PASS_1= \
	"CC=../../xgcc -B../../" \
	"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)" \
	"GNATBIND=../../gnatbind" \
	"TOOLSCASE=native"

# Variables for regnattools
TOOLS_FLAGS_TO_PASS_1re= \
	"CC=../../xgcc -B../../" \
	"CFLAGS=$(CFLAGS)" \
	"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" \
	"INCLUDES="

# Variables for gnattools2, native
TOOLS_FLAGS_TO_PASS_NATIVE= \
	"CC=../../xgcc -B../../" \
	"CFLAGS=$(CFLAGS)" \
	"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=native"

# Variables for gnattools, cross
TOOLS_FLAGS_TO_PASS_CROSS= \
	"CC=$(CC)" \
	"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" \
	"GNATLINK=gnatlink" \
	"GNATBIND=gnatbind" \
	"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_1) \
	  ../../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_1re) \
	  gnatmake-re gnatlink-re
	# gnattools2
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools

# For cross builds of gnattools,
# put the host RTS dir first in the PATH to hide the default runtime
# files that are among the sources
# FIXME: This should be done in configure.
RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
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:

