summaryrefslogtreecommitdiff
path: root/scripts/libmakepkg/srcinfo.sh.in
blob: 99f5628a1a90d502be63308ba8d629c9b567f382 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash
#
#   srcinfo.sh - functions for writing .SRCINFO files
#
#   Copyright (c) 2014-2017 Pacman Development Team <pacman-dev@archlinux.org>
#
#   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 2 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/>.
#

[[ -n "$LIBMAKEPKG_SRCINFO_SH" ]] && return
LIBMAKEPKG_SRCINFO_SH=1

LIBRARY=${LIBRARY:-'@libmakepkgdir@'}

source "$LIBRARY/util/pkgbuild.sh"

srcinfo_open_section() {
        printf '%s = %s\n' "$1" "$2"
}

srcinfo_close_section() {
        echo
}

srcinfo_write_attr() {
        # $1: attr name
        # $2: attr values

        local attrname=$1 attrvalues=("${@:2}")

        # normalize whitespace, strip leading and trailing
        attrvalues=("${attrvalues[@]//+([[:space:]])/ }")
        attrvalues=("${attrvalues[@]#[[:space:]]}")
        attrvalues=("${attrvalues[@]%[[:space:]]}")

        printf "\t$attrname = %s\n" "${attrvalues[@]}"
}

pkgbuild_extract_to_srcinfo() {
        # $1: pkgname
        # $2: attr name
        # $3: multivalued

        local pkgname=$1 attrname=$2 isarray=$3 outvalue=

        if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then
                srcinfo_write_attr "$attrname" "${outvalue[@]}"
        fi
}

srcinfo_write_section_details() {
        local attr package_arch a
        local multivalued_arch_attrs=(source provides conflicts depends replaces
                                      optdepends makedepends checkdepends
                                      {md5,sha{1,224,256,384,512}}sums)

        for attr in "${singlevalued[@]}"; do
                pkgbuild_extract_to_srcinfo "$1" "$attr" 0
        done

        for attr in "${multivalued[@]}"; do
                pkgbuild_extract_to_srcinfo "$1" "$attr" 1
        done

        get_pkgbuild_attribute "$1" 'arch' 1 'package_arch'
        for a in "${package_arch[@]}"; do
                # 'any' is special. there's no support for, e.g. depends_any.
                [[ $a = any ]] && continue

                for attr in "${multivalued_arch_attrs[@]}"; do
                        pkgbuild_extract_to_srcinfo "$1" "${attr}_$a" 1
                done
        done
}

srcinfo_write_global() {
        local singlevalued=(pkgdesc pkgver pkgrel epoch url install changelog)
        local multivalued=(arch groups license checkdepends makedepends
                           depends optdepends provides conflicts replaces
                           noextract options backup
                           source validpgpkeys {md5,sha{1,224,256,384,512}}sums)

        srcinfo_open_section 'pkgbase' "${pkgbase:-$pkgname}"
        srcinfo_write_section_details ''
        srcinfo_close_section
}

srcinfo_write_package() {
        local singlevalued=(pkgdesc url install changelog)
        local multivalued=(arch groups license checkdepends depends optdepends
                           provides conflicts replaces options backup)

        srcinfo_open_section 'pkgname' "$1"
        srcinfo_write_section_details "$1"
        srcinfo_close_section
}

write_srcinfo_header() {
        printf "# Generated by makepkg %s\n" "$makepkg_version"
        printf "# %s\n" "$(LC_ALL=C date -u)"
}

write_srcinfo_content() {
        local pkg

        srcinfo_write_global

        for pkg in "${pkgname[@]}"; do
                srcinfo_write_package "$pkg"
        done
}

write_srcinfo() {
        write_srcinfo_header
        write_srcinfo_content
}