Update to reflect upstream repository 'https://github.com:nestlabs/nlbuild-autotools' at tag '1.6.4'.
diff --git a/third_party/nlbuild-autotools/repo/.default-version b/third_party/nlbuild-autotools/repo/.default-version
index 266146b..9edc58b 100644
--- a/third_party/nlbuild-autotools/repo/.default-version
+++ b/third_party/nlbuild-autotools/repo/.default-version
@@ -1 +1 @@
-1.6.3
+1.6.4
diff --git a/third_party/nlbuild-autotools/repo/CHANGES b/third_party/nlbuild-autotools/repo/CHANGES
index ef886a0..ef7857f 100644
--- a/third_party/nlbuild-autotools/repo/CHANGES
+++ b/third_party/nlbuild-autotools/repo/CHANGES
@@ -1,3 +1,9 @@
+1.6.4 (2018-11-14)
+
+        * Added support for pulling down remote package dependencies using
+          git clone (default) or git submodule depending on the setting of
+          pull.method in repos.conf.
+
 1.6.3 (2018-10-19)
 
         * Added support for coverage-local and check-local targets. Added
diff --git a/third_party/nlbuild-autotools/repo/README.md b/third_party/nlbuild-autotools/repo/README.md
index 39347f6..08f9696 100644
--- a/third_party/nlbuild-autotools/repo/README.md
+++ b/third_party/nlbuild-autotools/repo/README.md
@@ -130,8 +130,8 @@
 
 nlbuild-autotools supports this by providing a means to pull down
 external git package repositories that your package depends on using
-git submodules when you use and support --with-<package>=internal as a
-location for your dependent packages.
+either git clone (default) or git submodules when you use and support
+--with-<package>=internal as a location for your dependent packages.
 
 The example 'Makefile-bootstrap' has been provided as infrastructure to
 make this easy for you as a package maintainer and for your package
@@ -202,9 +202,11 @@
 
 In addition to the 'repos' target, the bootstrap makefile also
 supports the 'clean-repos' target that undoes the work of the 'repos'
-target. It will clean-up all of the synchronized repositories, all the
-while being careful to ensure it does not disturb existing git or git
-submodule state your project might be using.
+target. When using either the 'clone' or 'submodule' pull methods, it
+will clean-up all of the synchronized repositories. When using the
+'submodule' pull method, it also is careful to ensure it does not
+disturb existing git or git submodule state your project might be
+using.
 
 The infrastructure all works, of course, whether you are working in or
 out of git and whether you have colocated or non-colocated source and
@@ -220,9 +222,13 @@
 them.
 
 The format of 'repos.conf' _almost_ precisely follows that used by git
-submodules with one notable addition, the 'commit' key. The 'commit'
-key allows you to specify not only what branch to checkout but, more
-precisely, what commit or tag to checkout rather than just _HEAD_ of a
+submodules with two notable additions, the 'pull' section and the
+'commit' key. The 'pull' section allows you to optionally specify the
+'method' key as 'clone' or 'submodule' (defaulting to 'clone' when the
+key is not present). This selects whether 'git clone' or 'git
+submodule' is used to pull down repositories. The 'commit' key allows
+you to specify not only what branch to checkout but, more precisely,
+what commit or tag to checkout rather than just _HEAD_ of a
 branch. More information is available in 'Makefile-bootstrap' or with
 `man gitmodules` or `git help gitmodules`.
 
diff --git a/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am b/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am
index f052903..19d50e3 100644
--- a/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am
+++ b/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am
@@ -90,10 +90,10 @@
 $(@PACKAGE_SHORT_UPPER@_COVERAGE_BUNDLE):
 	$(call create-directory)
 
-$(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO): check | $(@PACKAGE_SHORT_UPPER@_COVERAGE_BUNDLE)
+$(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO): check-local | $(@PACKAGE_SHORT_UPPER@_COVERAGE_BUNDLE)
 	$(call generate-coverage-report,${top_builddir})
 
-coverage: $(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO)
+coverage-local: $(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO)
 
 clean-local: clean-local-coverage
 
