diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dist.sh | 28 | ||||
-rw-r--r-- | src/dist/libiquity.sh | 70 | ||||
-rw-r--r-- | src/dist/libreboot.sh | 85 | ||||
-rw-r--r-- | src/dist/local.mk | 3 | ||||
-rw-r--r-- | src/local.mk | 2 |
5 files changed, 188 insertions, 0 deletions
diff --git a/src/dist.sh b/src/dist.sh new file mode 100644 index 0000000..0cf38a7 --- /dev/null +++ b/src/dist.sh @@ -0,0 +1,28 @@ +# Distributor bindings +# +# Copyright (C) 2015 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +dist_functions='get_name get_mirrors get_versions' + +select_dist() +{ + local dist="${1}" + local fn= + + for fn in ${dist_functions}; do + eval "dist_${fn}() { dist_${dist}_${fn} \"\${@}\"; }" + done +} diff --git a/src/dist/libiquity.sh b/src/dist/libiquity.sh new file mode 100644 index 0000000..dfd774d --- /dev/null +++ b/src/dist/libiquity.sh @@ -0,0 +1,70 @@ +# Libiquity firmware distribution +# +# Copyright (C) 2015 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +dist_libiquity_get_name() +{ + printf 'Libiquity' + return 0 +} + +dist_libiquity_get_mirrors() +{ + cat <<-EOF + http://files.libiquity.com/pub/libreboot/ + Libiquity, USA + EOF + return 0 +} + +dist_libiquity_get_versions() +{ + local mirror="${1}" + local board="${2}" + shift 2 + local dl="${WGET} -q -O -" + local version= + local versions='' + + while read -r version; do + case "${version}" in + 'libiquity-20150501') + # This version had unique ROM organization. + # Let's not bother supporting it. + continue + ;; + taurinus-201506*) + sums='SHA512SUMS' + archive="./rom/libreboot_${version}_${board}" + archive="${archive}.tar.xz" + ;; + *) + sums='SHA512SUMS' + archive="./rom/grub/libreboot_${version}" + archive="${archive}_grub_${board}.tar.xz" + ;; + esac + if ${dl} "${mirror}/${version}/${sums}" | \ + grep -F " ${archive}" >/dev/null 2>&1; then + versions="${versions} ${version}" + fi + done <<-EOF + $(${dl} "${mirror}/Manifest") + EOF + + printf '%s ' ${versions} + return 0 +} diff --git a/src/dist/libreboot.sh b/src/dist/libreboot.sh new file mode 100644 index 0000000..4691422 --- /dev/null +++ b/src/dist/libreboot.sh @@ -0,0 +1,85 @@ +# Libreboot project firmware distribution +# +# Copyright (C) 2015 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +dist_libreboot_get_name() +{ + printf 'Libreboot project' + return 0 +} + +dist_libreboot_get_mirrors() +{ + cat <<-EOF + http://mirrors.mit.edu/libreboot/ + MIT, USA + http://www.mirrorservice.org/sites/libreboot.org/release/ + University of Kent, UK + http://elgrande74.net/libreboot/ + elgrande74.net, France + http://mirror.linux.ro/libreboot/ + linux.ro, Romania + http://ginette.swordarmor.fr/libreboot/ + swordarmor.fr, France + http://libreboot.nedson.net/ + nedson.net, Canada + http://mirror.helium.in-berlin.de/libreboot/ + in-berlin.de, Germany + http://mirror.se.partyvan.eu/pub/libreboot/ + partyvan.eu, Sweden + EOF + return 0 +} + +dist_libreboot_get_versions() +{ + local mirror="${1}" + local board="${2}" + shift 2 + local dl="${WGET} -q -O -" + local version= + local versions='' + + while read -r version; do + case "${version}" in + 201[34]* | 20150[1-4]*) + # These versions had ROMs in X60_binary.tar.gz, + # libreboot_bin.tar.gz, or libreboot_bin.tar.xz + # files. These are unsupported for now. + continue + ;; + '20150518') + sums='sha512sums.txt' + archive="./rom/libreboot_${version}_${board}" + archive="${archive}.tar.xz" + ;; + *) + sums='SHA512SUMS' + archive="./rom/libreboot_${version}_${board}" + archive="${archive}.tar.xz" + ;; + esac + if ${dl} "${mirror}/${version}/${sums}" | \ + grep -F " ${archive}" >/dev/null 2>&1; then + versions="${versions} ${version}" + fi + done <<-EOF + 20150518 $(: Hardcode this list until a manifest is available) + EOF + + printf '%s ' ${versions} + return 0 +} diff --git a/src/dist/local.mk b/src/dist/local.mk new file mode 100644 index 0000000..58623ac --- /dev/null +++ b/src/dist/local.mk @@ -0,0 +1,3 @@ +firman_SOURCES += \ + src/dist/libiquity.sh \ + src/dist/libreboot.sh diff --git a/src/local.mk b/src/local.mk index e1b21d3..bc953dc 100644 --- a/src/local.mk +++ b/src/local.mk @@ -1,7 +1,9 @@ firman_SOURCES += \ src/board.sh \ + src/dist.sh \ src/main.sh \ src/ui.sh include $(top_srcdir)/src/board/local.mk +include $(top_srcdir)/src/dist/local.mk include $(top_srcdir)/src/ui/local.mk |