~~ 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.
 ------
 Building Apache log4cxx with Apache Ant
 ------
 ------
 ------


Building Apache log4cxx with Apache Ant

   {{{http://ant.apache.org}Apache Ant}} with cpptasks from the 
   {{{http://ant-contrib.sourceforge.net}Ant-Contrib}} project can be used to build log4cxx
   with supported compilers and is also used to generate the IDE project files included
   in the releases.  The Apache Maven build which is used to generate the site documentation
   and release packaging delegates to this build.  The Ant build can build APR and APR-Util
   if source is available.

* Quick start:
  
  *Install {{{http://ant.apache.org}Apache Ant}} 1.6.5 or later.

  *Install cpptasks 1.0b5 or later from the {{{http://ant-contrib.sourceforge.net}Ant-Contrib Project}}.
     ant-contribs 1.0b3 or later is needed for some less frequent build targets.

  *Install APR and APR-Util or place source in apr and apr-util directories as a 
  sibling to the log4cxx directory.
        
   Building and testing log4cxx on a Unix platform with packaged APR and APR-Util.  

+----+
 sudo apt-get install libapr1.0-dev libaprutil1.0-dev \
      ant ant-optional liblog4j1.2-java
 export CLASSPATH=~/cpptasks/cpptasks-1.0b5.jar: \
      ~/ant-contrib/ant-contrib-1.0b3.jar
 cd apache-log4cxx-0.10.0
 ant
+----+  

   Building and testing log4cxx on a Unix platform with APR and APR-Util built from source.  

+----+
 sudo apt-get install ant ant-optional liblog4j1.2-java
 export CLASSPATH=~/cpptasks/cpptasks-1.0b5.jar: \
     ~/ant-contrib/ant-contrib-1.0b3.jar
 tar -xvzf apr-1.2.12.tar.gz
 mv apr-1.2.12 apr
 tar -xvzf apr-util-1.2.12.tar.gz
 mv apr-util-1.2.12 apr-util
 cd apache-log4cxx-0.10.0
 ant
+----+  

   Building and testing log4cxx on a Microsoft Windows with APR and APR-Util built from source.  

+----+
 set PATH=\apache-ant-1.7.0\bin;%PATH%
 set CLASSPATH=\cpptasks\cpptasks-1.0b5.jar;\ant-contrib\ant-contrib-1.0b3.jar
 tar -xvzf apr-1.2.12.tar.gz
 rename apr-1.2.12 apr
 tar -xvzf apr-util-1.2.12.tar.gz
 rename apr-util-1.2.12 apr-util
 cd apache-log4cxx-0.10.0
 ant -Dfind=false
+----+  





* Common ant targets

*-----------------------+---------------------------------------------------------------------------------------------+
| build                 | build log4cxx library.                                                                      |
*-----------------------+---------------------------------------------------------------------------------------------+
| check                 | build logcxx library and build and run unit tests and examples.                             |
*-----------------------+---------------------------------------------------------------------------------------------+
| clean                 | Delete all generated files.                                                                 |
*-----------------------+---------------------------------------------------------------------------------------------+
| build-unittest        | build log4cxx library and unit test.                                                        |
*-----------------------+---------------------------------------------------------------------------------------------+
| run-socketserver      | Tests SocketAppender with Java-based receiver.                                              |
*-----------------------+---------------------------------------------------------------------------------------------+
| build-projects-vc6    | Build Microsoft Visual Studio 6 project files.                                              |
*-----------------------+---------------------------------------------------------------------------------------------+
| build-projects-vc7    | Build Microsoft Visual Studio .NET project files.                                           |
*-----------------------+---------------------------------------------------------------------------------------------+
| build-projects-vc8    | Build Microsoft Visual Studio 2005 project files.                                           |
*-----------------------+---------------------------------------------------------------------------------------------+
| build-projects-vc9    | Build Microsoft Visual Studio 2008 project files.                                           |
*-----------------------+---------------------------------------------------------------------------------------------+
| build-projects-xcode  | Build Apple Xcode project files.                                                            |
*-----------------------+---------------------------------------------------------------------------------------------+

   All build products will be placed in the target subdirectory.  
   
   Project files should be generated after successfully building the library, however it is possible
   to generate Microsoft Visual Studio project files on other platforms.  The project
   files will typically be missing references to the Platform SDK libraries.
   The Maven project modifies the generated project files for release preparation.  Generation
   of Xcode projects from Microsoft Windows is not supported.


* ant options

*-------------------+---------------------------------------------------------------------------------------------+
| -Dcompiler        | Compiler, see cpptasks documentation for full list.                                         |
*-------------------+---------------------------------------------------------------------------------------------+
| -Ddebug           |  Build for debugging, yes (default), no.                                                    |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dfind            |  Attempt to locate compiled APR and APR-Util, yes (default), no.                            |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dwith-apr        | path to non-default location for APR.                                                       |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dwith-apr-util   | path to non-default location for APR-Util.                                                  |
*-------------------+---------------------------------------------------------------------------------------------+
| -Denable-wchar_t  | Enable wchar_t API methods, choice of yes (default), no.                                    |
*-------------------+---------------------------------------------------------------------------------------------+
| -Denable-unichar  | Enable UniChar API methods, choice of yes, no (default).                                    |
*-------------------+---------------------------------------------------------------------------------------------+
| -Denable-cfstring | Enable CFString API methods, requires Mac OS/X CoreFoundation, choice of yes, no (default). |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dwith-logchar    | Interal character representation, choice of utf-8 (default), wchar_t , unichar.             | 
*-------------------+---------------------------------------------------------------------------------------------+
| -Dwith-charset    | Exteral character encoding, choice of utf-8, iso-8859-1, usascii, ebcdic,  auto (default).  |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dwith-SMTP       | SMTP implementation for SMTPAppender, choice of libesmtp, no (default).                     |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dwith-ODBC       | OBDC implementation for ODBCAppender, choice of unixODBC, iODBC, Microsoft, no (default).   |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dlog4j.jar       | Path to log4j.jar for run-socketserver.                                                     |
*-------------------+---------------------------------------------------------------------------------------------+
| -Dprojects.dir    | Location for generated IDE projects.                                                        |
*-------------------+---------------------------------------------------------------------------------------------+
| -p                | Display available targets and quit.                                                         |
*-------------------+---------------------------------------------------------------------------------------------+

   SMTP and ODBC options can depend on libraries that 
   that have different licenses.
   You should review the corresponding licenses and understand
   the implications before redistribution.
   
   Properties may also be placed in a build.properties file in the log4cxx directory.

* Platform specific notes:

  ** Microsoft Windows

  A GNU sed command is required to be on the path to complete the unit tests.
  Cygwin's implementation is known to work.
  
  If -Dwith-SMTP=libesmtp is specified, the build will attempt to build
  libesmtp from source, unfortunately libesmtp depends on poll.h and will not build.
  
  APR 1.2.12 has a known issue that will prevent
  compilation with Visual Studio 6 unless a later Platform SDK is installed.
  See APR bug {{{http://issues.apache.org/bugzilla/show_bug.cgi?44327}44327}}.
  APR 1.2.11 and the corresponding APR-Util 1.2.10 will compile with Visual Studio 6.  

  
  *** Cygwin:
  
  gcc 3.x does not provide wchar_t support which needs to be explicitly disabled.
  The Win32 path to the APR libraries need to be provided (CYGWIN_HOME/lib) if compiling against an installed APR and APR-Util.
  
+-----+
cd apache-log4cxx-0.10.0
ant -Dos.family=cygwin -Dwith-apr=/cygwin/lib -Dwith-apr-util=/cygwin/lib \
   -Denable-wchar_t=0
+-----+  
    

  *** MinGW:

+----+
cd apache-log4cxx-0.10.0
path c:\mingw\bin;%PATH%
ant -Dcompiler=gcc -Dfind=false build-all
cd src\test\resources
set TOTO=wonderful
set key1=value1
set key2=value2
..\..\..\target\debug\shared\testsuite -v 
..\..\..\target\debug\shared\trivial
..\..\..\target\debug\shared\stream 
+----+

   Running "ant check" was observed to fail with unexpected exceptions
   in streamtestcase and datetimedateformattestcase.
   See {{{http://issues.apache.org/jira/browse/LOGCXX-244}LOGCXX-244}}.


  ** Mac OS/X:
  
  APR, APR-Util and iODBC are preinstalled in Mac OS/X.
  
  Site generation requires "doxygen" command on path which can be provided
  by installing Doxygen.app and then setting the path like:
  
+---+
setenv PATH /Applications/Doxygen.app/Contents/Resources:$PATH
+---+
  
