THRIFT-4676: Fix intermittent CL build failures
diff --git a/tutorial/cl/Makefile.am b/tutorial/cl/Makefile.am
index fb6e83a..2b2013a 100755
--- a/tutorial/cl/Makefile.am
+++ b/tutorial/cl/Makefile.am
@@ -15,19 +15,30 @@
 # KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+
+setup-local-lisp-env: ensure-externals.sh
+	bash ensure-externals.sh
 
 gen-cl: $(top_srcdir)/tutorial/tutorial.thrift
 	$(THRIFT) --gen cl -r $<
 
-TutorialServer: make-tutorial-server.lisp
+ALL_FILE_PREREQS = \
+		   load-locally.lisp \
+		   make-tutorial-server.lisp \
+		   make-tutorial-client.lisp \
+		   shared-implementation.lisp \
+		   thrift-tutorial.asd \
+		   tutorial-implementation.lisp
+
+# NOTE: the server and client cannot be built in parallel
+# because on loading the make-tutorial-* scripts SBCL will
+# attempt to compile their dependencies. Unfortunately,
+# because their dependencies are shared, parallel jobs can
+# end up overwriting or corrupting the compiled files
+all-local: gen-cl setup-local-lisp-env $(ALL_FILE_PREREQS)
 	$(SBCL) --script make-tutorial-server.lisp
-
-TutorialClient: make-tutorial-client.lisp
 	$(SBCL) --script make-tutorial-client.lisp
 
-all-local: gen-cl TutorialClient TutorialServer
-
 tutorialserver: all
 	./TutorialServer
 
@@ -35,9 +46,16 @@
 	./TutorialClient
 
 clean-local:
-	$(RM) -r gen-*
-	$(RM) TutorialServer
-	$(RM) TutorialClient
+	-$(RM) -r gen-*
+	-$(RM) -r externals
+	-$(RM) -r quicklisp
+	-$(RM) -r lib
+	-$(RM) quicklisp.lisp
+	-$(RM) backport-update.zip
+	-$(RM) shared-implementation.fasl
+	-$(RM) tutorial-implementation.fasl
+	-$(RM) TutorialServer
+	-$(RM) TutorialClient
 
 EXTRA_DIST = \
 	tutorial-implementation.lisp \