summaryrefslogblamecommitdiff
path: root/scripts/include/common.sh
blob: d446c1e455527d2abce90d3d68c7fb37ef7a88c6 (plain) (tree)
1
2
3
4
5
6
7
8
9

           


                             
                 


      






                                         



                                     





                                                                                    

                              
                      


                              
                      


                              
                      

      



                                                            
                  
                          
                  










                                                
                        
                                  
                                








                                                      
                  

                            
                  

 
                   
                                                         
                  


                               
                                                                               
                  


                              
                                                                               
                  


                  
                                                               
                  


                         



                                   
                  
                  

                         

                              
                  
               

 


                         
           



                  






                                                   
                        



                                   
                    
                  

                                                     
                  
               


                    



                                   
                    
                  

                                                                               
                  
               




                   
                  




                           
                  



                                  
                                      
                  



                                 
                                     
                  

 










                                                 

                                
                  





                                       
                  








                                       
                            
                  

 
                            








                                            
                                        
                                       
                                         
                                      



                                                 
                

 














                                                      
                      
                      












                                                         





                             

 
                             
                             


                         
                                
                                








                               
                      




                                   

                          
 































                                                                                      
#!/bin/bash

function check_error {
    if [ "$1" != 0 ]; then
        echo "Error detected"
        exit "$1"
    fi
}

function common_build_init {
    export dir=$(pwd)

    if [[ "${installname}" == "" ]]; then
        export installname=${package}
    fi

    if [[ "${envname}" == "" ]]; then
        export envname=${package}
    fi

    export srcdir=$(realpath "${dir}/../src/${package}")
    if [ ! -d "${srcdir}" ]; then
        echo "Error: Package sources directory not exists for package '${package}'."
        exit 3
    fi

    if [ ! -d "../env" ]; then
        mkdir -p "../env"
        check_error $?
    fi
    if [ ! -d "../bin" ]; then
        mkdir -p "../bin"
        check_error $?
    fi
    if [ ! -d "../tmp" ]; then
        mkdir -p "../tmp"
        check_error $?
    fi

    export builddir=$(realpath "${dir}/../tmp/${package}")
    export bindir=$(realpath "${dir}/../bin/${installname}")

    rm -rf "${builddir}"
    check_error $?
    mkdir -p "${builddir}"
    check_error $?
}

function common_package_init {
    export scriptsdir=$(realpath .)
    if [[ "${package}" == "" ]]; then
        echo "Error: Missing package name"
        echo "Example: ./build.sh virglrenderer"
        exit 1
    fi

    export packagefile="${package}.sh"
    export SRCTYPE="git"
    export DEFAULT_BRANCH="master"
    export AUTORECONF_FLAGS="-i"

    if [ ! -f "../packages/${packagefile}" ]; then
        echo "Error: Package '${package}' not exists."
        exit 2
    fi
}

function common_run_package {
    cd ../packages
    check_error $?
    echo "${package}.sh"
    source "./${package}.sh"
    check_error $?
}

function env_path {
    echo "export PATH=${bindir}/$1:\$PATH" >>"${envfile}"
    check_error $?
}

function env_lib_library_path {
    echo "export LD_LIBRARY_PATH=${bindir}/$1:\$LD_LIBRARY_PATH" >>"${envfile}"
    check_error $?
}

function env_pkg_config_path {
    echo "export PKG_CONFIG_PATH=${bindir}/$1:\$PKG_CONFIG_PATH" >>"${envfile}"
    check_error $?
}

function env_man {
    echo "export MANPATH=${bindir}/$1:\$MANPATH" >>"${envfile}"
    check_error $?
}

function run_autoreconf {
    flags="$*"
    if [[ "${flags}" == "" ]]; then
        flags="${AUTORECONF_FLAGS}"
    fi
    cd "${srcdir}"
    check_error $?
    echo "make distclean"
    make distclean
    echo "autoreconf ${flags}"
    autoreconf  ${flags}
    check_error $?
    unset flags
}

function run_src_script {
    cd "${srcdir}"
    check_error $?
    echo $*
    $*
    check_error $?
}

function run_enable_same_dir_build {
    echo "copy sources from $srcdir to ${builddir}"
    cp -r "$srcdir" "${builddir}/.."
    export srcdir="$builddir"
    echo "change src dir to $srcdir"
}

function run_configure {
    flags="$*"
    if [[ "${flags}" == "" ]]; then
        flags="${CONFIGURE_FLAGS}"
    fi
    cd "${builddir}"
    check_error $?
    echo "configure --prefix=\"${bindir}\" ${flags}"
    "$srcdir"/configure --prefix="${bindir}" ${flags}
    check_error $?
    unset flags
}

