mirror of
				https://git.code.sf.net/p/libpng/code.git
				synced 2025-07-10 18:04:09 +02:00 
			
		
		
		
	ci: Add ci.lib.ch; update ci_verify_*.sh accordingly
Move the common declarations and initializations from ci_verify_*.sh
to ci.lib.sh, and update them as follows:
 * Simplify the ci_ function names.
 * Refactor the CI_ variable names:
    - Add the new variable CI_TOPLEVEL_DIR.
    - Rename the variables CI_SCRIPTNAME, CI_SCRIPTDIR, etc.,
      to CI_SCRIPT_NAME, CI_SCRIPT_DIR, etc.
    - Rename the variables CI_SRCDIR_FROM_BUILDDIR, etc., to
      CI_BUILD_TO_SRC_RELDIR, etc.
 * Add new functions inside ci.lib.sh:
    - Replace ci_err with ci_err_usage, ci_err_fatal, ci_err_internal.
    - Add the new functions ci_warn and ci_assert.
 * Simplify the ci_ function names inside ci_verify_*.sh.
			
			
This commit is contained in:
		
							parent
							
								
									c741d1e392
								
							
						
					
					
						commit
						c0616f1017
					
				@ -10,37 +10,20 @@ set -e
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# SPDX-License-Identifier: BSL-1.0
 | 
					# SPDX-License-Identifier: BSL-1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CI_SCRIPTNAME="$(basename "$0")"
 | 
					source "$(dirname "$0")/lib/ci.lib.sh"
 | 
				
			||||||
CI_SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
 | 
					cd "$CI_TOPLEVEL_DIR"
 | 
				
			||||||
CI_SRCDIR="$(dirname "$CI_SCRIPTDIR")"
 | 
					
 | 
				
			||||||
CI_BUILDDIR="$CI_SRCDIR/out/ci_verify_cmake.build"
 | 
					CI_SRC_DIR="$CI_TOPLEVEL_DIR"
 | 
				
			||||||
CI_INSTALLDIR="$CI_SRCDIR/out/ci_verify_cmake.install"
 | 
					CI_BUILD_DIR="$CI_TOPLEVEL_DIR/out/ci_verify_cmake.build"
 | 
				
			||||||
 | 
					CI_INSTALL_DIR="$CI_TOPLEVEL_DIR/out/ci_verify_cmake.install"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Keep the following relative paths in sync with the absolute paths.
 | 
					# Keep the following relative paths in sync with the absolute paths.
 | 
				
			||||||
# We use them for the benefit of native Windows tools that might be
 | 
					# We use them for the benefit of native Windows tools that might be
 | 
				
			||||||
# otherwise confused by the path encoding used by Bash-on-Windows.
 | 
					# otherwise confused by the path encoding used by Bash-on-Windows.
 | 
				
			||||||
CI_SRCDIR_FROM_BUILDDIR="../.."
 | 
					CI_BUILD_TO_SRC_RELDIR="../.."
 | 
				
			||||||
