#!/bin/sh # # generate_core.sh extracts the core part from buildgcc script, # most importantly the checksum calculation/verification functions. # # Copyright (C) 2019 Mike Banon <mikebdp2@gmail.com> # ############################################################################## # # USAGE: # ./generate_core.sh <buildgcc> <corescript> prepare_before_patch # where # buildgcc - path to input buildgcc script # corescript - path to output core part script # prepare_before_patch - optional argument to insert prepare_${package} # call into the unpack_and_patch function, e.g. # for removing some files with rm command # in order to reduce the size of patch file # ############################################################################## buildgcc="$1" corescript="$2" prepare_before_patch="$3" # # Imports the source file fragment between start and end into the # destination file, optionally excluding the last line if not needed # import_from_file() { source="$1" destination="$2" start="$3" end="$4" last_line_disabled="$5" if [ -z "${last_line_disabled}" ] ; then sed -n "/^${start}/,/^${end}/{/^${start}/{p;n};{p}}" "$source" >> "$destination" else sed -n "/^${start}/,/^${end}/{/^${start}/{p;n};/^${end}/{q};{p}}" "$source" >> "$destination" fi } # # Import the color defines together with UNAME/HALT_FOR_TOOLS variables # import_from_file "$buildgcc" "$corescript" "red=" "HALT_FOR_TOOLS=0" || exit "$?" # # Import the core functions # FUNCTIONS="please_install searchtool download compute_hash error_hash_mismatch verify_hash unpack_and_patch" for F in $FUNCTIONS ; do import_from_file "$buildgcc" "$corescript" "$F()" "}" || exit "$?" done # # Import a fragment where we find tar/patch/make and other essential tools # import_from_file "$buildgcc" "$corescript" "# Find all the required tools" "# Allow" "last_line_disabled" || exit "$?" # # Import a fragment with conditional exit if some required tools were not found # import_from_file "$buildgcc" "$corescript" "if \[ \"\$HALT_FOR_TOOLS" "fi" || exit "$?" # # Avoid the unnecessary subdirectories holding a single file each # sed -i -e "s/patches\///g" "$corescript" sed -i -e "s/sum\///g" "$corescript" sed -i -e "s/tarballs\///g" "$corescript" sed -i -e "s/cd tarballs || exit 1//g" "$corescript" sed -i -e "s/cd \.\.//g" "$corescript" # # Get the known checksum without using a dedicated single-line file # sed -i -e "s/\tknown_hash=\"\$(get_known_hash.*/\tknown_hash=\"\$2\"/g" "$corescript" # # Update the paths printed at the error messages # sed -i -e "s/util\/crossgcc\///g" "$corescript" # # Insert prepare_${package} function call between the unpack and patch operations # if [ ! -z "${prepare_before_patch}" ] ; then sed -i -e "/\$TAR \$FLAGS \"\$(basename \"\$archive\")\"/a prepare_\${package} || exit \"\$?\"" "$corescript" sed -i -e "/\$TAR \$FLAGS \"\$archive\"/a prepare_\${package} || exit \"\$?\"" "$corescript" fi #