* builds/toplevel.mk: Use rules for handling 'dlg'.

Suggested by Alexei.

(check_out_submodule, copy_submodule): New targets.
<top-level>: Replace calls to `shell` with rules.
diff --git a/ChangeLog b/ChangeLog
index a191af7..cd4d7d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2021-02-16  Werner Lemberg  <wl@gnu.org>
 
+	* builds/toplevel.mk: Use rules for handling 'dlg'.
+
+	Suggested by Alexei.
+
+	(check_out_submodule, copy_submodule): New targets.
+	<top-level>: Replace calls to `shell` with rules.
+
+2021-02-16  Werner Lemberg  <wl@gnu.org>
+
 	* builds/toplevel.mk: Avoid side effects of `shell`.
 
 	We use a dummy variable to catch its output.  Otherwise the `make`
diff --git a/builds/toplevel.mk b/builds/toplevel.mk
index e9cb62d..d9de414 100644
--- a/builds/toplevel.mk
+++ b/builds/toplevel.mk
@@ -103,6 +103,22 @@
   check_platform := 1
 endif
 
+
+.PHONY: check_out_submodule copy_out_submodule
+
+check_out_submodule:
+	$(info Checking out submodule in `subprojects/dlg')
+	git submodule init
+	git submodule update
+
+copy_submodule:
+	$(info Copying files from `subprojects/dlg' to `src/dlg' and `include/dlg')
+	mkdir $(subst /,$(SEP),include/dlg) $(NO_OUTPUT)
+	$(COPY) $(subst /,$(SEP),subprojects/dlg/include/dlg/output.h include/dlg)
+	$(COPY) $(subst /,$(SEP),subprojects/dlg/include/dlg/dlg.h include/dlg)
+	$(COPY) $(subst /,$(SEP),subprojects/dlg/src/dlg/dlg.c src/dlg)
+
+
 # Include the automatic host platform detection rules when we need to
 # check the platform.
 #
@@ -117,19 +133,10 @@
   #
   ifeq ($(wildcard src/dlg/dlg.*),)
     ifeq ($(wildcard subprojects/dlg/*),)
-      $(info Checking out submodule in `subprojects/dlg')
-      dummy := $(shell git submodule init)
-      dummy := $(shell git submodule update)
+      copy_submodule: check_out_submodule
     endif
 
-    $(info Copying files from `subprojects/dlg' to `src/dlg' and `include/dlg')
-    dummy := $(shell mkdir $(subst /,$(SEP),include/dlg) $(NO_OUTPUT))
-    dummy := $(shell $(COPY) \
-      $(subst /,$(SEP),subprojects/dlg/include/dlg/output.h include/dlg))
-    dummy := $(shell $(COPY) \
-      $(subst /,$(SEP),subprojects/dlg/include/dlg/dlg.h include/dlg))
-    dummy := $(shell $(COPY) \
-      $(subst /,$(SEP),subprojects/dlg/src/dlg/dlg.c src/dlg))
+    setup: copy_submodule
   endif
 
   # This rule makes sense for Unix only to remove files created by a run of