Blame docker-builder-data/build/script/common/manager.sh

e14835
#!/bin/bash
e14835
e14835
# options
e14835
e14835
if [ -z "$PLATFORM" ]; then
e14835
	PLATFORM="linux-x64"
e14835
fi
e14835
export PLATFORM
e14835
e14835
if [ -z "$THREADS" ]; then
e14835
	THREADS=8
e14835
fi
e14835
export THREADS
e14835
e14835
e14835
# root
e14835
e7b20d
OLDDIR=`pwd`
e7b20d
ROOT_DIR=$(cd `dirname "$0"`; pwd)
e7b20d
cd "$OLDDIR"
e14835
ROOT_DIR=`dirname "$ROOT_DIR"`
e14835
ROOT_DIR=`dirname "$ROOT_DIR"`
e14835
export ROOT_DIR
e14835
e14835
# dirs
e14835
e14835
export SCRIPT_DIR=$ROOT_DIR/script
e14835
export COMMON_SCRIPT_DIR=$SCRIPT_DIR/common
e14835
export INCLUDE_SCRIPT_DIR=$SCRIPT_DIR/include
e14835
export PACKET_SCRIPT_DIR=$SCRIPT_DIR/packet
e14835
export PACKET_DIR=$ROOT_DIR/packet/$PLATFORM
e14835
dd482a
if [ ! -z $PACKET_BUILD_DIR ]; then
dd482a
	export PACKET_DIR=$PACKET_BUILD_DIR/$PLATFORM
