+\subsection{Command-line options}
+n%* *
+%************************************************************************
+
+When invoking external tools as part of the compilation pipeline, we
+pass these a sequence of options on the command-line. Rather than
+just using a list of Strings, we use a type that allows us to distinguish
+between filepaths and 'other stuff'. [The reason being, of course, that
+this type gives us a handle on transforming filenames, and filenames only,
+to whatever format they're expected to be on a particular platform.]
+
+\begin{code}
+data Option
+ = FileOption -- an entry that _contains_ filename(s) / filepaths.
+ String -- a non-filepath prefix that shouldn't be transformed (e.g., "/out="
+ String -- the filepath/filename portion
+ | Option String
+
+showOptions :: [Option] -> String
+showOptions ls = unwords (map (quote.showOpt) ls)
+ where
+ showOpt (FileOption pre f) = pre ++ dosifyPath f
+ showOpt (Option s) = s
+
+#if defined(mingw32_TARGET_OS)
+ quote "" = ""
+ quote s = "\"" ++ s ++ "\""
+#else
+ quote = id
+#endif
+
+\end{code}
+
+
+%************************************************************************
+%* *