#
#    Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

#
#    Description:
#      This file is the makefile for inlining optional and required
#      third-party packages as package-internal copies and for providing
#      convenience targets for bootstrapping the GNU autotools-based build
#      system used by this package.
#
#      If your package has dependent git repositories that you might
#      otherwise be inclined to subtree in, you can define a
#      "repos.conf" file at the top of your project that enumerates
#      the repositories, the branch thereof, and where to put it in
#      your project. An example is shown below:
#
#        [submodule "nlassert"]
#            path = third_party/nlassert/repo
#            url = git@github.com:nestlabs/nlassert.git
#            branch = master
#            update = none
#        [submodule "nlunit-test"]
#            path = third_party/nlunit-test/repo
#            url = git@github.com:nestlabs/nlunit-test.git
#            branch = master
#            update = none
#

ThisMakefile                     := $(firstword $(MAKEFILE_LIST))

builddir                         ?= .
abs_builddir                     ?= $(realpath $(builddir))
top_builddir                     ?= $(builddir)
abs_top_builddir                 ?= $(realpath $(top_builddir))
srcdir                           ?= $(dir $(realpath $(ThisMakefile)))
abs_srcdir                       ?= $(realpath $(srcdir))
top_srcdir                       ?= $(srcdir)
abs_top_srcdir                   ?= $(realpath $(top_srcdir))

nlbuild_autotools_stem           ?= third_party/nlbuild-autotools/repo
abs_top_nlbuild_autotools_dir    ?= $(abs_top_srcdir)/$(nlbuild_autotools_stem)

include $(abs_top_nlbuild_autotools_dir)/make/pre.mak
include $(abs_top_nlbuild_autotools_dir)/make/host/tools/bootstrap.mak

#
# Add any project-specific bootstrap help commands to this
# 'help-hook' target.
#
# These commands will be executed AFTER the core bootstrap 'help'
# target commands.
#
help-hook:

#
# Add any project-specific bootstrap help commands to this
# 'help-bootstrap-hook' target.
#
# These commands will be executed AFTER the core bootstrap 'help' and
# 'help-bootstrap' target commands.
#
help-bootstrap-hook:

#
# Add any project-specific bootstrap help commands to this
# 'help-repos-hook' target.
#
# These commands will be executed AFTER the core bootstrap 'help' and
# 'help-repos' target commands.
#
help-repos-hook:

#
# Add any project-specific bootstrap repos commands to this
# 'repos-hook' target.
#
# These commands will be executed AFTER the core bootstrap 'repos'
# target commands.
#
repos-hook:

#
# Add any project-specific bootstrap repos commands to this
# 'clean-repos-hook' target.
#
# These commands will be executed BEFORE the core bootstrap 'clean-repos'
# target commands.
#
clean-repos-hook:

include $(abs_top_nlbuild_autotools_dir)/make/post.mak
include $(abs_top_nlbuild_autotools_dir)/make/post/rules/bootstrap.mak
