                        :dependencies {:evt-iface [:ex-sock :in-chan :status-chan]
                                       :event-loop {:interface :evt-iface
                                                    :ex-chan :ex-chan}
-                                      :ex-sock {:ctx :zmq-context}}}]
-      (cpt-dsl/build description defaults))))
+                                      :ex-sock {:ctx :zmq-context}}}
+          default-result (cpt-dsl/build description defaults)]
+      (if context
+        ;; Generally, callers will override
+        (assoc default-result :zmq-context context)
+        default-result))))

;;; Public

(s/defn build :- SystemMap
  ([description :- cpt-dsl/system-description
    options :- cpt-dsl/option-map]
   (cpt-dsl/build description options))
  ([description :- cpt-dsl/system-description]
   (build description {})))

(defn build-event-loop
  "For running as an integrated library inside the Renderer

At one point I thought I was really jumping the gun on this one.

It seems to make less sense under the system namespace, but
I'm not sure which alternatives make more sense."
  [{:keys [client-keys
           context
           ctx-thread-count  ; obsolete
           direction         ; obsolete
           event-loop-name
           server-key
           socket-type       ; obsolete
           url]
    :or {ctx-thread-count 1
         socket-type :dealer
