#!/bin/bash

set -x

root_dir=$PWD


init()
{	
	if [[ ! -z "$1" ]]
	then
		SRC_URL="$1"
	else
		SRC_URL=http://www.staroceans.org/
	fi
	[ ! -d "libS3" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/libs3-2.0/repo.git libS3
	[ ! -d "curl" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/curl-7.58.0/repo.git curl
	[ ! -d "myLibS3" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/myLibS3/repo.git  myLibS3
	[ ! -d "openssl" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/openssl/repo.git openssl
	[ ! -d "magic" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/file-5.32/repo.git magic
	[ ! -d "libxml2" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/libxml2/repo.git libxml2
	[ ! -d "zlib" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/zlib/repo.git zlib
	[ ! -d "micro_httpd" ] && GIT_SMART_HTTP=0 git clone ${SRC_URL}myprojects/micro_httpd/repo.git micro_httpd
}

build_openssl()
{
	cd ${root_dir}/openssl
	./Configure --prefix=${root_dir}/openssl-install no-shared linux-x86_64
	make
	make install
}

build_micro_httpd()
{
	[ ! -d ${root_dir}/magic-install ] || [ ! -d ${root_dir}/zlib-install ] \
	 && echo "micro_httpd depends on magic and zlib. build_magic build_zlib first" && exit
	cd ${root_dir}/micro_httpd
	make MAGIC_FLAGS="-DUSING_MAGIC -I${root_dir}/magic-install/include" \
	    MAGIC_LIBS="-L${root_dir}/magic-install/lib -lmagic -L${root_dir}/zlib-install -lz"
	
}

build_curl()
{
	[ ! -d ${root_dir}/openssl-install ] && echo "curl depends on openssl. build_openssl first" && exit
	cd ${root_dir}/curl
	./configure --prefix=${root_dir}/curl-install  --without-nss --with-ssl=${root_dir}/openssl-install \
	 --enable-libcurl-option --enable-shared=no --without-libidn2
	make
	make install
}

build_libxml2()
{
	[ ! -d ${root_dir}/zlib-install ] && echo "libxml2 depends on zlib. build_zlib first" && exit
	cd ${root_dir}/libxml2
	./configure --prefix=${root_dir}/libxml2-install  --with-zlib=${root_dir}/zlib-install --enable-static \
		--disable-shared
	make
	make install
}

build_libs3()
{
	[ ! -d ${root_dir}/openssl-install ] || [ ! -d ${root_dir}/curl-install ] || [ ! -d ${root_dir}/libxml2-install ] \
		&& echo "curl depends on openssl,curl,libxml2 build_openssl build_curl build_libxml2 first" && exit
	cd ${root_dir}/libS3
	make CURL_LIBS="-L${root_dir}/curl-install/lib -lcurl" \
		CURL_CFLAGS="-I${root_dir}/curl-install/include" \
	   OPENSSL_CFLAGS="-I${root_dir}/openssl-install/include" \
	   OPENSSL_LIBS="-L${root_dir}/openssl-install/lib -lssl -lcrypto" \
	   LIBXML2_CFLAGS="-I${root_dir}/libxml2-install/include/libxml2" \
	   LIBXML2_LIBS="-L${root_dir}/libxml2-install/lib -lxml2" static_only
}

build_zlib()
{
	cd ${root_dir}/zlib
	./configure --prefix=${root_dir}/zlib-install --static --64 
	make
	make install	
}

build_magic()
{
	cd ${root_dir}/magic
	aclocal
	autoconf
	./configure --prefix=${root_dir}/magic-install --enable-static --disable-shared
	make
	make install
}

build_mylibs3()
{
	[ ! -f ${root_dir}/libS3//build/lib/libs3.a ] && echo "myLibs3 depends on libS3, build_libs3 first" && exit
	cd ${root_dir}/myLibS3
	make
}

clean_all()
{
	cd ${root_dir}
	rm -fr zlib-install libxml2-install openssl-install curl-install magic-install
	make -C libS3 clean
	make -C libxml2 clean
	make -C zlib clean
	make -C openssl clean
	make -C curl clean
	make -C myLibS3 clean
	make -C magic clean
	make -C micro_httpd clean
}

build_all()
{
	build_openssl;
	build_curl;
	build_magic;
	build_zlib;
	build_libxml2;
	build_micro_httpd;
	build_libs3;
	build_mylibs3;
}

show_status()
{
	cd ${root_dir}/openssl && git status -uno 
	cd ${root_dir}/curl && git status -uno 
	cd ${root_dir}/magic && git status -uno
	cd ${root_dir}/zlib && git status -uno
	cd ${root_dir}/libxml2 && git status -uno
	cd ${root_dir}/micro_httpd && git status -uno
	cd ${root_dir}/libS3 && git status -uno
	cd ${root_dir}/myLibS3 && git status -uno
}

show_help()
{
	echo "usage: init              setup source"
	echo "usage: build_xxx         build xxx"
}

if [ $# -lt 1 ]; then
	echo "number of param: $#"
        show_help;
        exit
fi

case $1 in
init) 
	init $2;
	;;
build_openssl)
	build_openssl;
	;;
build_curl)
	build_curl;
	;;
build_libs3)
	build_libs3;
	;;
build_magic)
	build_magic;
	;;
build_mylibs3)
	build_mylibs3;
	;;
build_zlib)
	build_zlib;
	;;
build_libxml2)
	build_libxml2;
	;;
build_micro_httpd)	
	build_micro_httpd;
	;;
show_help)
	show_help;
	;;
clean_all)
	clean_all;
	;;
build_all)
	build_all;
	;;
show_status)
	show_status;
	;;		
*)
	echo "don't understand your parameter";
	show_help;	
esac	


