generate_core.sh
1 #!/bin/sh 2 # 3 # generate_core.sh extracts the core part from buildgcc script, 4 # most importantly the checksum calculation/verification functions. 5 # 6 # Copyright (C) 2019 Mike Banon <mikebdp2@gmail.com> 7 # 8 ############################################################################## 9 # 10 # USAGE: 11 # ./generate_core.sh <buildgcc> <corescript> prepare_before_patch 12 # where 13 # buildgcc - path to input buildgcc script 14 # corescript - path to output core part script 15 # prepare_before_patch - optional argument to insert prepare_${package} 16 # call into the unpack_and_patch function, e.g. 17 # for removing some files with rm command 18 # in order to reduce the size of patch file 19 # 20 ############################################################################## 21 22 buildgcc="$1" 23 corescript="$2" 24 prepare_before_patch="$3" 25 26 # 27 # Imports the source file fragment between start and end into the 28 # destination file, optionally excluding the last line if not needed 29 # 30 31 import_from_file() { 32 source="$1" 33 destination="$2" 34 start="$3" 35 end="$4" 36 last_line_disabled="$5" 37 if [ -z "${last_line_disabled}" ] ; then 38 sed -n "/^${start}/,/^${end}/{/^${start}/{p;n};{p}}" "$source" >> "$destination" 39 else 40 sed -n "/^${start}/,/^${end}/{/^${start}/{p;n};/^${end}/{q};{p}}" "$source" >> "$destination" 41 fi 42 } 43 44 # 45 # Import the color defines together with UNAME/HALT_FOR_TOOLS variables 46 # 47 48 import_from_file "$buildgcc" "$corescript" "red=" "HALT_FOR_TOOLS=0" || exit "$?" 49 50 # 51 # Import the core functions 52 # 53 54 FUNCTIONS="please_install searchtool download compute_hash error_hash_mismatch verify_hash unpack_and_patch" 55 56 for F in $FUNCTIONS ; do 57 import_from_file "$buildgcc" "$corescript" "$F()" "}" || exit "$?" 58 done 59 60 # 61 # Import a fragment where we find tar/patch/make and other essential tools 62 # 63 64 import_from_file "$buildgcc" "$corescript" "# Find all the required tools" "# Allow" "last_line_disabled" || exit "$?" 65 66 # 67 # Import a fragment with conditional exit if some required tools were not found 68 # 69 70 import_from_file "$buildgcc" "$corescript" "if \[ \"\$HALT_FOR_TOOLS" "fi" || exit "$?" 71 72 # 73 # Avoid the unnecessary subdirectories holding a single file each 74 # 75 76 sed -i -e "s/patches\///g" "$corescript" 77 sed -i -e "s/sum\///g" "$corescript" 78 sed -i -e "s/tarballs\///g" "$corescript" 79 sed -i -e "s/cd tarballs || exit 1//g" "$corescript" 80 sed -i -e "s/cd \.\.//g" "$corescript" 81 82 # 83 # Get the known checksum without using a dedicated single-line file 84 # 85 86 sed -i -e "s/\tknown_hash=\"\$(get_known_hash.*/\tknown_hash=\"\$2\"/g" "$corescript" 87 88 # 89 # Update the paths printed at the error messages 90 # 91 92 sed -i -e "s/util\/crossgcc\///g" "$corescript" 93 94 # 95 # Insert prepare_${package} function call between the unpack and patch operations 96 # 97 98 if [ ! -z "${prepare_before_patch}" ] ; then 99 sed -i -e "/\$TAR \$FLAGS \"\$(basename \"\$archive\")\"/a prepare_\${package} || exit \"\$?\"" "$corescript" 100 sed -i -e "/\$TAR \$FLAGS \"\$archive\"/a prepare_\${package} || exit \"\$?\"" "$corescript" 101 fi 102 103 #