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