xref: /illumos-gate/usr/src/tools/quick/make-smbsrv (revision b9538c2103fde34bfe8a8c2b3e878ecd1586d182)
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#
14*b9538c21SGordon Ross# Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
1510b444a8SGordon Ross#
1610b444a8SGordon Ross
1710b444a8SGordon Ross# Use distributed make (dmake) by default.
1810b444a8SGordon Rossmake=${MAKE:-dmake}
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
35*b9538c21SGordon Ross	kmdb_arch="amd64"
3610b444a8SGordon Ross	mdb_arch="ia32 amd64"
3710b444a8SGordon Ross	arch64=amd64
3810b444a8SGordon Ross	;;
3910b444a8SGordon Rosssparc)
4010b444a8SGordon Ross	x=sparc
41*b9538c21SGordon Ross	kmdb_arch=v9
42*b9538c21SGordon 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 ||
8310b444a8SGordon Ross    (cd $SRC/head && $make -k install_h)
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 ||
8910b444a8SGordon Ross    (cd $SRC/uts && $make -k install_h)
9010b444a8SGordon Ross  test -f $ROOT/usr/include/rpcsvc/daemon_utils.h ||
9110b444a8SGordon Ross    (cd $SRC/head && $make install_h)
9210b444a8SGordon Ross
9310b444a8SGordon Ross  # always update the smbsrv headers to be safe
9412b65585SGordon Ross  (cd $SRC/uts/common/gssapi && $make -k install_h)
9510b444a8SGordon Ross  (cd $SRC/uts/common/sys && $make -k install_h)
9610b444a8SGordon Ross  (cd $SRC/uts/common/smb && $make -k install_h)
9710b444a8SGordon Ross  (cd $SRC/uts/common/smbsrv && $make -k install_h)
9810b444a8SGordon Ross
9910b444a8SGordon Rossfi
10010b444a8SGordon Ross
10110b444a8SGordon Ross# Need some library headers too...
10210b444a8SGordon Rossfor lib in \
103b3700b07SGordon Ross  libads \
10410b444a8SGordon Ross  libbsm \
10510b444a8SGordon Ross  libcmdutils \
10610b444a8SGordon Ross  libcryptoutil \
10710b444a8SGordon Ross  libdevid \
108b819cea2SGordon Ross  libfakekernel	\
10912b65585SGordon Ross  libgss \
11012b65585SGordon Ross  libkrb5 \
11110b444a8SGordon Ross  libidmap \
11210b444a8SGordon Ross  libpam \
11310b444a8SGordon Ross  libsec \
11410b444a8SGordon Ross  libscf \
11510b444a8SGordon Ross  libshare \
11610b444a8SGordon Ross  libsmbfs \
11710b444a8SGordon Ross  libsqlite \
11810b444a8SGordon Ross  libuutil \
11910b444a8SGordon Ross  passwdutil \
12010b444a8SGordon Ross  smbsrv
12110b444a8SGordon Rossdo
12210b444a8SGordon Ross  (cd $SRC/lib/$lib && $make $targ)
12310b444a8SGordon Rossdone
12410b444a8SGordon Ross}
12510b444a8SGordon Ross
12610b444a8SGordon Ross################################################################
12710b444a8SGordon Ross
12810b444a8SGordon Rossdo_kern() {
12910b444a8SGordon Ross  case $1 in
13010b444a8SGordon Ross  lint) targ=modlintlib ;;
13110b444a8SGordon Ross  *) targ=$1 ;;
13210b444a8SGordon Ross  esac
13310b444a8SGordon Ross  ( unset SOURCEDEBUG ;
13410b444a8SGordon Ross  (cd $SRC/uts/$x/nsmb && $make $targ) ;
13510b444a8SGordon Ross  (cd $SRC/uts/$x/smbfs && $make $targ) ;
13610b444a8SGordon Ross  (cd $SRC/uts/$x/smbsrv && $make $targ) )
13710b444a8SGordon Ross}
13810b444a8SGordon Ross
13910b444a8SGordon Ross################################################################
14010b444a8SGordon Ross
141b819cea2SGordon Ross# Note lib1 builds prerequisite libraries not delivered by the
142b819cea2SGordon Ross# tar file we create below.  To accelerate clean/install, we
143b819cea2SGordon Ross# skip these on clean (but still nuke them for clobber)
144b819cea2SGordon Ross
145b819cea2SGordon Rossdo_lib1() {
14610b444a8SGordon Ross
14710b444a8SGordon Rossfor lib in \
14810b444a8SGordon Ross  libavl \
14912b65585SGordon Ross  libgss \
15012b65585SGordon Ross  libkrb5 \
15110b444a8SGordon Ross  libcmdutils \
15210b444a8SGordon Ross  libsqlite \
15310b444a8SGordon Ross  libuutil
15410b444a8SGordon Rossdo
15510b444a8SGordon Ross  (cd $SRC/lib/$lib && $make $1)
15610b444a8SGordon Rossdone
157b819cea2SGordon Ross}
158b819cea2SGordon Ross
159b819cea2SGordon Ross# lib2 builds stuff we include in the tar file,
160b819cea2SGordon Ross# or that we don't mind rebuilding after clean.
161b819cea2SGordon Ross
162b819cea2SGordon Rossdo_lib2() {
163b819cea2SGordon Ross
164b819cea2SGordon Rossfor lib in \
165b819cea2SGordon Ross  libfakekernel \
166b3700b07SGordon Ross  libads \
167b819cea2SGordon Ross  libsmbfs
168b819cea2SGordon Rossdo
169b819cea2SGordon Ross  (cd $SRC/lib/$lib && $make $1)
170b819cea2SGordon Rossdone
17110b444a8SGordon Ross
17210b444a8SGordon Ross(cd $SRC/lib/libshare && $make $1 PLUGINS=smb)
17310b444a8SGordon Ross(cd $SRC/lib/smbsrv && $make $1)
17410b444a8SGordon Ross(cd $SRC/lib/passwdutil && $make $1)
17510b444a8SGordon Ross(cd $SRC/lib/pam_modules/smb && $make $1)
17610b444a8SGordon Ross
17710b444a8SGordon Ross}
17810b444a8SGordon Ross
17910b444a8SGordon Ross################################################################
18010b444a8SGordon Ross
18110b444a8SGordon Rossdo_cmds() {
18210b444a8SGordon Ross
18310b444a8SGordon Rosscase $1 in
18410b444a8SGordon Rossinstall)
18510b444a8SGordon Ross  # mount programs need fslib.o
18610b444a8SGordon Ross  (cd $SRC/cmd/fs.d && $make fslib.o)
18710b444a8SGordon Ross  (cd $SRC/cmd/fs.d/smbclnt && $make $1 catalog)
18810b444a8SGordon Ross  ;;
18910b444a8SGordon Rossclean|clobber)
19010b444a8SGordon Ross  (cd $SRC/cmd/fs.d/smbclnt && $make $1)
19110b444a8SGordon Ross  (cd $SRC/cmd/fs.d && $make ${1}_local)
19210b444a8SGordon Ross  ;;
19310b444a8SGordon Rossesac
19410b444a8SGordon Ross
19510b444a8SGordon Ross(cd $SRC/cmd/devfsadm && $make $1)
19610b444a8SGordon Ross(cd $SRC/cmd/smbsrv && $make $1)
19710b444a8SGordon Ross
19810b444a8SGordon Ross# Build the MDB modules, WITH the linktest
19910b444a8SGordon Ross(cd $SRC/cmd/mdb/tools && $make $1)
200*b9538c21SGordon Ross
201*b9538c21SGordon Ross# kmdb_arch is 64-bit only
202*b9538c21SGordon Rossfor a in $kmdb_arch
20310b444a8SGordon Rossdo
20410b444a8SGordon Ross  case $1 in
20510b444a8SGordon Ross  install|lint)
20610b444a8SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
20710b444a8SGordon Ross	$make kmdb_modlinktest.o )
20810b444a8SGordon Ross    ;;
20910b444a8SGordon Ross  clean|clobber)
21010b444a8SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
21110b444a8SGordon Ross	$make -k $1 )
21210b444a8SGordon Ross    ;;
21310b444a8SGordon Ross  esac
21410b444a8SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/nsmb &&
21510b444a8SGordon Ross	$make $1 KMDB_LINKTEST_ENABLE= )
21610b444a8SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/smbfs &&
21710b444a8SGordon Ross	$make $1 KMDB_LINKTEST_ENABLE= )
21810b444a8SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/smbsrv &&
21910b444a8SGordon Ross	$make $1 KMDB_LINKTEST_ENABLE= )
220*b9538c21SGordon Rossdone
221*b9538c21SGordon Ross
222*b9538c21SGordon Ross# mdb_arch is both 32-bit & 64-bit
223*b9538c21SGordon Rossfor a in $mdb_arch
224*b9538c21SGordon Rossdo
225b819cea2SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/libfksmbsrv &&
226*b9538c21SGordon Ross	$make $1 )
227b819cea2SGordon Ross
228b819cea2SGordon Ross# We build these libraries (to the proto area), so we need to
229b819cea2SGordon Ross# build the mdb modules too so mdb will load them.
230b819cea2SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/libcmdutils &&
231b819cea2SGordon Ross	$make $1 )
232b819cea2SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/libavl &&
233b819cea2SGordon Ross	$make $1 )
234b819cea2SGordon Ross
23510b444a8SGordon Rossdone
23610b444a8SGordon Ross
23710b444a8SGordon Ross(cd $SRC/cmd/Adm/sun && $make $1)
23810b444a8SGordon Ross
23910b444a8SGordon Ross# Deal with mode 0400 file annoyance...
24010b444a8SGordon Ross# See usr/src/cmd/Adm/sun/Makefile
24110b444a8SGordon Rossif [ $1 = install ]; then
24210b444a8SGordon Ross  chmod a+r $ROOT/var/smb/smbpasswd
24310b444a8SGordon Rossfi
24410b444a8SGordon Ross}
24510b444a8SGordon Ross
24610b444a8SGordon Ross
24710b444a8SGordon Ross################################################################
24810b444a8SGordon Ross# This builds $SRC/TAGS (and cscope.files) in a helpful order.
24910b444a8SGordon Ross
25010b444a8SGordon Rossdo_tags() {
25110b444a8SGordon Ross	(cd $SRC ;
25210b444a8SGordon Ross	find uts/common/sys -name '*.[ch]' -print |sort
25310b444a8SGordon Ross	find uts/common/net -name '*.[ch]' -print |sort
25410b444a8SGordon Ross	find uts/common/netinet -name '*.[ch]' -print |sort
25510b444a8SGordon Ross	find uts/common/smb -name '*.[ch]' -print |sort
25610b444a8SGordon Ross	find uts/common/smbsrv -name '*.ndl' -print |sort
25710b444a8SGordon Ross	find uts/common/smbsrv -name '*.[ch]' -print |sort
25810b444a8SGordon Ross	find uts/common/fs/smbsrv -name '*.[ch]' -print |sort
25912b65585SGordon Ross	find uts/common/gssapi -name '*.[ch]' -print |sort
26012b65585SGordon Ross	find head -name '*.h' -print |sort
26110b444a8SGordon Ross	find lib/smbsrv -name '*.[ch]' -print |sort
26212b65585SGordon Ross	find lib/libsmbfs -name '*.[ch]' -print |sort
26312b65585SGordon Ross	find lib/libads -name '*.[ch]' -print |sort
26412b65585SGordon Ross	find lib/libgss -name '*.[ch]' -print |sort
26510b444a8SGordon Ross	find cmd/smbsrv -name '*.[ch]' -print |sort
26610b444a8SGordon Ross	find common/smbsrv -name '*.[ch]' -print |sort
26710b444a8SGordon Ross	) > $SRC/cscope.files
26810b444a8SGordon Ross
26910b444a8SGordon Ross	(cd $SRC ;
27010b444a8SGordon Ross	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
27110b444a8SGordon Ross	cscope -b )
27210b444a8SGordon Ross}
27310b444a8SGordon Ross
27410b444a8SGordon Ross################################################################
27510b444a8SGordon Ross# This creates a tarfile one can use to update a test machine.
27610b444a8SGordon Ross
27710b444a8SGordon Rossdo_tar() {
278ed81dd52SAlek Pinchuk	git_rev=`git rev-parse --short=8 HEAD`
27910b444a8SGordon Ross	files="
280ed81dd52SAlek Pinchuklib/svc/manifest/network/smb/server.xml
28110b444a8SGordon Rossusr/kernel/drv/$arch64/smbsrv
28210b444a8SGordon Rossusr/kernel/kmdb/$arch64/smbsrv
28310b444a8SGordon Rossusr/lib/fs/smb/$arch64/libshare_smb.so.1
28410b444a8SGordon Rossusr/lib/fs/smb/libshare_smb.so.1
28510b444a8SGordon Rossusr/lib/libsmbfs.so.1
28610b444a8SGordon Rossusr/lib/mdb/kvm/$arch64/smbsrv.so
28710b444a8SGordon Rossusr/lib/reparse/libreparse_smb.so.1
28810b444a8SGordon Rossusr/lib/security/pam_smb_passwd.so.1
289ed81dd52SAlek Pinchukusr/lib/smbsrv/dtrace
29010b444a8SGordon Rossusr/lib/smbsrv/libmlrpc.so.1
29110b444a8SGordon Rossusr/lib/smbsrv/libmlsvc.so.1
29210b444a8SGordon Rossusr/lib/smbsrv/libsmb.so.1
29310b444a8SGordon Rossusr/lib/smbsrv/libsmbns.so.1
29410b444a8SGordon Rossusr/lib/smbsrv/smbd
29510b444a8SGordon Rossusr/sbin/devfsadm
29610b444a8SGordon Rossusr/sbin/smbadm
29710b444a8SGordon Rossusr/sbin/smbstat
29810b444a8SGordon Ross"
29910b444a8SGordon Ross
300ed81dd52SAlek Pinchuk	(cd $ROOT && tar cfj ../../smbsrv-${git_rev}.tar.bz2 $files)
30110b444a8SGordon Ross}
30210b444a8SGordon Ross
30310b444a8SGordon Ross################################################################
30410b444a8SGordon Ross
30510b444a8SGordon Rossif [ "$1" = "" ]; then
30610b444a8SGordon Ross  set '?' # force usage
30710b444a8SGordon Rossfi
30810b444a8SGordon Ross
30910b444a8SGordon Rossset -x
31010b444a8SGordon Ross
31110b444a8SGordon Rossfor arg
31210b444a8SGordon Rossdo
31310b444a8SGordon Ross  case "$arg" in
314b819cea2SGordon Ross  install)
31510b444a8SGordon Ross    build_tools
31610b444a8SGordon Ross    set -e
31710b444a8SGordon Ross    do_hdrs $arg
31810b444a8SGordon Ross    do_kern $arg
319b819cea2SGordon Ross    do_lib1 $arg
320b819cea2SGordon Ross    do_lib2 $arg
32110b444a8SGordon Ross    do_cmds $arg
32210b444a8SGordon Ross    ;;
32310b444a8SGordon Ross  lint)
32410b444a8SGordon Ross    do_kern $arg
325b819cea2SGordon Ross    do_lib1 $arg
326b819cea2SGordon Ross    do_lib2 $arg
32710b444a8SGordon Ross    do_cmds $arg
32810b444a8SGordon Ross    ;;
32910b444a8SGordon Ross  clean)
330b819cea2SGordon Ross    # intentionally skip: lib1, hdrs, tools
33110b444a8SGordon Ross    do_cmds $arg
332b819cea2SGordon Ross    do_lib2 $arg
33310b444a8SGordon Ross    do_kern $arg
33410b444a8SGordon Ross    ;;
33510b444a8SGordon Ross  clobber)
33610b444a8SGordon Ross    do_cmds $arg
337b819cea2SGordon Ross    do_lib2 $arg
338b819cea2SGordon Ross    do_lib1 $arg
33910b444a8SGordon Ross    do_kern $arg
34010b444a8SGordon Ross    do_hdrs $arg
34110b444a8SGordon Ross    clobber_tools
34210b444a8SGordon Ross    ;;
34310b444a8SGordon Ross  tags)
34410b444a8SGordon Ross    do_tags
34510b444a8SGordon Ross    ;;
34610b444a8SGordon Ross  tar)
34710b444a8SGordon Ross    do_tar
34810b444a8SGordon Ross    ;;
34910b444a8SGordon Ross  *)
350b819cea2SGordon Ross    echo "Usage: $0 {install|lint|clean|clobber|tags|tar}";
35110b444a8SGordon Ross    exit 1;
35210b444a8SGordon Ross    ;;
35310b444a8SGordon Ross  esac
35410b444a8SGordon Rossdone
355