Print this page
Factor out add_target and make sure the *.p5m files get read.
Reviewed & tested by: Dan McDonald <danmcd@omniti.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/build/buildctl
+++ new/build/buildctl
1 1 #!/usr/bin/bash
2 2
3 3 NOBANNER=1
4 4 batch_flag=""
5 5 lint_flag=""
6 6 if [ "${BATCH}" = 1 ]; then
7 7 echo "Enabling batch mode."
|
↓ open down ↓ |
7 lines elided |
↑ open up ↑ |
8 8 batch_flag="-b"
9 9 fi
10 10 . ../lib/functions.sh
11 11
12 12 [ "${1}" == "licenses" ] && AUDIT_LICENSE=1
13 13
14 14 # targets maps any valid package name to its build script.
15 15 declare -A targets
16 16 # fulltargets maps full package names to their build script.
17 17 declare -A fulltargets
18 +
19 +add_target() {
20 + local pkg=$1
21 + local build=$2
22 + [[ -n ${fulltargets[$pkg]} ]] && \
23 + logerr "Target $pkg specified by ${fulltargets[$pkg]} and $build."
24 + fulltargets+=([$pkg]=$build)
25 +
26 + #
27 + # Repeatedly strip off leading components to generate all valid
28 + # names for this package. If more than one package has the same
29 + # abbreviated name, the first one wins.
30 + #
31 + [[ -n ${targets[$pkg]} ]] || targets+=([$pkg]=$build)
32 + while [[ $pkg =~ '/' ]]; do
33 + pkg=${pkg#*/}
34 + [[ -n ${targets[$pkg]} ]] || targets+=([$pkg]=$build)
35 + done
36 +}
37 +
18 38 declare -A licenses
19 39 TCNT=0
20 40 for build in */build*.sh
21 41 do
22 42 for PKG in $(grep -v '##IGNORE##' $build | sed -e 's/^ +//' -e 's/ +#.+//' -e 's/=/ /g' -e 's/^.+make_package/make_package/g' | awk '{if($1=="PKG"){PKG=$2; print $2;} if($1=="make_package"){print PKG"="$2;}}')
23 43 do
24 44 if [ -n "`echo ${PKG} | grep '.='`" ] ; then
25 45 [ -z "${AUDIT_LICENSE}" ] && continue
26 46 MOG=`echo ${PKG} | sed -e 's/^.*=//'`
27 47 PKG=`echo ${PKG} | sed -e 's/=.*$//'`
28 48 LOCALMOG=`echo ${build} | sed -e 's:/.*$:/local.mog:'`
29 49 [ -f $MOG ] || MOG=""
30 50 [ -f $LOCALMOG ] || LOCALMOG=""
31 51 LICENSE=`nawk -F "[ =]" '/"/{gsub("\"", "")} /^license/ {print $3;}' $MOG $LOCALMOG /dev/null | xargs`
32 52 licenses+=([$PKG]=$LICENSE)
33 53 TCNT=$(($TCNT + 1))
34 54 print -f "."
35 55 else
36 - targets+=([$PKG]=$build)
37 - fulltargets+=([$PKG]=$build)
38 - #
39 - # Repeatedly strip off leading components to generate all valid
40 - # names for this package.
41 - #
42 - while [[ $PKG =~ '/' ]]; do
43 - PKG=${PKG#*/}
44 - targets+=([$PKG]=$build)
45 - done
56 + add_target $PKG $build
46 57 fi
47 58 done
48 59 done
49 60 [ -n "${AUDIT_LICENSE}" ] && echo
50 61
51 62 for manifest in */*.p5m
52 63 do
53 64 for PKG in $(awk '/^set name=pkg.fmri/ {print $3;}' $manifest | sed -e 's/value=//' -e 's/.*\/\/[^\/]*\///g' -e 's/@.*//')
54 65 do
55 - targets+=([$PKG]=$manifest)
66 + add_target $PKG $manifest
56 67 done
57 68 done
58 69
59 70 usage() {
60 71 echo $0
61 72 echo " list [grep pattern]"
62 73 echo " licenses"
63 74 echo " build <pkg> | all"
64 75 exit
65 76 }
66 77
67 78 bail() {
68 79 echo $*
69 80 exit
70 81 }
71 82
72 83 list() {
73 84 PAT=${1-.}
74 85 for target in "${!fulltargets[@]}"
75 86 do
76 87 if [[ "$PAT" = "." ]]; then
77 88 echo " * $target"
78 89 elif [[ -n $(echo "$target" | grep "$PAT") ]]; then
79 90 echo " * $target"
80 91 fi
81 92 done | sort
82 93 }
83 94
84 95 build() {
85 96 if [[ -z "${targets[$1]}" ]]; then
86 97 bail "Unknown package: $1"
87 98 fi
88 99 DIR=$(dirname ${targets[$1]})
89 100 pushd $DIR > /dev/null || bail "Cannot chdir to $DIR"
90 101 PKGSRVR=$DEFAULT_PKGSRVR
91 102 PKGPUBLISHER=$DEFAULT_PKGPUBLISHER
92 103 PKGROOT=`pwd`/root
93 104 if [[ -f environment ]]; then
94 105 logmsg "--- Setting new environment"
95 106 . environment
96 107 fi
97 108 SCRIPT=$(basename ${targets[$1]})
98 109 if [[ -n $(echo $SCRIPT | grep ".p5m$") ]]; then
99 110 echo "Found a manifest file. Preparing it for publishing."
100 111 sed -e "s/@PKGPUBLISHER@/$PKGPUBLISHER/g; s/@RELVER@/$RELVER/g; s/@PVER@/$PVER/g;" < $SCRIPT > $SCRIPT.final
101 112 if [[ -f root.tar.bz2 ]]; then
102 113 echo "File archive found. Extracting..."
103 114 bzip2 -dc root.tar.bz2 | tar xf - || \
104 115 bail "Failed to extract root.tar.bz2"
105 116 echo "Publishing from $SCRIPT.final"
106 117 pkgsend -s $PKGSRVR publish -d $PKGROOT $SCRIPT.final || \
107 118 bail "pkgsend failed"
108 119 rm -rf $PKGROOT
109 120 # In case we just have a tree of files and not a tarball
110 121 elif [[ -d $PKGROOT ]]; then
111 122 echo "Publishing from $SCRIPT.final"
112 123 pkgsend -s $PKGSRVR publish -d $PKGROOT $SCRIPT.final || \
113 124 bail "pkgsend failed"
114 125 # Else we just have a manifest to import
115 126 else
116 127 echo "Simple manifest to import... importing to $PKGSRVR"
117 128 pkgsend -s $PKGSRVR publish $SCRIPT.final || \
118 129 bail "pkgsend failed"
119 130 rm $SCRIPT.final
120 131 fi
121 132 else
122 133 PATH=$PATH:. $SCRIPT -r $PKGSRVR $batch_flag $lint_flag || \
123 134 logerr "Unable to run $SCRIPT"
124 135 fi
125 136 popd >/dev/null
126 137 }
127 138
128 139 licenses() {
129 140 LCNT=0
130 141 for target in "${!licenses[@]}"
131 142 do
132 143 if [[ -n "${licenses[$target]}" ]]; then
133 144 echo " * $target -> ${licenses[$target]}"
134 145 LCNT=$(($LCNT + 1))
135 146 fi
136 147 done | sort
137 148 if [ $LCNT -ne $TCNT ]; then
138 149 echo
139 150 echo "=== Packages missing license information ==="
140 151 for target in "${!licenses[@]}"
141 152 do
142 153 if [[ -z "${licenses[$target]}" ]]; then
143 154 echo " * $target"
144 155 fi
145 156 done | sort
146 157 fi
147 158 }
148 159
149 160 DEFAULT_PKGSRVR=$PKGSRVR
150 161 DEFAULT_PKGPUBLISHER=$PKGPUBLISHER
151 162
152 163 # When we get here, honor any -l or -b flags from the buildctl command line,
153 164 # or even the environment.
154 165
155 166 if [ "${BATCH}" = 1 ]; then
156 167 logmsg "Enabling batch mode."
157 168 batch_flag="-b"
158 169 fi
159 170 if [ "${SKIP_PKGLINT}" = 1 ]; then
160 171 logmsg "Disabling pkglint."
161 172 lint_flag="-l"
162 173 fi
163 174
164 175 case "$1" in
165 176 list)
166 177 list $2
167 178 exit
168 179 ;;
169 180
170 181 licenses)
171 182 licenses
172 183 exit
173 184 ;;
174 185
175 186 build)
176 187 shift
177 188 tobuild=$*
178 189 if [ -z "$tobuild" ] || [ "$tobuild" == "all" ]; then
179 190 batch_flag="-b"
180 191 for tgt in "${!fulltargets[@]}"; do
181 192 # Uncomment the echo line if you want to see a
182 193 # one-package-per-line status of what's building in
183 194 # /tmp/debug.<PID>.
184 195 # echo "Target = $tgt" >> /tmp/debug.$$
185 196 build $tgt
186 197 done
187 198 else
188 199 for tgt in $tobuild; do
189 200 build $tgt
190 201 done
191 202 fi
192 203 exit
193 204 ;;
194 205
195 206 *)
196 207 usage
197 208 ;;
198 209 esac
199 210
|
↓ open down ↓ |
134 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX