<!--
 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.

-->
<document>

  <properties>
    <author email="log4j-dev@logging.apache.org">The Apache log4j team</author>
    <title>How to build Apache log4j</title>
  </properties>
  <body>
<section name="Building Apache log4j">

<h2>Introduction</h2>

<p>This is a detailed instruction to reproduce the log4j distribution
either to verify that the release is reproducable or to prepare
a hot-fix.</p>

<p>The log4j build is platform dependent. The best is to setup a VM using virtualbox (or similar),
install Ubuntu and follow the steps here.</p>

<h2>Preparation of environment</h2>

<h3>Install Sun Java 6</h3>
<pre>
$> sudo sed  's/restricted/restricted universe multiverse/' -i /etc/apt/sources.list
$> sudo apt-get update &amp;&amp; sudo apt-get -y update
$> sudo apt-get install openjdk-6-jdk
</pre>


<h3>Install Maven 2, Subversion, mingw and xemacs21, openssh-server:</h3>

<pre>
$> sudo apt-get install maven2 subversion mingw32 xemacs21 openssh-server
</pre>

<h3>Copy Win32 version of jni_md.h for NTEventLogAppender.dll</h3>

<pre>
c:\>cd "\Program Files\Java\jdk_1.6.0_16\include\win32
c:\>scp jni_md.h username@hostname:

$> export JNI_WIN32_INCLUDE_DIR=/home/username
</pre>

<h3>Signing &amp; Deploying</h3>

<p>Create a local ssh key with no passphrase to enable 
"deployment" of site back to the local machine using scp.</p>

<pre>
$> ssh-keygen
$> cd ~/.ssh
$> cat id_rsa.pub >> authorized_keys
$> ssh localhost
$> exit
</pre>

<p>It's important to add localhost and people.a.o to the list of permanent allowed hosts.
Besides the above, this should have been runned at least once:</p>

<pre>
$> ssh people.apache.org
</pre>

<p>If you intended to deploy jars to the repo or update the site,
you need to set up ssh to use private keys to access people.apache.org
and create or modify ~/.m2/settings.xml to specify user name and key location.
</p>

<pre>
&lt;settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
              http://maven.apache.org/xsd/settings-1.0.0.xsd"&gt;
   &lt;servers&gt;
    &lt;server&gt;
      &lt;id&gt;logging.repo&lt;/id&gt;
      &lt;username&gt;USERNAME for people.apache.org&lt;/username&gt;
      &lt;privateKey&gt;/home/username/.ssh/id_rsa&lt;/privateKey&gt;
      &lt;passphrase&gt;&lt;/passphrase&gt;
    &lt;/server&gt;
   &lt;/servers&gt;
&lt;/settings&gt;
</pre>

<p>You should test your ssh connection to people.apache.org 
and localhost before attempting a deployment like:</p>

<pre>
$ ssh -l USERNAME people.apache.org
$ ssh localhost
</pre>

<h2>Building release artifacts</h2>

<p>Before you build, please make sure you have a nonblocking editor set as SVN editor. Like:</p>

<pre>
$ export SVN_EDITOR=xemacs
</pre>

<p>Other checks:</p>

<ul>
    <li>Please make sure changes.xml reflect all fixed issues. The release date in changes is to be set
    to the date the release candidate is created.</li>
    <li>Please update doap_log4j.rdf to reflect the correct version. Use the same release date as in changes.</li>
</ul>
<p>The release artifacts were originally built by:</p>

<pre>
$> svn co http://svn.apache.org/repos/asf/logging/log4j/trunk log4j
$> cd log4j
$> mvn package release:prepare
$> mvn release:perform
</pre>

<p>Note: you'll be ask for a SVN tagname. Please use the following pattern: v1.2.17-RC1.</p>

<p>
Attention: this is an non-interactive build. In some cases it is necessary
to add: -Dusername=paouser -Dpassword=paopassword 
to the release plugin commands. This is surely not safe because your password
can be seen clearly. 
</p>

<p>The release artifacts can be rebuilt by:</p>

<pre>
$ mvn release:perform -DconnectionUrl=scm:svn:https://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_16
</pre>

<p>Building site and artifacts from a tag:</p>

<pre>
$ svn co https://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_16
$ cd v1_2_16
$ mvn site assembly:assembly
</pre>

<p>TODO: the following section describes site staging. This must be altered: the staging must not happen in SVN.</p>

<p>
The website content will automatically be staged to the ASF SVN repo by "mvn site-deploy".
This phase checks out https://svn.apache.org/repos/asf/logging/site/trunk/docs/log4j/1.2 
into target/site-deploy, copys the generated documentation to that directory using
scp to localhost and then commits the changed content.  You will be prompted for an
SVN commit message using the configured SVN_EDITOR.  A commit message must be entered or the
site commit will be aborted.
</p>

<p>
The staged content can be tested by opening 
http://svn.apache.org/repos/asf/logging/site/trunk/docs/1.2/index.html, 
however some links may be broken due to the staged location.  
The staged version can be published to the main public site by executing 
"svn update" in /www/logging.apache.org/log4j/1.2 on people.apache.org.
</p>

<h2>If a vote has failed</h2>
<ul>
    <li>Send a "cancel" note to the mailinglist (usually resend the vote mail with [CANCEL] in subject</li>
    <li>Delete the RC artifacts from:<pre>http://people.apache.org/builds/logging/repo/log4j/log4j/</pre></li>
</ul>



<h2>If a vote has passed</h2>

<p>If a RC has passed the vote, these steps are necessary:</p>

<p>Rename the tag:</p>
<pre>
$> svn mv https://svn.apache.org/repos/asf/logging/log4j/tags/log4j-1.2.17-RC1 https://svn.apache.org/repos/asf/logging/log4j/tags/log4j-1.2.17
</pre>

<p>Change the pom.xml version to the prior version number.</p>

</section>
</body>
</document>