CI_INSTALLDIR_FROM_BUILDDIR="../ci_verify_cmake.install"
 | 
					CI_BUILD_TO_INSTALL_RELDIR="../ci_verify_cmake.install"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_info {
 | 
					function ci_init_build {
 | 
				
			||||||
    printf >&2 "%s: %s\\n" "$CI_SCRIPTNAME" "$*"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_err {
 | 
					 | 
				
			||||||
    printf >&2 "%s: error: %s\\n" "$CI_SCRIPTNAME" "$*"
 | 
					 | 
				
			||||||
    exit 2
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_spawn {
 | 
					 | 
				
			||||||
    printf >&2 "%s: executing:" "$CI_SCRIPTNAME"
 | 
					 | 
				
			||||||
    printf >&2 " %q" "$@"
 | 
					 | 
				
			||||||
    printf >&2 "\\n"
 | 
					 | 
				
			||||||
    "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_init_cmake_build {
 | 
					 | 
				
			||||||
    CI_SYSTEM_NAME="$(uname -s)"
 | 
					 | 
				
			||||||
    CI_MACHINE_NAME="$(uname -m)"
 | 
					 | 
				
			||||||
    CI_CMAKE="${CI_CMAKE:-cmake}"
 | 
					    CI_CMAKE="${CI_CMAKE:-cmake}"
 | 
				
			||||||
    CI_CTEST="${CI_CTEST:-ctest}"
 | 
					    CI_CTEST="${CI_CTEST:-ctest}"
 | 
				
			||||||
    CI_CMAKE_BUILD_TYPE="${CI_CMAKE_BUILD_TYPE:-Release}"
 | 
					    CI_CMAKE_BUILD_TYPE="${CI_CMAKE_BUILD_TYPE:-Release}"
 | 
				
			||||||
@ -58,13 +41,13 @@ function ci_init_cmake_build {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_trace_cmake_build {
 | 
					function ci_trace_build {
 | 
				
			||||||
    ci_info "## START OF CONFIGURATION ##"
 | 
					    ci_info "## START OF CONFIGURATION ##"
 | 
				
			||||||
    ci_info "system name: $CI_SYSTEM_NAME"
 | 
					    ci_info "system name: $CI_SYSTEM_NAME"
 | 
				
			||||||
    ci_info "machine hardware name: $CI_MACHINE_NAME"
 | 
					    ci_info "machine hardware name: $CI_MACHINE_NAME"
 | 
				
			||||||
    ci_info "source directory: $CI_SRCDIR"
 | 
					    ci_info "source directory: $CI_SRC_DIR"
 | 
				
			||||||
    ci_info "build directory: $CI_BUILDDIR"
 | 
					    ci_info "build directory: $CI_BUILD_DIR"
 | 
				
			||||||
    ci_info "install directory: $CI_INSTALLDIR"
 | 
					    ci_info "install directory: $CI_INSTALL_DIR"
 | 
				
			||||||
    ci_info "environment option: \$CI_CMAKE: '$CI_CMAKE'"
 | 
					    ci_info "environment option: \$CI_CMAKE: '$CI_CMAKE'"
 | 
				
			||||||
    ci_info "environment option: \$CI_CMAKE_GENERATOR: '$CI_CMAKE_GENERATOR'"
 | 
					    ci_info "environment option: \$CI_CMAKE_GENERATOR: '$CI_CMAKE_GENERATOR'"
 | 
				
			||||||
    ci_info "environment option: \$CI_CMAKE_GENERATOR_PLATFORM: '$CI_CMAKE_GENERATOR_PLATFORM'"
 | 
					    ci_info "environment option: \$CI_CMAKE_GENERATOR_PLATFORM: '$CI_CMAKE_GENERATOR_PLATFORM'"
 | 
				
			||||||
@ -93,14 +76,17 @@ function ci_trace_cmake_build {
 | 
				
			|||||||
    ci_info "## END OF CONFIGURATION ##"
 | 
					    ci_info "## END OF CONFIGURATION ##"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_cleanup_old_cmake_build {
 | 
					function ci_cleanup_old_build {
 | 
				
			||||||
    [[ ! -e $CI_BUILDDIR ]] ||
 | 
					    if [[ -e $CI_BUILD_DIR || -e $CI_INSTALL_DIR ]]
 | 
				
			||||||
        ci_spawn rm -fr "$CI_BUILDDIR"
 | 
					    then
 | 
				
			||||||
    [[ ! -e $CI_INSTALLDIR ]] ||
 | 
					        ci_info "## START OF PRE-BUILD CLEANUP ##"
 | 
				
			||||||
        ci_spawn rm -fr "$CI_INSTALLDIR"
 | 
					        ci_spawn rm -fr "$CI_BUILD_DIR"
 | 
				
			||||||
 | 
					        ci_spawn rm -fr "$CI_INSTALL_DIR"
 | 
				
			||||||
 | 
					        ci_info "## END OF PRE-BUILD CLEANUP ##"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_build_cmake {
 | 
					function ci_build {
 | 
				
			||||||
    ci_info "## START OF BUILD ##"
 | 
					    ci_info "## START OF BUILD ##"
 | 
				
			||||||
    ci_spawn "$(command -v "$CI_CMAKE")" --version
 | 
					    ci_spawn "$(command -v "$CI_CMAKE")" --version
 | 
				
			||||||
    ci_spawn "$(command -v "$CI_CTEST")" --version
 | 
					    ci_spawn "$(command -v "$CI_CTEST")" --version
 | 
				
			||||||
@ -135,18 +121,16 @@ function ci_build_cmake {
 | 
				
			|||||||
    [[ $CI_CMAKE_GENERATOR_PLATFORM ]] &&
 | 
					    [[ $CI_CMAKE_GENERATOR_PLATFORM ]] &&
 | 
				
			||||||
        ci_spawn export CMAKE_GENERATOR_PLATFORM="$CI_CMAKE_GENERATOR_PLATFORM"
 | 
					        ci_spawn export CMAKE_GENERATOR_PLATFORM="$CI_CMAKE_GENERATOR_PLATFORM"
 | 
				
			||||||
    # Build and install.
 | 
					    # Build and install.
 | 
				
			||||||
    # Use $CI_SRCDIR_FROM_BUILDDIR and $CI_INSTALLDIR_FROM_BUILDDIR
 | 
					    # Use $CI_BUILD_TO_SRC_RELDIR and $CI_BUILD_TO_INSTALL_RELDIR
 | 
				
			||||||
    # instead of $CI_SRCDIR and $CI_INSTALLDIR from this point onwards.
 | 
					    # instead of $CI_SRC_DIR and $CI_INSTALL_DIR from this point onwards.
 | 
				
			||||||
    ci_spawn mkdir -p "$CI_BUILDDIR"
 | 
					    ci_spawn mkdir -p "$CI_BUILD_DIR"
 | 
				
			||||||
    ci_spawn cd "$CI_BUILDDIR"
 | 
					    ci_spawn cd "$CI_BUILD_DIR"
 | 
				
			||||||
    [[ $CI_SRCDIR -ef $CI_SRCDIR_FROM_BUILDDIR ]] ||
 | 
					    ci_assert "$CI_SRC_DIR" -ef "$CI_BUILD_TO_SRC_RELDIR"
 | 
				
			||||||
        ci_err "assertion failed: testing: '$CI_SRCDIR' -ef '$CI_SRCDIR_FROM_BUILDDIR'"
 | 
					    ci_spawn mkdir -p "$CI_INSTALL_DIR"
 | 
				
			||||||
    ci_spawn mkdir -p "$CI_INSTALLDIR"
 | 
					    ci_assert "$CI_INSTALL_DIR" -ef "$CI_BUILD_TO_INSTALL_RELDIR"
 | 
				
			||||||
    [[ $CI_INSTALLDIR -ef $CI_INSTALLDIR_FROM_BUILDDIR ]] ||
 | 
					    ci_spawn "$CI_CMAKE" -DCMAKE_INSTALL_PREFIX="$CI_BUILD_TO_INSTALL_RELDIR" \
 | 
				
			||||||
        ci_err "assertion failed: testing: '$CI_INSTALLDIR' -ef '$CI_INSTALLDIR_FROM_BUILDDIR'"
 | 
					 | 
				
			||||||
    ci_spawn "$CI_CMAKE" -DCMAKE_INSTALL_PREFIX="$CI_INSTALLDIR_FROM_BUILDDIR" \
 | 
					 | 
				
			||||||
                         "${ALL_CMAKE_VARS[@]}" \
 | 
					                         "${ALL_CMAKE_VARS[@]}" \
 | 
				
			||||||
                         "$CI_SRCDIR_FROM_BUILDDIR"
 | 
					                         "$CI_BUILD_TO_SRC_RELDIR"
 | 
				
			||||||
    ci_spawn "$CI_CMAKE" --build . \
 | 
					    ci_spawn "$CI_CMAKE" --build . \
 | 
				
			||||||
                         --config "$CI_CMAKE_BUILD_TYPE" \
 | 
					                         --config "$CI_CMAKE_BUILD_TYPE" \
 | 
				
			||||||
                         "${ALL_CMAKE_BUILD_FLAGS[@]}"
 | 
					                         "${ALL_CMAKE_BUILD_FLAGS[@]}"
 | 
				
			||||||
@ -169,12 +153,12 @@ function ci_build_cmake {
 | 
				
			|||||||
function main {
 | 
					function main {
 | 
				
			||||||
    [[ $# -eq 0 ]] || {
 | 
					    [[ $# -eq 0 ]] || {
 | 
				
			||||||
        ci_info "note: this program accepts environment options only"
 | 
					        ci_info "note: this program accepts environment options only"
 | 
				
			||||||
        ci_err "unexpected command arguments: '$*'"
 | 
					        ci_err "unsupported command argument: '$1'"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ci_init_cmake_build
 | 
					    ci_init_build
 | 
				
			||||||
    ci_trace_cmake_build
 | 
					    ci_trace_build
 | 
				
			||||||
    ci_cleanup_old_cmake_build
 | 
					    ci_cleanup_old_build
 | 
				
			||||||
    ci_build_cmake
 | 
					    ci_build
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main "$@"
 | 
					main "$@"
 | 
				
			||||||
 | 
				
			|||||||
@ -10,47 +10,30 @@ set -e
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# SPDX-License-Identifier: BSL-1.0
 | 
					# SPDX-License-Identifier: BSL-1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CI_SCRIPTNAME="$(basename "$0")"
 | 
					source "$(dirname "$0")/lib/ci.lib.sh"
 | 
				
			||||||
CI_SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
 | 
					cd "$CI_TOPLEVEL_DIR"
 | 
				
			||||||
CI_SRCDIR="$(dirname "$CI_SCRIPTDIR")"
 | 
					 | 
				
			||||||
CI_BUILDDIR="$CI_SRCDIR/out/ci_verify_configure.build"
 | 
					 | 
				
			||||||
CI_INSTALLDIR="$CI_SRCDIR/out/ci_verify_configure.install"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_info {
 | 
					CI_SRC_DIR="$CI_TOPLEVEL_DIR"
 | 
				
			||||||
    printf >&2 "%s: %s\\n" "$CI_SCRIPTNAME" "$*"
 | 
					CI_BUILD_DIR="$CI_TOPLEVEL_DIR/out/ci_verify_configure.build"
 | 
				
			||||||
}
 | 
					CI_INSTALL_DIR="$CI_TOPLEVEL_DIR/out/ci_verify_configure.install"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_err {
 | 
					function ci_init_build {
 | 
				
			||||||
    printf >&2 "%s: error: %s\\n" "$CI_SCRIPTNAME" "$*"
 | 
					 | 
				
			||||||
    exit 2
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_spawn {
 | 
					 | 
				
			||||||
    printf >&2 "%s: executing:" "$CI_SCRIPTNAME"
 | 
					 | 
				
			||||||
    printf >&2 " %q" "$@"
 | 
					 | 
				
			||||||
    printf >&2 "\\n"
 | 
					 | 
				
			||||||
    "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_init_configure_build {
 | 
					 | 
				
			||||||
    CI_SYSTEM_NAME="$(uname -s)"
 | 
					 | 
				
			||||||
    CI_MACHINE_NAME="$(uname -m)"
 | 
					 | 
				
			||||||
    CI_MAKE="${CI_MAKE:-make}"
 | 
					    CI_MAKE="${CI_MAKE:-make}"
 | 
				
			||||||
    # Set CI_CC to cc by default, if the cc command is available.
 | 
					    # Set CI_CC to cc by default, if the cc command is available.
 | 
				
			||||||
    # The configure script defaults CC to gcc, which is not always a good idea.
 | 
					    # The configure script defaults CC to gcc, which is not always a good idea.
 | 
				
			||||||
    [[ -x $(command -v cc) ]] && CI_CC="${CI_CC:-cc}"
 | 
					    [[ -x $(command -v cc) ]] && CI_CC="${CI_CC:-cc}"
 | 
				
			||||||
    # Ensure that the CI_ variables that cannot be customized reliably are not initialized.
 | 
					    # Ensure that the CI_ variables that cannot be customized reliably are not initialized.
 | 
				
			||||||
    [[ ! $CI_CONFIGURE_VARS ]] || ci_err "unexpected: \$CI_CONFIGURE_VARS='$CI_CONFIGURE_VARS'"
 | 
					    [[ ! $CI_CONFIGURE_VARS ]] || ci_err "unsupported: \$CI_CONFIGURE_VARS='$CI_CONFIGURE_VARS'"
 | 
				
			||||||
    [[ ! $CI_MAKE_VARS ]] || ci_err "unexpected: \$CI_MAKE_VARS='$CI_MAKE_VARS'"
 | 
					    [[ ! $CI_MAKE_VARS ]] || ci_err "unsupported: \$CI_MAKE_VARS='$CI_MAKE_VARS'"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_trace_configure_build {
 | 
					function ci_trace_build {
 | 
				
			||||||
    ci_info "## START OF CONFIGURATION ##"
 | 
					    ci_info "## START OF CONFIGURATION ##"
 | 
				
			||||||
    ci_info "system name: $CI_SYSTEM_NAME"
 | 
					    ci_info "system name: $CI_SYSTEM_NAME"
 | 
				
			||||||
    ci_info "machine hardware name: $CI_MACHINE_NAME"
 | 
					    ci_info "machine hardware name: $CI_MACHINE_NAME"
 | 
				
			||||||
    ci_info "source directory: $CI_SRCDIR"
 | 
					    ci_info "source directory: $CI_SRC_DIR"
 | 
				
			||||||
    ci_info "build directory: $CI_BUILDDIR"
 | 
					    ci_info "build directory: $CI_BUILD_DIR"
 | 
				
			||||||
    ci_info "install directory: $CI_INSTALLDIR"
 | 
					    ci_info "install directory: $CI_INSTALL_DIR"
 | 
				
			||||||
    ci_info "environment option: \$CI_CONFIGURE_FLAGS: '$CI_CONFIGURE_FLAGS'"
 | 
					    ci_info "environment option: \$CI_CONFIGURE_FLAGS: '$CI_CONFIGURE_FLAGS'"
 | 
				
			||||||
    ci_info "environment option: \$CI_MAKE: '$CI_MAKE'"
 | 
					    ci_info "environment option: \$CI_MAKE: '$CI_MAKE'"
 | 
				
			||||||
    ci_info "environment option: \$CI_MAKE_FLAGS: '$CI_MAKE_FLAGS'"
 | 
					    ci_info "environment option: \$CI_MAKE_FLAGS: '$CI_MAKE_FLAGS'"
 | 
				
			||||||
@ -80,14 +63,17 @@ function ci_trace_configure_build {
 | 
				
			|||||||
    ci_info "## END OF CONFIGURATION ##"
 | 
					    ci_info "## END OF CONFIGURATION ##"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_cleanup_old_configure_build {
 | 
					function ci_cleanup_old_build {
 | 
				
			||||||
    [[ ! -e $CI_BUILDDIR ]] ||
 | 
					    if [[ -e $CI_BUILD_DIR || -e $CI_INSTALL_DIR ]]
 | 
				
			||||||
        ci_spawn rm -fr "$CI_BUILDDIR"
 | 
					    then
 | 
				
			||||||
    [[ ! -e $CI_INSTALLDIR ]] ||
 | 
					        ci_info "## START OF PRE-BUILD CLEANUP ##"
 | 
				
			||||||
        ci_spawn rm -fr "$CI_INSTALLDIR"
 | 
					        ci_spawn rm -fr "$CI_BUILD_DIR"
 | 
				
			||||||
 | 
					        ci_spawn rm -fr "$CI_INSTALL_DIR"
 | 
				
			||||||
 | 
					        ci_info "## END OF PRE-BUILD CLEANUP ##"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_build_configure {
 | 
					function ci_build {
 | 
				
			||||||
    ci_info "## START OF BUILD ##"
 | 
					    ci_info "## START OF BUILD ##"
 | 
				
			||||||
    # Export the configure build environment.
 | 
					    # Export the configure build environment.
 | 
				
			||||||
    [[ $CI_CC ]] && ci_spawn export CC="$CI_CC"
 | 
					    [[ $CI_CC ]] && ci_spawn export CC="$CI_CC"
 | 
				
			||||||
@ -103,9 +89,9 @@ function ci_build_configure {
 | 
				
			|||||||
        ci_spawn export LDFLAGS="-fsanitize=$CI_SANITIZERS $LDFLAGS"
 | 
					        ci_spawn export LDFLAGS="-fsanitize=$CI_SANITIZERS $LDFLAGS"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    # Build and install.
 | 
					    # Build and install.
 | 
				
			||||||
    ci_spawn mkdir -p "$CI_BUILDDIR"
 | 
					    ci_spawn mkdir -p "$CI_BUILD_DIR"
 | 
				
			||||||
    ci_spawn cd "$CI_BUILDDIR"
 | 
					    ci_spawn cd "$CI_BUILD_DIR"
 | 
				
			||||||
    ci_spawn "$CI_SRCDIR/configure" --prefix="$CI_INSTALLDIR" $CI_CONFIGURE_FLAGS
 | 
					    ci_spawn "$CI_SRC_DIR/configure" --prefix="$CI_INSTALL_DIR" $CI_CONFIGURE_FLAGS
 | 
				
			||||||
    ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS
 | 
					    ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS
 | 
				
			||||||
    [[ $CI_NO_TEST ]] || ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS test
 | 
					    [[ $CI_NO_TEST ]] || ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS test
 | 
				
			||||||
    [[ $CI_NO_INSTALL ]] || ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS install
 | 
					    [[ $CI_NO_INSTALL ]] || ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS install
 | 
				
			||||||
@ -117,12 +103,12 @@ function ci_build_configure {
 | 
				
			|||||||
function main {
 | 
					function main {
 | 
				
			||||||
    [[ $# -eq 0 ]] || {
 | 
					    [[ $# -eq 0 ]] || {
 | 
				
			||||||
        ci_info "note: this program accepts environment options only"
 | 
					        ci_info "note: this program accepts environment options only"
 | 
				
			||||||
        ci_err "unexpected command arguments: '$*'"
 | 
					        ci_err "unsupported command argument: '$1'"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ci_init_configure_build
 | 
					    ci_init_build
 | 
				
			||||||
    ci_trace_configure_build
 | 
					    ci_trace_build
 | 
				
			||||||
    ci_cleanup_old_configure_build
 | 
					    ci_cleanup_old_build
 | 
				
			||||||
    ci_build_configure
 | 
					    ci_build
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main "$@"
 | 
					main "$@"
 | 
				
			||||||
 | 
				
			|||||||
@ -10,29 +10,12 @@ set -e
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# SPDX-License-Identifier: BSL-1.0
 | 
					# SPDX-License-Identifier: BSL-1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CI_SCRIPTNAME="$(basename "$0")"
 | 
					source "$(dirname "$0")/lib/ci.lib.sh"
 | 
				
			||||||
CI_SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
 | 
					cd "$CI_TOPLEVEL_DIR"
 | 
				
			||||||
CI_SRCDIR="$(dirname "$CI_SCRIPTDIR")"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_info {
 | 
					CI_SRC_DIR="$CI_TOPLEVEL_DIR"
 | 
				
			||||||
    printf >&2 "%s: %s\\n" "$CI_SCRIPTNAME" "$*"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_err {
 | 
					function ci_init_build {
 | 
				
			||||||
    printf >&2 "%s: error: %s\\n" "$CI_SCRIPTNAME" "$*"
 | 
					 | 
				
			||||||
    exit 2
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_spawn {
 | 
					 | 
				
			||||||
    printf >&2 "%s: executing:" "$CI_SCRIPTNAME"
 | 
					 | 
				
			||||||
    printf >&2 " %q" "$@"
 | 
					 | 
				
			||||||
    printf >&2 "\\n"
 | 
					 | 
				
			||||||
    "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function ci_init_makefiles_build {
 | 
					 | 
				
			||||||
    CI_SYSTEM_NAME="$(uname -s)"
 | 
					 | 
				
			||||||
    CI_MACHINE_NAME="$(uname -m)"
 | 
					 | 
				
			||||||
    CI_MAKE="${CI_MAKE:-make}"
 | 
					    CI_MAKE="${CI_MAKE:-make}"
 | 
				
			||||||
    case "$CI_CC" in
 | 
					    case "$CI_CC" in
 | 
				
			||||||
    ( *clang* )
 | 
					    ( *clang* )
 | 
				
			||||||
@ -44,11 +27,11 @@ function ci_init_makefiles_build {
 | 
				
			|||||||
    esac
 | 
					    esac
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_trace_makefiles_build {
 | 
					function ci_trace_build {
 | 
				
			||||||
    ci_info "## START OF CONFIGURATION ##"
 | 
					    ci_info "## START OF CONFIGURATION ##"
 | 
				
			||||||
    ci_info "system name: $CI_SYSTEM_NAME"
 | 
					    ci_info "system name: $CI_SYSTEM_NAME"
 | 
				
			||||||
    ci_info "machine hardware name: $CI_MACHINE_NAME"
 | 
					    ci_info "machine hardware name: $CI_MACHINE_NAME"
 | 
				
			||||||
    ci_info "source directory: $CI_SRCDIR"
 | 
					    ci_info "source directory: $CI_SRC_DIR"
 | 
				
			||||||
    ci_info "environment option: \$CI_MAKEFILES: '$CI_MAKEFILES'"
 | 
					    ci_info "environment option: \$CI_MAKEFILES: '$CI_MAKEFILES'"
 | 
				
			||||||
    ci_info "environment option: \$CI_MAKE: '$CI_MAKE'"
 | 
					    ci_info "environment option: \$CI_MAKE: '$CI_MAKE'"
 | 
				
			||||||
    ci_info "environment option: \$CI_MAKE_FLAGS: '$CI_MAKE_FLAGS'"
 | 
					    ci_info "environment option: \$CI_MAKE_FLAGS: '$CI_MAKE_FLAGS'"
 | 
				
			||||||
@ -79,20 +62,24 @@ function ci_trace_makefiles_build {
 | 
				
			|||||||
    ci_info "## END OF CONFIGURATION ##"
 | 
					    ci_info "## END OF CONFIGURATION ##"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_cleanup_old_makefiles_build {
 | 
					function ci_cleanup_old_build {
 | 
				
			||||||
    # Any old makefile-based build will most likely leave a mess
 | 
					    # Any old makefile-based build will most likely leave a mess
 | 
				
			||||||
    # of object files behind if interrupted, e.g., via Ctrl+C.
 | 
					    # of object files behind if interrupted, e.g., via Ctrl+C.
 | 
				
			||||||
    # There may be other files behind, depending on what makefile
 | 
					    # There may be other files behind, depending on what makefile
 | 
				
			||||||
    # had been used. We cannot easily enumerate all of those.
 | 
					    # had been used. We cannot easily enumerate all of those.
 | 
				
			||||||
    # Fortunately, for a clean makefiles-based build, it should be
 | 
					    # Fortunately, for a clean makefiles-based build, it should be
 | 
				
			||||||
    # sufficient to remove the old object files only.
 | 
					    # sufficient to remove the old object files only.
 | 
				
			||||||
    [[ -z $(find "$CI_SRCDIR" -maxdepth 1 -name "*.o") ]] ||
 | 
					    ci_info "## START OF PRE-BUILD CLEANUP ##"
 | 
				
			||||||
        ci_spawn rm -f "$CI_SRCDIR"/*.o
 | 
					    local MY_FILE
 | 
				
			||||||
    [[ -z $(find "$CI_SRCDIR" -maxdepth 1 -name "*.obj") ]] ||
 | 
					    find "$CI_SRC_DIR" -maxdepth 1 \( -iname "*.o" -o -iname "*.obj" \) |
 | 
				
			||||||
        ci_spawn rm -f "$CI_SRCDIR"/*.obj
 | 
					        while IFS="" read -r MY_FILE
 | 
				
			||||||
 | 
					        do
 | 
				
			||||||
 | 
					            ci_spawn rm -fr "$MY_FILE"
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    ci_info "## END OF PRE-BUILD CLEANUP ##"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ci_build_makefiles {
 | 
					function ci_build {
 | 
				
			||||||
    ci_info "## START OF BUILD ##"
 | 
					    ci_info "## START OF BUILD ##"
 | 
				
			||||||
    # Initialize ALL_CC_FLAGS and ALL_LD_FLAGS as strings.
 | 
					    # Initialize ALL_CC_FLAGS and ALL_LD_FLAGS as strings.
 | 
				
			||||||
    local ALL_CC_FLAGS="$CI_CC_FLAGS"
 | 
					    local ALL_CC_FLAGS="$CI_CC_FLAGS"
 | 
				
			||||||
@ -118,7 +105,7 @@ function ci_build_makefiles {
 | 
				
			|||||||
    [[ $CI_LIBS ]] && ALL_MAKE_VARS+=(LIBS="$CI_LIBS")
 | 
					    [[ $CI_LIBS ]] && ALL_MAKE_VARS+=(LIBS="$CI_LIBS")
 | 
				
			||||||
    ALL_MAKE_VARS+=($CI_MAKE_VARS)
 | 
					    ALL_MAKE_VARS+=($CI_MAKE_VARS)
 | 
				
			||||||
    # Build!
 | 
					    # Build!
 | 
				
			||||||
    cd "$CI_SRCDIR"
 | 
					    ci_assert "$CI_SRC_DIR" -ef .
 | 
				
			||||||
    local MY_MAKEFILE
 | 
					    local MY_MAKEFILE
 | 
				
			||||||
    for MY_MAKEFILE in $CI_MAKEFILES
 | 
					    for MY_MAKEFILE in $CI_MAKEFILES
 | 
				
			||||||
    do
 | 
					    do
 | 
				
			||||||
@ -143,12 +130,12 @@ function ci_build_makefiles {
 | 
				
			|||||||
function main {
 | 
					function main {
 | 
				
			||||||
    [[ $# -eq 0 ]] || {
 | 
					    [[ $# -eq 0 ]] || {
 | 
				
			||||||
        ci_info "note: this program accepts environment options only"
 | 
					        ci_info "note: this program accepts environment options only"
 | 
				
			||||||
        ci_err "unexpected command arguments: '$*'"
 | 
					        ci_err "unsupported command argument: '$1'"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ci_init_makefiles_build
 | 
					    ci_init_build
 | 
				
			||||||
    ci_trace_makefiles_build
 | 
					    ci_trace_build
 | 
				
			||||||
    ci_cleanup_old_makefiles_build
 | 
					    ci_cleanup_old_build
 | 
				
			||||||
    ci_build_makefiles
 | 
					    ci_build
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main "$@"
 | 
					main "$@"
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										69
									
								
								ci/lib/ci.lib.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								ci/lib/ci.lib.sh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					# Copyright (c) 2019-2023 Cosmin Truta.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Use, modification and distribution are subject
 | 
				
			||||||
 | 
					# to the Boost Software License, Version 1.0.
 | 
				
			||||||
 | 
					# See the accompanying file LICENSE_BSL_1_0.txt
 | 
				
			||||||
 | 
					# or visit http://www.boost.org/LICENSE_1_0.txt
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# SPDX-License-Identifier: BSL-1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test -f "$BASH_SOURCE" ||
 | 
				
			||||||
 | 
					    echo >&2 "warning: this module requires Bash version 3 or newer"
 | 
				
			||||||
 | 
					test "${#BASH_SOURCE[@]}" -gt 1 ||
 | 
				
			||||||
 | 
					    echo >&2 "warning: this module should be sourced from a Bash script"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Reset the locale to avoid surprises from locale-dependent commands.
 | 
				
			||||||
 | 
					export LC_ALL=C
 | 
				
			||||||
 | 
					export LANG=C
 | 
				
			||||||
 | 
					export LANGUAGE=C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Reset CDPATH to avoid surprises from the "cd" command.
 | 
				
			||||||
 | 
					export CDPATH=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Initialize the global constants CI_SCRIPT_{NAME,DIR} and CI_TOPLEVEL_DIR.
 | 
				
			||||||
 | 
					CI_SCRIPT_NAME="$(basename -- "$0")"
 | 
				
			||||||
 | 
					CI_SCRIPT_DIR="$(cd "$(dirname -- "$0")" && pwd)"
 | 
				
			||||||
 | 
					CI_TOPLEVEL_DIR="$(cd "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Initialize the global constants CI_{HOST,TARGET}_{SYSTEM,MACHINE}.
 | 
				
			||||||
 | 
					CI_SYSTEM_NAME="${CI_SYSTEM_NAME:-"$(uname -s)"}"
 | 
				
			||||||
 | 
					CI_MACHINE_NAME="${CI_MACHINE_NAME:-"$(uname -m)"}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ci_info {
 | 
				
			||||||
 | 
					    printf >&2 "%s: %s\\n" "$CI_SCRIPT_NAME" "$*"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ci_warn {
 | 
				
			||||||
 | 
					    printf >&2 "%s: warning: %s\\n" "$CI_SCRIPT_NAME" "$*"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ci_err {
 | 
				
			||||||
 | 
					    printf >&2 "%s: error: %s\\n" "$CI_SCRIPT_NAME" "$*"
 | 
				
			||||||
 | 
					    exit 2
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ci_err_internal {
 | 
				
			||||||
 | 
					    printf >&2 "%s: internal error: %s\\n" "$CI_SCRIPT_NAME" "$*"
 | 
				
			||||||
 | 
					    printf >&2 "ABORTED\\n"
 | 
				
			||||||
 | 
					    # Exit with the conventional SIGABRT code.
 | 
				
			||||||
 | 
					    exit 134
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ci_assert {
 | 
				
			||||||
 | 
					    # Use the "test" built-in command instead of the "[[ ]]" syntax,
 | 
				
			||||||
 | 
					    # to ensure the a-priori expansion of all assertion arguments.
 | 
				
			||||||
 | 
					    # (Consistently, both "ci_assert" and "test" have a command-like behavior.)
 | 
				
			||||||
 | 
					    test "$@" || ci_err_internal "failed:" test "$@"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ci_spawn {
 | 
				
			||||||
 | 
					    printf >&2 "%s: executing:" "$CI_SCRIPT_NAME"
 | 
				
			||||||
 | 
					    printf >&2 " %q" "$@"
 | 
				
			||||||
 | 
					    printf >&2 "\\n"
 | 
				
			||||||
 | 
					    "$@"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ensure that the initialization is correct.
 | 
				
			||||||
 | 
					ci_assert "$CI_TOPLEVEL_DIR/ci/lib/ci.lib.sh" -ef "${BASH_SOURCE[0]}"
 | 
				
			||||||
 | 
					ci_assert "$CI_SCRIPT_DIR/$CI_SCRIPT_NAME" -ef "$0"
 | 
				
			||||||
 | 
					ci_assert -n "$CI_SYSTEM_NAME" -a -n "$CI_MACHINE_NAME"
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user