# Copyright (C) 2010-2015 Free Software Foundation, Inc.

# Makefile for building a staged copy of the data-directory.
# This file is part of GDB.

# This program 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.  If not, see <http://www.gnu.org/licenses/>.

srcdir = @srcdir@
SYSCALLS_SRCDIR = $(srcdir)/../syscalls
PYTHON_SRCDIR = $(srcdir)/../python/lib
GUILE_SRCDIR = $(srcdir)/../guile/lib
SYSTEM_GDBINIT_SRCDIR = $(srcdir)/../system-gdbinit
VPATH = $(srcdir):$(SYSCALLS_SRCDIR):$(PYTHON_SRCDIR):$(GUILE_SRCDIR):$(SYSTEM_GDBINIT_SRCDIR)

top_srcdir = @top_srcdir@
top_builddir = @top_builddir@

prefix = @prefix@
exec_prefix = @exec_prefix@

datarootdir = @datarootdir@
datadir = @datadir@

SHELL = @SHELL@

LN_S = @LN_S@

INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DIR = $(SHELL) $(srcdir)/../../mkinstalldirs

GDB_DATADIR = @GDB_DATADIR@

SYSCALLS_DIR = syscalls
SYSCALLS_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(SYSCALLS_DIR)
SYSCALLS_FILES = \
	gdb-syscalls.dtd \
	arm-linux.xml \
	ppc-linux.xml ppc64-linux.xml \
	i386-linux.xml amd64-linux.xml \
	sparc-linux.xml sparc64-linux.xml \
	mips-o32-linux.xml mips-n32-linux.xml mips-n64-linux.xml \
	s390-linux.xml s390x-linux.xml

PYTHON_DIR = python
PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
PYTHON_FILE_LIST = \
	gdb/__init__.py \
	gdb/frames.py \
	gdb/FrameIterator.py \
	gdb/FrameDecorator.py \
	gdb/types.py \
	gdb/printing.py \
	gdb/prompt.py \
	gdb/xmethod.py \
	gdb/command/__init__.py \
	gdb/command/xmethods.py \
	gdb/command/frame_filters.py \
	gdb/command/type_printers.py \
	gdb/command/pretty_printers.py \
	gdb/command/prompt.py \
	gdb/command/explore.py \
	gdb/function/__init__.py \
	gdb/function/caller_is.py \
	gdb/function/strfns.py \
	gdb/printer/__init__.py \
	gdb/printer/bound_registers.py

@HAVE_PYTHON_TRUE@PYTHON_FILES = $(PYTHON_FILE_LIST)
@HAVE_PYTHON_FALSE@PYTHON_FILES =

GUILE_DIR = guile
GUILE_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(GUILE_DIR)

GUILE_SOURCE_FILES = \
	./gdb.scm \
	gdb/boot.scm \
	gdb/experimental.scm \
	gdb/init.scm \
	gdb/iterator.scm \
	gdb/printing.scm \
	gdb/support.scm \
	gdb/types.scm

GUILE_COMPILED_FILES = \
	./gdb.go \
	gdb/experimental.go \
	gdb/iterator.go \
	gdb/printing.go \
	gdb/support.go \
	gdb/types.go

@HAVE_GUILE_TRUE@GUILE_FILES = $(GUILE_SOURCE_FILES) $(GUILE_COMPILED_FILES)
@HAVE_GUILE_FALSE@GUILE_FILES =

GUILD = @GUILD@
GUILD_TARGET_FLAG = @GUILD_TARGET_FLAG@

# Flags passed to 'guild compile'.
# Note: We can't use -Wunbound-variable because all the variables
# defined in C aren't visible when we compile.
# Note: To work around a guile 2.0.5 issue (it can't find gdb/init.scm even if
# we pass -L <dir>) we have to compile in the directory containing gdb.scm.
# We still need to pass "-L ." so that other modules are found.
GUILD_COMPILE_FLAGS = \
	$(GUILD_TARGET_FLAG) \
	-Warity-mismatch -Wformat -Wunused-toplevel \
	-L .

SYSTEM_GDBINIT_DIR = system-gdbinit
SYSTEM_GDBINIT_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(SYSTEM_GDBINIT_DIR)
SYSTEM_GDBINIT_FILES = \
	elinos.py \
	wrs-linux.py

FLAGS_TO_PASS = \
	"prefix=$(prefix)" \
	"exec_prefix=$(exec_prefix)" \
	"infodir=$(infodir)" \
	"datarootdir=$(datarootdir)" \
	"docdir=$(docdir)" \
	"htmldir=$(htmldir)" \
	"pdfdir=$(pdfdir)" \
	"libdir=$(libdir)" \
	"mandir=$(mandir)" \
	"datadir=$(datadir)" \
	"includedir=$(includedir)" \
	"against=$(against)" \
	"DESTDIR=$(DESTDIR)" \
	"AR=$(AR)" \
	"AR_FLAGS=$(AR_FLAGS)" \
	"CC=$(CC)" \
	"CFLAGS=$(CFLAGS)" \
	"CXX=$(CXX)" \
	"CXXFLAGS=$(CXXFLAGS)" \
	"DLLTOOL=$(DLLTOOL)" \
	"LDFLAGS=$(LDFLAGS)" \
	"RANLIB=$(RANLIB)" \
	"MAKEINFO=$(MAKEINFO)" \
	"MAKEHTML=$(MAKEHTML)" \
	"MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"RUNTEST=$(RUNTEST)" \
	"RUNTESTFLAGS=$(RUNTESTFLAGS)"

