# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution and at
# http://rust-lang.org/COPYRIGHT.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.

######################################################################
# Copy debugger related scripts
######################################################################


## GDB ##
DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB=gdb_load_rust_pretty_printers.py \
                                 gdb_rust_pretty_printing.py \
                                 debugger_pretty_printers_common.py
DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB_ABS=\
    $(foreach script,$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB), \
        $(CFG_SRC_DIR)src/etc/$(script))

DEBUGGER_BIN_SCRIPTS_GDB=rust-gdb
DEBUGGER_BIN_SCRIPTS_GDB_ABS=\
    $(foreach script,$(DEBUGGER_BIN_SCRIPTS_GDB), \
        $(CFG_SRC_DIR)src/etc/$(script))


## LLDB ##
DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB=lldb_rust_formatters.py \
                                  debugger_pretty_printers_common.py
DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB_ABS=\
    $(foreach script,$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB), \
        $(CFG_SRC_DIR)src/etc/$(script))

DEBUGGER_BIN_SCRIPTS_LLDB=rust-lldb
DEBUGGER_BIN_SCRIPTS_LLDB_ABS=\
    $(foreach script,$(DEBUGGER_BIN_SCRIPTS_LLDB), \
        $(CFG_SRC_DIR)src/etc/$(script))


## ALL ##
DEBUGGER_RUSTLIB_ETC_SCRIPTS_ALL=$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB) \
                                 $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB)
DEBUGGER_RUSTLIB_ETC_SCRIPTS_ALL_ABS=$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB_ABS) \
                                     $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB_ABS)
DEBUGGER_BIN_SCRIPTS_ALL=$(DEBUGGER_BIN_SCRIPTS_GDB) \
                         $(DEBUGGER_BIN_SCRIPTS_LLDB)
DEBUGGER_BIN_SCRIPTS_ALL_ABS=$(DEBUGGER_BIN_SCRIPTS_GDB_ABS) \
                             $(DEBUGGER_BIN_SCRIPTS_LLDB_ABS)


# $(1) - the stage to copy to
# $(2) - the host triple
define DEF_INSTALL_DEBUGGER_SCRIPTS_HOST

tmp/install-debugger-scripts$(1)_H_$(2)-gdb.done: \
  $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB_ABS) \
  $$(DEBUGGER_BIN_SCRIPTS_GDB_ABS)
	$(Q)touch $$@.start_time
	$(Q)mkdir -p $$(HBIN$(1)_H_$(2))
	$(Q)mkdir -p $$(HLIB$(1)_H_$(2))/rustlib/etc
	$(Q)install $$(DEBUGGER_BIN_SCRIPTS_GDB_ABS) $$(HBIN$(1)_H_$(2))
	$(Q)install $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB_ABS) $$(HLIB$(1)_H_$(2))/rustlib/etc
	$(Q)touch -r $$@.start_time $$@ && rm $$@.start_time

tmp/install-debugger-scripts$(1)_H_$(2)-lldb.done: \
  $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB_ABS) \
  $$(DEBUGGER_BIN_SCRIPTS_LLDB_ABS)
	$(Q)touch $$@.start_time
	$(Q)mkdir -p $$(HBIN$(1)_H_$(2))
	$(Q)mkdir -p $$(HLIB$(1)_H_$(2))/rustlib/etc
	$(Q)install $$(DEBUGGER_BIN_SCRIPTS_LLDB_ABS) $$(HBIN$(1)_H_$(2))
	$(Q)install $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB_ABS) $$(HLIB$(1)_H_$(2))/rustlib/etc
	$(Q)touch -r $$@.start_time $$@ && rm $$@.start_time

tmp/install-debugger-scripts$(1)_H_$(2)-all.done: \
  $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ALL_ABS) \
  $$(DEBUGGER_BIN_SCRIPTS_ALL_ABS)
	$(Q)touch $$@.start_time
	$(Q)mkdir -p $$(HBIN$(1)_H_$(2))
	$(Q)mkdir -p $$(HLIB$(1)_H_$(2))/rustlib/etc
	$(Q)install $$(DEBUGGER_BIN_SCRIPTS_ALL_ABS) $$(HBIN$(1)_H_$(2))
	$(Q)install $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ALL_ABS) $$(HLIB$(1)_H_$(2))/rustlib/etc
	$(Q)touch -r $$@.start_time $$@ && rm $$@.start_time

tmp/install-debugger-scripts$(1)_H_$(2)-none.done:
	$(Q)touch $$@

endef

# Expand host make-targets for all stages
$(foreach stage,$(STAGES), \
  $(foreach host,$(CFG_HOST), \
    $(eval $(call DEF_INSTALL_DEBUGGER_SCRIPTS_HOST,$(stage),$(host)))))

# $(1) is the stage number
# $(2) is the target triple
# $(3) is the host triple
define DEF_INSTALL_DEBUGGER_SCRIPTS_TARGET

tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3)-gdb.done: \
  $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB_ABS) \
  $$(DEBUGGER_BIN_SCRIPTS_GDB_ABS)
	$(Q)touch $$@.start_time
	$(Q)mkdir -p $$(TBIN$(1)_T_$(2)_H_$(3))
	$(Q)mkdir -p $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
	$(Q)install $(DEBUGGER_BIN_SCRIPTS_GDB_ABS) $$(TBIN$(1)_T_$(2)_H_$(3))
	$(Q)install $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_GDB_ABS) $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
	$(Q)touch -r $$@.start_time $$@ && rm $$@.start_time

tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3)-lldb.done: \
  $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB_ABS) \
  $$(DEBUGGER_BIN_SCRIPTS_LLDB_ABS)
	$(Q)touch $$@.start_time
	$(Q)mkdir -p $$(TBIN$(1)_T_$(2)_H_$(3))
	$(Q)mkdir -p $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
	$(Q)install $(DEBUGGER_BIN_SCRIPTS_LLDB_ABS) $$(TBIN$(1)_T_$(2)_H_$(3))
	$(Q)install $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_LLDB_ABS) $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
	$(Q)touch -r $$@.start_time $$@ && rm $$@.start_time

tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3)-all.done: \
  $$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ALL_ABS) \
  $$(DEBUGGER_BIN_SCRIPTS_ALL_ABS)
	$(Q)touch $$@.start_time
	$(Q)mkdir -p $$(TBIN$(1)_T_$(2)_H_$(3))
	$(Q)mkdir -p $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
	$(Q)install $(DEBUGGER_BIN_SCRIPTS_ALL_ABS) $$(TBIN$(1)_T_$(2)_H_$(3))
	$(Q)install $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ALL_ABS) $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
	$(Q)touch -r $$@.start_time $$@ && rm $$@.start_time

tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3)-none.done:
	$(Q)touch $$@

endef

# Expand target make-targets for all stages
$(foreach stage,$(STAGES), \
  $(foreach target,$(CFG_TARGET), \
    $(foreach host,$(CFG_HOST), \
      $(eval $(call DEF_INSTALL_DEBUGGER_SCRIPTS_TARGET,$(stage),$(target),$(host))))))