==== //depot/projects/docproj_nl/en_US.ISO8859-1/books/porters-handbook/book.sgml#49 - /home/rene/freebsd/p4/doc/en_US.ISO8859-1/books/porters-handbook/book.sgml ====
13604a13605,13693
>       <sect1 id="dads-clang">
> 	<title>Clang: new C/C++ compiler</title>
> 
> 	<para>A future version of &os; will likely have the Clang C/C++
> 	  compiler as its base compiler.  Some modifications to the Ports
> 	  Collection are necessary.  In general, these are <quote>write proper
> 	    ports</quote> and <quote>write proper source code</quote>.  More
> 	  specifically:</para>
> 
> 	<itemizedlist>
> 	  <listitem>
> 	    <para>Respect the <makevar>CC</makevar> and <makevar>CXX</makevar>
> 	      variables. Do not use any of the programs <filename>cc</filename>,
> 	      <filename>c99</filename>, <filename>gcc</filename>,
> 	      <filename>c++</filename>, or <filename>g++</filename> in a port
> 	      directly.</para>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>Respect <makevar>LD</makevar>, do not use
> 	      <filename>ld</filename> in a port directly.</para>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>Do not use <filename>cpp</filename> for reformatting manual
> 	      pages or shell scripts.  Try to use something more suitable
> 	      instead, possibly falling back to <makevar>CPP</makevar>.</para>
> 	      <!-- (rene) what about the C++ preprocessor? -->
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>Clang uses the gnu99 standard by default, while GCC uses the
> 	      gnu89 standard by default.  Therefore, if there are any linker
> 	      errors caused by the different semantics of
> 	      <literal>inline</literal>, compiler errors caused by the use of
> 	      reserved C99 keywords (i.e. restrict) or calls to unimplemented
> 	      ISO C99 math routines try to add <literal>USE_CSTD=gnu89</literal>
> 	      to the port <filename>Makefile</filename>.</para>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>The <literal>-traditional</literal> option is not supported,
> 	      so existing occurences have to be removed.  No concensus has yet
> 	      been reached on ports abusing this option to preserve white space
> 	      in text formatting.  Note that the Clang preprocessor does not
> 	      preserve white space.</para>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>Explicit type indication of variables must be used in
> 	      built-in assembler code.</para>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>The main function must be properly declared as:</para>
> 
> 	    <programlisting>int main(int argc, char **argv)</programlisting>
> 
> 	    <para>or, if there are no parameters, as:</para>
> 
> 	    <programlisting>int main(void)</programlisting>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>The maximum useable optimization level is 3.  Level 4 is
> 	      reserved for link-time optimization for the Clang backend.</para>
> 	  </listitem>
> 
> 	  <!--(rene) -I and -L belong to CONFIGURE_ENV, not to CFLAGS (?)-->
> 	</itemizedlist>
> 
> 	<para>Some temporary hacks that might be used if all else fails:</para>
> 
> 	<itemizedlist>
> 	  <listitem>
> 	    <para>Adding <literal>-fheinous-gnu-extensions</literal>.  Note
> 	      that this option is already deprecated.</para>
> 	  </listitem>
> 
> 	  <listitem>
> 	    <para>Reducing the warning level by adding
> 	      <literal>--diasable-werror</literal> or
> 	      <literal>--disable-strict</literal>, or by disabling
> 	      <literal>--warn-common</literal> or
> 	      <literal>-Werror</literal>.</para>
> 	  </listitem>
> 	</itemizedlist>
>       </sect1>
> 
