From 11f45e92ad0197f90a70dd27bee470513c683a0f Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Wed, 03 Oct 2012 16:13:34 -0400 Subject: Implement ob-unpacksource. --- (limited to 'src/ob-unpacksource.sh') diff --git a/src/ob-unpacksource.sh b/src/ob-unpacksource.sh new file mode 100644 index 0000000..8b3a01e --- /dev/null +++ b/src/ob-unpacksource.sh @@ -0,0 +1,124 @@ +#!@@SH@@ +# +# opkbuild +# src/ob-unpacksource +# Unpack native or upstream source. +# +# Copyright (C) 2012 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 . + +. '@@LIBOPKBUILD@@/load.sm' + +ob_use locale +ob_use output +ob_use package + +upstream_archive_base= +upstream_archive= +upstream_archive_z= +upstream_archive_dir= + +main() +{ + ob_set_text_domain 'opkbuild' + + ob_init_package '..' + ob_parse_package_metadata -c '.opkbuild.cache' + + if [ -d ../src ]; then + unpack_native + else + unpack_upstream + fi +} + +unpack_native() +{ + ob_info "$(ob_get_msg 'unpacking_native')" + cp -Rp ../src src || ob_error "$(ob_get_msg 'cant_unpack_native')" +} + +unpack_upstream() +{ + get_upstream_archive + get_upstream_compression + get_upstream_dir + extract_upstream +} + +get_upstream_archive() +{ + upstream_archive_base="${OB_SOURCE}-${OB_SOURCE_VERSION_UPSTREAM}.orig.tar." + upstream_archive="$(find .. -name "${upstream_archive_base}*")" + case "$(echo "${upstream_archive}" | grep -v '^$' | wc -l)" in + 0) + ob_error "$(ob_get_msg 'no_sources')" + ;; + 1) + ;; + *) + ob_error "$(ob_get_msg 'multiple_upstream_sources')" + ;; + esac +} + +get_upstream_compression() +{ + z_ext="${upstream_archive#../${upstream_archive_base}}" + case "${z_ext}" in + gz) + upstream_archive_z='z' + ;; + bz2) + upstream_archive_z='j' + ;; + lz) + upstream_archive_z='a' + ;; + Z) + upstream_archive_z='Z' + ;; + *) + ob_error "$(ob_get_msg 'unsupported_archive_compression')" \ + "${z_ext}" + ;; + esac +} + +get_upstream_dir() +{ + upstream_archive_dir="$(tar "-t${upstream_archive_z}f" \ + "${upstream_archive}" | sed -n 's@^\(\./\|\)\([^/]*\)\(/\|\)$@\2@p')" + case "$(echo "${upstream_archive_dir}" | grep -v '^$' | wc -l)" in + 0) + ob_error "$(ob_get_msg 'no_upstream_dirs')" + ;; + 1) + ;; + *) + ob_error "$(ob_get_msg 'multiple_top_upstream_dirs')" + esac +} + +extract_upstream() +{ + ob_info "$(ob_get_msg 'unpacking_upstream')" + tar "-x${upstream_archive_z}f" "${upstream_archive}" || \ + ob_error "$(ob_get_msg 'cant_unpack_upstream')" + mv "${upstream_archive_dir}" src || \ + ob_error "$(ob_get_msg 'cant_move_native')" +} + +main "${@}" -- cgit v0.9.1