summaryrefslogtreecommitdiffstats
path: root/scripts/lib/ptxd_make_world_check_src.sh
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2010-10-08 17:53:42 +0200
committerMichael Olbrich <m.olbrich@pengutronix.de>2011-05-04 12:41:28 +0200
commite4b48676a7bde19b4c898cda17a05f8b1c4b09ed (patch)
tree560e8ecf6cc88f7743a65915a439a56a5cdc88e5 /scripts/lib/ptxd_make_world_check_src.sh
parent500f8887a86dc3be81b5e43227e84001276e5919 (diff)
downloadptxdist-e4b48676a7bde19b4c898cda17a05f8b1c4b09ed.tar.gz
ptxdist-e4b48676a7bde19b4c898cda17a05f8b1c4b09ed.tar.xz
[get] add md5sum checking for downloaded archives
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Diffstat (limited to 'scripts/lib/ptxd_make_world_check_src.sh')
-rw-r--r--scripts/lib/ptxd_make_world_check_src.sh104
1 files changed, 104 insertions, 0 deletions
diff --git a/scripts/lib/ptxd_make_world_check_src.sh b/scripts/lib/ptxd_make_world_check_src.sh
new file mode 100644
index 000000000..2dc118000
--- /dev/null
+++ b/scripts/lib/ptxd_make_world_check_src.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+#
+# Copyright (C) 2010 by Michael Olbrich <m.olbrich@pengutronix.de>
+#
+# See CREDITS for details about who has contributed to this project.
+#
+# For further information about the PTXdist project and license conditions
+# see the README file.
+#
+
+#
+# check if a file is the makefile for a specific package
+#
+# $1: package name
+# $2: file name
+#
+ptxd_is_pkg_makefile() {
+ local pkg="$1"
+ local file="$2"
+
+ grep -q -e "^[A-Z_]*PACKAGES\(-\$(PTXCONF_[^)]*)\)* += ${pkg}$" "${file}"
+}
+export -f ptxd_is_pkg_makefile
+
+
+#
+# find the makefile for the current package
+#
+# $1: package name
+#
+ptxd_find_pkg_makefile() {
+ local pkg="$1"
+ local rulesfiles="${ptx_state_dir}/ptx_dgen_rulesfiles.make"
+ local ignore
+
+ if ptxd_get_path "${ptx_path_rules//://${pkg_label}.make }"; then
+ if ptxd_is_pkg_makefile "${pkg}" "${ptxd_reply}"; then
+ return
+ fi
+ fi
+ while read ignore ptxd_reply; do
+ if ptxd_is_pkg_makefile "${pkg}" "${ptxd_reply}"; then
+ return
+ fi
+ done < "${rulesfiles}"
+ return 1
+}
+export -f ptxd_find_pkg_makefile
+
+#
+# try to update the md5sum of the current package
+# this only works if the makefile contains a "<PKG>_MD5 := ..." line.
+#
+ptxd_make_world_update_md5() {
+ local PKG="$(ptxd_name_to_NAME "${pkg_label}")"
+ set -- $(md5sum "${pkg_src}")
+ local md5="${1}"
+
+ local PKG_MD5="PTXCONF_${PKG}_MD5"
+ for conf in "${PTXDIST_PLATFORMCONFIG}" "${PTXDIST_PTXCONFIG}"; do
+ if [ $(grep "^${PKG_MD5}=\"" "${conf}" 2> /dev/null | wc -l) = 1 ]; then
+ sed -i "s/^${PKG_MD5}=\".*$/${PKG_MD5}=\"${md5}\"/" "${conf}"
+ ptxd_warning "New checksum for ${pkg_label}: ${md5} in $(ptxd_print_path "${conf}")"
+ return
+ fi
+ done
+ local makefile
+ if ! ptxd_find_pkg_makefile "${pkg_label}"; then
+ ptxd_bailout "Could not update md5sum for '${pkg_label}': makefile not found"
+ else
+ makefile="${ptxd_reply}"
+ fi
+ local count=$(grep "\<${PKG}_MD5[ ]*:=" "${makefile}" 2> /dev/null | wc -l)
+ if [ "${count}" -gt 1 ]; then
+ ptxd_bailout "Could not update md5sum for '${pkg_label}': ${PKG}_MD5 found ${count} times in '$(ptxd_print_path ${makefile})'."
+ fi
+ sed -i "s/^\(\<${PKG}_MD5[ ]*:=\) *[a-f0-9]*\$/\1 ${md5}/" "${makefile}"
+ if ! grep -q "${md5}\$" "${makefile}"; then
+ ptxd_bailout "Could not update md5sum for '${pkg_label}': ${PKG}_MD5 not found"
+ fi
+ ptxd_warning "New checksum for ${pkg_label}: ${md5} in $(ptxd_print_path "${makefile}")"
+}
+export -f ptxd_make_world_update_md5
+
+#
+# verify the md5sum of the source file of the current package
+#
+ptxd_make_world_check_src() {
+ ptxd_make_world_init &&
+
+ if [ -z "${pkg_src}" ]; then
+ return
+ fi
+ ptxd_make_check_src_impl "${pkg_src}" "${pkg_md5}" && return
+
+ if [ "${PTXCONF_SETUP_CHECK}" = "update" ]; then
+ ptxd_make_world_update_md5
+ elif [ -z "${pkg_md5}" ]; then
+ ptxd_bailout "md5sum for '${pkg_label}' (${pkg_src}) missing."
+ else
+ ptxd_bailout "Wrong md5sum for '${pkg_label}' (${pkg_src})"
+ fi
+}
+export -f ptxd_make_world_check_src