summaryrefslogblamecommitdiff
path: root/scripts/include/common.sh
blob: 2afe31c9b787b232657ed3f9ba26666c2aa75805 (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"

    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 {
    cd "${srcdir}"
    check_error $?
    echo "make distclean"
    make distclean
    echo "autoreconf $*"
    autoreconf $*
    check_error $?
}

function run_src_script {
    cd "${srcdir}"
    check_error $?
    $*
    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 {
    cd "${builddir}"
    check_error $?
    echo "configure --prefix=\"${bindir}\" $*"
    "$srcdir"/configure --prefix="${bindir}" $*
    check_error $?
}

function run_cmake {
    cd "${builddir}"
    check_error $?
    echo "cmake -DCMAKE_INSTALL_PREFIX:PATH=\"${bindir}\" \"$srcdir\" $*"
    cmake -DCMAKE_INSTALL_PREFIX:PATH="${bindir}" "$srcdir" $*
    check_error $?
}

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 {
    if [[ "${SRCTYPE}" == "git" ]]; then
        run_git_switch_branch $1
    elif [[ "${SRCTYPE}" == "hg" ]]; then
        run_hg_switch_branch $1
    else
        echo "Error: unknown SRCTYPE: ${SRCTYPE}"
        exit 1
    fi
}

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 {
    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}"
    echo "package_use"
    package_use
    check_error $?
    echo "\$*" >>"${envfile}"
    check_error $?
    chmod 0755 "${envfile}"
    check_error $?
}

function package_get_source {
    run_clone "${SRCURL}"
}

function 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}"
}