xref: /illumos-gate/usr/src/tools/quick/make-smbsrv (revision 45818ee124adeaaf947698996b4f4c722afc6d1f)
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 2014 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
23export SOURCEDEBUG=yes
24
25[ -n "$SRC" ] || {
26  echo "SRC not set.  Run 'ws' or 'bldenv' first."
27  exit 1
28}
29
30cpu=`uname -p`
31case $cpu in
32i386)
33	x=intel
34	mdb_arch="ia32 amd64"
35	arch64=amd64
36	;;
37sparc)
38	x=sparc
39	mdb_arch=v9
40	arch64=sparcv9
41	;;
42*)  echo "Huh?" ; exit 1;;
43esac
44
45################################################################
46
47build_tools() {
48  test -f $SRC/tools/proto/root_i386-nd/opt/onbld/bin/genoffsets ||
49    (cd $SRC/tools && $make install)
50  (cd $SRC/common/mapfiles; $make install)
51}
52
53clobber_tools() {
54  (cd $SRC/tools && $make clobber)
55  (cd $SRC/common/mapfiles; $make clobber)
56}
57
58################################################################
59
60do_hdrs() {
61
62targ=$1
63if [ "$targ" = clobber ]
64then
65  (cd $SRC/uts && $make -k clobber_h)
66  (cd $SRC/head && $make clobber)
67fi
68
69if [ "$targ" = install ]
70then
71  targ=install_h
72
73  # Just the parts of "make sgs" we need, and
74  # skip them if they appear to be done.
75  # ... stuff under $SRC
76  test -f $SRC/uts/common/sys/priv_names.h ||
77    (cd $SRC/uts && $make -k all_h)
78
79  test -f $SRC/head/rpcsvc/nispasswd.h ||
80    (cd $SRC/head && $make -k install_h)
81
82  # ... stuff under $ROOT (proto area)
83  test -d $ROOT/usr/include/sys ||
84    (cd $SRC && $make rootdirs)
85  test -f $ROOT/usr/include/sys/types.h ||
86    (cd $SRC/uts && $make -k install_h)
87  test -f $ROOT/usr/include/rpcsvc/daemon_utils.h ||
88    (cd $SRC/head && $make install_h)
89
90  # always update the smbsrv headers to be safe
91  # test -f $ROOT/usr/include/smbsrv/wintypes.h ||
92    (cd $SRC/uts/common/sys && $make -k install_h)
93    (cd $SRC/uts/common/smb && $make -k install_h)
94    (cd $SRC/uts/common/smbsrv && $make -k install_h)
95
96fi
97
98# Need some library headers too...
99for lib in \
100  libbsm \
101  libcmdutils \
102  libcryptoutil \
103  libdevid \
104  libfakekernel	\
105  libidmap \
106  libpam \
107  libsec \
108  libscf \
109  libshare \
110  libsmbfs \
111  libsqlite \
112  libuutil \
113  passwdutil \
114  smbsrv
115do
116  (cd $SRC/lib/$lib && $make $targ)
117done
118}
119
120################################################################
121
122do_kern() {
123  case $1 in
124  lint) targ=modlintlib ;;
125  *) targ=$1 ;;
126  esac
127  ( unset SOURCEDEBUG ;
128  (cd $SRC/uts/$x/nsmb && $make $targ) ;
129  (cd $SRC/uts/$x/smbfs && $make $targ) ;
130  (cd $SRC/uts/$x/smbsrv && $make $targ) )
131}
132
133################################################################
134
135# Note lib1 builds prerequisite libraries not delivered by the
136# tar file we create below.  To accelerate clean/install, we
137# skip these on clean (but still nuke them for clobber)
138
139do_lib1() {
140
141for lib in \
142  libavl \
143  libcmdutils \
144  libsqlite \
145  libuutil
146do
147  (cd $SRC/lib/$lib && $make $1)
148done
149}
150
151# lib2 builds stuff we include in the tar file,
152# or that we don't mind rebuilding after clean.
153
154do_lib2() {
155
156for lib in \
157  libfakekernel \
158  libsmbfs
159do
160  (cd $SRC/lib/$lib && $make $1)
161done
162
163(cd $SRC/lib/libshare && $make $1 PLUGINS=smb)
164(cd $SRC/lib/smbsrv && $make $1)
165(cd $SRC/lib/passwdutil && $make $1)
166(cd $SRC/lib/pam_modules/smb && $make $1)
167
168}
169
170################################################################
171
172do_cmds() {
173
174case $1 in
175install)
176  # mount programs need fslib.o
177  (cd $SRC/cmd/fs.d && $make fslib.o)
178  (cd $SRC/cmd/fs.d/smbclnt && $make $1 catalog)
179  ;;
180clean|clobber)
181  (cd $SRC/cmd/fs.d/smbclnt && $make $1)
182  (cd $SRC/cmd/fs.d && $make ${1}_local)
183  ;;
184esac
185
186(cd $SRC/cmd/devfsadm && $make $1)
187(cd $SRC/cmd/smbsrv && $make $1)
188
189# Build the MDB modules, WITH the linktest
190(cd $SRC/cmd/mdb/tools && $make $1)
191for a in $mdb_arch
192do
193  case $1 in
194  install|lint)
195    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
196	$make kmdb_modlinktest.o )
197    ;;
198  clean|clobber)
199    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
200	$make -k $1 )
201    ;;
202  esac
203
204  (cd $SRC/cmd/mdb/$x/$a/nsmb &&
205	$make $1 KMDB_LINKTEST_ENABLE= )
206  (cd $SRC/cmd/mdb/$x/$a/smbfs &&
207	$make $1 KMDB_LINKTEST_ENABLE= )
208  (cd $SRC/cmd/mdb/$x/$a/smbsrv &&
209	$make $1 KMDB_LINKTEST_ENABLE= )
210  (cd $SRC/cmd/mdb/$x/$a/libfksmbsrv &&
211	$make $1 KMDB_LINKTEST_ENABLE= )
212
213# We build these libraries (to the proto area), so we need to
214# build the mdb modules too so mdb will load them.
215  (cd $SRC/cmd/mdb/$x/$a/libcmdutils &&
216	$make $1 )
217  (cd $SRC/cmd/mdb/$x/$a/libavl &&
218	$make $1 )
219
220done
221
222(cd $SRC/cmd/Adm/sun && $make $1)
223
224# Deal with mode 0400 file annoyance...
225# See usr/src/cmd/Adm/sun/Makefile
226if [ $1 = install ]; then
227  chmod a+r $ROOT/var/smb/smbpasswd
228fi
229}
230
231
232################################################################
233# This builds $SRC/TAGS (and cscope.files) in a helpful order.
234
235do_tags() {
236	(cd $SRC ;
237	find uts/common/sys -name '*.[ch]' -print |sort
238	find uts/common/net -name '*.[ch]' -print |sort
239	find uts/common/netinet -name '*.[ch]' -print |sort
240	find uts/common/smb -name '*.[ch]' -print |sort
241	find uts/common/smbsrv -name '*.ndl' -print |sort
242	find uts/common/smbsrv -name '*.[ch]' -print |sort
243	find uts/common/fs/smbsrv -name '*.[ch]' -print |sort
244	find lib/libsmbfs -name '*.[ch]' -print |sort
245	find lib/smbsrv -name '*.[ch]' -print |sort
246	find cmd/smbsrv -name '*.[ch]' -print |sort
247	find common/smbsrv -name '*.[ch]' -print |sort
248	) > $SRC/cscope.files
249
250	(cd $SRC ;
251	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
252	cscope -b )
253}
254
255################################################################
256# This creates a tarfile one can use to update a test machine.
257
258do_tar() {
259	files="
260usr/kernel/drv/$arch64/smbsrv
261usr/kernel/drv/smbsrv
262usr/kernel/kmdb/$arch64/smbsrv
263usr/kernel/kmdb/smbsrv
264usr/lib/fs/smb/$arch64/libshare_smb.so.1
265usr/lib/fs/smb/libshare_smb.so.1
266usr/lib/libsmbfs.so.1
267usr/lib/mdb/kvm/$arch64/smbsrv.so
268usr/lib/mdb/kvm/smbsrv.so
269usr/lib/reparse/libreparse_smb.so.1
270usr/lib/security/pam_smb_passwd.so.1
271usr/lib/smbsrv/libmlrpc.so.1
272usr/lib/smbsrv/libmlsvc.so.1
273usr/lib/smbsrv/libsmb.so.1
274usr/lib/smbsrv/libsmbns.so.1
275usr/lib/smbsrv/smbd
276usr/sbin/devfsadm
277usr/sbin/smbadm
278usr/sbin/smbstat
279"
280
281	(cd $ROOT && tar cfj ../../smbsrv.tar.bz2 $files)
282}
283
284################################################################
285
286if [ "$1" = "" ]; then
287  set '?' # force usage
288fi
289
290set -x
291
292for arg
293do
294  case "$arg" in
295  install)
296    build_tools
297    set -e
298    do_hdrs $arg
299    do_kern $arg
300    do_lib1 $arg
301    do_lib2 $arg
302    do_cmds $arg
303    ;;
304  lint)
305    do_kern $arg
306    do_lib1 $arg
307    do_lib2 $arg
308    do_cmds $arg
309    ;;
310  clean)
311    # intentionally skip: lib1, hdrs, tools
312    do_cmds $arg
313    do_lib2 $arg
314    do_kern $arg
315    ;;
316  clobber)
317    do_cmds $arg
318    do_lib2 $arg
319    do_lib1 $arg
320    do_kern $arg
321    do_hdrs $arg
322    clobber_tools
323    ;;
324  tags)
325    do_tags
326    ;;
327  tar)
328    do_tar
329    ;;
330  *)
331    echo "Usage: $0 {install|lint|clean|clobber|tags|tar}";
332    exit 1;
333    ;;
334  esac
335done
336