00-distfiles.sh (4562B)
1# This hook extracts $distfiles into $XBPS_BUILDDIR if $distfiles and $checksum 2# variables are set. 3 4hook() { 5 local srcdir="$XBPS_SRCDISTDIR/$pkgname-$version" 6 local f j curfile found extractdir 7 local TAR_CMD 8 9 if [ -z "$distfiles" -a -z "$checksum" ]; then 10 mkdir -p "$wrksrc" 11 return 0 12 fi 13 14 # Check that distfiles are there before anything else. 15 for f in ${distfiles}; do 16 curfile="${f#*>}" 17 curfile="${curfile##*/}" 18 if [ ! -f $srcdir/$curfile ]; then 19 msg_error "$pkgver: cannot find ${curfile}, use 'xbps-src fetch' first.\n" 20 fi 21 done 22 23 if [ -n "$create_wrksrc" ]; then 24 mkdir -p "${wrksrc}" || msg_error "$pkgver: failed to create wrksrc.\n" 25 fi 26 27 # Disable trap on ERR; the code is smart enough to report errors and abort. 28 trap - ERR 29 30 TAR_CMD="$(command -v bsdtar)" 31 [ -z "$TAR_CMD" ] && TAR_CMD="$(command -v tar)" 32 [ -z "$TAR_CMD" ] && msg_error "xbps-src: no suitable tar cmd (bsdtar, tar)\n" 33 34 msg_normal "$pkgver: extracting distfile(s), please wait...\n" 35 36 for f in ${distfiles}; do 37 curfile="${f#*>}" 38 curfile="${curfile##*/}" 39 for j in ${skip_extraction}; do 40 if [ "$curfile" = "$j" ]; then 41 found=1 42 break 43 fi 44 done 45 if [ -n "$found" ]; then 46 unset found 47 continue 48 fi 49 50 case $curfile in 51 *.tar.lzma) cursufx="txz";; 52 *.tar.lz) cursufx="tlz";; 53 *.tlz) cursufx="tlz";; 54 *.tar.xz) cursufx="txz";; 55 *.txz) cursufx="txz";; 56 *.tar.bz2) cursufx="tbz";; 57 *.tbz) cursufx="tbz";; 58 *.tar.gz) cursufx="tgz";; 59 *.tgz) cursufx="tgz";; 60 *.gz) cursufx="gz";; 61 *.xz) cursufx="xz";; 62 *.bz2) cursufx="bz2";; 63 *.tar) cursufx="tar";; 64 *.zip) cursufx="zip";; 65 *.rpm) cursufx="rpm";; 66 *.patch) cursufx="txt";; 67 *.diff) cursufx="txt";; 68 *.txt) cursufx="txt";; 69 *.sh) cursufx="txt";; 70 *.7z) cursufx="7z";; 71 *.gem) cursufx="gem";; 72 *.crate) cursufx="crate";; 73 *) msg_error "$pkgver: unknown distfile suffix for $curfile.\n";; 74 esac 75 76 if [ -n "$create_wrksrc" ]; then 77 extractdir="$wrksrc" 78 else 79 extractdir="$XBPS_BUILDDIR" 80 fi 81 82 case ${cursufx} in 83 tar|txz|tbz|tlz|tgz|crate) 84 $TAR_CMD -x --no-same-permissions --no-same-owner -f $srcdir/$curfile -C "$extractdir" 85 if [ $? -ne 0 ]; then 86 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 87 fi 88 ;; 89 gz|bz2|xz) 90 cp -f $srcdir/$curfile "$extractdir" 91 cd "$extractdir" 92 case ${cursufx} in 93 gz) 94 gunzip -f $curfile 95 ;; 96 bz2) 97 bunzip2 -f $curfile 98 ;; 99 *) 100 unxz -f $curfile 101 ;; 102 esac 103 ;; 104 zip) 105 if command -v unzip &>/dev/null; then 106 unzip -o -q $srcdir/$curfile -d "$extractdir" 107 if [ $? -ne 0 ]; then 108 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 109 fi 110 elif command -v bsdtar &>/dev/null; then 111 bsdtar -xf $srcdir/$curfile -C "$extractdir" 112 if [ $? -ne 0 ]; then 113 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 114 fi 115 else 116 msg_error "$pkgver: cannot find unzip or bsdtar bin for extraction.\n" 117 fi 118 ;; 119 rpm) 120 if command -v rpmextract &>/dev/null; then 121 cd "$extractdir" 122 rpmextract $srcdir/$curfile 123 if [ $? -ne 0 ]; then 124 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 125 fi 126 else 127 msg_error "$pkgver: cannot find rpmextract for extraction.\n" 128 fi 129 ;; 130 txt) 131 if [ "$create_wrksrc" ]; then 132 cp -f $srcdir/$curfile "$extractdir" 133 else 134 msg_error "$pkgname: ${curfile##*.} files can only be extracted when create_wrksrc is set\n" 135 fi 136 ;; 137 7z) 138 if command -v 7z &>/dev/null; then 139 7z x $srcdir/$curfile -o"$extractdir" 140 if [ $? -ne 0 ]; then 141 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 142 fi 143 elif command -v bsdtar &>/dev/null; then 144 bsdtar -xf $srcdir/$curfile -C "$extractdir" 145 if [ $? -ne 0 ]; then 146 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 147 fi 148 else 149 msg_error "$pkgver: cannot find 7z or bsdtar bin for extraction.\n" 150 fi 151 ;; 152 gem) 153 case "$TAR_CMD" in 154 *bsdtar) 155 $TAR_CMD -xOf $srcdir/$curfile data.tar.gz | \ 156 $TAR_CMD -xz -C "$extractdir" -s ",^,${wrksrc##*/}/," -f - 157 ;; 158 *) 159 $TAR_CMD -xOf $srcdir/$curfile data.tar.gz | \ 160 $TAR_CMD -xz -C "$extractdir" --transform="s,^,${wrksrc##*/}/," 161 ;; 162 esac 163 if [ $? -ne 0 ]; then 164 msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" 165 fi 166 ;; 167 *) 168 msg_error "$pkgver: cannot guess $curfile extract suffix. ($cursufx)\n" 169 ;; 170 esac 171 done 172}