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.
  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 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 
  99 fi
 100 
 101 # Need some library headers too...
 102 for 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
 121 do
 122   (cd $SRC/lib/$lib && $make $targ)
 123 done
 124 }
 125 
 126 ################################################################
 127 
 128 do_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 
 145 do_lib1() {
 146 
 147 for lib in \
 148   libavl \
 149   libgss \
 150   libkrb5 \
 151   libcmdutils \
 152   libsqlite \
 153   libuutil
 154 do
 155   (cd $SRC/lib/$lib && $make $1)
 156 done
 157 }
 158 
 159 # lib2 builds stuff we include in the tar file,
 160 # or that we don't mind rebuilding after clean.
 161 
 162 do_lib2() {
 163 
 164 for lib in \
 165   libfakekernel \
 166   libads \
 167   libsmbfs
 168 do
 169   (cd $SRC/lib/$lib && $make $1)
 170 done
 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 
 181 do_cmds() {
 182 
 183 case $1 in
 184 install)
 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   ;;
 189 clean|clobber)
 190   (cd $SRC/cmd/fs.d/smbclnt && $make $1)
 191   (cd $SRC/cmd/fs.d && $make ${1}_local)
 192   ;;
 193 esac
 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
 202 for a in $kmdb_arch
 203 do
 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= )
 220 done
 221 
 222 # mdb_arch is both 32-bit & 64-bit
 223 for a in $mdb_arch
 224 do
 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 
 235 done
 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
 241 if [ $1 = install ]; then
 242   chmod a+r $ROOT/var/smb/smbpasswd
 243 fi
 244 }
 245 
 246 
 247 ################################################################
 248 # This builds $SRC/TAGS (and cscope.files) in a helpful order.
 249 
 250 do_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 
 277 do_tar() {
 278         git_rev=`git rev-parse --short=8 HEAD`
 279         files="
 280 lib/svc/manifest/network/smb/server.xml
 281 usr/kernel/drv/$arch64/smbsrv
 282 usr/kernel/kmdb/$arch64/smbsrv
 283 usr/lib/fs/smb/$arch64/libshare_smb.so.1
 284 usr/lib/fs/smb/libshare_smb.so.1
 285 usr/lib/libsmbfs.so.1
 286 usr/lib/mdb/kvm/$arch64/smbsrv.so
 287 usr/lib/reparse/libreparse_smb.so.1
 288 usr/lib/security/pam_smb_passwd.so.1
 289 usr/lib/smbsrv/dtrace
 290 usr/lib/smbsrv/libmlrpc.so.1
 291 usr/lib/smbsrv/libmlsvc.so.1
 292 usr/lib/smbsrv/libsmb.so.1
 293 usr/lib/smbsrv/libsmbns.so.1
 294 usr/lib/smbsrv/smbd
 295 usr/sbin/devfsadm
 296 usr/sbin/smbadm
 297 usr/sbin/smbstat
 298 "
 299 
 300         (cd $ROOT && tar cfj ../../smbsrv-${git_rev}.tar.bz2 $files)
 301 }
 302 
 303 ################################################################
 304 
 305 if [ "$1" = "" ]; then
 306   set '?' # force usage
 307 fi
 308 
 309 set -x
 310 
 311 for arg
 312 do
 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
 354 done