]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - repackage.sh
use cargo-vendor-filterer if available
[packages/rpm-build-tools.git] / repackage.sh
1 #!/bin/bash
2 # will build package, skipping %prep and %build stage
3 # i use it a lot!
4 #
5 # -glen 2005-03-03
6 #
7 # Usage:
8 # do %install and rpm package, skips %clean
9 # SPECS$ ./repackage.sh kdelibs.spec
10 #
11 # after that is done you could try only package creation (as %clean was
12 # skipped), for adjusting %files lists:
13 # SPECS$ ./repackage.sh kdelibs.spec -bb
14 #
15 # See also: SPECS/compile.sh
16 #
17 # TODO
18 # - make builder to understand -bi and use builder for short-circuit
19
20 set -e
21
22 dump() {
23         local a
24         for a in "$@"; do
25                 echo "$a"
26         done
27 }
28
29 skip_dep_generators() {
30         local dep
31         for dep in \
32                 font \
33                 gstreamer \
34                 java \
35                 kernel \
36                 libtool \
37                 mimetype \
38                 mono \
39                 perl \
40                 php \
41                 pkgconfig \
42                 python \
43                 ruby \
44         ; do
45                 args+=("--define=__${dep}_provides %%{nil}")
46                 args+=("--define=__${dep}_requires %%{nil}")
47         done
48 }
49
50 rpmbuild() {
51         # preprocess args, we must have --target as first arg to rpmbuild
52         # we need to grab also dir where spec resides
53         local a spec specdir
54         while [ $# -gt 0 ]; do
55                 case "$1" in
56                 --target)
57                         shift
58                         TARGET=$1
59                         ;;
60                 *.spec)
61                         spec="$1"
62                         a="$a $1"
63                         ;;
64                 *)
65                         a="$a $1"
66                         ;;
67                 esac
68                 shift
69         done
70
71     specdir=$(dirname "$(pwd)/${spec:-.}")
72
73         # use gz payload as time is what we need here, not compress ratio
74
75         # we use %__ldconfig variable to test are we on rpm 4.4.9
76         # on 4.4.9 we should not redefine %clean to contain %clean, and redefine %__spec_clean_body instead
77         # on 4.4.2 we must redefine %clean to contain %clean
78         local -a args=()
79         if [ -n "${bb+1}" ]; then
80                 skip_dep_generators
81                 args+=(--define '%py_postclean(-x:) %{nil}')
82         fi
83
84         set -x
85         /usr/bin/rpmbuild \
86                 ${TARGET:+--target $TARGET} \
87                 --short-circuit \
88                 --define 'disable_short_circuited_deps 0' \
89                 --define "_specdir $specdir" --define "_sourcedir $specdir" \
90                 --define 'clean %%%{!?__ldconfig:clean}%{?__ldconfig:check} \
91                 exit 0%{nil}' \
92                 --define 'check %%check \
93                 exit 0%{nil}' \
94                 --define '_source_payload w5.gzdio' \
95                 --define '_binary_payload w5.gzdio' \
96                 --define '__spec_install_pre %___build_pre' \
97                 --define '__spec_clean_body %{nil}' \
98                 --define '_enable_debug_packages 0' \
99                 "${args[@]}" \
100                 $a || exit
101 }
102
103 specdump() {
104         local a
105         while [ $# -gt 0 ]; do
106                 case "$1" in
107                 --target|--with|--without)
108                         a="$a $1 $2"
109                         shift
110                         ;;
111                 --define)
112                         a="$a $1 \"$2\""
113                         shift
114                         ;;
115                 -*)
116                         ;;
117                 *)
118                         a="$a $1"
119                         ;;
120                 esac
121                 shift
122         done
123         set -x
124         eval rpm-specdump $a || echo >&2 $?
125 }
126
127 if [ $# = 0 ]; then
128         # if no spec name passed, glob *.spec
129         set -- *.spec
130         if [ ! -f "$1" -o $# -gt 1 ]; then
131                 echo >&2 "ERROR: Too many or too few .spec files found"
132                 echo >&2 "Usage: ${0##*/} PACKAGE.spec"
133                 exit 1
134         fi
135 else
136         # $1 must be spec, ensure it has .spec ext
137         spec=$1; shift
138         set -- ${spec%.spec}.spec "$@"
139 fi
140
141 tmp=$(specdump "$@" | awk '$2 == "_target_cpu" {print $3}')
142 if [ "$tmp" ]; then
143         TARGET="$tmp"
144 fi
145
146 # skip -bi if -bb is somewhere in the args
147 if [[ *$@* = *-bb* ]]; then
148         bb=
149 else
150         bb= rpmbuild -bi "$@"
151         unset bb
152 fi
153 rpmbuild -bb "$@"
This page took 0.048808 seconds and 3 git commands to generate.