#!/bin/bash
# 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.                                           * 

# set install prefix
if [ -z "$INSTALL_PREFIX" ]; then 
    export INSTALL_PREFIX=/tmp
fi
echo using INSTALL_PREFIX: $INSTALL_PREFIX

#
# download apr sources
#
download(){

rm -rf apr
mkdir apr
cd apr

# apr
svn export https://svn.apache.org/repos/asf/apr/apr/tags/1.4.8/ apr

#apr-util
svn export https://svn.apache.org/repos/asf/apr/apr-util/tags/1.5.2/ apr-util

# apr-iconv
svn export https://svn.apache.org/repos/asf/apr/apr-iconv/tags/1.2.1/ apr-iconv

cd ..
}

#
# build apr sources
#
build_apr(){
# build apr
cd apr/apr
mkdir linux
./buildconf
cd linux
../configure --prefix=$INSTALL_PREFIX/apr/1.4.8 CC="gcc"
make
make install
cd ../../..
}

build_apr_iconv(){
cd apr/apr-iconv
mkdir linux
./buildconf
cd linux
../configure --prefix=$INSTALL_PREFIX/apr/1.4.8 --with-apr=$INSTALL_PREFIX/apr/1.4.8 CC="gcc"
make
make install
}

download
build_apr
build_apr_iconv




