xref: /illumos-gate/usr/src/tools/quick/make-smbsrv (revision 34bbc83afbf22a6f8e504cb99d76c97c017cb5f4)
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 \
129*34bbc83aSGordon Ross  libofmt \
13010b444a8SGordon Ross  libpam \
1316f1fa39eSGordon Ross  libsaveargs \
13210b444a8SGordon Ross  libsec \
13310b444a8SGordon Ross  libscf \
13410b444a8SGordon Ross  libshare \
13510b444a8SGordon Ross  libsmbfs \
13610b444a8SGordon Ross  libsqlite \
13710b444a8SGordon Ross  libuutil \
13854026d5aSGordon Ross  libzfs_core \
13954026d5aSGordon Ross  libzfs \
14010b444a8SGordon Ross  passwdutil \
14154026d5aSGordon Ross  pkcs11 \
14210b444a8SGordon Ross  smbsrv
14310b444a8SGordon Rossdo
14410b444a8SGordon Ross  (cd $SRC/lib/$lib && $make $targ)
14510b444a8SGordon Rossdone
14610b444a8SGordon Ross}
14710b444a8SGordon Ross
14810b444a8SGordon Ross################################################################
14910b444a8SGordon Ross
15010b444a8SGordon Rossdo_kern() {
15110b444a8SGordon Ross  case $1 in
15210b444a8SGordon Ross  lint) targ=modlintlib ;;
15310b444a8SGordon Ross  *) targ=$1 ;;
15410b444a8SGordon Ross  esac
15510b444a8SGordon Ross  ( unset SOURCEDEBUG ;
156f2ae17edSMatt Barden   export NO_GENUNIX_UNIQUIFY= ;
15710b444a8SGordon Ross  (cd $SRC/uts/$x/smbsrv && $make $targ) )
15810b444a8SGordon Ross}
15910b444a8SGordon Ross
16010b444a8SGordon Ross################################################################
1616f1fa39eSGordon Ross#
1626f1fa39eSGordon Ross# Build all libraries used by the other targets in here.
1636f1fa39eSGordon Ross#
1646f1fa39eSGordon Ross# Run this once (at least) in each new workspace where you
1656f1fa39eSGordon Ross# will run "make-smbsrv install", if you want to avoid linking
1666f1fa39eSGordon Ross# against the libraries from your build host.
1676f1fa39eSGordon Ross#
1686f1fa39eSGordon Rossdo_deplibs() {
16910b444a8SGordon Ross
1706f1fa39eSGordon Ross(cd $SRC/lib/ssp_ns && $make $1)
1716f1fa39eSGordon Ross(cd $SRC/lib/libc && $make $1)
17210b444a8SGordon Ross
17310b444a8SGordon Rossfor lib in \
1746f1fa39eSGordon Ross  libm \
1756f1fa39eSGordon Ross  libmd \
1766f1fa39eSGordon Ross  libnsl \
1776f1fa39eSGordon Ross  libnvpair \
1786f1fa39eSGordon Ross  libsocket \
17910b444a8SGordon Ross  libavl \
18012b65585SGordon Ross  libgss \
1816f1fa39eSGordon Ross  libgen \
18212b65585SGordon Ross  libkrb5 \
1836f1fa39eSGordon Ross  libkstat \
18410b444a8SGordon Ross  libcmdutils \
1856f1fa39eSGordon Ross  libresolv2 \
1866f1fa39eSGordon Ross  libldap5 \
1876f1fa39eSGordon Ross  libsldap \
1886f1fa39eSGordon Ross  libreparse \
1896f1fa39eSGordon Ross  libpam \
1906f1fa39eSGordon Ross  libuutil \
1916f1fa39eSGordon Ross  libidmap \
1926f1fa39eSGordon Ross  libinetutil \
1936f1fa39eSGordon Ross  libdlpi \
1946f1fa39eSGordon Ross  libbsm \
1956f1fa39eSGordon Ross  libsec \
1966f1fa39eSGordon Ross  libsecdb \
19710b444a8SGordon Ross  libsqlite \
1986f1fa39eSGordon Ross  libumem \
1996f1fa39eSGordon Ross  libuuid \
2006f1fa39eSGordon Ross  libsaveargs \
2016f1fa39eSGordon Ross  libproc \
2026f1fa39eSGordon Ross  libscf \
2036f1fa39eSGordon Ross  libcryptoutil \
2046f1fa39eSGordon Ross  libmd5 \
2056f1fa39eSGordon Ross  libzfs_core \
2066f1fa39eSGordon Ross  libzfs \
2076f1fa39eSGordon Ross  pkcs11/libpkcs11
20810b444a8SGordon Rossdo
2096f1fa39eSGordon Ross  # So we don't have to build EVERYTHING, set LDCHECKS=
2106f1fa39eSGordon Ross  # when building the dependent libraries.
2116f1fa39eSGordon Ross  (cd $SRC/lib/$lib && LDCHECKS='' $make $1)
21210b444a8SGordon Rossdone
213b819cea2SGordon Ross}
214b819cea2SGordon Ross
2156f1fa39eSGordon Ross################################################################
216b819cea2SGordon Ross
2176f1fa39eSGordon Rossdo_libs() {
218b819cea2SGordon Ross
219b819cea2SGordon Rossfor lib in \
220b819cea2SGordon Ross  libfakekernel \
221b3700b07SGordon Ross  libads \
222f2ae17edSMatt Barden  libidmap \
223*34bbc83aSGordon Ross  libofmt \
2243299f39fSGordon Ross  libsmbfs \
2253299f39fSGordon Ross  libmlrpc
226b819cea2SGordon Rossdo
227b819cea2SGordon Ross  (cd $SRC/lib/$lib && $make $1)
228b819cea2SGordon Rossdone
22910b444a8SGordon Ross
23010b444a8SGordon Ross(cd $SRC/lib/libshare && $make $1 PLUGINS=smb)
23110b444a8SGordon Ross(cd $SRC/lib/smbsrv && $make $1)
23210b444a8SGordon Ross(cd $SRC/lib/passwdutil && $make $1)
23310b444a8SGordon Ross(cd $SRC/lib/pam_modules/smb && $make $1)
23410b444a8SGordon Ross
23510b444a8SGordon Ross}
23610b444a8SGordon Ross
23710b444a8SGordon Ross################################################################
23810b444a8SGordon Ross
23910b444a8SGordon Rossdo_cmds() {
24010b444a8SGordon Ross
24110b444a8SGordon Ross(cd $SRC/cmd/smbsrv && $make $1)
24210b444a8SGordon Ross
24310b444a8SGordon Ross# Build the MDB modules, WITH the linktest
24410b444a8SGordon Ross(cd $SRC/cmd/mdb/tools && $make $1)
245b9538c21SGordon Ross
246b9538c21SGordon Ross# kmdb_arch is 64-bit only
247b9538c21SGordon Rossfor a in $kmdb_arch
24810b444a8SGordon Rossdo
24910b444a8SGordon Ross  case $1 in
25010b444a8SGordon Ross  install|lint)
25110b444a8SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
25210b444a8SGordon Ross	$make kmdb_modlinktest.o )
25310b444a8SGordon Ross    ;;
25410b444a8SGordon Ross  clean|clobber)
25510b444a8SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
25610b444a8SGordon Ross	$make -k $1 )
25710b444a8SGordon Ross    ;;
25810b444a8SGordon Ross  esac
25910b444a8SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/smbsrv &&
26010b444a8SGordon Ross	$make $1 KMDB_LINKTEST_ENABLE= )
261b9538c21SGordon Rossdone
262b9538c21SGordon Ross
263b9538c21SGordon Ross# mdb_arch is both 32-bit & 64-bit
264b9538c21SGordon Rossfor a in $mdb_arch
265b9538c21SGordon Rossdo
266b819cea2SGordon Ross  # We build these libraries (to the proto area), so we need to
267e0687fa3SGordon Ross  # build the mdb modules for all dependent libraries too.
268b819cea2SGordon Ross
269ba5ca684SMatt Barden  for lib in libfksmbsrv libmlsvc list libavl
270e0687fa3SGordon Ross  do
271e0687fa3SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/$lib && $make $1 )
272e0687fa3SGordon Ross
273e0687fa3SGordon Ross  done
27410b444a8SGordon Rossdone
27510b444a8SGordon Ross}
27610b444a8SGordon Ross
27710b444a8SGordon Ross################################################################
278f2ae17edSMatt Barden
279f2ae17edSMatt Bardendo_tests() {
280f2ae17edSMatt Barden
281f2ae17edSMatt Barden  for d in test/test-runner test/libmlrpc-tests test/smbsrv-tests
282f2ae17edSMatt Barden  do
283f2ae17edSMatt Barden       [ -f $SRC/$d/Makefile ] && (cd $SRC/$d && $make $1)
284f2ae17edSMatt Barden  done
285f2ae17edSMatt Barden}
286f2ae17edSMatt Barden
287f2ae17edSMatt Barden################################################################
28810b444a8SGordon Ross# This builds $SRC/TAGS (and cscope.files) in a helpful order.
28910b444a8SGordon Ross
29010b444a8SGordon Rossdo_tags() {
29110b444a8SGordon Ross	(cd $SRC ;
29210b444a8SGordon Ross	find uts/common/sys -name '*.[ch]' -print |sort
29310b444a8SGordon Ross	find uts/common/net -name '*.[ch]' -print |sort
29410b444a8SGordon Ross	find uts/common/netinet -name '*.[ch]' -print |sort
29510b444a8SGordon Ross	find uts/common/smb -name '*.[ch]' -print |sort
29610b444a8SGordon Ross	find uts/common/smbsrv -name '*.ndl' -print |sort
29710b444a8SGordon Ross	find uts/common/smbsrv -name '*.[ch]' -print |sort
29810b444a8SGordon Ross	find uts/common/fs/smbsrv -name '*.[ch]' -print |sort
29912b65585SGordon Ross	find uts/common/gssapi -name '*.[ch]' -print |sort
30054026d5aSGordon Ross	find common/smbsrv -name '*.[ch]' -print |sort
30112b65585SGordon Ross	find head -name '*.h' -print |sort
30210b444a8SGordon Ross	find lib/smbsrv -name '*.[ch]' -print |sort
30312b65585SGordon Ross	find lib/libsmbfs -name '*.[ch]' -print |sort
304d1855c81SGordon Ross	find lib/libmlrpc -name '*.ndl' -print |sort
305d1855c81SGordon Ross	find lib/libmlrpc -name '*.[ch]' -print |sort
30612b65585SGordon Ross	find lib/libads -name '*.[ch]' -print |sort
30712b65585SGordon Ross	find lib/libgss -name '*.[ch]' -print |sort
30810b444a8SGordon Ross	find cmd/smbsrv -name '*.[ch]' -print |sort
30910b444a8SGordon Ross	) > $SRC/cscope.files
31010b444a8SGordon Ross
31110b444a8SGordon Ross	(cd $SRC ;
31210b444a8SGordon Ross	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
31310b444a8SGordon Ross	cscope -b )
31410b444a8SGordon Ross}
31510b444a8SGordon Ross
31610b444a8SGordon Ross################################################################
31710b444a8SGordon Ross# This creates a tarfile one can use to update a test machine.
31810b444a8SGordon Ross
31910b444a8SGordon Rossdo_tar() {
320ed81dd52SAlek Pinchuk	git_rev=`git rev-parse --short=8 HEAD`
32110b444a8SGordon Ross	files="
322ed81dd52SAlek Pinchuklib/svc/manifest/network/smb/server.xml
32310b444a8SGordon Rossusr/kernel/drv/$arch64/smbsrv
32410b444a8SGordon Rossusr/kernel/kmdb/$arch64/smbsrv
32510b444a8SGordon Rossusr/lib/fs/smb/$arch64/libshare_smb.so.1
32610b444a8SGordon Rossusr/lib/fs/smb/libshare_smb.so.1
32710b444a8SGordon Rossusr/lib/libsmbfs.so.1
32810b444a8SGordon Rossusr/lib/mdb/kvm/$arch64/smbsrv.so
329e0687fa3SGordon Rossusr/lib/mdb/proc/libmlsvc.so
33010b444a8SGordon Rossusr/lib/reparse/libreparse_smb.so.1
33110b444a8SGordon Rossusr/lib/security/pam_smb_passwd.so.1
332ed81dd52SAlek Pinchukusr/lib/smbsrv/dtrace
3333299f39fSGordon Rossusr/lib/libmlrpc.so.2
33410b444a8SGordon Rossusr/lib/smbsrv/libmlsvc.so.1
33510b444a8SGordon Rossusr/lib/smbsrv/libsmb.so.1
33610b444a8SGordon Rossusr/lib/smbsrv/libsmbns.so.1
3378d94f651SGordon Rossusr/lib/smbsrv/nvlprint
33810b444a8SGordon Rossusr/lib/smbsrv/smbd
33910b444a8SGordon Rossusr/sbin/smbadm
34010b444a8SGordon Rossusr/sbin/smbstat
34110b444a8SGordon Ross"
342ed81dd52SAlek Pinchuk	(cd $ROOT && tar cfj ../../smbsrv-${git_rev}.tar.bz2 $files)
34310b444a8SGordon Ross}
34410b444a8SGordon Ross
34510b444a8SGordon Ross################################################################
34610b444a8SGordon Ross
34710b444a8SGordon Rossif [ "$1" = "" ]; then
34810b444a8SGordon Ross  set '?' # force usage
34910b444a8SGordon Rossfi
35010b444a8SGordon Ross
35110b444a8SGordon Rossset -x
35210b444a8SGordon Ross
35310b444a8SGordon Rossfor arg
35410b444a8SGordon Rossdo
35510b444a8SGordon Ross  case "$arg" in
356b819cea2SGordon Ross  install)
35710b444a8SGordon Ross    build_tools
35810b444a8SGordon Ross    set -e
35910b444a8SGordon Ross    do_hdrs $arg
36010b444a8SGordon Ross    do_kern $arg
3616f1fa39eSGordon Ross    do_libs $arg
36210b444a8SGordon Ross    do_cmds $arg
363f2ae17edSMatt Barden    do_tests $arg
36410b444a8SGordon Ross    ;;
36510b444a8SGordon Ross  lint)
36654026d5aSGordon Ross    do_hdrs $arg
36710b444a8SGordon Ross    do_kern $arg
3686f1fa39eSGordon Ross    do_libs $arg
36910b444a8SGordon Ross    do_cmds $arg
37010b444a8SGordon Ross    ;;
37110b444a8SGordon Ross  clean)
372f2ae17edSMatt Barden    # intentionally skip: deplib, hdrs, tools
373f2ae17edSMatt Barden    do_tests $arg
37410b444a8SGordon Ross    do_cmds $arg
3756f1fa39eSGordon Ross    do_libs $arg
37610b444a8SGordon Ross    do_kern $arg
37710b444a8SGordon Ross    ;;
37810b444a8SGordon Ross  clobber)
379f2ae17edSMatt Barden    do_tests $arg
38010b444a8SGordon Ross    do_cmds $arg
3816f1fa39eSGordon Ross    do_libs $arg
382f2ae17edSMatt Barden    do_deplibs $arg
38310b444a8SGordon Ross    do_kern $arg
38410b444a8SGordon Ross    do_hdrs $arg
38510b444a8SGordon Ross    clobber_tools
38610b444a8SGordon Ross    ;;
3876f1fa39eSGordon Ross  deplibs)
3886f1fa39eSGordon Ross    build_tools
3896f1fa39eSGordon Ross    set -e
3906f1fa39eSGordon Ross    do_hdrs install
3916f1fa39eSGordon Ross    do_deplibs install
3926f1fa39eSGordon Ross    ;;
39310b444a8SGordon Ross  tags)
39410b444a8SGordon Ross    do_tags
39510b444a8SGordon Ross    ;;
39610b444a8SGordon Ross  tar)
39710b444a8SGordon Ross    do_tar
39810b444a8SGordon Ross    ;;
39910b444a8SGordon Ross  *)
4006f1fa39eSGordon Ross    echo "Usage: $0 {install|lint|clean|clobber|deplibs|tags|tar}";
40110b444a8SGordon Ross    exit 1;
40210b444a8SGordon Ross    ;;
40310b444a8SGordon Ross  esac
40410b444a8SGordon Rossdone
405