forked from libretro/Lakka-LibreELEC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
libretro_update.sh
executable file
·145 lines (143 loc) · 4.83 KB
/
libretro_update.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
LR_PKG_PATH="packages/libretro"
usage()
{
echo ""
echo "$0 <--all [--exclude list] | --used [--exclude list] | --packages list>"
echo ""
echo "Updates PKG_VERSION in package.mk of libretro packages to latest."
echo ""
echo "Parameters:"
echo " -a --all Update all libretro packages"
echo " -u --used Update only libretro packages used by Lakka"
echo " -p list --packages list Update listed libretro packages"
echo " -e list --exclude list Update all/used packages except listed ones"
echo ""
}
[ "$1" == "" ] && { usage ; exit ; }
case $1 in
-a | --all )
s=$1
shift
if [ "$1" != "" ] ; then
case $1 in
-e | --exclude )
PACKAGES_EX=""
x="$1"
shift
v="$@"
[ "$v" == "" ] && { echo "Error: You must provide name(s) of package(s) to exclude after $x" ; exit 1 ; }
for a in $v ; do
if [ -f $LR_PKG_PATH/$a/package.mk ] ; then
PACKAGES_EX="$PACKAGES_EX $a"
else
echo "Warning: $a is not a libretro package."
fi
done
[ "$PACKAGES_EX" == "" ] && { echo "No valid packages to exclude given! Aborting." ; exit 1 ; }
;;
* )
echo "Error: After $s use only --exclude (-e) to exclude some packages."
exit 1
;;
esac
fi
# Get list of all libretro packages
PACKAGES_ALL=`ls $LR_PKG_PATH`
;;
-u | --used )
s=$1
shift
if [ "$1" != "" ] ; then
case $1 in
-e | --exclude )
PACKAGES_EX=""
x="$1"
shift
v="$@"
[ "$v" == "" ] && { echo "Error: You must provide name(s) of package(s) to exclude after $x" ; exit 1 ; }
for a in $v ; do
if [ -f $LR_PKG_PATH/$a/package.mk ] ; then
PACKAGES_EX="$PACKAGES_EX $a"
else
echo "Warning: $a is not a libretro package."
fi
done
[ "$PACKAGES_EX" == "" ] && { echo "No valid packages to exclude given! Aborting." ; exit 1 ; }
;;
* )
echo "Error: After $s use only --exclude (-e) to exclude some packages."
exit 1
;;
esac
fi
# Get list of cores, which are used with Lakka:
OPTIONS_FILE="distributions/Lakka/options"
[ -f "$OPTIONS_FILE" ] && source "$OPTIONS_FILE" || { echo "$OPTIONS_FILE: not found! Aborting." ; exit 1 ; }
[ -z "$LIBRETRO_CORES" ] && { echo "LIBRETRO_CORES: empty. Aborting!" ; exit 1 ; }
# List of core retroarch packages
RA_PACKAGES="retroarch retroarch-assets retroarch-joypad-autoconfig retroarch-overlays libretro-database core-info glsl-shaders"
# List of cores used by specific projects not included in LIBRETRO_CORES.
# This needs to be updated manually in case packages/lakka/*/package.mk
# PKG_DEPENDS_TARGET includes a libretro core/package not included above.
# PKG_DEPENDS_TARGET often includes also non-libretro packages, hence
# not pulled from individual project-package files.
ADDITIONAL_PACKAGES=" beetle-bsnes bsnes beetle-psx bsnes-mercury "
# List of all libretro packages to update:
PACKAGES_ALL=" $RA_PACKAGES $ADDITIONAL_PACKAGES $LIBRETRO_CORES "
;;
-p | --packages )
PACKAGES_ALL=""
x="$1"
shift
v="$@"
[ "$v" == "" ] && { echo "Error: You must provide name(s) of package(s) after $x" ; exit 1 ; }
for a in $v ; do
if [ -f $LR_PKG_PATH/$a/package.mk ] ; then
PACKAGES_ALL="$PACKAGES_ALL $a "
else
echo "Warning: $a is not a libretro package - skipping."
fi
done
[ "$PACKAGES_ALL" == "" ] && { echo "No valid packages given! Aborting." ; exit 1 ; }
;;
* )
usage
echo "Unknown parameter: $1"
exit 1
;;
esac
if [ "$PACKAGES_EX" != "" ] ; then
for a in $PACKAGES_EX ; do
PACKAGES_ALL=$(echo " "$PACKAGES_ALL" " | sed "s/\ $a\ /\ /g")
done
fi
echo "Checking following packages: "$PACKAGES_ALL
declare -i i=0
for p in $PACKAGES_ALL
do
f=$LR_PKG_PATH/$p/package.mk
if [ ! -f "$f" ] ; then
echo "$f: not found! Skipping."
continue
fi
PKG_VERSION=`cat $f | sed -En "s/PKG_VERSION=\"(.*)\"/\1/p"`
PKG_SITE=`cat $f | sed -En "s/PKG_SITE=\"(.*)\"/\1/p"`
PKG_NAME=`cat $f | sed -En "s/PKG_NAME=\"(.*)\"/\1/p"`
if [ -z "$PKG_VERSION" ] || [ -z "$PKG_SITE" ] ; then
echo "$f: does not have PKG_VERSION or PKG_SITE"
echo "PKG_VERSION: $PKG_VERSION"
echo "PKG_SITE: $PKG_SITE"
echo "Skipping update."
continue
fi
UPS_VERSION=`git ls-remote $PKG_SITE | grep HEAD | awk '{ print substr($1,1,7) }'`
if [ "$UPS_VERSION" == "$PKG_VERSION" ]; then
echo "$PKG_NAME is up to date ($UPS_VERSION)"
else
i+=1
echo "$PKG_NAME updated from $PKG_VERSION to $UPS_VERSION"
sed -i "s/$PKG_VERSION/$UPS_VERSION/" $f
fi
done
echo "$i package(s) updated."