# Copyright (C) 2010-2016 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/>.

# Please keep lists in this file sorted alphabetically, with one item per line.
# See gdb/Makefile.in for guidelines on ordering files and directories.

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)
XSLTPROC = @XSLTPROC@

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)
GEN_SYSCALLS_FILES = \
	aarch64-linux.xml \
	amd64-linux.xml \
	arm-linux.xml \
	i386-linux.xml \
	mips-n32-linux.xml \
	mips-n64-linux.xml \
	mips-o32-linux.xml \
	ppc-linux.xml \
	ppc64-linux.xml \
	s390-linux.xml \
	s390x-linux.xml \
	sparc-linux.xml \
	sparc64-linux.xml

SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES)

PYTHON_DIR = python
PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
PYTHON_FILE_LIST = \
	gdb/__init__.py \
	gdb/FrameDecorator.py \
	gdb/FrameIterator.py \
	gdb/frames.py \
	gdb/printing.py \
	gdb/prompt.py \
	gdb/types.py \
	gdb/unwinder.py \
	gdb/xmethod.py \
	gdb/command/__init__.py \
	gdb/command/explore.py \
	gdb/command/frame_filters.py \
	gdb/command/pretty_printers.py \
	gdb/command/prompt.py \
	gdb/command/type_printers.py \
	gdb/command/unwinders.py \
	gdb/command/xmethods.py \
	gdb/function/__init__.py \
	gdb/function/as_string.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 \
	fuchsia.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

%.xml: @MAINTAINER_MODE_TRUE@ %.xml.in apply-defaults.xsl linux-defaults.xml.in
	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl\
		$(SYSCALLS_SRCDIR)/$@.in

.PHONY: syscall-xml
syscall-xml: $(GEN_SYSCALLS_FILES)

.PHONY: clean-syscall-xml
# Only clean files generated XML files.
clean-syscall-xml:
	files='$(GEN_SYSCALLS_FILES)' ; \
	for file in $$files; do \
		rm -f "$(SYSCALLS_SRCDIR)/$$file"; \
	done

# 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
