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