diff --git a/third_party/nlbuild-autotools/repo/examples/repos.conf b/third_party/nlbuild-autotools/repo/examples/repos.conf
index f86e079..dce15b7 100644
--- a/third_party/nlbuild-autotools/repo/examples/repos.conf
+++ b/third_party/nlbuild-autotools/repo/examples/repos.conf
@@ -1,7 +1,7 @@
 # You can synchronize a remote package on which yours depends with git
 # to 'third_party' (or another directory).
 #
-# Here is an example using nlunit-test. Uncomment and adapter or
+# Here is an example using nlunit-test. Uncomment and adapt or
 # delete this, as needed. If you do not have any packages to
 # sychronize, then this file is unneeded and may be deleted from your
 # project.
@@ -10,10 +10,19 @@
 # Makefile.am, and third_party/Makefile.am and uncomment the appropriate
 # sections there.
 #
+# The 'pull' section is optional. The 'pull' section allows you to
+# optionally specify the 'method' key as 'clone' or 'submodule'
+# (defaulting to 'clone' when the key is not present). This selects
+# whether 'git clone' or 'git submodule' is used to pull down
+# repositories.
+#
 # While the 'branch' key is required, the 'commit' key is
 # optional. The 'commit' key allows you to specify a particular commit
 # hash or tag if you do not want HEAD of the specified branch.
 
+# [pull]
+#	method = clone
+#
 # [submodule "nlunit-test"]
 # 	path = third_party/nlunit-test/repo
 # 	url = https://github.com/nestlabs/nlunit-test.git
diff --git a/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak b/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak
index 6ae8304..ec76a01 100644
--- a/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak
+++ b/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak
@@ -1,5 +1,6 @@
 #
 #    Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
+#    Copyright 2018 Google LLC. 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.
@@ -17,31 +18,52 @@
 #
 #    Description:
 #      This file is a make "footer" or post make header that defines make
-#      convenience targets and templates for interacting with and managing git
-#      submodules in the context of managing project dependencies.
+#      convenience targets and templates for interacting with and managing
+#      "foreign" (e.g., those outside of this project) git projects in the
+#      context of managing project dependencies.
 #
 
 ifneq ($(REPOS),)
+# Stem for git clones and submodules
+
+__REPOS_GIT_STEM                 := /.git
+
 # Stem for the git configuration file for a git repository.
 
-__REPOS_GIT_CONFIG_STEM          := /.git/config
+__REPOS_GIT_CONFIG_STEM          := $(__REPOS_GIT_STEM)/config
 
 # Stem for the git cache directory for a git submodule
 
-__REPOS_GIT_MODULE_CACHE_STEM    := /.git/modules
+__REPOS_GIT_MODULE_CACHE_STEM    := $(__REPOS_GIT_STEM)/modules
 
 # git submodule configuration file and path
 
 __REPOS_GIT_MODULES_FILE         := .gitmodules
 __REPOS_GIT_MODULES_PATH         := $(top_srcdir)/$(__REPOS_GIT_MODULES_FILE)
 
-# Stem for the git configuration file for a git submodule.
+# Stem for the git configuration file for a git clone or submodule.
 
-__REPOS_GIT_SUBMODULE_STEM       := /.git
+__REPOS_GIT_CLONE_STEM           := $(__REPOS_GIT_STEM)
+__REPOS_GIT_SUBMODULE_STEM       := $(__REPOS_GIT_STEM)
+
+# Git "pull" method to use for retrieving repositories on which this
+# package may depend.
+#
+# This defaults to 'clone' if no configuration value is present.
+
+__REPOS_MAYBE_PULL_METHOD        := $(call nlGitGetMethodForPullFromFile,$(REPOS_CONFIG))
+__REPOS_DEFAULT_PULL_METHOD      := clone
+REPOS_PULL_METHOD                := $(if $(__REPOS_MAYBE_PULL_METHOD),$(__REPOS_MAYBE_PULL_METHOD),$(__REPOS_DEFAULT_PULL_METHOD))
 
 # Git repository configuration for this package, if it exists.
+#
+# This value is only relevant when the pull method is 'submodule'.
 
