xref: /illumos-gate/usr/src/tools/quick/make-smbsrv (revision f20211217f12ce291fd518e61065cd273f23e4ea)
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