1 #!/bin/ksh 2 # 3 # This file and its contents are supplied under the terms of the 4 # Common Development and Distribution License ("CDDL"), version 1.0. 5 # You may only use this file in accordance with the terms of version 6 # 1.0 of the CDDL. 7 # 8 # A full copy of the text of the CDDL should have accompanied this 9 # source. A copy of the CDDL is also available via the Internet at 10 # http://www.illumos.org/license/CDDL. 11 # 12 13 # 14 # Copyright 2014 Nexenta Systems, Inc. All rights reserved. 15 # 16 17 # Use distributed make (dmake) by default. 18 make=${MAKE:-dmake} 19 20 CLOSED_IS_PRESENT=no 21 export CLOSED_IS_PRESENT 22 23 # Do this if you want to use dbx or gdb 24 # export SOURCEDEBUG=yes 25 26 [ -n "$SRC" ] || { 27 echo "SRC not set. Run 'ws' or 'bldenv' first." 28 exit 1 29 } 30 31 cpu=`uname -p` 32 case $cpu in 33 i386) 34 x=intel 35 kmdb_arch="amd64" 36 mdb_arch="ia32 amd64" 37 arch64=amd64 38 ;; 39 sparc) 40 x=sparc 41 kmdb_arch=v9 42 mdb_arch="v7 v9" 43 arch64=sparcv9 44 ;; 45 *) echo "Huh?" ; exit 1;; 46 esac 47 48 ################################################################ 49 50 build_tools() { 51 test -f $SRC/tools/proto/root_i386-nd/opt/onbld/bin/genoffsets || 52 (cd $SRC/tools && $make install) 53 (cd $SRC/common/mapfiles; $make install) 54 } 55 56 clobber_tools() { 57 (cd $SRC/tools && $make clobber) 58 (cd $SRC/common/mapfiles; $make clobber) 59 } 60 61 ################################################################ 62 63 do_hdrs() { 64 65 targ=$1 66 if [ "$targ" = clobber ] 67 then 68 (cd $SRC/uts && $make -k clobber_h) 69 (cd $SRC/head && $make clobber) 70 fi 71 72 if [ "$targ" = install ] 73 then 74 targ=install_h 75 76 # Just the parts of "make sgs" we need, and 77 # skip them if they appear to be done. 78 # ... stuff under $SRC 79 test -f $SRC/uts/common/sys/priv_names.h || 80 (cd $SRC/uts && $make -k all_h) 81 82 test -f $SRC/head/rpcsvc/nispasswd.h || 83 (cd $SRC/head && $make -k install_h) 84 85 # ... stuff under $ROOT (proto area) 86 test -d $ROOT/usr/include/sys || 87 (cd $SRC && $make rootdirs) 88 test -f $ROOT/usr/include/sys/types.h || 89 (cd $SRC/uts && $make -k install_h) 90 test -f $ROOT/usr/include/rpcsvc/daemon_utils.h || 91 (cd $SRC/head && $make install_h) 92 93 # always update the netsmb headers to be safe 94 (cd $SRC/uts/common/sys && $make -k install_h) 95 96 fi 97 98 # Need some library headers too... 99 for lib in \ 100 libcryptoutil \ 101 libpam \ 102 libsec \ 103 libshare \ 104 libsmbfs \ 105 passwdutil 106 do 107 (cd $SRC/lib/$lib && $make $targ) 108 done 109 } 110 111 ################################################################ 112 113 do_kern() { 114 case $1 in 115 lint) targ=modlintlib ;; 116 *) targ=$1 ;; 117 esac 118 ( unset SOURCEDEBUG ; 119 (cd $SRC/uts/$x/nsmb && $make $targ) ; 120 (cd $SRC/uts/$x/smbfs && $make $targ) ) 121 } 122 123 ################################################################ 124 125 # Note lib1 builds prerequisite libraries not delivered by the 126 # tar file we create below. To accelerate clean/install, we 127 # skip these on clean (but still nuke them for clobber) 128 129 do_lib1() { 130 : 131 } 132 133 # lib2 builds stuff we include in the tar file, 134 # or that we don't mind rebuilding after clean. 135 136 do_lib2() { 137 138 (cd $SRC/lib/libsmbfs && $make $1) 139 [ "$1" = install ] && 140 (cd $SRC/lib/libsmbfs && $make _msg) 141 (cd $SRC/lib/libmlrpc && $make $1) 142 (cd $SRC/lib/libshare && $make $1 PLUGINS=smbfs) 143 (cd $SRC/lib/passwdutil && $make $1) 144 (cd $SRC/lib/pam_modules/smbfs && $make $1) 145 146 } 147 148 ################################################################ 149 150 do_cmds() { 151 152 case $1 in 153 install) 154 # mount programs need fslib.o 155 (cd $SRC/cmd/fs.d && $make fslib.o) 156 (cd $SRC/cmd/fs.d/smbclnt && $make $1 catalog) 157 ;; 158 clean|clobber) 159 (cd $SRC/cmd/fs.d/smbclnt && $make $1) 160 (cd $SRC/cmd/fs.d && $make ${1}_local) 161 ;; 162 esac 163 164 # Build the MDB modules, WITH the linktest 165 (cd $SRC/cmd/mdb/tools && $make $1) 166 167 # kmdb_arch is 64-bit only 168 for a in $kmdb_arch 169 do 170 case $1 in 171 install|lint) 172 (cd $SRC/cmd/mdb/$x/$a/kmdb && 173 $make kmdb_modlinktest.o ) 174 ;; 175 clean|clobber) 176 (cd $SRC/cmd/mdb/$x/$a/kmdb && 177 $make -k $1 ) 178 ;; 179 esac 180 181 (cd $SRC/cmd/mdb/$x/$a/nsmb && 182 $make $1 KMDB_LINKTEST_ENABLE= ) 183 (cd $SRC/cmd/mdb/$x/$a/smbfs && 184 $make $1 KMDB_LINKTEST_ENABLE= ) 185 done 186 } 187 188 189 ################################################################ 190 # This builds $SRC/TAGS (and cscope.files) in a helpful order. 191 192 do_tags() { 193 (cd $SRC ; 194 find uts/common/sys -name '*.[ch]' -print |sort 195 find uts/common/net -name '*.[ch]' -print |sort 196 find uts/common/netinet -name '*.[ch]' -print |sort 197 find uts/common/smb -name '*.[ch]' -print |sort 198 find uts/common/netsmb -name '*.[ch]' -print |sort 199 find uts/common/fs/smbclnt -name '*.[ch]' -print |sort 200 find head -name '*.h' -print |sort 201 find lib/libsmbfs -name '*.[ch]' -print |sort 202 find cmd/fs.d/smbclnt -name '*.[ch]' -print |sort 203 find common/smbclnt -name '*.[ch]' -print |sort 204 ) > $SRC/cscope.files 205 206 (cd $SRC ; 207 exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files 208 cscope -b ) 209 } 210 211 ################################################################ 212 # This creates a tarfile one can use to update a test machine. 213 214 do_tar() { 215 git_rev=`git rev-parse --short=8 HEAD` 216 files=" 217 lib/svc/manifest/network/smb/client.xml 218 lib/svc/method/smb-client 219 opt/smbcl-tests/tests/srvenum 220 opt/smbcl-tests/tests/srvinfo 221 opt/smbcl-tests/tests/tconn 222 usr/bin/smbutil 223 usr/kernel/drv/$arch64/nsmb 224 usr/kernel/fs/$arch64/smbfs 225 usr/kernel/kmdb/$arch64/nsmb 226 usr/kernel/kmdb/$arch64/smbfs 227 usr/lib/$arch64/libsmbfs.so.1 228 usr/lib/fs/smbfs/$arch64/libshare_smbfs.so.1 229 usr/lib/fs/smbfs/chacl 230 usr/lib/fs/smbfs/dfshares 231 usr/lib/fs/smbfs/libshare_smbfs.so.1 232 usr/lib/fs/smbfs/lsacl 233 usr/lib/fs/smbfs/mount 234 usr/lib/fs/smbfs/share 235 usr/lib/fs/smbfs/umount 236 usr/lib/fs/smbfs/unshare 237 usr/lib/libmlrpc.so.1 238 usr/lib/libsmbfs.so.1 239 usr/lib/mdb/kvm/$arch64/nsmb.so 240 usr/lib/mdb/kvm/$arch64/smbfs.so 241 usr/lib/mdb/kvm/nsmb.so 242 usr/lib/mdb/kvm/smbfs.so 243 usr/lib/security/$arch64/pam_smbfs_login.so.1 244 usr/lib/security/pam_smbfs_login.so.1 245 usr/lib/smbfs/smbiod 246 usr/lib/smbfs/smbiod-svc 247 " 248 249 (cd $ROOT && tar cfj ../../smbclnt-${git_rev}.tar.bz2 $files) 250 } 251 252 ################################################################ 253 254 if [ "$1" = "" ]; then 255 set '?' # force usage 256 fi 257 258 set -x 259 260 for arg 261 do 262 case "$arg" in 263 install) 264 build_tools 265 set -e 266 do_hdrs $arg 267 do_kern $arg 268 do_lib1 $arg 269 do_lib2 $arg 270 do_cmds $arg 271 ;; 272 lint) 273 do_kern $arg 274 do_lib1 $arg 275 do_lib2 $arg 276 do_cmds $arg 277 ;; 278 clean) 279 # intentionally skip: lib1, hdrs, tools 280 do_cmds $arg 281 do_lib2 $arg 282 do_kern $arg 283 ;; 284 clobber) 285 do_cmds $arg 286 do_lib2 $arg 287 do_lib1 $arg 288 do_kern $arg 289 do_hdrs $arg 290 clobber_tools 291 ;; 292 tags) 293 do_tags 294 ;; 295 tar) 296 do_tar 297 ;; 298 *) 299 echo "Usage: $0 {install|lint|clean|clobber|tags|tar}"; 300 exit 1; 301 ;; 302 esac 303 done