1 #! /usr/bin/ksh -p 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License (the "License"). 7 # You may not use this file except in compliance with the License. 8 # 9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 # or http://www.opensolaris.org/os/licensing. 11 # See the License for the specific language governing permissions 12 # and limitations under the License. 13 # 14 # When distributing Covered Code, include this CDDL HEADER in each 15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 # If applicable, add the following below this CDDL HEADER, with the 17 # fields enclosed by brackets "[]" replaced with your own identifying 18 # information: Portions Copyright [yyyy] [name of copyright owner] 19 # 20 # CDDL HEADER END 21 # 22 23 # 24 # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 25 # 26 # Create an encumbered binaries tarball from a full build proto area, 27 # less the contents of an OpenSolaris proto area. 28 # 29 30 usage="bindrop [-n] basename" 31 32 isa=`uname -p` 33 34 PATH="$PATH:/usr/bin:/usr/sfw/bin" 35 36 function fail { 37 print -u2 "bindrop: $@" 38 exit 1 39 } 40 41 function warn { 42 print -u2 "bindrop: warning: $@" 43 } 44 45 [[ -n "$SRC" ]] || fail "SRC must be set." 46 [[ -n "$CODEMGR_WS" ]] || fail "CODEMGR_WS must be set." 47 48 # 49 # Create the README from boilerplate and the contents of the closed 50 # binary tree. 51 # 52 # usage: mkreadme targetdir 53 # 54 function mkreadme { 55 typeset targetdir="$1" 56 typeset readme="README.ON-BINARIES.$isa" 57 58 sed -e s/@ISA@/$isa/ -e s/@DELIVERY@/ON-BINARIES/ \ 59 "$SRC/tools/opensolaris/README.binaries.tmpl" > "$targetdir/$readme" 60 (cd "$targetdir"; find "$rootdir" -type f -print | \ 61 sort >> "$targetdir/$readme") 62 } 63 64 nondebug=n 65 while getopts n flag; do 66 case $flag in 67 n) 68 nondebug=y 69 ;; 70 ?) 71 print -u2 "usage: $usage" 72 exit 1 73 ;; 74 esac 75 done 76 shift $(($OPTIND - 1)) 77 78 if [[ $# -ne 1 ]]; then 79 print -u2 "usage: $usage" 80 exit 1 81 fi 82 83 tarfile="$CODEMGR_WS/$1.$isa.tar" 84 85 rootdir="root_$isa" 86 suffix="" 87 if [[ "$nondebug" = y ]]; then 88 rootdir="root_$isa-nd" 89 suffix="-nd" 90 fi 91 92 [[ -d "${ROOT}${suffix}-closed" ]] || fail "can't find closed root proto area." 93 94 tmpdir=$(mktemp -dt bindropXXXXX) 95 [[ -n "$tmpdir" ]] || fail "can't create temporary directory." 96 mkdir -p "$tmpdir/closed/$rootdir" || exit 1 97 98 # 99 # This will hold a temp list of directories that must be kept, even if 100 # empty. 101 # 102 needdirs=$(mktemp -t needdirsXXXXX) 103 [[ -n "$needdirs" ]] || fail "can't create temporary directory list file." 104 105 # 106 # Copy the closed root parallel tree into a temp directory. 107 # 108 (cd "${ROOT}${suffix}-closed"; tar cf - .) | (cd "$tmpdir/closed/$rootdir"; tar xpf -) 109 110 # 111 # Remove miscellaneous files that we don't want to ship. 112 # 113 114 # SUNWsvvs (SVVS test drivers). 115 delete=" 116 usr/include/sys/svvslo.h 117 usr/include/sys/tidg.h 118 usr/include/sys/tivc.h 119 usr/include/sys/tmux.h 120 usr/kernel/drv/amd64/svvslo 121 usr/kernel/drv/amd64/tidg 122 usr/kernel/drv/amd64/tivc 123 usr/kernel/drv/amd64/tmux 124 usr/kernel/drv/sparcv9/svvslo 125 usr/kernel/drv/sparcv9/tidg 126 usr/kernel/drv/sparcv9/tivc 127 usr/kernel/drv/sparcv9/tmux 128 usr/kernel/drv/svvslo 129 usr/kernel/drv/svvslo.conf 130 usr/kernel/drv/tidg 131 usr/kernel/drv/tidg.conf 132 usr/kernel/drv/tivc 133 usr/kernel/drv/tivc.conf 134 usr/kernel/drv/tmux 135 usr/kernel/drv/tmux.conf 136 usr/kernel/strmod/amd64/lmodb 137 usr/kernel/strmod/amd64/lmode 138 usr/kernel/strmod/amd64/lmodr 139 usr/kernel/strmod/amd64/lmodt 140 usr/kernel/strmod/lmodb 141 usr/kernel/strmod/lmode 142 usr/kernel/strmod/lmodr 143 usr/kernel/strmod/lmodt 144 usr/kernel/strmod/sparcv9/lmodb 145 usr/kernel/strmod/sparcv9/lmode 146 usr/kernel/strmod/sparcv9/lmodr 147 usr/kernel/strmod/sparcv9/lmodt 148 " 149 # encumbered binaries and associated files 150 delete="$delete 151 kernel/drv/amd64/bmc 152 kernel/drv/bmc 153 kernel/drv/bmc.conf 154 kernel/drv/ifp.conf 155 kernel/drv/sparcv9/ifp 156 kernel/drv/sparcv9/isp 157 kernel/drv/sparcv9/qus 158 kernel/drv/spwr 159 kernel/kmdb/sparcv9/isp 160 usr/has/bin/ksh 161 usr/has/bin/pfksh 162 usr/has/bin/rksh 163 usr/include/sys/scsi/adapters/ifpcmd.h 164 usr/include/sys/scsi/adapters/ifpio.h 165 usr/include/sys/scsi/adapters/ifpmail.h 166 usr/include/sys/scsi/adapters/ifpreg.h 167 usr/include/sys/scsi/adapters/ifpvar.h 168 usr/include/sys/scsi/adapters/ispcmd.h 169 usr/include/sys/scsi/adapters/ispmail.h 170 usr/include/sys/scsi/adapters/ispreg.h 171 usr/include/sys/scsi/adapters/ispvar.h 172 usr/lib/mdb/kvm/sparcv9/isp.so 173 usr/platform/sun4u/include/sys/memtestio.h 174 usr/platform/sun4u/include/sys/memtestio_ch.h 175 usr/platform/sun4u/include/sys/memtestio_chp.h 176 usr/platform/sun4u/include/sys/memtestio_ja.h 177 usr/platform/sun4u/include/sys/memtestio_jg.h 178 usr/platform/sun4u/include/sys/memtestio_sf.h 179 usr/platform/sun4u/include/sys/memtestio_sr.h 180 usr/platform/sun4u/include/sys/memtestio_u.h 181 usr/platform/sun4u/include/sys/memtestio_pn.h 182 usr/platform/sun4v/include/sys/memtestio.h 183 usr/platform/sun4v/include/sys/memtestio_ni.h 184 usr/platform/sun4v/include/sys/memtestio_v.h 185 " 186 # memory fault injector test framework 187 delete="$delete 188 usr/bin/mtst 189 platform/sun4u/kernel/drv/sparcv9/memtest 190 platform/sun4u/kernel/drv/memtest.conf 191 platform/sun4v/kernel/drv/sparcv9/memtest 192 platform/sun4v/kernel/drv/memtest.conf 193 kernel/drv/memtest.conf 194 kernel/drv/memtest 195 kernel/drv/amd64/memtest 196 usr/platform/i86pc/lib/mtst/mtst_AuthenticAMD_15.so 197 usr/platform/i86pc/lib/mtst/mtst_AuthenticAMD.so 198 usr/platform/i86pc/lib/mtst/mtst_generic.so 199 usr/platform/i86pc/lib/mtst/mtst_GenuineIntel.so 200 " 201 for f in $delete; do 202 rm -rf "$tmpdir/closed/$rootdir/$f" 203 done 204 205 # 206 # Remove any header files. If they're in the closed tree, they're 207 # probably not freely redistributable. 208 # 209 (cd "$tmpdir/closed/$rootdir"; find . -name \*.h \ 210 -a \! -name lc_core.h \ 211 -a \! -name localedef.h \ 212 -exec rm -f {} \;) 213 214 # 215 # Remove empty directories that the open tree doesn't need. 216 # 217 # Step 1: walk the redistributable manifests to find out which directories 218 # are specified in the open packages; save that list to a temporary 219 # file $needdirs. 220 # 221 MACH=$(uname -p) 222 (cd "$SRC/pkg/packages.$MACH"; \ 223 nawk '/^dir/ {sub(/.+ path=/, ""); print $1;}' *.metadata.*.redist | \ 224 sort -u > "$needdirs") 225 226 # 227 # Step 2: go to our closed directory, and find all the subdirectories, 228 # filtering out the ones needed by the open packages (saved in that 229 # temporary file). Sort in reverse order, so that parent directories 230 # come after any subdirectories, and pipe that to rmdir. If there are 231 # still any lingering files, rmdir will complain. That's fine--we 232 # only want to delete empty directories--so redirect the complaints to 233 # /dev/null. 234 # 235 (cd "$tmpdir/closed/$rootdir"; \ 236 find * -type d -print | /usr/xpg4/bin/grep -xv -f $needdirs | \ 237 sort -r | xargs -l rmdir 2>/dev/null ) 238 239 rm "$needdirs" 240 241 # 242 # Add binary license files. 243 # 244 245 cp -p "$SRC/tools/opensolaris/BINARYLICENSE.txt" "$tmpdir/closed" || \ 246 fail "can't add BINARYLICENSE.txt" 247 mkreadme "$tmpdir/closed" 248 if [ -f "$CODEMGR_WS/THIRDPARTYLICENSE.ON-BINARIES" ]; then 249 cp -p "$CODEMGR_WS/THIRDPARTYLICENSE.ON-BINARIES" "$tmpdir/closed" 250 fi 251 252 (cd "$tmpdir"; tar cf "$tarfile" closed) || fail "can't create $tarfile." 253 bzip2 -f "$tarfile" || fail "can't compress $tarfile". 254 255 rm -rf "$tmpdir" 256 257 exit 0