+ifeq ($(REPOS_PULL_METHOD),submodule)
 REPOS_PACKAGE_GIT_PATH           := $(top_srcdir)$(__REPOS_GIT_CONFIG_STEM)
+else
+REPOS_PACKAGE_GIT_PATH           :=
+endif
 
 # Sentinel Files
 
@@ -52,13 +74,13 @@
 #
 # REPOS_template <repo file> <repo name>
 #
-# This template defines variables and targets used for inlining optional and required
-# third-party packages as package-internal copies.
+# This template defines variables and targets used for inlining optional and
+# required third-party packages as package-internal copies.
 #
-#   <repo file>  - Path to the repo configuration file from which to get values for
-#                  named repo.
-#   <repo name>  - Name of the repository in <repo file> for which to get values for
-#                  branch, local path, and URL.
+#   <repo file>  - Path to the repo configuration file from which to get
+#                  values for named repo.
+#   <repo name>  - Name of the repository in <repo file> for which to get
+#                  values for branch, local path, and URL.
 #
 define REPOS_template
 $(2)_repo_NAME               := $(2)
@@ -82,11 +104,16 @@
 $$($(2)_repo_PATH): $$($(2)_repo_GIT)
 
 $$($(2)_repo_GIT): $(REPOS_PACKAGE_GIT_PATH) repos-warning
-	@echo "  SUBMODULE    $$(subst $(__REPOS_GIT_SUBMODULE_STEM),,$$(@))"
-	$(NL_V_AT)if ! test -f $(__REPOS_GIT_MODULES_PATH); then \
-                touch $(REPOS_GIT_MODULES_SENTINEL); \
-        fi
-	$(NL_V_AT)$(GIT) -C $(top_srcdir) submodule -q add -f -b $$($(2)_repo_BRANCH) -- $$($(2)_repo_URL) $$($(2)_repo_PATH)
+	$(NL_V_AT)case "$(REPOS_PULL_METHOD)" in \
+	    submodule) echo "  SUBMODULE    $$(subst $(__REPOS_GIT_SUBMODULE_STEM),,$$(@))"; \
+		if ! test -f $(__REPOS_GIT_MODULES_PATH); then \
+			touch $(REPOS_GIT_MODULES_SENTINEL); \
+		fi; \
+		$(GIT) -C $(top_srcdir) submodule -q add -f -b $$($(2)_repo_BRANCH) -- $$($(2)_repo_URL) $$($(2)_repo_PATH);; \
+            clone) echo "  CLONE        $$(subst $(__REPOS_GIT_CLONE_STEM),,$$(@))"; \
+                $(GIT) -C $(top_srcdir) clone -q -b $$($(2)_repo_BRANCH) -- $$($(2)_repo_URL) $$($(2)_repo_PATH);; \
+            *) echo "$(REPOS_CONFIG): Unknown or unsupported pull method '$(REPOS_PULL_METHOD)'.";; \
+        esac
 	$(NL_V_AT)if ! test -z "$$($(2)_repo_COMMIT)"; then \
                 $(GIT) -C $$($(2)_repo_PATH) checkout -q $$($(2)_repo_COMMIT); \
         fi
@@ -132,20 +159,26 @@
 .PHONY: clean-repos-local
 clean-repos-local: clean-repos-hook
 	@echo "  CLEAN"