function run_cmake {
    flags="$*"
    if [[ "${flags}" == "" ]]; then
        flags="${CONFIGURE_FLAGS}"
    fi
    cd "${builddir}"
    check_error $?
    echo "cmake -DCMAKE_INSTALL_PREFIX:PATH=\"${bindir}\" \"$srcdir\" ${flags}"
    cmake -DCMAKE_INSTALL_PREFIX:PATH="${bindir}" "$srcdir" ${flags}
    check_error $?
    unset flags
}

function run_make {
    echo "make"
    make
    check_error $?
}

function run_make_install {
    echo "make install"
    make install
    check_error $?
}

function run_git_clone {
    echo "clone git repository $1"
    git clone "$1" "../src/${package}"
    check_error $?
}

function run_hg_clone {
    echo "clone hg repository $1"
    hg clone "$1" "../src/${package}"
    check_error $?
}

function run_clone {
    if [[ "${SRCTYPE}" == "git" ]]; then
        run_git_clone $1
    elif [[ "${SRCTYPE}" == "hg" ]]; then
        run_hg_clone $1
    else
        echo "Error: unknown SRCTYPE: ${SRCTYPE}"
        exit 1
    fi
}

function run_git_switch_branch {
    cd "${srcdir}"
    check_error $?

    if [[ "${srcbranch}" == "" ]]; then
        export srcbranch="$1"
    fi
    echo "git checkout ${srcbranch}"
    git checkout "${srcbranch}"
    check_error $?
}

function run_hg_switch_branch {
    cd "${srcdir}"

    if [[ "${srcbranch}" == "" ]]; then
        export srcbranch="$1"
    fi
    echo "hg update ${srcbranch}"
    hg update "${srcbranch}"
    check_error $?
}

function run_switch_branch {
    branch="$1"
    if [[ "${DEFAULT_BRANCH}" == "" ]]; then
        echo "Error: source branch not set."
        exit 1
    fi
    if [[ "${branch}" == "" ]]; then
        branch="${DEFAULT_BRANCH}"
    fi

    if [[ "${SRCTYPE}" == "git" ]]; then
        run_git_switch_branch ${branch}
    elif [[ "${SRCTYPE}" == "hg" ]]; then
        run_hg_switch_branch ${branch}
    else
        echo "Error: unknown SRCTYPE: ${SRCTYPE}"
        exit 1
    fi
    unset branch
}

function repack_paths {
    if [[ "$1" == "" ]]; then
        return
    fi
    IFS=":"
    packedpaths=""
    for var in $1
    do
        packedpaths="${packedpaths}${bindir}/$var:"
    done
    unset IFS
    echo "export $2=${packedpaths}\$$2" >>"${envfile}"
    check_error $?
}

function package_use {
    echo "package_use"
    repack_paths "$ENV_PATH" "PATH"
    repack_paths "$ENV_LD_LIBRARY_PATH" "LD_LIBRARY_PATH"
    repack_paths "$ENV_PKG_CONFIG_PATH" "PKG_CONFIG_PATH"
    repack_paths "$ENV_MANPATH" "MANPATH"
}

function common_use_package {
    cd "${scriptsdir}"
    check_error $?
    export envfile="../env/run${envname}.sh"
    echo "#!/bin/bash" >"${envfile}"
    check_error $?
    echo "" >>"${envfile}"
    package_use
    check_error $?
    echo "\$*" >>"${envfile}"
    check_error $?
    chmod 0755 "${envfile}"
    check_error $?
}

function package_get_source {
    echo "package_get_source"
    run_clone "${SRCURL}"
}

function package_update_source {
    echo "package_update_source"
    cd "../src/${package}"
    if [ -d .git ]; then
        echo "git fetch origin"
        git fetch origin
        return
    fi
    if [ -d .hg ]; then
        echo "hg pull"
        hg pull
        check_error $?
        return
    fi
}

function common_clean_destination {
    echo "clean ${bindir}"
    rm -rf "${bindir}"
}

function package_build {
    echo "package_build"
    run_switch_branch

    if [[ "$ENABLE_SAME_DIR_BUILD" != "" ]]; then
        run_enable_same_dir_build
    fi
    if [[ "$SRC_INIT_COMMAND" != "" ]]; then
        run_src_script "$SRC_INIT_COMMAND"
    fi

    case "$BUILD_TYPE" in
        automake)
            run_autoreconf
            run_configure
            ;;
        configure)
            run_configure
            ;;
        cmake)
            run_cmake
            ;;
        *)
            echo "Error: unknown BUILD_TYPE. Valid values: automake, configure, cmake"
            exit 1
            ;;
    esac

    run_make
    run_make_install
}