Blame autobuild/build-cmake-common.sh

Voldracarno Draconor bb9d74
#!/usr/bin/env bash
Voldracarno Draconor 1de9b5
#
Voldracarno Draconor 1de9b5
# This file is required by build-cmake.sh and shouldn't be called directly.
Voldracarno Draconor 1de9b5
# It contains the functions and variable definitions which are needed
Voldracarno Draconor 1de9b5
# for the build process.
Voldracarno Draconor bb9d74
Voldracarno Draconor 1de9b5
# Define standard build settings
Voldracarno Draconor 039108
build_mode="Debug"
Voldracarno Draconor 039108
make_jobs=1
Voldracarno Draconor 039108
print_build_settings_and_exit="false"
Voldracarno Draconor acb820
write_portable_run_code="true"
Voldracarno Draconor 1de9b5
synfigstudio_data_prefix=""
Voldracarno Draconor dbcff0
incremental_build="false"
Voldracarno Draconor d0285b
rerender_images="false"
Voldracarno Draconor 039108
Voldracarno Draconor bb9d74
# Define build dirs
Voldracarno Draconor 039108
cmake_debug_build_dir="_debug"
Voldracarno Draconor 039108
cmake_release_build_dir="_production"
Voldracarno Draconor 039108
cmake_build_dir="$cmake_debug_build_dir"
Voldracarno Draconor bb9d74
etl_build_dir="etl"
Voldracarno Draconor bb9d74
synfig_build_dir="synfig-core"
Voldracarno Draconor bb9d74
synfigstudio_build_dir="synfig-studio"
Voldracarno Draconor bb9d74
out_dir="out"
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
# Define commands
Voldracarno Draconor bb9d74
env_run_command="synfigstudio"
Voldracarno Draconor 1de9b5
make_build_command="make -j $make_jobs"
Voldracarno Draconor bb9d74
Voldracarno Draconor 5205e0
# Define cmake option strings
Voldracarno Draconor 5205e0
cmake_build_type_option="-DCMAKE_BUILD_TYPE=$build_mode"
Voldracarno Draconor 5205e0
cmake_prefix_option="-DCMAKE_PREFIX_PATH=${absolute_base_dir}/${cmake_build_dir}/${out_dir}"
Voldracarno Draconor 5205e0
cmake_install_prefix_option="-DCMAKE_INSTALL_PREFIX=${absolute_base_dir}/${cmake_build_dir}/${out_dir}"
Voldracarno Draconor 5205e0
cmake_cxxflags_option="-DCMAKE_CXX_FLAGS=-I ${absolute_base_dir}/${cmake_build_dir}/${out_dir}/include"
Voldracarno Draconor 5205e0
cmake_dataprefix_option=""
Voldracarno Draconor 5205e0
Voldracarno Draconor bb9d74
build_etl() {
Voldracarno Draconor bb9d74
    echo "Building ETL"
Voldracarno Draconor bb9d74
Voldracarno Draconor acb820
    # Navigate to target build dir
Voldracarno Draconor bb9d74
    cd ${absolute_base_dir}
Voldracarno Draconor bb9d74
    cd "./${cmake_build_dir}/${etl_build_dir}"
Voldracarno Draconor acb820
    
Voldracarno Draconor acb820
    # Configure, make and install
Voldracarno Draconor 5205e0
    cmake "$cmake_build_type_option" "$cmake_install_prefix_option" ../../ETL/ && $make_build_command && make install
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
    if [ $? -ne 0 ]
Voldracarno Draconor bb9d74
        then
Voldracarno Draconor bb9d74
            echo "Failed to build ETL"
Voldracarno Draconor bb9d74
            cd "$pwd_dir"
Voldracarno Draconor bb9d74
            exit
Voldracarno Draconor bb9d74
    fi
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
    cd ${absolute_base_dir}
Voldracarno Draconor bb9d74
    
Voldracarno Draconor bb9d74
    echo "Build ETL"
Voldracarno Draconor bb9d74
}
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
build_synfig_core() {
Voldracarno Draconor bb9d74
    echo "Building synfig-core"
Voldracarno Draconor bb9d74
Voldracarno Draconor acb820
    # Navigate to target build dir
Voldracarno Draconor bb9d74
    cd ${absolute_base_dir}
Voldracarno Draconor bb9d74
    cd "./${cmake_build_dir}/${synfig_build_dir}"
Voldracarno Draconor acb820
    
Voldracarno Draconor acb820
    # Configure, make and install
Voldracarno Draconor 5205e0
    cmake "$cmake_build_type_option" "$cmake_install_prefix_option" "$cmake_cxxflags_option" ../../synfig-core/ && $make_build_command && make install
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
    if [ $? -ne 0 ]
Voldracarno Draconor bb9d74
        then
Voldracarno Draconor bb9d74
            echo "Failed to build synfig-core"
Voldracarno Draconor bb9d74
            cd "$pwd_dir"
Voldracarno Draconor bb9d74
            exit
Voldracarno Draconor bb9d74
    fi
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
    cd ${absolute_base_dir}
Voldracarno Draconor bb9d74
    
Voldracarno Draconor bb9d74
    echo "Build synfig core"
Voldracarno Draconor bb9d74
}
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
build_synfig_studio() {
Voldracarno Draconor bb9d74
    echo "Building synfig-studio"
Voldracarno Draconor bb9d74
Voldracarno Draconor acb820
    # Navigate to target build dir
Voldracarno Draconor bb9d74
    cd ${absolute_base_dir}
Voldracarno Draconor bb9d74
    cd "./${cmake_build_dir}/${synfigstudio_build_dir}"
Voldracarno Draconor acb820
    
Voldracarno Draconor dbcff0
    # Configure make command
Voldracarno Draconor dbcff0
    synfig_studio_make_cmd="make build_images"
Voldracarno Draconor dbcff0
    
Voldracarno Draconor dbcff0
    # Don't rerender the images if incremental is activated
Voldracarno Draconor d0285b
    if [ "$incremental_build" == "true" ] && [ "$rerender_images" == "false" ]
Voldracarno Draconor dbcff0
        then
Voldracarno Draconor dbcff0
            synfig_studio_make_cmd="make synfigstudio"
Voldracarno Draconor dbcff0
    fi
Voldracarno Draconor dbcff0
    
Voldracarno Draconor d0285b
    # Configure, make, render images and install
Voldracarno Draconor dbcff0
    cmake "$cmake_build_type_option" "$cmake_prefix_option" "$cmake_install_prefix_option" "$cmake_cxxflags_option" "$cmake_dataprefix_option" ../../synfig-studio/ && $make_build_command && run_command_in_outenv "$synfig_studio_make_cmd" && make install
Voldracarno Draconor bb9d74
    
Voldracarno Draconor bb9d74
    if [ $? -ne 0 ]
Voldracarno Draconor bb9d74
        then
Voldracarno Draconor bb9d74
            echo "Failed to build synfig-studio"
Voldracarno Draconor bb9d74
            cd "$pwd_dir"
Voldracarno Draconor bb9d74
            exit
Voldracarno Draconor bb9d74
    fi
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
    echo "Build synfig-studio"
Voldracarno Draconor bb9d74
}
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
clean_build_dir() {
Voldracarno Draconor dbcff0
    if [ "$incremental_build" == "false" ]
Voldracarno Draconor dbcff0
        then
Voldracarno Draconor dbcff0
            echo "Removing old cmake build dir if exist"
Voldracarno Draconor bb9d74
Voldracarno Draconor dbcff0
            cd ${absolute_base_dir}
Voldracarno Draconor dbcff0
            rm -rf "./${cmake_build_dir}/"
Voldracarno Draconor dbcff0
            
Voldracarno Draconor dbcff0
            echo "Removed old cmake build dir"
Voldracarno Draconor dbcff0
    fi
Voldracarno Draconor bb9d74
}
Voldracarno Draconor bb9d74
Voldracarno Draconor bb9d74
gen_dir_structure() {
Voldracarno Draconor d0285b
    echo "Construct directory structure"
Voldracarno Draconor bb9d74
Voldracarno Draconor d0285b
    cd ${absolute_base_dir}
Voldracarno Draconor d0285b
    mkdir -p "./${cmake_build_dir}/${etl_build_dir}"
Voldracarno Draconor d0285b
    mkdir -p "./${cmake_build_dir}/${synfig_build_dir}"
Voldracarno Draconor d0285b
    mkdir -p "./${cmake_build_dir}/${synfigstudio_build_dir}"
Voldracarno Draconor d0285b
    mkdir -p "./${cmake_build_dir}/${out_dir}"
Voldracarno Draconor d0285b
    
Voldracarno Draconor d0285b
    echo "Constructed directory structure"
Voldracarno Draconor bb9d74
}
Voldracarno Draconor bb9d74
Voldracarno Draconor 5205e0
get_run_cmd_prefix() {
Voldracarno Draconor 5205e0
    echo "PATH=\"${absolute_base_dir}/${cmake_build_dir}/${out_dir}/bin:${PATH}\" LD_LIBRARY_PATH=\"${absolute_base_dir}/${cmake_build_dir}/${out_dir}/lib\" XDG_DATA_DIRS=\"${absolute_base_dir}/${cmake_build_dir}/${out_dir}/share:${XDG_DATA_DIRS}\""
Voldracarno Draconor 5205e0
}
Voldracarno Draconor 5205e0
Voldracarno Draconor 039108
parse_build_arguments() {
Voldracarno Draconor 039108
    make_jobs_parameter=$make_jobs
Voldracarno Draconor 039108
    
Voldracarno Draconor acb820
    ## Parse arguments and set variables (if an option was found)
Voldracarno Draconor 039108
    while [ "$1" != '' ]
Voldracarno Draconor 039108
        do
Voldracarno Draconor 039108
            [ $1 == "-d" ] && build_mode="Debug"
Voldracarno Draconor 039108
            [ $1 == "-r" ] && build_mode="Release"
Voldracarno Draconor 039108
            [ $1 == "-p" ] && print_build_settings_and_exit="true"
Voldracarno Draconor acb820
            [ $1 == "-n" ] && write_portable_run_code="false"
Voldracarno Draconor dbcff0
            [ $1 == "-i" ] && incremental_build="true"
Voldracarno Draconor d0285b
            [ $1 == "--rerender" ] && rerender_images="true"
Voldracarno Draconor 039108
            [ $1 == "-j" ] && make_jobs_parameter=$2 && shift
Voldracarno Draconor 5205e0
            [ $1 == "--data-prefix" ] && synfigstudio_data_prefix=$2 && shift
Voldracarno Draconor 039108
            shift
Voldracarno Draconor 039108
    done
Voldracarno Draconor 039108
    
Voldracarno Draconor 039108
    ## Set cmake build dir
Voldracarno Draconor 039108
    if [ "$build_mode" == "Debug" ]
Voldracarno Draconor 039108
        then
Voldracarno Draconor 039108
            cmake_build_dir="$cmake_debug_build_dir"
Voldracarno Draconor 039108
        else
Voldracarno Draconor 039108
            cmake_build_dir="$cmake_release_build_dir"
Voldracarno Draconor 039108
    fi
Voldracarno Draconor 039108
    
Voldracarno Draconor 5205e0
    # Reset values, which depends from the cmake build dir variable
Voldracarno Draconor 5205e0
    cmake_build_type_option="-DCMAKE_BUILD_TYPE=$build_mode"
Voldracarno Draconor 5205e0
    cmake_prefix_option="-DCMAKE_PREFIX_PATH=${absolute_base_dir}/${cmake_build_dir}/${out_dir}"
Voldracarno Draconor 5205e0
    cmake_install_prefix_option="-DCMAKE_INSTALL_PREFIX=${absolute_base_dir}/${cmake_build_dir}/${out_dir}"
Voldracarno Draconor 5205e0
    cmake_cxxflags_option="-DCMAKE_CXX_FLAGS=-I ${absolute_base_dir}/${cmake_build_dir}/${out_dir}/include"
Voldracarno Draconor 5205e0
    
Voldracarno Draconor 5205e0
    # Set cmake data prefix
Voldracarno Draconor 5205e0
    if [ ! $synfigstudio_data_prefix == "" ]
Voldracarno Draconor 5205e0
        then
Voldracarno Draconor a1a900
            cmake_dataprefix_option="-DDATA_PREFIX=${synfigstudio_data_prefix}"
Voldracarno Draconor 5205e0
    fi
Voldracarno Draconor 5205e0
    
Voldracarno Draconor 039108
    # Check for plausible values in the jobs parameter
Voldracarno Draconor 039108
    if [ $make_jobs_parameter -ge 1 ] || [ $make_jobs_parameter -le 999 ]
Voldracarno Draconor 039108
        then
Voldracarno Draconor 039108
            make_jobs=$make_jobs_parameter
Voldracarno Draconor 039108
    fi
Voldracarno Draconor 039108
    
Voldracarno Draconor acb820
    # Set custom make command
Voldracarno Draconor 039108
    make_build_command="make -j $make_jobs"
Voldracarno Draconor 039108
}
Voldracarno Draconor 039108
Voldracarno Draconor 039108
print_build_settings() {
Voldracarno Draconor 039108
    echo "Build mode: $build_mode"
Voldracarno Draconor 039108
    echo "Build dir: $cmake_build_dir"
Voldracarno Draconor 039108
    echo "Build jobs: $make_jobs"
Voldracarno Draconor dbcff0
    echo "Incremental build: $incremental_build"
Voldracarno Draconor 9d2365
    [ ! $synfigstudio_data_prefix == "" ] && echo "Custom data prefix: $synfigstudio_data_prefix"
Voldracarno Draconor 039108
    
luz.paz 99f3ef
    # If script was started with '-p' stop the script here
Voldracarno Draconor 039108
    if [ $print_build_settings_and_exit == "true" ]
Voldracarno Draconor 039108
        then
Voldracarno Draconor 039108
            exit
Voldracarno Draconor 039108
    fi
Voldracarno Draconor 039108
}
Voldracarno Draconor 039108
Voldracarno Draconor bb9d74
run_command_in_outenv() {
Voldracarno Draconor acb820
    # Check parameters count
Voldracarno Draconor bb9d74
    if [ "$#" -eq 1 ]
Voldracarno Draconor bb9d74
        then
Voldracarno Draconor bb9d74
            env_run_command="$1"
Voldracarno Draconor bb9d74
    fi
Voldracarno Draconor bb9d74
Voldracarno Draconor acb820
    # Set env and run command
Voldracarno Draconor acb820
    bash -c "export $(get_run_cmd_prefix) && $env_run_command"
Voldracarno Draconor acb820
}
Voldracarno Draconor acb820
Voldracarno Draconor acb820
write_portable_run_code() {
Voldracarno Draconor acb820
    # Only write, if it is enabled
Voldracarno Draconor acb820
    if [ $write_portable_run_code == "true" ]
Voldracarno Draconor acb820
        then
Voldracarno Draconor acb820
            # Navigate to out dir
Voldracarno Draconor acb820
            cd ${absolute_base_dir}
Voldracarno Draconor acb820
            cd "./${cmake_build_dir}/${out_dir}"
Voldracarno Draconor acb820
Voldracarno Draconor acb820
            file_name="run-portable.sh"
Voldracarno Draconor acb820
            filepath_write_target="./${file_name}"
Voldracarno Draconor acb820
            
Voldracarno Draconor acb820
            echo "Writing runcode to: ${absolute_base_dir}/${cmake_build_dir}/${out_dir}/${file_name}"
Voldracarno Draconor acb820
            
Voldracarno Draconor acb820
            # Define the bash script code, which runs Synfig Studio
Voldracarno Draconor acb820
            portable_run_code_line_01="#!/usr/bin/env bash"
Voldracarno Draconor acb820
            portable_run_code_line_02="# Usage:"
Voldracarno Draconor acb820
            portable_run_code_line_03="#   $filepath_write_target [command]"
Voldracarno Draconor acb820
            portable_run_code_line_04="#   or $filepath_write_target \"[command] [args]\""
Voldracarno Draconor acb820
            portable_run_code_line_05="#"
Voldracarno Draconor acb820
            portable_run_code_line_06="# Where:"
Voldracarno Draconor acb820
            portable_run_code_line_07="#   command = Command to exec in the out env (Default: \"synfigstudio\")"
Voldracarno Draconor acb820
            portable_run_code_line_08="#   args = Parameters passed to the command (Default: empty)"
Voldracarno Draconor acb820
            portable_run_code_line_09="# "
Voldracarno Draconor acb820
            portable_run_code_line_10="# Examples:"
Voldracarno Draconor acb820
            portable_run_code_line_11="#   Run Synfig Studio:"
Voldracarno Draconor acb820
            portable_run_code_line_12="#     $filepath_write_target"
Voldracarno Draconor acb820
            portable_run_code_line_13="#   Get help of the Synfig CLI program:"
Voldracarno Draconor acb820
            portable_run_code_line_14="#     $filepath_write_target \"synfig --help\""
Voldracarno Draconor acb820
            portable_run_code_line_15="#   Get bash env to use the Synfig tools directly"
Voldracarno Draconor acb820
            portable_run_code_line_16="#     $filepath_write_target bash"
Voldracarno Draconor acb820
            portable_run_code_line_17="#       Now you can type synfig or synfigstudio directly to run them"
Voldracarno Draconor acb820
            portable_run_code_line_18="#       You can type \"exit\" to end this session"
Voldracarno Draconor acb820
            portable_run_code_line_19=""
Voldracarno Draconor acb820
            portable_run_code_line_20="run_command_string=\"\$1\""
Voldracarno Draconor acb820
            portable_run_code_line_21="[ \"\$1\" == '' ] && run_command_string=synfigstudio"
Voldracarno Draconor acb820
            portable_run_code_line_22=""
Voldracarno Draconor acb820
            portable_run_code_line_23="$(get_run_cmd_prefix) \$run_command_string"
Voldracarno Draconor acb820
            portable_run_code_line_24=""
Voldracarno Draconor acb820
            
Voldracarno Draconor acb820
            # Write out the code (line by line).
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_01" > "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_02" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_03" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_04" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_05" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_06" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_07" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_08" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_09" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_10" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_11" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_12" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_13" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_14" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_15" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_16" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_17" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_18" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_19" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_20" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_21" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_22" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_23" >> "$filepath_write_target"
Voldracarno Draconor acb820
            echo -e "$portable_run_code_line_24" >> "$filepath_write_target"
Voldracarno Draconor acb820
            
Voldracarno Draconor acb820
            # Make the runscript executable
Voldracarno Draconor acb820
            chmod 755 "$filepath_write_target"
Voldracarno Draconor acb820
    fi
Voldracarno Draconor bb9d74
}