diff options
Diffstat (limited to 'src/oh-unpacksource.sh')
-rw-r--r-- | src/oh-unpacksource.sh | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/oh-unpacksource.sh b/src/oh-unpacksource.sh new file mode 100644 index 0000000..128d85a --- /dev/null +++ b/src/oh-unpacksource.sh @@ -0,0 +1,117 @@ +#!@@SHELL@@ +# +# opkhelper +# src/oh-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 <http://www.gnu.org/licenses/>. + +. @@LIBDIR@@/messages +. @@LIBDIR@@/locale + +# Global parameters: +UPSTREAM_ARCHIVE_BASE= +UPSTREAM_ARCHIVE= +UPSTREAM_ARCHIVE_Z= +UPSTREAM_ARCHIVE_DIR= + +main() +{ + oh_locale_set + + if [ -d ../src ]; then + unpack_native + else + unpack_upstream + fi +} + +unpack_native() +{ + oh_info "${oh_str_unpacking_native}" + cp -Rp ../src src || oh_error "${oh_str_cant_unpack_native}" +} + +unpack_upstream() +{ + get_upstream_archive + get_upstream_compression + get_upstream_dir + extract_upstream +} + +get_upstream_archive() +{ + UPSTREAM_ARCHIVE_BASE="${OH_SOURCE}-${OH_SOURCE_VERSION_UPSTREAM}.orig.tar." + UPSTREAM_ARCHIVE=$(find .. -name "${UPSTREAM_ARCHIVE_BASE}*") + case "$(echo "${UPSTREAM_ARCHIVE}" | grep -v '^$' | wc -l)" in + 0) + oh_error "${oh_str_no_sources}" + ;; + 1) + ;; + *) + oh_error "${oh_str_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 + ;; + *) + oh_error "${oh_str_unsupported_archive_compression}" "${z_ext}" + ;; + esac +} + +get_upstream_dir() +{ + UPSTREAM_ARCHIVE_DIR=$(tar "-t${UPSTREAM_ARCHIVE_Z}f" \ + "${UPSTREAM_ARCHIVE}" | sed -n 's@^\./\([^/]*\)$@\1@p') + case "$(echo "${UPSTREAM_ARCHIVE_DIR}" | grep -v '^$' | wc -l)" in + 0) + oh_error "${oh_str_no_upstream_dirs}" + ;; + 1) + ;; + *) + oh_error "${oh_str_multiple_top_upstream_dirs}" + esac +} + +extract_upstream() +{ + oh_info "${oh_str_unpacking_upstream}" + tar "-x${UPSTREAM_ARCHIVE_Z}f" "${UPSTREAM_ARCHIVE}" || \ + oh_error "${oh_str_cant_unpack_upstream}" + mv "${UPSTREAM_ARCHIVE_DIR}" src || oh_error "${oh_str_cant_move_native}" +} + +main "${@}" |