110b444a8SGordon Ross#!/bin/ksh 210b444a8SGordon Ross# 310b444a8SGordon Ross# This file and its contents are supplied under the terms of the 410b444a8SGordon Ross# Common Development and Distribution License ("CDDL"), version 1.0. 510b444a8SGordon Ross# You may only use this file in accordance with the terms of version 610b444a8SGordon Ross# 1.0 of the CDDL. 710b444a8SGordon Ross# 810b444a8SGordon Ross# A full copy of the text of the CDDL should have accompanied this 910b444a8SGordon Ross# source. A copy of the CDDL is also available via the Internet at 1010b444a8SGordon Ross# http://www.illumos.org/license/CDDL. 1110b444a8SGordon Ross# 1210b444a8SGordon Ross 1310b444a8SGordon Ross# 14ba5ca684SMatt Barden# Copyright 2022 Tintri by DDN, Inc. All rights reserved. 1510b444a8SGordon Ross# 1610b444a8SGordon Ross 1754026d5aSGordon Ross# Use normal make (not dmake) by default. 1854026d5aSGordon Rossmake=${MAKE:-make} 1910b444a8SGordon Ross 2010b444a8SGordon RossCLOSED_IS_PRESENT=no 2110b444a8SGordon Rossexport CLOSED_IS_PRESENT 2210b444a8SGordon Ross 23b3700b07SGordon Ross# Do this if you want to use dbx or gdb 24b3700b07SGordon Ross# export SOURCEDEBUG=yes 2510b444a8SGordon Ross 2610b444a8SGordon Ross[ -n "$SRC" ] || { 2710b444a8SGordon Ross echo "SRC not set. Run 'ws' or 'bldenv' first." 2810b444a8SGordon Ross exit 1 2910b444a8SGordon Ross} 3010b444a8SGordon Ross 3110b444a8SGordon Rosscpu=`uname -p` 3210b444a8SGordon Rosscase $cpu in 3310b444a8SGordon Rossi386) 3410b444a8SGordon Ross x=intel 35b9538c21SGordon Ross kmdb_arch="amd64" 3610b444a8SGordon Ross mdb_arch="ia32 amd64" 3710b444a8SGordon Ross arch64=amd64 3810b444a8SGordon Ross ;; 3910b444a8SGordon Rosssparc) 4010b444a8SGordon Ross x=sparc 41b9538c21SGordon Ross kmdb_arch=v9 42b9538c21SGordon Ross mdb_arch="v7 v9" 4310b444a8SGordon Ross arch64=sparcv9 4410b444a8SGordon Ross ;; 4510b444a8SGordon Ross*) echo "Huh?" ; exit 1;; 4610b444a8SGordon Rossesac 4710b444a8SGordon Ross 4810b444a8SGordon Ross################################################################ 4910b444a8SGordon Ross 5010b444a8SGordon Rossbuild_tools() { 5110b444a8SGordon Ross test -f $SRC/tools/proto/root_i386-nd/opt/onbld/bin/genoffsets || 5210b444a8SGordon Ross (cd $SRC/tools && $make install) 5310b444a8SGordon Ross (cd $SRC/common/mapfiles; $make install) 5410b444a8SGordon Ross} 5510b444a8SGordon Ross 5610b444a8SGordon Rossclobber_tools() { 5710b444a8SGordon Ross (cd $SRC/tools && $make clobber) 5810b444a8SGordon Ross (cd $SRC/common/mapfiles; $make clobber) 5910b444a8SGordon Ross} 6010b444a8SGordon Ross 6110b444a8SGordon Ross################################################################ 6210b444a8SGordon Ross 6310b444a8SGordon Rossdo_hdrs() { 6410b444a8SGordon Ross 6510b444a8SGordon Rosstarg=$1 6610b444a8SGordon Rossif [ "$targ" = clobber ] 6710b444a8SGordon Rossthen 6810b444a8SGordon Ross (cd $SRC/uts && $make -k clobber_h) 6910b444a8SGordon Ross (cd $SRC/head && $make clobber) 7010b444a8SGordon Rossfi 7110b444a8SGordon Ross 7210b444a8SGordon Rossif [ "$targ" = install ] 7310b444a8SGordon Rossthen 7410b444a8SGordon Ross targ=install_h 7510b444a8SGordon Ross 7610b444a8SGordon Ross # Just the parts of "make sgs" we need, and 7710b444a8SGordon Ross # skip them if they appear to be done. 7810b444a8SGordon Ross # ... stuff under $SRC 7910b444a8SGordon Ross test -f $SRC/uts/common/sys/priv_names.h || 8010b444a8SGordon Ross (cd $SRC/uts && $make -k all_h) 8110b444a8SGordon Ross 8210b444a8SGordon Ross test -f $SRC/head/rpcsvc/nispasswd.h || 8354026d5aSGordon Ross (cd $SRC/head && $make -k $targ) 8410b444a8SGordon Ross 8510b444a8SGordon Ross # ... stuff under $ROOT (proto area) 8610b444a8SGordon Ross test -d $ROOT/usr/include/sys || 8710b444a8SGordon Ross (cd $SRC && $make rootdirs) 8810b444a8SGordon Ross test -f $ROOT/usr/include/sys/types.h || 8954026d5aSGordon Ross (cd $SRC/uts && $make -k $targ) 9010b444a8SGordon Ross test -f $ROOT/usr/include/rpcsvc/daemon_utils.h || 9154026d5aSGordon Ross (cd $SRC/head && $make $targ) 9210b444a8SGordon Ross 936f1fa39eSGordon Ross # always update the sys,smbsrv headers to be safe 9454026d5aSGordon Ross (cd $SRC/uts/common/gssapi && $make -k $targ) 9554026d5aSGordon Ross (cd $SRC/uts/common/sys && $make -k $targ) 9654026d5aSGordon Ross (cd $SRC/uts/common/smb && $make -k $targ) 9754026d5aSGordon Ross (cd $SRC/uts/common/smbsrv && $make -k $targ) 986f1fa39eSGordon Ross (cd $SRC/uts/common/c2 && $make -k $targ) 9954026d5aSGordon Rossfi 10010b444a8SGordon Ross 10154026d5aSGordon Rossif [ "$targ" = lint ] 10254026d5aSGordon Rossthen 10354026d5aSGordon Ross targ=check 10454026d5aSGordon Ross (cd $SRC/uts/common/smb && $make -k $targ) 10554026d5aSGordon Ross (cd $SRC/uts/common/smbsrv && $make -k $targ) 10610b444a8SGordon Rossfi 10710b444a8SGordon Ross 10810b444a8SGordon Ross# Need some library headers too... 10910b444a8SGordon Rossfor lib in \ 1106f1fa39eSGordon Ross libc \ 1116f1fa39eSGordon Ross libnsl \ 1126f1fa39eSGordon Ross libnvpair \ 1136f1fa39eSGordon Ross libsocket \ 1146f1fa39eSGordon Ross \ 115b3700b07SGordon Ross libads \ 1166f1fa39eSGordon Ross libbrand \ 11710b444a8SGordon Ross libbsm \ 11810b444a8SGordon Ross libcmdutils \ 11910b444a8SGordon Ross libcryptoutil \ 12010b444a8SGordon Ross libdevid \ 1216f1fa39eSGordon Ross libdisasm \ 122b819cea2SGordon Ross libfakekernel \ 12312b65585SGordon Ross libgss \ 12410b444a8SGordon Ross libidmap \ 1256f1fa39eSGordon Ross libinetutil \ 1266f1fa39eSGordon Ross libipsecutil \ 1273299f39fSGordon Ross libkrb5 \ 1283299f39fSGordon Ross libmlrpc \ 12910b444a8SGordon Ross libpam \ 1306f1fa39eSGordon Ross libsaveargs \ 13110b444a8SGordon Ross libsec \ 13210b444a8SGordon Ross libscf \ 13310b444a8SGordon Ross libshare \ 13410b444a8SGordon Ross libsmbfs \ 13510b444a8SGordon Ross libsqlite \ 13610b444a8SGordon Ross libuutil \ 13754026d5aSGordon Ross libzfs_core \ 13854026d5aSGordon Ross libzfs \ 13910b444a8SGordon Ross passwdutil \ 14054026d5aSGordon Ross pkcs11 \ 14110b444a8SGordon Ross smbsrv 14210b444a8SGordon Rossdo 14310b444a8SGordon Ross (cd $SRC/lib/$lib && $make $targ) 14410b444a8SGordon Rossdone 14510b444a8SGordon Ross} 14610b444a8SGordon Ross 14710b444a8SGordon Ross################################################################ 14810b444a8SGordon Ross 14910b444a8SGordon Rossdo_kern() { 15010b444a8SGordon Ross case $1 in 15110b444a8SGordon Ross lint) targ=modlintlib ;; 15210b444a8SGordon Ross *) targ=$1 ;; 15310b444a8SGordon Ross esac 15410b444a8SGordon Ross ( unset SOURCEDEBUG ; 155*f2ae17edSMatt Barden export NO_GENUNIX_UNIQUIFY= ; 15610b444a8SGordon Ross (cd $SRC/uts/$x/smbsrv && $make $targ) ) 15710b444a8SGordon Ross} 15810b444a8SGordon Ross 15910b444a8SGordon Ross################################################################ 1606f1fa39eSGordon Ross# 1616f1fa39eSGordon Ross# Build all libraries used by the other targets in here. 1626f1fa39eSGordon Ross# 1636f1fa39eSGordon Ross# Run this once (at least) in each new workspace where you 1646f1fa39eSGordon Ross# will run "make-smbsrv install", if you want to avoid linking 1656f1fa39eSGordon Ross# against the libraries from your build host. 1666f1fa39eSGordon Ross# 1676f1fa39eSGordon Rossdo_deplibs() { 16810b444a8SGordon Ross 1696f1fa39eSGordon Ross(cd $SRC/lib/ssp_ns && $make $1) 1706f1fa39eSGordon Ross(cd $SRC/lib/libc && $make $1) 17110b444a8SGordon Ross 17210b444a8SGordon Rossfor lib in \ 1736f1fa39eSGordon Ross libm \ 1746f1fa39eSGordon Ross libmd \ 1756f1fa39eSGordon Ross libnsl \ 1766f1fa39eSGordon Ross libnvpair \ 1776f1fa39eSGordon Ross libsocket \ 17810b444a8SGordon Ross libavl \ 17912b65585SGordon Ross libgss \ 1806f1fa39eSGordon Ross libgen \ 18112b65585SGordon Ross libkrb5 \ 1826f1fa39eSGordon Ross libkstat \ 18310b444a8SGordon Ross libcmdutils \ 1846f1fa39eSGordon Ross libresolv2 \ 1856f1fa39eSGordon Ross libldap5 \ 1866f1fa39eSGordon Ross libsldap \ 1876f1fa39eSGordon Ross libreparse \ 1886f1fa39eSGordon Ross libpam \ 1896f1fa39eSGordon Ross libuutil \ 1906f1fa39eSGordon Ross libidmap \ 1916f1fa39eSGordon Ross libinetutil \ 1926f1fa39eSGordon Ross libdlpi \ 1936f1fa39eSGordon Ross libbsm \ 1946f1fa39eSGordon Ross libsec \ 1956f1fa39eSGordon Ross libsecdb \ 19610b444a8SGordon Ross libsqlite \ 1976f1fa39eSGordon Ross libumem \ 1986f1fa39eSGordon Ross libuuid \ 1996f1fa39eSGordon Ross libsaveargs \ 2006f1fa39eSGordon Ross libproc \ 2016f1fa39eSGordon Ross libscf \ 2026f1fa39eSGordon Ross libcryptoutil \ 2036f1fa39eSGordon Ross libmd5 \ 2046f1fa39eSGordon Ross libzfs_core \ 2056f1fa39eSGordon Ross libzfs \ 2066f1fa39eSGordon Ross pkcs11/libpkcs11 20710b444a8SGordon Rossdo 2086f1fa39eSGordon Ross # So we don't have to build EVERYTHING, set LDCHECKS= 2096f1fa39eSGordon Ross # when building the dependent libraries. 2106f1fa39eSGordon Ross (cd $SRC/lib/$lib && LDCHECKS='' $make $1) 21110b444a8SGordon Rossdone 212b819cea2SGordon Ross} 213b819cea2SGordon Ross 2146f1fa39eSGordon Ross################################################################ 215b819cea2SGordon Ross 2166f1fa39eSGordon Rossdo_libs() { 217b819cea2SGordon Ross 218b819cea2SGordon Rossfor lib in \ 219b819cea2SGordon Ross libfakekernel \ 220b3700b07SGordon Ross libads \ 221*f2ae17edSMatt Barden libidmap \ 2223299f39fSGordon Ross libsmbfs \ 2233299f39fSGordon Ross libmlrpc 224b819cea2SGordon Rossdo 225b819cea2SGordon Ross (cd $SRC/lib/$lib && $make $1) 226b819cea2SGordon Rossdone 22710b444a8SGordon Ross 22810b444a8SGordon Ross(cd $SRC/lib/libshare && $make $1 PLUGINS=smb) 22910b444a8SGordon Ross(cd $SRC/lib/smbsrv && $make $1) 23010b444a8SGordon Ross(cd $SRC/lib/passwdutil && $make $1) 23110b444a8SGordon Ross(cd $SRC/lib/pam_modules/smb && $make $1) 23210b444a8SGordon Ross 23310b444a8SGordon Ross} 23410b444a8SGordon Ross 23510b444a8SGordon Ross################################################################ 23610b444a8SGordon Ross 23710b444a8SGordon Rossdo_cmds() { 23810b444a8SGordon Ross 23910b444a8SGordon Ross(cd $SRC/cmd/smbsrv && $make $1) 24010b444a8SGordon Ross 24110b444a8SGordon Ross# Build the MDB modules, WITH the linktest 24210b444a8SGordon Ross(cd $SRC/cmd/mdb/tools && $make $1) 243b9538c21SGordon Ross 244b9538c21SGordon Ross# kmdb_arch is 64-bit only 245b9538c21SGordon Rossfor a in $kmdb_arch 24610b444a8SGordon Rossdo 24710b444a8SGordon Ross case $1 in 24810b444a8SGordon Ross install|lint) 24910b444a8SGordon Ross (cd $SRC/cmd/mdb/$x/$a/kmdb && 25010b444a8SGordon Ross $make kmdb_modlinktest.o ) 25110b444a8SGordon Ross ;; 25210b444a8SGordon Ross clean|clobber) 25310b444a8SGordon Ross (cd $SRC/cmd/mdb/$x/$a/kmdb && 25410b444a8SGordon Ross $make -k $1 ) 25510b444a8SGordon Ross ;; 25610b444a8SGordon Ross esac 25710b444a8SGordon Ross (cd $SRC/cmd/mdb/$x/$a/smbsrv && 25810b444a8SGordon Ross $make $1 KMDB_LINKTEST_ENABLE= ) 259b9538c21SGordon Rossdone 260b9538c21SGordon Ross 261b9538c21SGordon Ross# mdb_arch is both 32-bit & 64-bit 262b9538c21SGordon Rossfor a in $mdb_arch 263b9538c21SGordon Rossdo 264b819cea2SGordon Ross # We build these libraries (to the proto area), so we need to 265e0687fa3SGordon Ross # build the mdb modules for all dependent libraries too. 266b819cea2SGordon Ross 267ba5ca684SMatt Barden for lib in libfksmbsrv libmlsvc list libavl 268e0687fa3SGordon Ross do 269e0687fa3SGordon Ross (cd $SRC/cmd/mdb/$x/$a/$lib && $make $1 ) 270e0687fa3SGordon Ross 271e0687fa3SGordon Ross done 27210b444a8SGordon Rossdone 27310b444a8SGordon Ross} 27410b444a8SGordon Ross 27510b444a8SGordon Ross################################################################ 276*f2ae17edSMatt Barden 277*f2ae17edSMatt Bardendo_tests() { 278*f2ae17edSMatt Barden 279*f2ae17edSMatt Barden for d in test/test-runner test/libmlrpc-tests test/smbsrv-tests 280*f2ae17edSMatt Barden do 281*f2ae17edSMatt Barden [ -f $SRC/$d/Makefile ] && (cd $SRC/$d && $make $1) 282*f2ae17edSMatt Barden done 283*f2ae17edSMatt Barden} 284*f2ae17edSMatt Barden 285*f2ae17edSMatt Barden################################################################ 28610b444a8SGordon Ross# This builds $SRC/TAGS (and cscope.files) in a helpful order. 28710b444a8SGordon Ross 28810b444a8SGordon Rossdo_tags() { 28910b444a8SGordon Ross (cd $SRC ; 29010b444a8SGordon Ross find uts/common/sys -name '*.[ch]' -print |sort 29110b444a8SGordon Ross find uts/common/net -name '*.[ch]' -print |sort 29210b444a8SGordon Ross find uts/common/netinet -name '*.[ch]' -print |sort 29310b444a8SGordon Ross find uts/common/smb -name '*.[ch]' -print |sort 29410b444a8SGordon Ross find uts/common/smbsrv -name '*.ndl' -print |sort 29510b444a8SGordon Ross find uts/common/smbsrv -name '*.[ch]' -print |sort 29610b444a8SGordon Ross find uts/common/fs/smbsrv -name '*.[ch]' -print |sort 29712b65585SGordon Ross find uts/common/gssapi -name '*.[ch]' -print |sort 29854026d5aSGordon Ross find common/smbsrv -name '*.[ch]' -print |sort 29912b65585SGordon Ross find head -name '*.h' -print |sort 30010b444a8SGordon Ross find lib/smbsrv -name '*.[ch]' -print |sort 30112b65585SGordon Ross find lib/libsmbfs -name '*.[ch]' -print |sort 302d1855c81SGordon Ross find lib/libmlrpc -name '*.ndl' -print |sort 303d1855c81SGordon Ross find lib/libmlrpc -name '*.[ch]' -print |sort 30412b65585SGordon Ross find lib/libads -name '*.[ch]' -print |sort 30512b65585SGordon Ross find lib/libgss -name '*.[ch]' -print |sort 30610b444a8SGordon Ross find cmd/smbsrv -name '*.[ch]' -print |sort 30710b444a8SGordon Ross ) > $SRC/cscope.files 30810b444a8SGordon Ross 30910b444a8SGordon Ross (cd $SRC ; 31010b444a8SGordon Ross exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files 31110b444a8SGordon Ross cscope -b ) 31210b444a8SGordon Ross} 31310b444a8SGordon Ross 31410b444a8SGordon Ross################################################################ 31510b444a8SGordon Ross# This creates a tarfile one can use to update a test machine. 31610b444a8SGordon Ross 31710b444a8SGordon Rossdo_tar() { 318ed81dd52SAlek Pinchuk git_rev=`git rev-parse --short=8 HEAD` 31910b444a8SGordon Ross files=" 320ed81dd52SAlek Pinchuklib/svc/manifest/network/smb/server.xml 32110b444a8SGordon Rossusr/kernel/drv/$arch64/smbsrv 32210b444a8SGordon Rossusr/kernel/kmdb/$arch64/smbsrv 32310b444a8SGordon Rossusr/lib/fs/smb/$arch64/libshare_smb.so.1 32410b444a8SGordon Rossusr/lib/fs/smb/libshare_smb.so.1 32510b444a8SGordon Rossusr/lib/libsmbfs.so.1 32610b444a8SGordon Rossusr/lib/mdb/kvm/$arch64/smbsrv.so 327e0687fa3SGordon Rossusr/lib/mdb/proc/libmlsvc.so 32810b444a8SGordon Rossusr/lib/reparse/libreparse_smb.so.1 32910b444a8SGordon Rossusr/lib/security/pam_smb_passwd.so.1 330ed81dd52SAlek Pinchukusr/lib/smbsrv/dtrace 3313299f39fSGordon Rossusr/lib/libmlrpc.so.2 33210b444a8SGordon Rossusr/lib/smbsrv/libmlsvc.so.1 33310b444a8SGordon Rossusr/lib/smbsrv/libsmb.so.1 33410b444a8SGordon Rossusr/lib/smbsrv/libsmbns.so.1 3358d94f651SGordon Rossusr/lib/smbsrv/nvlprint 33610b444a8SGordon Rossusr/lib/smbsrv/smbd 33710b444a8SGordon Rossusr/sbin/smbadm 33810b444a8SGordon Rossusr/sbin/smbstat 33910b444a8SGordon Ross" 340ed81dd52SAlek Pinchuk (cd $ROOT && tar cfj ../../smbsrv-${git_rev}.tar.bz2 $files) 34110b444a8SGordon Ross} 34210b444a8SGordon Ross 34310b444a8SGordon Ross################################################################ 34410b444a8SGordon Ross 34510b444a8SGordon Rossif [ "$1" = "" ]; then 34610b444a8SGordon Ross set '?' # force usage 34710b444a8SGordon Rossfi 34810b444a8SGordon Ross 34910b444a8SGordon Rossset -x 35010b444a8SGordon Ross 35110b444a8SGordon Rossfor arg 35210b444a8SGordon Rossdo 35310b444a8SGordon Ross case "$arg" in 354b819cea2SGordon Ross install) 35510b444a8SGordon Ross build_tools 35610b444a8SGordon Ross set -e 35710b444a8SGordon Ross do_hdrs $arg 35810b444a8SGordon Ross do_kern $arg 3596f1fa39eSGordon Ross do_libs $arg 36010b444a8SGordon Ross do_cmds $arg 361*f2ae17edSMatt Barden do_tests $arg 36210b444a8SGordon Ross ;; 36310b444a8SGordon Ross lint) 36454026d5aSGordon Ross do_hdrs $arg 36510b444a8SGordon Ross do_kern $arg 3666f1fa39eSGordon Ross do_libs $arg 36710b444a8SGordon Ross do_cmds $arg 36810b444a8SGordon Ross ;; 36910b444a8SGordon Ross clean) 370*f2ae17edSMatt Barden # intentionally skip: deplib, hdrs, tools 371*f2ae17edSMatt Barden do_tests $arg 37210b444a8SGordon Ross do_cmds $arg 3736f1fa39eSGordon Ross do_libs $arg 37410b444a8SGordon Ross do_kern $arg 37510b444a8SGordon Ross ;; 37610b444a8SGordon Ross clobber) 377*f2ae17edSMatt Barden do_tests $arg 37810b444a8SGordon Ross do_cmds $arg 3796f1fa39eSGordon Ross do_libs $arg 380*f2ae17edSMatt Barden do_deplibs $arg 38110b444a8SGordon Ross do_kern $arg 38210b444a8SGordon Ross do_hdrs $arg 38310b444a8SGordon Ross clobber_tools 38410b444a8SGordon Ross ;; 3856f1fa39eSGordon Ross deplibs) 3866f1fa39eSGordon Ross build_tools 3876f1fa39eSGordon Ross set -e 3886f1fa39eSGordon Ross do_hdrs install 3896f1fa39eSGordon Ross do_deplibs install 3906f1fa39eSGordon Ross ;; 39110b444a8SGordon Ross tags) 39210b444a8SGordon Ross do_tags 39310b444a8SGordon Ross ;; 39410b444a8SGordon Ross tar) 39510b444a8SGordon Ross do_tar 39610b444a8SGordon Ross ;; 39710b444a8SGordon Ross *) 3986f1fa39eSGordon Ross echo "Usage: $0 {install|lint|clean|clobber|deplibs|tags|tar}"; 39910b444a8SGordon Ross exit 1; 40010b444a8SGordon Ross ;; 40110b444a8SGordon Ross esac 40210b444a8SGordon Rossdone 403