remove empty dir
[ghc-hetmet.git] / ghc / docs / users_guide / separate_compilation.xml
index 97fe772..c33ff21 100644 (file)
     <sect2 id="source-files">
       <title>Haskell source files</title>
 
+      <indexterm><primary>filenames</primary></indexterm>
+
       <para>Each Haskell source module should be placed in a file on
       its own.</para>
 
-      <para>The file should usually be named after the module name, by
+      <para>Usually, the file should be named after the module name,
       replacing dots in the module name by directory separators.  For
       example, on a Unix system, the module <literal>A.B.C</literal>
       should be placed in the file <literal>A/B/C.hs</literal>,
-      relative to some base directory.  GHC's behaviour if this rule
-      is not followed is fully defined by the following section (<xref
-      linkend="output-files"/>).</para>
+      relative to some base directory.  If the module is not going to
+      be imported by another module (<literal>Main</literal>, for
+      example), then you are free to use any filename for it.</para>
+
+      <indexterm><primary>unicode</primary></indexterm>
+
+      <para> GHC assumes that source files are
+      ASCII<indexterm><primary>ASCII</primary></indexterm> or
+      UTF-8<indexterm><primary>UTF-8</primary></indexterm> only, other
+      encodings<indexterm><primary>encoding</primary></indexterm> are
+      not recognised.  However, invalid UTF-8 sequences will be
+      ignored in comments, so it is possible to use other encodings
+      such as
+      Latin-1<indexterm><primary>Latin-1</primary></indexterm>, as
+      long as the non-comment source code is ASCII only.</para>
     </sect2>
 
     <sect2 id="output-files">
@@ -55,8 +69,8 @@
       an <firstterm>interface file</firstterm>. </para>
 
       <para>The object file, which normally ends in a
-      <literal>.o</literal> suffix (or <literal>.obj</literal> if
-      you're on Windows), contains the compiled code for the module.</para>
+      <literal>.o</literal> suffix, contains the compiled code for the
+      module.</para>
 
       <para>The interface file,
       which normally ends in a <literal>.hi</literal> suffix, contains
           <filename>Main.hs</filename>, and put the resulting
           executable in <filename>foo.exe</filename> (not
           <filename>foo</filename>).</para>
+
+          <para>If you use <command>ghc --make</command> and you don't
+          use the <option>-o</option>, the name GHC will choose
+          for the executable will be based on the name of the file
+          containing the module <literal>Main</literal>. 
+          Note that with GHC the <literal>Main</literal> module doesn't
+          have to be put in file <filename>Main.hs</filename>.
+          Thus both
+<programlisting>
+   ghc --make Prog
+</programlisting>
+          and
+<programlisting>
+   ghc --make Prog.hs
+</programlisting>
+          will produce <filename>Prog</filename> (or
+          <filename>Prog.exe</filename> if you are on Windows).</para>
          </listitem>
        </varlistentry>
 
@@ -326,6 +357,23 @@ $ ghc -c parse/Foo.hs parse/Bar.hs gurgle/Bumble.hs -odir `arch`
 
        <varlistentry>
          <term>
+            <option>-stubdir</option>  <replaceable>dir</replaceable>
+            <indexterm><primary><option>-stubdir</option></primary></indexterm>
+          </term>
+         <listitem>
+           <para>Redirects all generated FFI stub files into
+           <replaceable>dir</replaceable>.  Stub files are generated when the
+           Haskell source contains a <literal>foreign export</literal> or
+           <literal>foreign import "&amp;wrapper"</literal> declaration (see <xref
+             linkend="foreign-export-ghc" />).  The <option>-stubdir</option>
+             option behaves in exactly the same way as <option>-odir</option>
+             and <option>-hidir</option> with respect to hierarchical
+           modules.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
             <option>-osuf</option> <replaceable>suffix</replaceable>
             <indexterm><primary><option>-osuf</option></primary></indexterm>
           </term>