xref: /illumos-gate/usr/src/tools/quick/make-smbsrv (revision 7a6d80f1660abd4755c68cbd094d4a914681d26e)
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 2022 Tintri by DDN, Inc.  All rights reserved.
15#
16
17# Use normal make (not dmake) by default.
18make=${MAKE:-make}
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 $targ)
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 $targ)
90  test -f $ROOT/usr/include/rpcsvc/daemon_utils.h ||
91    (cd $SRC/head && $make $targ)
92
93  # always update the sys,smbsrv headers to be safe
94  (cd $SRC/uts/common/gssapi && $make -k $targ)
95  (cd $SRC/uts/common/sys && $make -k $targ)
96  (cd $SRC/uts/common/smb && $make -k $targ)
97  (cd $SRC/uts/common/smbsrv && $make -k $targ)
98  (cd $SRC/uts/common/c2 && $make -k $targ)
99fi
100
101if [ "$targ" = lint ]
102then
103  targ=check
104  (cd $SRC/uts/common/smb && $make -k $targ)
105  (cd $SRC/uts/common/smbsrv && $make -k $targ)
106fi
107
108# Need some library headers too...
109for lib in \
110  libc \
111  libnsl \
112  libnvpair \
113  libsocket \
114  \
115  libads \
116  libbrand \
117  libbsm \
118  libcmdutils \
119  libcryptoutil \
120  libdevid \
121  libdisasm \
122  libfakekernel	\
123  libgss \
124  libidmap \
125  libinetutil \
126  libipsecutil \
127  libkrb5 \
128  libmlrpc \
129  libpam \
130  libsaveargs \
131  libsec \
132  libscf \
133  libshare \
134  libsmbfs \
135  libsqlite \
136  libuutil \
137  libzfs_core \
138  libzfs \
139  passwdutil \
140  pkcs11 \
141  smbsrv
142do
143  (cd $SRC/lib/$lib && $make $targ)
144done
145}
146
147################################################################
148
149do_kern() {
150  case $1 in
151  lint) targ=modlintlib ;;
152  *) targ=$1 ;;
153  esac
154  ( unset SOURCEDEBUG ;
155   export NO_GENUNIX_UNIQUIFY= ;
156  (cd $SRC/uts/$x/smbsrv && $make $targ) )
157}
158
159################################################################
160#
161# Build all libraries used by the other targets in here.
162#
163# Run this once (at least) in each new workspace where you
164# will run "make-smbsrv install", if you want to avoid linking
165# against the libraries from your build host.
166#
167do_deplibs() {
168
169(cd $SRC/lib/ssp_ns && $make $1)
170(cd $SRC/lib/libc && $make $1)
171
172for lib in \
173  libm \
174  libmd \
175  libnsl \
176  libnvpair \
177  libsocket \
178  libavl \
179  libgss \
180  libgen \
181  libkrb5 \
182  libkstat \
183  libcmdutils \
184  libresolv2 \
185  libldap5 \
186  libsldap \
187  libreparse \
188  libpam \
189  libuutil \
190  libidmap \
191  libinetutil \
192  libdlpi \
193  libbsm \
194  libsec \
195  libsecdb \
196  libsqlite \
197  libumem \
198  libuuid \
199  libsaveargs \
200  libproc \
201  libscf \
202  libcryptoutil \
203  libmd5 \
204  libzfs_core \
205  libzfs \
206  pkcs11/libpkcs11
207do
208  # So we don't have to build EVERYTHING, set LDCHECKS=
209  # when building the dependent libraries.
210  (cd $SRC/lib/$lib && LDCHECKS='' $make $1)
211done
212}
213
214################################################################
215
216do_libs() {
217
218for lib in \
219  libfakekernel \
220  libads \
221  libidmap \
222  libsmbfs \
223  libmlrpc
224do
225  (cd $SRC/lib/$lib && $make $1)
226done
227
228(cd $SRC/lib/libshare && $make $1 PLUGINS=smb)
229(cd $SRC/lib/smbsrv && $make $1)
230(cd $SRC/lib/passwdutil && $make $1)
231(cd $SRC/lib/pam_modules/smb && $make $1)
232
233}
234
235################################################################
236
237do_cmds() {
238
239(cd $SRC/cmd/smbsrv && $make $1)
240
241# Build the MDB modules, WITH the linktest
242(cd $SRC/cmd/mdb/tools && $make $1)
243
244# kmdb_arch is 64-bit only
245for a in $kmdb_arch
246do
247  case $1 in
248  install|lint)
249    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
250	$make kmdb_modlinktest.o )
251    ;;
252  clean|clobber)
253    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
254	$make -k $1 )
255    ;;
256  esac
257  (cd $SRC/cmd/mdb/$x/$a/smbsrv &&
258	$make $1 KMDB_LINKTEST_ENABLE= )
259done
260
261# mdb_arch is both 32-bit & 64-bit
262for a in $mdb_arch
263do
264  # We build these libraries (to the proto area), so we need to
265  # build the mdb modules for all dependent libraries too.
266
267  for lib in libfksmbsrv libmlsvc list libavl
268  do
269    (cd $SRC/cmd/mdb/$x/$a/$lib && $make $1 )
270
271  done
272done
273}
274
275################################################################
276
277do_tests() {
278
279  for d in test/test-runner test/libmlrpc-tests test/smbsrv-tests
280  do
281       [ -f $SRC/$d/Makefile ] && (cd $SRC/$d && $make $1)
282  done
283}
284
285################################################################
286# This builds $SRC/TAGS (and cscope.files) in a helpful order.
287
288do_tags() {
289	(cd $SRC ;
290	find uts/common/sys -name '*.[ch]' -print |sort
291	find uts/common/net -name '*.[ch]' -print |sort
292	find uts/common/netinet -name '*.[ch]' -print |sort
293	find uts/common/smb -name '*.[ch]' -print |sort
294	find uts/common/smbsrv -name '*.ndl' -print |sort
295	find uts/common/smbsrv -name '*.[ch]' -print |sort
296	find uts/common/fs/smbsrv -name '*.[ch]' -print |sort
297	find uts/common/gssapi -name '*.[ch]' -print |sort
298	find common/smbsrv -name '*.[ch]' -print |sort
299	find head -name '*.h' -print |sort
300	find lib/smbsrv -name '*.[ch]' -print |sort
301	find lib/libsmbfs -name '*.[ch]' -print |sort
302	find lib/libmlrpc -name '*.ndl' -print |sort
303	find lib/libmlrpc -name '*.[ch]' -print |sort
304	find lib/libads -name '*.[ch]' -print |sort
305	find lib/libgss -name '*.[ch]' -print |sort
306	find cmd/smbsrv -name '*.[ch]' -print |sort
307	) > $SRC/cscope.files
308
309	(cd $SRC ;
310	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
311	cscope -b )
312}
313
314################################################################
315# This creates a tarfile one can use to update a test machine.
316
317do_tar() {
318	git_rev=`git rev-parse --short=8 HEAD`
319	files="
320lib/svc/manifest/network/smb/server.xml
321usr/kernel/drv/$arch64/smbsrv
322usr/kernel/kmdb/$arch64/smbsrv
323usr/lib/fs/smb/$arch64/libshare_smb.so.1
324usr/lib/fs/smb/libshare_smb.so.1
325usr/lib/libsmbfs.so.1
326usr/lib/mdb/kvm/$arch64/smbsrv.so
327usr/lib/mdb/proc/libmlsvc.so
328usr/lib/reparse/libreparse_smb.so.1
329usr/lib/security/pam_smb_passwd.so.1
330usr/lib/smbsrv/dtrace
331usr/lib/libmlrpc.so.2
332usr/lib/smbsrv/libmlsvc.so.1
333usr/lib/smbsrv/libsmb.so.1
334usr/lib/smbsrv/libsmbns.so.1
335usr/lib/smbsrv/nvlprint
336usr/lib/smbsrv/smbd
337usr/sbin/smbadm
338usr/sbin/smbstat
339"
340	(cd $ROOT && tar cfj ../../smbsrv-${git_rev}.tar.bz2 $files)
341}
342
343################################################################
344
345if [ "$1" = "" ]; then
346  set '?' # force usage
347fi
348
349set -x
350
351for arg
352do
353  case "$arg" in
354  install)
355    build_tools
356    set -e
357    do_hdrs $arg
358    do_kern $arg
359    do_libs $arg
360    do_cmds $arg
361    do_tests $arg
362    ;;
363  lint)
364    do_hdrs $arg
365    do_kern $arg
366    do_libs $arg
367    do_cmds $arg
368    ;;
369  clean)
370    # intentionally skip: deplib, hdrs, tools
371    do_tests $arg
372    do_cmds $arg
373    do_libs $arg
374    do_kern $arg
375    ;;
376  clobber)
377    do_tests $arg
378    do_cmds $arg
379    do_libs $arg
380    do_deplibs $arg
381    do_kern $arg
382    do_hdrs $arg
383    clobber_tools
384    ;;
385  deplibs)
386    build_tools
387    set -e
388    do_hdrs install
389    do_deplibs install
390    ;;
391  tags)
392    do_tags
393    ;;
394  tar)
395    do_tar
396    ;;
397  *)
398    echo "Usage: $0 {install|lint|clean|clobber|deplibs|tags|tar}";
399    exit 1;
400    ;;
401  esac
402done
403