.PHONY: all
all: stamp-syscalls stamp-python stamp-guile stamp-system-gdbinit

# For portability's sake, we need to handle systems that don't have
# symbolic links.
stamp-syscalls: Makefile $(SYSCALLS_FILES)
	rm -rf ./$(SYSCALLS_DIR)
	mkdir ./$(SYSCALLS_DIR)
	files='$(SYSCALLS_FILES)' ; \
	for file in $$files ; do \
	  f=$(SYSCALLS_SRCDIR)/$$file ; \
	  if test -f $$f ; then \
	    $(INSTALL_DATA) $$f ./$(SYSCALLS_DIR) ; \
	  fi ; \
	done
	touch $@

.PHONY: clean-syscalls
clean-syscalls:
	rm -rf $(SYSCALLS_DIR)
	rm -f stamp-syscalls

# This target is responsible for properly installing the syscalls'
# XML files in the system.
.PHONY: install-syscalls
install-syscalls:
	$(INSTALL_DIR) $(SYSCALLS_INSTALL_DIR)
	files='$(SYSCALLS_FILES)' ; \
	for file in $$files; do \
	  f=$(SYSCALLS_SRCDIR)/$$file ; \
	  if test -f $$f ; then \
	    $(INSTALL_DATA) $$f $(SYSCALLS_INSTALL_DIR) ; \
	  fi ; \
	done

.PHONY: uninstall-syscalls
uninstall-syscalls:
	files='$(SYSCALLS_FILES)' ; \
	for file in $$files ; do \
	  slashdir=`echo "/$$file" | sed 's,/[^/]*$$,,'` ; \
	  rm -f $(SYSCALLS_INSTALL_DIR)/$$file ; \
	  while test "x$$file" != "x$$slashdir" ; do \
	    rmdir 2>/dev/null "$(SYSCALLS_INSTALL_DIR)$$slashdir" ; \
	    file="$$slashdir" ; \
	    slashdir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	  done \
	done

stamp-python: Makefile $(PYTHON_FILES)
	rm -rf ./$(PYTHON_DIR)
	files='$(PYTHON_FILES)' ; \
	if test "x$$files" != x ; then \
	  for file in $$files ; do \
	    dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	    $(INSTALL_DIR) ./$(PYTHON_DIR)/$$dir ; \
	    $(INSTALL_DATA) $(PYTHON_SRCDIR)/$$file ./$(PYTHON_DIR)/$$dir ; \
	  done ; \
	fi
	touch $@

.PHONY: clean-python
clean-python:
	rm -rf $(PYTHON_DIR)
	rm -f stamp-python

.PHONY: install-python
install-python:
	files='$(PYTHON_FILES)' ; \
	if test "x$$files" != x ; then \
	  for file in $$files ; do \
	    dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	    $(INSTALL_DIR) $(PYTHON_INSTALL_DIR)/$$dir ; \
	    $(INSTALL_DATA) ./$(PYTHON_DIR)/$$file $(PYTHON_INSTALL_DIR)/$$dir ; \
	  done ; \
	fi

.PHONY: uninstall-python
uninstall-python:
	files='$(PYTHON_FILES)' ; \
	if test "x$$files" != x ; then \
	  for file in $$files ; do \
	    slashdir=`echo "/$$file" | sed 's,/[^/]*$$,,'` ; \
	    rm -f $(PYTHON_INSTALL_DIR)/$$file ; \
	    while test "x$$file" != "x$$slashdir" ; do \
	      rmdir 2>/dev/null "$(PYTHON_INSTALL_DIR)$$slashdir" ; \
	      file="$$slashdir" ; \
	      slashdir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	    done \
	  done ; \
	fi

stamp-guile: Makefile $(GUILE_SOURCE_FILES)
	rm -rf ./$(GUILE_DIR)
	if test "x$(GUILE_FILES)" != x ; then \
	  files='$(GUILE_SOURCE_FILES)' ; \
	  for file in $$files ; do \
	    dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	    $(INSTALL_DIR) ./$(GUILE_DIR)/$$dir ; \
	    $(INSTALL_DATA) $(GUILE_SRCDIR)/$$file ./$(GUILE_DIR)/$$dir ; \
	  done ; \
	  files='$(GUILE_COMPILED_FILES)' ; \
	  cd ./$(GUILE_DIR) ; \
	  for go in $$files ; do \
	    source="`echo $$go | sed 's/\.go$$/.scm/'`" ; \
	    echo $(GUILD) compile $(GUILD_COMPILE_FLAGS) -o "$$go" "$$source" ; \
	    $(GUILD) compile $(GUILD_COMPILE_FLAGS) -o "$$go" "$$source" || exit 1 ; \
	  done ; \
	fi
	touch $@

