| 1 |
# Copyright 1999-2012 Gentoo Foundation
|
| 2 |
# Distributed under the terms of the GNU General Public License v2
|
| 3 |
# $Header: $
|
| 4 |
|
| 5 |
# @ECLASS: vcs-snapshot.eclass
|
| 6 |
# @MAINTAINER:
|
| 7 |
# mgorny@gentoo.org
|
| 8 |
# @BLURB: support eclass for unpacking VCS snapshot tarballs
|
| 9 |
# @DESCRIPTION:
|
| 10 |
# This eclass provides a convenience src_unpack() which does unpack all
|
| 11 |
# the tarballs in SRC_URI to locations matching their (local) names,
|
| 12 |
# discarding the original parent directory.
|
| 13 |
#
|
| 14 |
# The typical use case are VCS snapshots, coming from github, bitbucket
|
| 15 |
# and similar services. They have hash appended to the directory name
|
| 16 |
# which makes extracting them a painful experience. But if you just use
|
| 17 |
# a SRC_URI arrow to rename it (which you're likely have to do anyway),
|
| 18 |
# vcs-snapshot will just extract it into a matching directory.
|
| 19 |
#
|
| 20 |
# Please note that this eclass handles only tarballs (.tar, .tar.gz,
|
| 21 |
# .tar.bz2 & .tar.xz). For any other file format (or suffix) it will
|
| 22 |
# fall back to regular unpack. Support for additional formats may be
|
| 23 |
# added at some point so please keep your SRC_URIs clean.
|
| 24 |
#
|
| 25 |
# @EXAMPLE:
|
| 26 |
#
|
| 27 |
# @CODE
|
| 28 |
# EAPI=4
|
| 29 |
# AUTOTOOLS_AUTORECONF=1
|
| 30 |
# inherit autotools-utils vcs-snapshot
|
| 31 |
#
|
| 32 |
# SRC_URI="http://github.com/example/${PN}/tarball/v${PV} -> ${P}.tar.gz"
|
| 33 |
# @CODE
|
| 34 |
#
|
| 35 |
# and however the tarball was originally named, all files will appear
|
| 36 |
# in ${WORKDIR}/${P}.
|
| 37 |
|
| 38 |
case ${EAPI:-0} in
|
| 39 |
0|1|2|3|4) ;;
|
| 40 |
*) die "vcs-snapshot.eclass API in EAPI ${EAPI} not yet established."
|
| 41 |
esac
|
| 42 |
|
| 43 |
EXPORT_FUNCTIONS src_unpack
|
| 44 |
|
| 45 |
vcs-snapshot_src_unpack() {
|
| 46 |
local f
|
| 47 |
|
| 48 |
for f in ${A}
|
| 49 |
do
|
| 50 |
case "${f}" in
|
| 51 |
*.tar|*.tar.gz|*.tar.bz2|*.tar.xz)
|
| 52 |
local destdir=${WORKDIR}/${f%.tar*}
|
| 53 |
|
| 54 |
# XXX: check whether the directory structure inside is
|
| 55 |
# fine? i.e. if the tarball has actually a parent dir.
|
| 56 |
mkdir "${destdir}" || die
|
| 57 |
tar -C "${destdir}" -x --strip-components 1 \
|
| 58 |
-f "${DISTDIR}/${f}" || die
|
| 59 |
;;
|
| 60 |
*)
|
| 61 |
# fall back to the default method
|
| 62 |
unpack "${f}"
|
| 63 |
;;
|
| 64 |
esac
|
| 65 |
done
|
| 66 |
}
|