Using the svntest scripts                                 -*- Text -*-
=========================

1) Read the INSTALL (http://svn.collab.net/repos/svm/trunk/INSTALL)
   file, especially the sections about bootstrapping from a tarball
   and getting the latest APR-0.9, APR-UTIL-0.9 and httpd-2.0 sources.
   Check out and compile the latest Subversion. You could easily run
   svntest.sh against APR/APR-UTIL 1.0 and HTTPD 2.1 branches, just 
   checkout corresponding repositories, and edit svntest-config.sh.

2) Copy the svntest scripts from trunk/tools/test-scripts/svntest to
   somewhere outside the repository. Then read and modify
   svntest-config.sh to reflect your local installation. Take special
   care about program locations, program installation locations and
   e-mail addresses. The svn-breakage list has to be subscribed by the 
   same address that is put to FROM variable. Otherwise report emails
   will disappear to the black hole of the bits.

   Also notice that this test script will wipe out following paths
   during rebuilding:
   $INST_DIR/<proj_name>, ie. with present configuration the paths are: 
   /home/brane/svn/inst/{apr-0.9,apr-util-0.9,httpd-2.0,svn}

3) Create one or more scripts that configure Subversion in different
   ways (e.g., configure.shared, configure.static). Here's the script
   I'm using for static builds on Solaris 7:

    config.apr-0.9:
    #!/bin/sh

    "../apr-0.9/configure" \
    "--prefix=/home/brane/svn/inst/apr-0.9" \
    "--with-pic" \
    "$@"


    config.apr-util-0.9:
    #!/bin/sh

    "../apr-util-0.9/configure" \
    "--prefix=/home/brane/svn/inst/apr-util-0.9" \
    "--with-apr=/home/brane/svn/inst/apr-0.9" \
    "--with-pic" \
    "--with-dbm=db4" \
    "--with-berkeley-db" \
    "--with-expat=/usr" \
    "$@"


    config.httpd-2.0:
    #!/bin/sh
    
    CURR_WD="`pwd`"
    cd ../httpd-2.0

    "./buildconf" \
    "--with-apr=/home/brane/svn/apr-0.9" \
    "--with-apr-util=/home/brane/svn/apr-util-0.9"

    cd "$CURR_WD"

    "../httpd-2.0/configure" \
    "--prefix=/home/brane/svn/inst/httpd-2.0" \
    "--with-apr=/home/brane/svn/inst/apr-0.9/bin/apr-config" \
    "--with-apr-util=/home/brane/svn/inst/apr-util-0.9/bin/apu-config" \
    "--enable-dav" \
    "$@"
    
    
    config.solaris.static (for subversion):
    #!/bin/sh
    env CC='gcc' \
       "../svn/configure" \
       "--prefix=/home/brane/svn/inst" \
       "--with-berkeley-db=/home/brane/svn/db4" \
       "--with-apr=/home/brane/svn/inst/apr-0.9/bin/apr-config" \
       "--with-apr-util=/home/brane/svn/inst/apr-util-0.9/bin/apu-config" \
       "--with-apxs=/home/brane/svn/inst/httpd-2.0/bin/apxs" \
       "--disable-shared" \
       "$@"

   At the moment, svntest-rebuild.sh will only recognize shared and
   static build types, but you can easily change that. If you do, also
   change svntest.sh so that it tests all the different configurations.

4) Tailor your $HTTPD_NAME.conf (ie. httpd-2.0.conf) to suit 
   your needs, (easiest way to get a template for http-2.0.conf is 
   install Apache httpd at once, and after that copy installed httpd.conf, and
   edit it). Things to change are probably: 
   i)   Listen 127.0.0.1:42024
   ii)  LoadModule dav_svn_module     modules/mod_dav_svn.so
   iii) User brane
        Group brane
   v)   ServerName localhost:42024
   
   vi)  Add mod_dav_svn block:
    
    <IfModule mod_dav_svn.c>
        Include conf/mod_dav_svn.conf
    </IfModule>
           
   vii) mod_dav_svn_shared.conf for shared builds:
    <Location /repositories>
        DAV svn
        SVNParentPath /home/brane/svn/obj-sh/subversion/tests/clients/cmdline/repositories
    </Location>
    <Location /local_tmp/repos>
        DAV svn
        SVNPath      /home/brane/svn/obj-sh/subversion/tests/clients/cmdline/local_tmp/repos
    </Location>
    
   Don't ever thouch config files under $INST_DIR/$HTTPD_NAME/conf, they will be overwritten by
   the script.
   
5) Make sure your environment (e.g., LD_LIBRARY_PATH) is set correctly
   to find Berkeley DB, etc.

6) If you like run test against ramdisk (subversion test data will be held on ramdisk)
   then you should have something like that in your /etc/fstab (in Linux system):
   tmpfs           /home/brane/svn/obj-sh/subversion/tests tmpfs defaults,user,noauto,exec,size=600m
   tmpfs           /home/brane/svn/obj-st/subversion/tests tmpfs defaults,user,noauto,exec,size=600m

   The minimum required size for ramdisk is appr. 450MB at the moment.  
   You should also set RAMDISK=yes, and check mount_ramdisk and umount_ramdisk 
   in the svntes-config.sh file if your system is not GNU/Linux.
   See http://subversion.tigris.org/project_faq.html#ramdisk-tests for 
   further information.
   
7) Run svntest.sh to get the latest versions of ARP, APR-UTIL, HTTPPD and
   Subversion, build and test all the configurations. 

8) If you like force rebuilding of some component, you could do:
   echo "1" > $PROJ_REPO.rb, dependies are:
   apr-util depends on apr, and httpd depends on apr and apr-util.
   Any dependent project will be also rebuild.
   When you run this script first time, everything will be rebuild 
   automatically.

======================================================
Need more detailed instructions? Use the Source, Luke!