-	$(NL_V_AT)$(GIT) -C $(top_srcdir) submodule -q deinit -f -- $(REPO_PATHS) 2> /dev/null || true
-	$(NL_V_AT)if test -f $(REPOS_GIT_MODULES_SENTINEL); then \
-		$(RM) $(REPOS_GIT_MODULES_SENTINEL); \
-		$(GIT) -C $(top_srcdir) rm -f -q $(__REPOS_GIT_MODULES_PATH) 2> /dev/null; \
-        fi
-	$(NL_V_AT)if test -f $(REPOS_GIT_INIT_SENTINEL); then \
-		$(RM) -r $(dir $(REPOS_PACKAGE_GIT_PATH)); \
-		$(RM) $(REPOS_GIT_INIT_SENTINEL); \
-	fi
-	$(NL_V_AT)$(RM) $(REPOS_WARNING_SENTINEL)
-	$(NL_V_AT)$(GIT) -C $(top_srcdir) rm -rf -q --cached $(REPO_PATHS) 2> /dev/null || true
-	$(NL_V_AT)$(RM) -r $(addprefix $(top_srcdir)/,$(REPO_PATHS))
-	$(NL_V_AT)$(RMDIR) -p $(addprefix $(top_srcdir),$(dir $(REPO_PATHS))) 2> /dev/null || true
-	$(NL_V_AT)$(RM) -r $(REPO_CACHES) 2> /dev/null
+	$(NL_V_AT)case "$(REPOS_PULL_METHOD)" in \
+	    submodule) $(GIT) -C $(top_srcdir) submodule -q deinit -f -- $(REPO_PATHS) 2> /dev/null || true; \
+		if test -f $(REPOS_GIT_MODULES_SENTINEL); then \
+		    $(RM) $(REPOS_GIT_MODULES_SENTINEL); \
+		    $(GIT) -C $(top_srcdir) rm -f -q $(__REPOS_GIT_MODULES_PATH) 2> /dev/null; \
+		fi ; \
+		if test -f $(REPOS_GIT_INIT_SENTINEL); then \
+		    $(RM) -r $(dir $(REPOS_PACKAGE_GIT_PATH)); \
+		    $(RM) $(REPOS_GIT_INIT_SENTINEL); \
+		fi; \
+		$(RM) $(REPOS_WARNING_SENTINEL); \
+		$(GIT) -C $(top_srcdir) rm -rf -q --cached $(REPO_PATHS) 2> /dev/null || true; \
+		$(RM) -r $(addprefix $(top_srcdir)/,$(REPO_PATHS)); \
+		$(RMDIR) -p $(addprefix $(top_srcdir),$(dir $(REPO_PATHS))) 2> /dev/null || true; \
+		$(RM) -r $(REPO_CACHES) 2> /dev/null;; \
+	    clone) $(GIT) -C $(top_srcdir) rm -rf -q --cached $(REPO_PATHS) 2> /dev/null || true; \
+		$(RM) -r $(addprefix $(top_srcdir)/,$(REPO_PATHS)); \
+		$(RMDIR) -p $(addprefix $(top_srcdir),$(dir $(REPO_PATHS))) 2> /dev/null || true;; \
+            *) echo "$(REPOS_CONFIG): Unknown or unsupported pull method '$(REPOS_PULL_METHOD)'.";; \
+	esac
 
 .PHONY: clean-repos
 clean-repos: clean-repos-local
diff --git a/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak b/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak
index d3336a3..f45907e 100644
--- a/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak
+++ b/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak
@@ -1,4 +1,5 @@
 #
+#    Copyright 2018 Google LLC. All Rights Reserved.
 #    Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License");
@@ -73,3 +74,10 @@
 # Get the local path for a repo / submodule variable set in specified git config file <file>.
 
 nlGitGetPathForRepoFromNameFromFile   = $(call nlGitGetValueForRepoFromNameFromFile,$(1),$(2),path)
+
+# nlGitGetMethodForPullFromFile <file>
+#
+# Get the pull method set in specified git config file <file>.
+
+nlGitGetMethodForPullFromFile         = $(shell $(call nlGitGetConfigFromFileCommand,$(1)) 'pull.method')
+
diff --git a/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak b/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak
index dfc7df6..29f4b51 100644
--- a/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak
+++ b/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak
@@ -1,4 +1,5 @@
 #
+#    Copyright 2018 Google LLC. All Rights Reserved.
 #    Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +17,10 @@
 
 #
 #    Description:
-#      This file is a make "header" or pre make header that defines make
-#      convenience macros for interacting with and managing git submodules
-#      in the context of managing project dependencies.
+#      This file is a make "header" or pre make header that defines
+#      make convenience macros for interacting with and managing "foreign"
+#      (e.g., those outside of this project) git projects in the context of
+#      managing project dependencies.
 #
 
 # Third-party package repository configuration, if it exists, listing all