.PHONY: clean-guile
clean-guile:
	rm -rf $(GUILE_DIR)
	rm -f stamp-guile

.PHONY: install-guile
install-guile:
	files='$(GUILE_FILES)' ; \
	if test "x$$files" != x ; then \
	  for file in $$files ; do \
	    dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	    $(INSTALL_DIR) $(GUILE_INSTALL_DIR)/$$dir ; \
	    $(INSTALL_DATA) ./$(GUILE_DIR)/$$file $(GUILE_INSTALL_DIR)/$$dir ; \
	  done ; \
	fi

.PHONY: uninstall-guile
uninstall-guile:
	files='$(GUILE_FILES)' ; \
	if test "x$$files" != x ; then \
	  for file in $$files ; do \
	    slashdir=`echo "/$$file" | sed 's,/[^/]*$$,,'` ; \
	    rm -f $(GUILE_INSTALL_DIR)/$$file ; \
	    while test "x$$file" != "x$$slashdir" ; do \
	      rmdir 2>/dev/null "$(GUILE_INSTALL_DIR)$$slashdir" ; \
	      file="$$slashdir" ; \
	      slashdir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	    done \
	  done ; \
	fi

stamp-system-gdbinit: Makefile $(SYSTEM_GDBINIT_FILES)
	rm -rf ./$(SYSTEM_GDBINIT_DIR)
	mkdir ./$(SYSTEM_GDBINIT_DIR)
	files='$(SYSTEM_GDBINIT_FILES)' ; \
	for file in $$files ; do \
	  f=$(SYSTEM_GDBINIT_SRCDIR)/$$file ; \
	  if test -f $$f ; then \
	    $(INSTALL_DATA) $$f ./$(SYSTEM_GDBINIT_DIR) ; \
	  fi ; \
	done
	touch $@

.PHONY: clean-system-gdbinit
clean-system-gdbinit:
	rm -rf $(SYSTEM_GDBINIT_DIR)
	rm -f stamp-system-gdbinit

.PHONY: install-system-gdbinit
install-system-gdbinit:
	$(INSTALL_DIR) $(SYSTEM_GDBINIT_INSTALL_DIR)
	files='$(SYSTEM_GDBINIT_FILES)' ; \
	for file in $$files; do \
	  f=$(SYSTEM_GDBINIT_SRCDIR)/$$file ; \
	  if test -f $$f ; then \
	    $(INSTALL_DATA) $$f $(SYSTEM_GDBINIT_INSTALL_DIR) ; \
	  fi ; \
	done

.PHONY: uninstall-system-gdbinit
uninstall-system-gdbinit:
	files='$(SYSTEM_GDBINIT_FILES)' ; \
	for file in $$files ; do \
	  slashdir=`echo "/$$file" | sed 's,/[^/]*$$,,'` ; \
	  rm -f $(SYSTEM_GDBINIT_INSTALL_DIR)/$$file ; \
	  while test "x$$file" != "x$$slashdir" ; do \
	    rmdir 2>/dev/null "$(SYSTEM_GDBINIT_INSTALL_DIR)$$slashdir" ; \
	    file="$$slashdir" ; \
	    slashdir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
	  done \
	done

# Traditionally "install" depends on "all".  But it may be useful
# not to; for example, if the user has made some trivial change to a
# source file and doesn't care about rebuilding or just wants to save the
# time it takes for make to check that all is up to date.
# install-only is intended to address that need.
.PHONY: install
install: all
	@$(MAKE) $(FLAGS_TO_PASS) install-only

.PHONY: install-only
install-only: install-syscalls install-python install-guile \
	install-system-gdbinit

.PHONY: uninstall
uninstall: uninstall-syscalls uninstall-python uninstall-guile \
	uninstall-system-gdbinit

.PHONY: clean
clean: clean-syscalls clean-python clean-guile clean-system-gdbinit

.PHONY: maintainer-clean realclean distclean
maintainer-clean realclean distclean: clean
	rm -f Makefile

.PHONY: check installcheck info dvi pdf html
.PHONY: install-info install-pdf install-html clean-info
check installcheck:
info dvi pdf html:
install-info install-pdf install-html:
clean-info:

# GNU Make has an annoying habit of putting *all* the Makefile variables
# into the environment, unless you include this target as a circumvention.
# Rumor is that this will be fixed (and this target can be removed)
# in GNU Make 4.0.
.NOEXPORT:

# GNU Make 3.63 has a different problem: it keeps tacking command line
# overrides onto the definition of $(MAKE).  This variable setting
# will remove them.
MAKEOVERRIDES=

Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	cd $(top_builddir) && $(MAKE) data-directory/Makefile
