<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
 
  http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Fsc Task</title>
  </head>

<body>

    <h2>Fsc Task</h2>

    <h3><a name="description">Description</a></h3>

    <p>This task compiles F# source into executables or
    modules. The task requires fsc.exe on the execute path, unless it
    or an equivalent program is specified in the <tt>executable</tt>
    parameter </p>

    <p>All parameters are optional: <code>&lt;fsc/&gt;</code> should
    suffice to produce a debug build of all *.fs files. </p>

    <p>The task is a directory based task, so attributes like
    <tt>includes=&quot;**\/*.fs&quot;</tt> and
    <tt>excludes=&quot;broken.fs&quot;</tt> can be used to control the
    files pulled in. By default, all *.fs files from the project
    folder down are included in the command. When this happens the
    destFile -if not specified- is taken as the first file in the
    list, which may be somewhat hard to control. Specifying the output
    file with <tt>destfile</tt> is prudent. </p> </p>

    <p>Also, dependency checking only works if destfile is set. As
    with <code>&lt;csc&gt;</code> nested <tt>src</tt> filesets of
    source, reference filesets, definitions and resources can be
    provided. </p>

    <h3><a name="attributes">Parameters</a></h3>
    <table>
      <tr>
        <td valign="top" align="left">
          <b>Attribute</b>
        </td>
        <td valign="top" align="left">
          <b>Description</b>
        </td>
        <td valign="top" align="left">
          <b>Type</b>
        </td>
        <td valign="top" align="left">
          <b>Requirement</b>
        </td>
      </tr>
    
      <tr>
        <td valign="top" align="left">
          additionalmodules
        </td>
        <td valign="top" align="left">
          Semicolon separated list of modules to refer to.
        </td>
        <td valign="top" align="left">
          String
        </td>
        <td valign="top" align="left" rowspan="24">
          Optional
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          debug
        </td>
        <td valign="top" align="left">
          set the debug flag on or off.
        </td>
        <td valign="top" align="left">
          boolean
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          destdir
        </td>
        <td valign="top" align="left">
          Set the destination directory of files to be compiled.
        </td>
        <td valign="top" align="left">
          File
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          destfile
        </td>
        <td valign="top" align="left">
          Set the name of exe/library to create.
        </td>
        <td valign="top" align="left">
          File
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          executable
        </td>
        <td valign="top" align="left">
          set the name of the program, overriding the defaults. Can be
          used to set the full path to a program, or to switch to an
          alternate implementation of the command -provided they use
          the same command line arguments as the .NET framework
          edition
        </td>
        <td valign="top" align="left">
          String
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          extraoptions
        </td>
        <td valign="top" align="left">
          Any extra options which are not explicitly supported by this task.
        </td>
        <td valign="top" align="left">
          String
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          failonerror
        </td>
        <td valign="top" align="left">
          If true, fail on compilation errors.
        </td>
        <td valign="top" align="left">
          boolean
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          optimize
        </td>
        <td valign="top" align="left">
          If true, enables optimization flag.
        </td>
        <td valign="top" align="left">
          boolean
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          tailcalls
        </td>
        <td valign="top" align="left">
          Whether to enable tailcalls
        </td>
        <td valign="top" align="left">
          boolean, defaults to true
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          crossoptimize
        </td>
        <td valign="top" align="left">
          Whether to enable cross-module optimizations.
        </td>
        <td valign="top" align="left">
          boolean, defaults to false
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          standalone
        </td>
        <td valign="top" align="left">
          Whether to statically link the F# library and all referenced
          DLLs into the assembly.
        </td>
        <td valign="top" align="left">
          boolean, defaults to false
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          references
        </td>
        <td valign="top" align="left">
          Semicolon separated list of DLLs to refer to.
        </td>
        <td valign="top" align="left">
          String
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          srcdir
        </td>
        <td valign="top" align="left">
          Set the source directory of the files to be compiled.
        </td>
        <td valign="top" align="left">
          File
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          targettype
        </td>
        <td valign="top" align="left">
          set the target type to one of exe|library|module|winexe
        </td>
        <td valign="top" align="left">
          "exe", "library", "module", "winexe"
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          utf8output
        </td>
        <td valign="top" align="left">
          If true, require all compiler output to be in UTF8 format.
        </td>
        <td valign="top" align="left">
          boolean
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          warnlevel
        </td>
        <td valign="top" align="left">
          Level of warning currently between 1 and 4 with 4 being the
          strictest.
        </td>
        <td valign="top" align="left">
          int
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          win32icon
        </td>
        <td valign="top" align="left">
          Set the filename of icon to include.
        </td>
        <td valign="top" align="left">
          File
        </td>
      </tr>

      <tr>
        <td valign="top" align="left">
          win32res
        </td>
        <td valign="top" align="left">
          Sets the filename of a win32 resource (.RES) file to
          include. This is not a .NET resource, but what Windows is
          used to.
        </td>
        <td valign="top" align="left">
          File
        </td>
      </tr>

      <tr>
        <td valign="top">
          useresponsefile
        </td>
        <td valign="top">
          Sets whether a response file instead of a command line only
          invocation should be used.  Defaults to false but Ant will
          still use a response file if more than 64 command line
          arguments would be used.
        </td>
        <td valign="top">
          boolean
        </td>
      </tr>
    </table>

    <h3><a name="elements">Parameters as nested elements</a></h3>

    <h4>define (org.apache.ant.dotnet.compile..DotnetDefine)</h4>

    <p>add a define to the list of definitions</p>

    <h4>reference (org.apache.tools.ant.types.FileSet)</h4>

    <p>add a new reference fileset to the compilation</p>

    <h4>resource (org.apache.ant.dotnet.compile.DotnetResource)</h4>

    <p>link or embed a resource</p>

    <h4>src (org.apache.tools.ant.types.FileSet)</h4>

    <p>add a new source directory to the compile</p>

    <h3>Examples</h3>

<pre>&lt;fsc optimize=&quot;true&quot; debug=&quot;false&quot;
  warnLevel=&quot;4&quot; targetType=&quot;exe&quot; definitions=&quot;RELEASE&quot;
  excludes=&quot;src/unicode_class.fs&quot;
  destFile=&quot;NetApp.exe&quot; tailcalls=&quot;true&quot; &gt;
    &lt;reference file="${testCSC.dll}"/&gt;
    &lt;define name="RELEASE"/&gt;
    &lt;define name="DEBUG" if="debug.property"/&gt;
    &lt;define name="def3" unless="def2.property"/&gt;
&lt;/fsc&gt;
</pre>
</body>
</html>
