summaryrefslogtreecommitdiffstats
path: root/src/ob-unpacksource.sh
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2012-10-03 16:13:34 (EDT)
committer P. J. McDermott <pjm@nac.net>2012-10-03 16:13:34 (EDT)
commit11f45e92ad0197f90a70dd27bee470513c683a0f (patch)
tree1b38ed64824aab5cd4cd509f7f8483ed57ab8d84 /src/ob-unpacksource.sh
parenta685526ce90bd376af4abdc567cdbb3bfdc0426f (diff)
Implement ob-unpacksource.
Diffstat (limited to 'src/ob-unpacksource.sh')
-rw-r--r--src/ob-unpacksource.sh124
1 files changed, 124 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+
+. '@@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 "${@}"