mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-19 21:31:37 +00:00
132 lines
No EOL
4.1 KiB
Bash
132 lines
No EOL
4.1 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com
|
|
#
|
|
# This file is licensed under the terms of the GNU General Public
|
|
# License version 2. This program is licensed "as is" without any
|
|
# warranty of any kind, whether express or implied.
|
|
#
|
|
# This file is a part of tool chain https://github.com/igorpecovnik/lib
|
|
#
|
|
#
|
|
# Source patching functions
|
|
#
|
|
#
|
|
|
|
# advanced_patch <dest> <family> <device> <description>
|
|
#
|
|
# parameters:
|
|
# <dest>: u-boot, kernel
|
|
# <family>: u-boot: u-boot, u-boot-neo; kernel: sun4i-default, sunxi-next, ...
|
|
# <device>: cubieboard, cubieboard2, cubietruck, ...
|
|
# <description>: additional description text
|
|
#
|
|
# priority:
|
|
# $SRC/userpatches/<dest>/<family>/<device>
|
|
# $SRC/userpatches/<dest>/<family>
|
|
# $SRC/lib/patch/<dest>/<family>/<device>
|
|
# $SRC/lib/patch/<dest>/<family>
|
|
#
|
|
advanced_patch () {
|
|
|
|
local dest=$1
|
|
local family=$2
|
|
local device=$3
|
|
local description=$4
|
|
|
|
display_alert "Started patching process for" "$dest $description" "info"
|
|
|
|
local names=()
|
|
local dirs=("$SRC/userpatches/$dest/$family/$device" "$SRC/userpatches/$dest/$family" "$SRC/lib/patch/$dest/$family/$device" "$SRC/lib/patch/$dest/$family")
|
|
|
|
# required for "for" command
|
|
shopt -s nullglob dotglob
|
|
|
|
# get patch file names
|
|
for dir in "${dirs[@]}"; do
|
|
for patch in $dir/*.patch; do
|
|
names+=($(basename $patch))
|
|
done
|
|
done
|
|
|
|
# remove duplicates
|
|
local names_s=($(echo "${names[@]}" | tr ' ' '\n' | LC_ALL=C sort -u | tr '\n' ' '))
|
|
|
|
# apply patches
|
|
for name in "${names_s[@]}"; do
|
|
for dir in "${dirs[@]}"; do
|
|
if [ -f "$dir/$name" ] || [ -L "$dir/$name" ]; then
|
|
if [ -s "$dir/$name" ]; then
|
|
process_patch_file "$dir/$name" "$description"
|
|
else
|
|
display_alert "... ${description} ${name}" "skipped" "info"
|
|
fi
|
|
break # next name
|
|
fi
|
|
done
|
|
done
|
|
}
|
|
|
|
# process_patch_file <file> <description>
|
|
#
|
|
# parameters:
|
|
# <file>: path to patch file
|
|
# <description>: additional description text
|
|
#
|
|
process_patch_file() {
|
|
|
|
local patch=$1
|
|
local description=$2
|
|
|
|
# detect and remove files which patch will create
|
|
LANGUAGE=english patch --batch --dry-run -p1 -N < $patch | grep create \
|
|
| awk '{print $NF}' | sed -n 's/,//p' | xargs -I % sh -c 'rm %'
|
|
|
|
# main patch command
|
|
echo "$patch" >> $DEST/debug/install.log
|
|
patch --batch --silent -p1 -N < $patch >> $DEST/debug/install.log 2>&1
|
|
|
|
if [ $? -ne 0 ]; then
|
|
display_alert "... $(basename $patch) $description" "failed" "wrn";
|
|
else
|
|
display_alert "... $(basename $patch) $description" "succeeded" "info"
|
|
fi
|
|
}
|
|
|
|
|
|
patching_sources(){
|
|
#--------------------------------------------------------------------------------------------------------------------------------
|
|
# Patching kernel
|
|
#--------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
cd $SOURCES/$LINUXSOURCEDIR
|
|
|
|
# what are we building
|
|
#grab_kernel_version
|
|
|
|
# this is a patch that Ubuntu Trusty compiler works
|
|
if [ "$(patch --dry-run -t -p1 < $SRC/lib/patch/kernel/compiler.patch | grep Reversed)" != "" ]; then
|
|
patch --batch --silent -t -p1 < $SRC/lib/patch/kernel/compiler.patch > /dev/null 2>&1
|
|
fi
|
|
|
|
# this exception is needed if we switch to legacy sunxi sources in configuration.sh to https://github.com/dan-and/linux-sunxi
|
|
if [[ $LINUXKERNEL == *dan-and* && ($BOARD == bana* || $BOARD == orangepi* || $BOARD == lamobo*) ]]; then
|
|
LINUXFAMILY="banana";
|
|
fi
|
|
|
|
# this exception is needed since AW boards share single mainline kernel
|
|
[[ $LINUXFAMILY == sun*i && $BRANCH != "default" ]] && LINUXFAMILY="sunxi"
|
|
|
|
# it can be changed in this process
|
|
grab_version "$SOURCES/$LINUXSOURCEDIR"
|
|
advanced_patch "kernel" "$LINUXFAMILY-$BRANCH" "$BOARD" "$LINUXFAMILY-$BRANCH $VER"
|
|
|
|
|
|
#---------------------------------------------------------------------------------------------------------------------------------
|
|
# Patching u-boot
|
|
#---------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
cd $SOURCES/$BOOTSOURCEDIR
|
|
grab_version "$SOURCES/$BOOTSOURCEDIR"
|
|
advanced_patch "u-boot" "$BOOTSOURCE-$BRANCH" "$BOARD" "$BOOTSOURCE-$BRANCH $VER"
|
|
} |