dd482a
fi
dd482a
e14835
# vars
e14835
e14835
INITIAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
e14835
INITIAL_PATH=$PATH
e14835
INITIAL_LDFLAGS=$LDFLAGS
e14835
INITIAL_CFLAGS=$CFLAGS
e14835
INITIAL_CPPFLAGS=$CPPFLAGS
e14835
INITIAL_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
e14835
e14835
###################################
e14835
#
e14835
# Fairy Tale
e14835
# 
e14835
# Once upon time in faraway...
e14835
#
e14835
# Function dependency:
e14835
#
e14835
# 1. download 
e14835
#     |
e14835
# 2. unpack
e14835
#     |
e14835
#     | env^
e14835
#     |  |
e14835
# 3.  | envdeps  
e14835
#     |  |   |
e14835
# 4. build   |
e14835
#     |      |
e14835
# 5. install |
e14835
#     |    | |
e14835
# 6.  |    env
e14835
#     |    |
e14835
#     |    envdeps*
e14835
#     |
e14835
#     | env_release^
b0fa99
#     |  | 
b0fa99
# 7.  | envdeps_release
e14835
#     |  |
b0fa99
# 8. install_release
b0fa99
#     |
e14835
# 9. env_release
e14835
#     |
e14835
#    envdeps_release*
e14835
#
e14835
###################################
e14835
e14835
e14835
copy() {
e14835
	if [ -d "$1" ]; then
e14835
		if ! mkdir -p $2; then
e14835
			return 1
e14835
		fi
e14835
		if [ "$(ls -A $1)" ]; then
223f41
			if ! cp -rlfP $1/* "$2/"; then
e14835
				return 1
e14835
			fi
e14835
		fi
e14835
	elif [ -f "$1" ]; then
e14835
		if ! (mkdir -p `dirname $2` && cp -l "$1" "$2"); then
e14835
			return 1
e14835
		fi
e14835
	else
e14835
		return 1
e14835
	fi
e14835
}
e14835
e14835
message() {
e14835
    echo " ------ $1"
e14835
}
e14835
e14835
set_done() {
e14835
	touch "$PACKET_DIR/$1/$2.done"
e14835
}
e14835
e14835
set_undone_silent() {
dd482a
    rm -f $PACKET_DIR/$1/$2.*.done
e14835
	rm -f "$PACKET_DIR/$1/$2.done"
e14835
}
e14835
e14835
set_undone() {
e14835
	message "$1 set_undone $2"
e14835
	set_undone_silent $1 $2
e14835
}
e14835
e14835
clean_packet_directory_silent() {
e14835
    if [ ! -z "$DRY_RUN" ]; then
e14835
        return 0
e14835
    fi
e14835
	set_undone_silent $1 $2
dd482a
    rm -rf "$PACKET_DIR/$1/$2"
e14835
}
e14835
e14835
clean_packet_directory() {
e14835
	message "$1 clean $2"
e14835
	clean_packet_directory_silent $1 $2
e14835
}
e14835
e14835
check_packet_function() {
e14835
    if [ ! -f "$PACKET_DIR/$1/$2.done" ]; then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
prepare_build() {
e14835
    if ! copy "$UNPACK_PACKET_DIR" "$BUILD_PACKET_DIR"; then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
set_environment_vars() {
e14835
    export NAME=$1
e14835
e14835
    export CURRENT_PACKET_DIR=$PACKET_DIR/$NAME
e14835
	export FILES_PACKET_DIR=$PACKET_SCRIPT_DIR/$NAME.files
e14835
    export DOWNLOAD_PACKET_DIR=$CURRENT_PACKET_DIR/download
e14835
    export UNPACK_PACKET_DIR=$CURRENT_PACKET_DIR/unpack
e14835
    export ENVDEPS_PACKET_DIR=$CURRENT_PACKET_DIR/envdeps
e14835
    export BUILD_PACKET_DIR=$CURRENT_PACKET_DIR/build
e14835
    export INSTALL_PACKET_DIR=$CURRENT_PACKET_DIR/install
e14835
    export INSTALL_RELEASE_PACKET_DIR=$CURRENT_PACKET_DIR/install_release
e14835
    export ENV_PACKET_DIR=$CURRENT_PACKET_DIR/env
e14835
    export ENVDEPS_RELEASE_PACKET_DIR=$CURRENT_PACKET_DIR/envdeps_release
e14835
    export ENV_RELEASE_PACKET_DIR=$CURRENT_PACKET_DIR/env_release
e14835
e14835
    export LD_LIBRARY_PATH="$ENV_PACKET_DIR/lib:$ENV_PACKET_DIR/lib64:$ENVDEPS_PACKET_DIR/lib:$ENVDEPS_PACKET_DIR/lib64:$INITIAL_LD_LIBRARY_PATH"
e14835
    export PATH="$ENVDEPS_PACKET_DIR/bin:$INITIAL_PATH"
e14835
    export LDFLAGS="-L$ENVDEPS_PACKET_DIR/lib $INITIAL_LDFLAGS"
e14835
    export CFLAGS="-I$ENVDEPS_PACKET_DIR/include $INITIAL_CFLAGS"
e14835
    export CPPFLAGS="-I$ENVDEPS_PACKET_DIR/include $INITIAL_CPPFLAGS"
e14835
    export PKG_CONFIG_PATH="$ENVDEPS_PACKET_DIR/lib/pkgconfig:$INITIAL_PKG_CONFIG_PATH" 
e14835
}
e14835
e14835
call_packet_function() {
e14835
    local NAME=$1
e14835
    local FUNC=$2
e14835
    local PREPARE_FUNC=$3
e14835
    local FINALIZE_FUNC=$4
e14835
e14835
    set_environment_vars $NAME
e14835
e14835
    local FUNC_NAME=pk$FUNC
e14835
    local FUNC_CURRENT_PACKET_DIR=$CURRENT_PACKET_DIR/$FUNC
e14835
e14835
    message "$NAME $FUNC"
e14835
    if [ ! -z "$DRY_RUN" ]; then
e14835
        return 0
e14835
    fi
e14835
e14835
    set_undone_silent $NAME $FUNC
e14835
e14835
    mkdir -p $FUNC_CURRENT_PACKET_DIR
e14835
    cd $FUNC_CURRENT_PACKET_DIR
e14835
    
69b66f
	source $INCLUDE_SCRIPT_DIR/inc-pkall-none.sh
e14835
    source "$PACKET_SCRIPT_DIR/$NAME.sh"
e14835
    [ ! $? -eq 0 ] && return 1
e14835
e14835
    if [ ! -z "$PREPARE_FUNC" ]; then
e14835
        if ! "$PREPARE_FUNC"; then
e14835
            return 1
e14835
        fi
e14835
    fi
e14835
e14835
    if ! "$FUNC_NAME"; then
e14835
        return 1
e14835
    fi
e14835
e14835
    if [ ! -z "$FINALIZE_FUNC" ]; then
e14835
        if ! "$FINALIZE_FUNC"; then
e14835
            return 1
e14835
        fi
e14835
    fi
e14835
e14835
    set_done $NAME $FUNC
e14835
}
e14835
e14835
foreach_deps() {
e14835
    local NAME=$1
e14835
    local FUNC=$2
e14835
    local RECURSIVE=$3
e14835
    
e14835
    source $PACKET_SCRIPT_DIR/$NAME.sh
e14835
    [ ! $? -eq 0 ] && return 1
e14835
    
e14835
    local CURRENT_DEPS=$DEPS
e14835
    for DEP in $CURRENT_DEPS; do
e14835
        if [ ! -z "$DEP" ]; then
e14835
        	local DEP_LOCAL=$DEP 
e14835
        	if [ "$RECURSIVE" = "recursive" ]; then
e14835
        		if ! foreach_deps "$DEP_LOCAL" "$FUNC" "$RECURSIVE"; then
e14835
                	return 1
e14835
        		fi
e14835
        	fi
e14835
            if ! "$FUNC" "$DEP_LOCAL" "$NAME"; then
e14835
                return 1
e14835
            fi
e14835
        fi
e14835
	done
e14835
}
e14835
e14835
add_envdeps() {
e14835
	if ! copy "$PACKET_DIR/$1/env" "$PACKET_DIR/$2/envdeps"; then
e14835
	    return 1
e14835
	fi
e14835
}
e14835
e14835
add_envdeps_release() {
e14835
	if ! copy "$PACKET_DIR/$1/env_release" "$PACKET_DIR/$2/envdeps_release"; then
e14835
	    return 1
e14835
	fi
e14835
}
e14835
e14835
download() {
e14835
    if ! (check_packet_function $1 download || call_packet_function $1 download); then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
unpack() {
e14835
    if ! (check_packet_function $1 unpack || (download $1 && call_packet_function $1 unpack)); then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
envdeps() {
e14835
    if check_packet_function $1 envdeps; then
e14835
        return 0
e14835
    fi
e14835
e14835
    local NAME=$1
e14835
e14835
	if ! foreach_deps $NAME env; then
e14835
		return 1
e14835
	fi
e14835
e14835
    message "$NAME envdeps"
e14835
    
e14835
    if [ ! -z "$DRY_RUN" ]; then
e14835
    	return 0
e14835
    fi
e14835
e14835
    clean_packet_directory_silent $NAME envdeps
e14835
    mkdir -p "$PACKET_DIR/$NAME/envdeps"
e14835
	if ! foreach_deps $NAME add_envdeps; then
e14835
		return 1
e14835
	fi
e14835
	set_done $NAME envdeps
e14835
}
e14835
e14835
build() {
e14835
    if ! (check_packet_function $1 build || (envdeps $1 && unpack $1 && call_packet_function $1 build prepare_build)); then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
install() {
69b66f
    if ! (check_packet_function $1 install || (envdeps $1 && build $1 && call_packet_function $1 install)); then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
env() {
e14835
    if check_packet_function $1 env; then
e14835
        return 0
e14835
    fi
e14835
    
e14835
    local NAME=$1
e14835
    
b0fa99
    if ! (envdeps $1 && install $1); then
e14835
        return 1
e14835
    fi
e14835
e14835
    message "$NAME env"
e14835
    
e14835
    if [ ! -z "$DRY_RUN" ]; then
e14835
    	return 0
e14835
    fi
e14835
            
e14835
    clean_packet_directory_silent $NAME env
e14835
    mkdir -p "$PACKET_DIR/$NAME/env"
e14835
	if ! (copy "$PACKET_DIR/$NAME/envdeps" "$PACKET_DIR/$NAME/env" \
e14835
	&& copy "$PACKET_DIR/$NAME/install" "$PACKET_DIR/$NAME/env"); then
e14835
	    return 1
e14835
	fi
e14835
	set_done $NAME env
e14835
}
e14835
e14835
envdeps_release() {
e14835
    if check_packet_function $1 envdeps_release; then
e14835
        return 0
e14835
    fi
e14835
e14835
    local NAME=$1
e14835
e14835
	if ! foreach_deps $NAME env_release; then
e14835
		return 1
e14835
	fi
e14835
e14835
	message "$NAME envdeps_release"
e14835
e14835
    if [ ! -z "$DRY_RUN" ]; then
e14835
    	return 0
e14835
    fi
e14835
e14835
    clean_packet_directory_silent $NAME envdeps_release
e14835
    mkdir -p "$PACKET_DIR/$NAME/envdeps_release"
e14835
	if ! foreach_deps $NAME add_envdeps_release; then
e14835
		return 1
e14835
	fi
e14835
	set_done $NAME envdeps_release
e14835
}
e14835
b0fa99
install_release() {
b0fa99
    if ! (check_packet_function $1 install_release || (envdeps_release $1 && install $1 && call_packet_function $1 install_release)); then
b0fa99
        return 1
b0fa99
    fi
b0fa99
}
b0fa99
e14835
env_release() {
e14835
    if check_packet_function $1 env_release; then
e14835
        return 0
e14835
    fi
e14835
    
e14835
    local NAME=$1
e14835
    
b0fa99
    if ! (envdeps_release $1 && install_release $1); then
e14835
        return 1
e14835
    fi
e14835
e14835
	message "$NAME env_release"
e14835
e14835
    if [ ! -z "$DRY_RUN" ]; then
e14835
    	return 0
e14835
    fi
e14835
            
e14835
    clean_packet_directory_silent $NAME env_release
e14835
    mkdir -p "$PACKET_DIR/$NAME/env_release"
e14835
	if ! (copy "$PACKET_DIR/$NAME/envdeps_release" "$PACKET_DIR/$NAME/env_release" \
e14835
	&& copy "$PACKET_DIR/$NAME/install_release" "$PACKET_DIR/$NAME/env_release"); then
e14835
	    return 1
e14835
	fi
e14835
	set_done $NAME env_release
e14835
}
e14835
e14835
e14835
#############
e14835
e14835
clean_download() {
e14835
    clean_packet_directory $1 download
e14835
}
e14835
e14835
clean_unpack() {
e14835
    clean_packet_directory $1 download
e14835
}
e14835
e14835
clean_envdeps() {
e14835
    clean_packet_directory $1 envdeps
e14835
}
e14835
e14835
clean_build() {
e14835
    clean_packet_directory $1 build
e14835
}
e14835
e14835
clean_install() {
e14835
    clean_packet_directory $1 install
e14835
}
e14835
e14835
clean_env() {
e14835
    clean_packet_directory $1 env
e14835
}
e14835
e14835
clean_install_release() {
e14835
    clean_packet_directory $1 install_release
e14835
}
e14835
e14835
clean_envdeps_release() {
e14835
    clean_packet_directory $1 envdeps_release
e14835
}
e14835
e14835
clean_env_release() {
e14835
    clean_packet_directory $1 env_release
e14835
}
e14835
1dcb0e
clean_all_env() {
e14835
    clean_install $1
e14835
    clean_install_release $1
1dcb0e
    clean_envdeps $1
1dcb0e
    clean_env $1
e14835
    clean_envdeps_release $1
e14835
    clean_env_release $1
e14835
}
e14835
dd482a
clean_all_install() {
dd482a
    clean_build $1
1dcb0e
    clean_all_env $1
dd482a
}
dd482a
1dcb0e
clean_all_unpack() {
1dcb0e
    clean_download $1
1dcb0e
    clean_unpack $1
1dcb0e
}
1dcb0e
1dcb0e
clean() {
223f41
	message "$1 clean all"
223f41
    if [ ! -z "$DRY_RUN" ]; then
223f41
        return 0
223f41
    fi
223f41
    rm -rf "$PACKET_DIR/$1"
1cbd1f
}
1cbd1f
e14835
#############
e14835
e14835
set_undone_download() {
e14835
    set_undone $1 download
e14835
}
e14835
e14835
set_undone_unpack() {
e14835
    set_undone $1 download
e14835
}
e14835
e14835
set_undone_envdeps() {
e14835
    set_undone $1 envdeps
e14835
}
e14835
e14835
set_undone_build() {
e14835
    set_undone $1 build
e14835
}
e14835
e14835
set_undone_install() {
e14835
    set_undone $1 install
e14835
}
e14835
e14835
set_undone_env() {
e14835
    set_undone $1 env
e14835
}
e14835
e14835
set_undone_install_release() {
e14835
    set_undone $1 install_release
e14835
}
e14835
e14835
set_undone_envdeps_release() {
e14835
    set_undone $1 envdeps_release
e14835
}
e14835
e14835
set_undone_env_release() {
e14835
    set_undone $1 env_release
e14835
}
e14835
1dcb0e
set_undone_all_env() {
e14835
    set_undone_install $1
e14835
    set_undone_install_release $1
1dcb0e
    set_undone_envdeps $1
1dcb0e
    set_undone_env $1
e14835
    set_undone_envdeps_release $1
e14835
    set_undone_env_release $1
e14835
}
e14835
1dcb0e
set_undone_all_install() {
1dcb0e
    set_undone_build $1
1dcb0e
    set_undone_all_env $1
1dcb0e
}
1dcb0e
1dcb0e
set_undone_all_unpack() {
1dcb0e
    set_undone_download $1
1dcb0e
    set_undone_unpack $1
1dcb0e
}
1dcb0e
1dcb0e
set_undone_all() {
1dcb0e
	set_undone_all_unpack $1
1dcb0e
    set_undone_all_install $1
1dcb0e
}
1dcb0e
e14835
#############
e14835
e14835
with_deps() {
e14835
	if ! foreach_deps "$2" "$1" "recursive"; then
e14835
		return 1
e14835
	fi
e14835
    if ! "$1" "$2"; then
e14835
        return 1
e14835
    fi
e14835
}
e14835
e14835
shell() {
e14835
    set_environment_vars $1
e14835
    cd $PACKET_DIR/$1
223f41
    set -- "${@:2}"
223f41
    if [ -z "$@" ]; then
223f41
    	/bin/bash -i
223f41
	else
223f41
		"$@"
223f41
    fi
e14835
}
e14835
e14835
dry_run() {
e14835
    DRY_RUN=1
e14835
    "$@"
e14835
}
e14835
e14835
"$@"