summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dist.sh28
-rw-r--r--src/dist/libiquity.sh70
-rw-r--r--src/dist/libreboot.sh85
-rw-r--r--src/dist/local.mk3
-rw-r--r--src/local.mk2
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