source: wspkg/arch/arch.deps.sh @ c080ad1

Last change on this file since c080ad1 was c080ad1, checked in by Ting-Wei Lan <lantw44@…>, 6 years ago

arch: Support package groups

  • Property mode set to 100755
File size: 2.0 KB
Line 
1#!/bin/sh
2
3msg () {
4        echo "$@" 1>&2
5}
6
7list_file="$1"
8: ${list_file:="arch.list"}
9: ${TAR:="tar"}
10: ${ARCH_DBPATH:="/var/lib/pacman"}
11dbpath_sync="${ARCH_DBPATH}/sync"
12
13newline='
14'
15pkg_groups_map=''
16pkg_groups_prev=''
17
18# pkg_groups_add <package> <group>
19pkg_groups_add () {
20        if [ "$1" = "${pkg_groups_prev}" ]; then
21                pkg_groups_map="${pkg_groups_map}/$2/"
22        else
23                pkg_groups_map="${pkg_groups_map}${newline}$1 /$2/"
24        fi
25        pkg_groups_prev="$1"
26}
27
28# pkg_groups_find <group>
29pkg_groups_find () {
30        echo "${pkg_groups_map}" | grep "/$1/" | cut -f 1 -d ' '
31}
32
33# Build the list of groups
34for db in "${dbpath_sync}"/*.db; do
35        msg "==> Loading package database ${db}"
36        tmpdir="`mktemp -d`"
37        if [ -z "${tmpdir}" ] || [ "`dirname "${tmpdir}"`" = "/" ]; then
38                msg "==> Invalid temporary directory ${tmpdir}"
39                exit 1
40        fi
41        ${TAR} -xf "${db}" -C "${tmpdir}"
42        for desc in "${tmpdir}"/*/desc; do
43                have_groups=0
44                case "`cat "${desc}"`" in
45                        *%GROUPS%*)
46                                have_groups=1
47                                ;;
48                esac
49                if [ "${have_groups}" = "0" ]; then
50                        continue
51                fi
52                name=''
53                name_next=0
54                groups_found=0
55                while read -r oneline; do
56                        case "${oneline}" in
57                                %GROUPS%)
58                                        groups_found=1
59                                        continue
60                                        ;;
61                                %NAME%)
62                                        if [ "${name_next}" = "0" ]; then
63                                                name_next=1
64                                                continue
65                                        fi
66                                        ;;
67                                %*%)
68                                        if [ "${groups_found}" = "1" ]; then
69                                                break
70                                        fi
71                                        ;;
72                        esac
73                        if [ "${name_next}" = "1" ]; then
74                                name="${oneline}"
75                                name_next=2
76                                continue
77                        fi
78                        if [ "${groups_found}" = "1" ]; then
79                                if [ "${name_next}" != "2" ]; then
80                                        msg "==> %GROUPS% found before %NAME%"
81                                        exit 1
82                                fi
83                                if [ -z "${oneline}" ]; then
84                                        continue
85                                fi
86                                pkg_groups_add "${name}" "${oneline}"
87                        fi
88                done < "${desc}"
89        done
90        rm -rf "${tmpdir}"
91done
92
93loop_first=1
94msg "==> Expanding all groups"
95for pkg_or_group in `cat "${list_file}"`; do
96        pkgs="`pkg_groups_find "${pkg_or_group}"`"
97        if [ -z "${pkgs}" ]; then
98                pkgs="${pkg_or_group}"
99        fi
100        for pkg in ${pkgs}; do
101                if [ "${loop_first}" = "1" ]; then
102                        printf "'%s'" "${pkg}"
103                else
104                        printf " '%s'" "${pkg}"
105                fi
106                loop_first=0
107        done
108done
Note: See TracBrowser for help on using the repository browser.