| #!/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 |
| |
| # |