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 2018 Nexenta Systems, Inc. All rights reserved. 15# 16 17# Use distributed make (dmake) by default. 18make=${MAKE:-dmake} 19 20CLOSED_IS_PRESENT=no 21export 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 31cpu=`uname -p` 32case $cpu in 33i386) 34 x=intel 35 kmdb_arch="amd64" 36 mdb_arch="ia32 amd64" 37 arch64=amd64 38 ;; 39sparc) 40 x=sparc 41 kmdb_arch=v9 42 mdb_arch="v7 v9" 43 arch64=sparcv9 44 ;; 45*) echo "Huh?" ; exit 1;; 46esac 47 48################################################################ 49 50build_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 56clobber_tools() { 57 (cd $SRC/tools && $make clobber) 58 (cd $SRC/common/mapfiles; $make clobber) 59} 60 61################################################################ 62 63do_hdrs() { 64 65targ=$1 66if [ "$targ" = clobber ] 67then 68 (cd $SRC/uts && $make -k clobber_h) 69 (cd $SRC/head && $make clobber) 70fi 71 72if [ "$targ" = install ] 73then 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 smbsrv headers to be safe 94 (cd $SRC/uts/common/gssapi && $make -k install_h) 95 (cd $SRC/uts/common/sys && $make -k install_h) 96 (cd $SRC/uts/common/smb && $make -k install_h) 97 (cd $SRC/uts/common/smbsrv && $make -k install_h) 98 99fi 100 101# Need some library headers too... 102for lib in \ 103 libads \ 104 libbsm \ 105 libcmdutils \ 106 libcryptoutil \ 107 libdevid \ 108 libfakekernel \ 109 libgss \ 110 libkrb5 \ 111 libidmap \ 112 libpam \ 113 libsec \ 114 libscf \ 115 libshare \ 116 libsmbfs \ 117 libsqlite \ 118 libuutil \ 119 passwdutil \ 120 smbsrv 121do 122 (cd $SRC/lib/$lib && $make $targ) 123done 124} 125 126################################################################ 127 128do_kern() { 129 case $1 in 130 lint) targ=modlintlib ;; 131 *) targ=$1 ;; 132 esac 133 ( unset SOURCEDEBUG ; 134 (cd $SRC/uts/$x/nsmb && $make $targ) ; 135 (cd $SRC/uts/$x/smbfs && $make $targ) ; 136 (cd $SRC/uts/$x/smbsrv && $make $targ) ) 137} 138 139################################################################ 140 141# Note lib1 builds prerequisite libraries not delivered by the 142# tar file we create below. To accelerate clean/install, we 143# skip these on clean (but still nuke them for clobber) 144 145do_lib1() { 146 147for lib in \ 148 libavl \ 149 libgss \ 150 libkrb5 \ 151 libcmdutils \ 152 libsqlite \ 153 libuutil 154do 155 (cd $SRC/lib/$lib && $make $1) 156done 157} 158 159# lib2 builds stuff we include in the tar file, 160# or that we don't mind rebuilding after clean. 161 162do_lib2() { 163 164for lib in \ 165 libfakekernel \ 166 libads \ 167 libsmbfs 168do 169 (cd $SRC/lib/$lib && $make $1) 170done 171 172(cd $SRC/lib/libshare && $make $1 PLUGINS=smb) 173(cd $SRC/lib/smbsrv && $make $1) 174(cd $SRC/lib/passwdutil && $make $1) 175(cd $SRC/lib/pam_modules/smb && $make $1) 176 177} 178 179################################################################ 180 181do_cmds() { 182 183case $1 in 184install) 185 # mount programs need fslib.o 186 (cd $SRC/cmd/fs.d && $make fslib.o) 187 (cd $SRC/cmd/fs.d/smbclnt && $make $1 catalog) 188 ;; 189clean|clobber) 190 (cd $SRC/cmd/fs.d/smbclnt && $make $1) 191 (cd $SRC/cmd/fs.d && $make ${1}_local) 192 ;; 193esac 194 195(cd $SRC/cmd/devfsadm && $make $1) 196(cd $SRC/cmd/smbsrv && $make $1) 197 198# Build the MDB modules, WITH the linktest 199(cd $SRC/cmd/mdb/tools && $make $1) 200 201# kmdb_arch is 64-bit only 202for a in $kmdb_arch 203do 204 case $1 in 205 install|lint) 206 (cd $SRC/cmd/mdb/$x/$a/kmdb && 207 $make kmdb_modlinktest.o ) 208 ;; 209 clean|clobber) 210 (cd $SRC/cmd/mdb/$x/$a/kmdb && 211 $make -k $1 ) 212 ;; 213 esac 214 (cd $SRC/cmd/mdb/$x/$a/nsmb && 215 $make $1 KMDB_LINKTEST_ENABLE= ) 216 (cd $SRC/cmd/mdb/$x/$a/smbfs && 217 $make $1 KMDB_LINKTEST_ENABLE= ) 218 (cd $SRC/cmd/mdb/$x/$a/smbsrv && 219 $make $1 KMDB_LINKTEST_ENABLE= ) 220done 221 222# mdb_arch is both 32-bit & 64-bit 223for a in $mdb_arch 224do 225 (cd $SRC/cmd/mdb/$x/$a/libfksmbsrv && 226 $make $1 ) 227 228# We build these libraries (to the proto area), so we need to 229# build the mdb modules too so mdb will load them. 230 (cd $SRC/cmd/mdb/$x/$a/libcmdutils && 231 $make $1 ) 232 (cd $SRC/cmd/mdb/$x/$a/libavl && 233 $make $1 ) 234 235done 236 237(cd $SRC/cmd/Adm/sun && $make $1) 238 239# Deal with mode 0400 file annoyance... 240# See usr/src/cmd/Adm/sun/Makefile 241if [ $1 = install ]; then 242 chmod a+r $ROOT/var/smb/smbpasswd 243fi 244} 245 246 247################################################################ 248# This builds $SRC/TAGS (and cscope.files) in a helpful order. 249 250do_tags() { 251 (cd $SRC ; 252 find uts/common/sys -name '*.[ch]' -print |sort 253 find uts/common/net -name '*.[ch]' -print |sort 254 find uts/common/netinet -name '*.[ch]' -print |sort 255 find uts/common/smb -name '*.[ch]' -print |sort 256 find uts/common/smbsrv -name '*.ndl' -print |sort 257 find uts/common/smbsrv -name '*.[ch]' -print |sort 258 find uts/common/fs/smbsrv -name '*.[ch]' -print |sort 259 find uts/common/gssapi -name '*.[ch]' -print |sort 260 find head -name '*.h' -print |sort 261 find lib/smbsrv -name '*.[ch]' -print |sort 262 find lib/libsmbfs -name '*.[ch]' -print |sort 263 find lib/libads -name '*.[ch]' -print |sort 264 find lib/libgss -name '*.[ch]' -print |sort 265 find cmd/smbsrv -name '*.[ch]' -print |sort 266 find common/smbsrv -name '*.[ch]' -print |sort 267 ) > $SRC/cscope.files 268 269 (cd $SRC ; 270 exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files 271 cscope -b ) 272} 273 274################################################################ 275# This creates a tarfile one can use to update a test machine. 276 277do_tar() { 278 git_rev=`git rev-parse --short=8 HEAD` 279 files=" 280lib/svc/manifest/network/smb/server.xml 281usr/kernel/drv/$arch64/smbsrv 282usr/kernel/kmdb/$arch64/smbsrv 283usr/lib/fs/smb/$arch64/libshare_smb.so.1 284usr/lib/fs/smb/libshare_smb.so.1 285usr/lib/libsmbfs.so.1 286usr/lib/mdb/kvm/$arch64/smbsrv.so 287usr/lib/reparse/libreparse_smb.so.1 288usr/lib/security/pam_smb_passwd.so.1 289usr/lib/smbsrv/dtrace 290usr/lib/smbsrv/libmlrpc.so.1 291usr/lib/smbsrv/libmlsvc.so.1 292usr/lib/smbsrv/libsmb.so.1 293usr/lib/smbsrv/libsmbns.so.1 294usr/lib/smbsrv/smbd 295usr/sbin/devfsadm 296usr/sbin/smbadm 297usr/sbin/smbstat 298" 299 300 (cd $ROOT && tar cfj ../../smbsrv-${git_rev}.tar.bz2 $files) 301} 302 303################################################################ 304 305if [ "$1" = "" ]; then 306 set '?' # force usage 307fi 308 309set -x 310 311for arg 312do 313 case "$arg" in 314 install) 315 build_tools 316 set -e 317 do_hdrs $arg 318 do_kern $arg 319 do_lib1 $arg 320 do_lib2 $arg 321 do_cmds $arg 322 ;; 323 lint) 324 do_kern $arg 325 do_lib1 $arg 326 do_lib2 $arg 327 do_cmds $arg 328 ;; 329 clean) 330 # intentionally skip: lib1, hdrs, tools 331 do_cmds $arg 332 do_lib2 $arg 333 do_kern $arg 334 ;; 335 clobber) 336 do_cmds $arg 337 do_lib2 $arg 338 do_lib1 $arg 339 do_kern $arg 340 do_hdrs $arg 341 clobber_tools 342 ;; 343 tags) 344 do_tags 345 ;; 346 tar) 347 do_tar 348 ;; 349 *) 350 echo "Usage: $0 {install|lint|clean|clobber|tags|tar}"; 351 exit 1; 352 ;; 353 esac 354done 355