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