fcee72943bdc703a9f87175aa06f1f0b0a5cf726
[openafs.git] / src / Makefile
1 # Copyright 2000, International Business Machines Corporation and others.
2 # All Rights Reserved.
3
4 # This software has been released under the terms of the IBM Public
5 # License.  For details, see the LICENSE file in the top-level source
6 # directory or online at http://www.openafs.org/dl/license10.html
7
8 SHELL=/bin/sh
9 DESTDIR=dest/
10 SRCDIR=${DESTDIR}
11 INSTALL=${SRCDIR}bin/install
12 WASHTOOL=${SRCDIR}bin/washtool
13
14 #WASHTOOLRCSUPDATE=${WASHTOOL} rcsupdate
15 WASHTOOLCMD=$(MAKE)
16 WASHTOOLFLAGS=-argument install
17
18 COMPILE_PART1=${WASHTOOL} ${WASHTOOLCMD}
19 COMPILE_PART2=${WASHTOOLFLAGS}
20
21 MKDIR_IF_NEEDED=[ -d $$1 ] || mkdir -p $$1
22
23 # To compile AFS from scratch in the src tree run "make SYS_NAME=<type>".
24 #   This recursively calls "make install ..." and does not depend on the
25 #   existence of any non-standard programs.
26 # To compile a package and all its predecessors using washtool run
27 #   "make <package>".  This requires that @sys works, and that washtool,
28 #   rcsupdate and our version of ci and co exist.
29 # To compile for the kernel type "make blibafs".  This assumes washtool,
30 #   install, rxgen, compile_et and others already exist and runs it with
31 #   "-argument kinstall".
32
33 all:
34         set ${SYS_NAME}/dest; $(MKDIR_IF_NEEDED)
35         $(MAKE) install "COMPILE_PART1=cd obj; cd" "COMPILE_PART2=; $(MAKE) install SYS_NAME=${SYS_NAME} DESTDIR=`pwd`/${SYS_NAME}/dest/ SRCDIR=`pwd`/${SYS_NAME}/dest/" "COMPILE_PART3=; $(MAKE) test SYS_NAME=${SYS_NAME} DESTDIR=`pwd`/${SYS_NAME}/dest/ SRCDIR=`pwd`/${SYS_NAME}/dest/" SYS_NAME=${SYS_NAME} "WASHTOOL=echo No washtool: "
36
37 basics:
38         -if test -f "${WASHTOOL}"; \
39          then \
40                 ${WASHTOOL} project . . -noretarget; \
41                 ${WASHTOOL} destdir; \
42         fi
43 #       test -d ${DESTDIR}
44
45 minproject: basics
46         ${WASHTOOL} project . . -noretarget
47         ${WASHTOOL} destdir
48
49 project: basics cmd comerr minproject   # try and initialize project
50
51 config: basics
52         ${COMPILE_PART1} config ${COMPILE_PART2}
53
54 pinstall: basics config
55         ${COMPILE_PART1} pinstall ${COMPILE_PART2}
56
57 procmgmt: basics config pinstall
58         ${COMPILE_PART1} procmgmt ${COMPILE_PART2}
59
60 util: basics pinstall procmgmt
61         ${COMPILE_PART1} util ${COMPILE_PART2}
62
63 audit: basics pinstall rx rxkad fsint
64         ${COMPILE_PART1} audit ${COMPILE_PART2}
65
66 comerr: basics util
67         ${COMPILE_PART1} comerr ${COMPILE_PART2}
68
69 cmd: basics comerr
70         ${COMPILE_PART1} cmd ${COMPILE_PART2}
71         @case ${SYS_NAME} in \
72         sgi_6* | sun4x_57 | sun4x_58 | hp_ux11* | sparc64_linux* | alpha_linux* ) \
73                 ${COMPILE_PART1} cmd ${COMPILE_PART2} install64 ;; \
74         esac
75
76 lwp: project util
77         ${COMPILE_PART1} lwp ${COMPILE_PART2}
78
79 rxgen: minproject pinstall
80         ${COMPILE_PART1} rxgen ${COMPILE_PART2}
81
82 rxobj:
83         ${WASHTOOL} object rx
84
85 kernrx: 
86         ${COMPILE_PART1} rx ${COMPILE_PART2}
87
88 rx: project lwp rxgen
89         ${COMPILE_PART1} rx ${COMPILE_PART2}
90
91 rxstat: rx
92         ${COMPILE_PART1} rxstat ${COMPILE_PART2}
93
94 rxincls: rxobj
95         ${COMPILE_PART1} rx ${COMPILE_PART2}
96
97 rxtests: rxobj
98         ${COMPILE_PART1} rx ${COMPILE_PART3}
99
100 fsint: project kfsint
101
102 kfsint: rxgen rxincls lwp
103         ${COMPILE_PART1} fsint ${COMPILE_PART2}
104
105 export2: project fsint
106
107 export: minproject fsint
108         @case ${SYS_NAME} in \
109         rs_aix*)        \
110             ${COMPILE_PART1} export ${COMPILE_PART2} ;; \
111           * ) echo skipping export for ${SYS_NAME} ;; \
112         esac
113
114 afs: minproject export
115         ${COMPILE_PART1} afs ${COMPILE_PART2}
116
117 des: minproject config
118         if [ -f "obj/des/Makefile" ] ; then \
119            ${COMPILE_PART1} des ${COMPILE_PART2} ; \
120         else \
121            ${COMPILE_PART1} des_stub ${COMPILE_PART2} ; \
122         fi
123
124 sys: project des rx rxstat fsint
125         ${COMPILE_PART1} sys ${COMPILE_PART2}
126
127 rxkad: project des
128         ${WASHTOOL} object rxkad
129         ${WASHTOOL} object rxkad/domestic
130         ${COMPILE_PART1} rxkad ${COMPILE_PART2}
131
132 kernauth: 
133         ${COMPILE_PART1} auth ${COMPILE_PART2}
134
135 auth: project comerr des lwp rx sys rxkad audit
136         ${COMPILE_PART1} auth ${COMPILE_PART2}
137
138 ubik: project auth 
139         ${COMPILE_PART1} ubik ${COMPILE_PART2}
140
141 #       cd obj/ubik; $(MAKE) test SYS_NAME=${SYS_NAME} 
142 ubiktests: ubik sys
143         ${COMPILE_PART1} ubik ${COMPILE_PART3}
144
145 ptserver: project ubik cmd comerr auth audit
146         ${COMPILE_PART1} ptserver ${COMPILE_PART2}
147
148 kauth: project ubik cmd auth comerr ptserver audit libacl
149         ${COMPILE_PART1} kauth ${COMPILE_PART2}
150
151 dauth: project ubik cmd auth comerr
152         ${COMPILE_PART1} dauth ${COMPILE_PART2}
153
154 libacl: project ptserver
155         ${COMPILE_PART1} libacl ${COMPILE_PART2}
156
157 kerndir: minproject 
158         ${COMPILE_PART1} dir ${COMPILE_PART2}
159
160 dir: project libacl
161         ${COMPILE_PART1} dir ${COMPILE_PART2}
162
163 # Removed from sgi_* case below:
164 # ${COMPILE_PART1} sgiefs ${COMPILE_PART2};;
165 sgiefs:
166         case ${SYS_NAME} in \
167         sgi_*) \
168                 echo "SGI efs not supported" ;; \
169         *) \
170                 echo No efs stuff for ${SYS_NAME};; \
171         esac
172
173 vol: project dir afs sgiefs
174         ${COMPILE_PART1} vol ${COMPILE_PART2}
175
176 vlserver: project vol audit
177         ${COMPILE_PART1} vlserver ${COMPILE_PART2}
178
179 viced: project vlserver audit
180         ${COMPILE_PART1} viced  ${COMPILE_PART2}
181
182 tviced: project viced vlserver libafsrpc libafsauthent
183         case ${SYS_NAME} in \
184         alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110) \
185                 ${COMPILE_PART1} tviced  ${COMPILE_PART2} ;; \
186         *) \
187                 echo Not building MT viced for ${SYS_NAME} ;; \
188         esac
189
190 volser: project tviced usd kauth audit
191         ${COMPILE_PART1} volser ${COMPILE_PART2}
192
193 venus: project volser ptserver
194         ${COMPILE_PART1} venus ${COMPILE_PART2}
195         ${COMPILE_PART1} venus/test ${COMPILE_PART2}
196
197 afsd: project sys kauth
198         ${COMPILE_PART1} afsd ${COMPILE_PART2}
199
200 null: project
201         ${COMPILE_PART1} null ${COMPILE_PART2}
202
203 gtx: project null auth # kauth rxkad ?
204         case ${SYS_NAME} in \
205           rs_aix* | sun4x_5? | sgi_6? | *linux* | ppc_darwin*) \
206                 rm -f ${DESTDIR}lib/afs/libtermlib.a; \
207                 ln -s libnull.a ${DESTDIR}lib/afs/libtermlib.a; \
208                 ${COMPILE_PART1} gtx ${COMPILE_PART2};; \
209           *) \
210                 rm -f ${DESTDIR}lib/afs/libtermlib.a; \
211                 ln -s /usr/lib/libtermlib.a ${DESTDIR}lib/afs/libtermlib.a; \
212                 ${COMPILE_PART1} gtx ${COMPILE_PART2};; \
213         esac
214
215 fsprobe: project util fsint
216         ${COMPILE_PART1} fsprobe ${COMPILE_PART2}
217
218 scout: project gtx fsprobe
219         ${COMPILE_PART1} scout ${COMPILE_PART2}
220
221 mpp: project
222         ${COMPILE_PART1} mpp ${COMPILE_PART2}
223
224 package: project mpp
225         ${COMPILE_PART1} package ${COMPILE_PART2}
226
227 package.files: package
228         ${DESTDIR}/bin/makepkgfiles afs.dev
229
230 uss: des kauth project rx vlserver vol
231         ${COMPILE_PART1} uss ${COMPILE_PART2}
232
233 ntp: project volser
234         case ${SYS_NAME} in \
235           sun4x_58 ) echo skipping ntp for ${SYS_NAME} ;; \
236           *linux* ) echo skipping ntp for ${SYS_NAME} ;; \
237           ppc_darwin* ) echo skipping ntp for ${SYS_NAME} ;; \
238           * ) ${COMPILE_PART1} ntp ${COMPILE_PART2} ;; \
239         esac
240
241 #convert: project ntp
242 #       ${COMPILE_PART1} convert ${COMPILE_PART2}
243
244 bozo: project ntp audit
245         ${COMPILE_PART1} bozo ${COMPILE_PART2}
246
247
248 # Removed from respective case statements below:
249 # ${COMPILE_PART1} vfsckaix42 ${COMPILE_PART2} ;;
250 # ${COMPILE_PART1} vfscksol25 ${COMPILE_PART2} ;;
251 # ${COMPILE_PART1} vfscksol26 ${COMPILE_PART2} ;;
252 # ${COMPILE_PART1} vfscksol27 ${COMPILE_PART2} ;;
253 vfsck:  minproject vol
254         set -x; \
255         case ${SYS_NAME} in \
256         sgi_* | *linux* | rs_aix42 | ppc_darwin* | hp_ux* ) \
257                 echo skip vfsck for ${SYS_NAME} ;; \
258          * ) \
259                 ${COMPILE_PART1} vfsck ${COMPILE_PART2} ;; \
260         esac
261
262 login: project kauth rxkad
263         set -x; \
264         case ${SYS_NAME} in \
265         sgi_* ) \
266                 ${COMPILE_PART1} sgistuff ${COMPILE_PART2} ;; \
267         rs_aix42 ) \
268                 ${WASHTOOL} object login ; \
269                 ${COMPILE_PART1} tsm41 ${COMPILE_PART2} ;; \
270         alpha_dux* ) \
271                 ${COMPILE_PART1} sia ${COMPILE_PART2} ;; \
272         sun4x_55 ) \
273                  ${COMPILE_PART1} login ${COMPILE_PART2} ;; \
274         sun4x_* | hp_ux11* | *linux* ) \
275                 ${COMPILE_PART1} pam ${COMPILE_PART2} ;; \
276         ppc_darwin* ) \
277                 echo Skipping login for ${SYS_NAME} ;; \
278         * ) \
279                 ${COMPILE_PART1} login ${COMPILE_PART2} ;; \
280         esac
281
282 ftpd43+: project kauth rxkad
283         case ${SYS_NAME} in \
284         rs_aix* | sun4x_55 | *linux*) \
285                 ${COMPILE_PART1} ftpd43+ ${COMPILE_PART2} ;; \
286         * )     echo skip ftpd43+ for ${SYS_NAME} ;; \
287         esac
288
289 inetd: project kauth rxkad
290         ${COMPILE_PART1} inetd ${COMPILE_PART2} 
291
292 rsh: project inetd
293         ${COMPILE_PART1} rsh ${COMPILE_PART2} 
294
295 rlogind: project rsh ftpd43+ login
296         case ${SYS_NAME} in \
297         rs_aix*) \
298                 ${COMPILE_PART1} rlogind ${COMPILE_PART2} ;; \
299         * )     echo skipping rlogind for ${SYS_NAME} ;; \
300         esac
301
302 sgistuff: project rlogind
303         case ${SYS_NAME} in \
304         sgi_* ) ${COMPILE_PART1} sgistuff ${COMPILE_PART2} ;; \
305         * )     echo skipping sgistuff for ${SYS_NAME} ;; \
306         esac
307
308 rcp: project rsh inetd
309         case ${SYS_NAME} in \
310         sgi_* ) echo skip rcp for ${SYS_NAME} ;; \
311         *)      ${COMPILE_PART1} rcp ${COMPILE_PART2} ;; \
312         esac
313
314 allrcmds: project rcp rlogind
315
316 KERNELDIR= \
317   afs \
318   dir \
319   rx \
320   fsint \
321   auth \
322   rxkad \
323   util \
324   libacl \
325   vlserver \
326   sgiefs  \
327   rxstat
328
329
330 UKERNELDIR= \
331   afs \
332   dir \
333   rx \
334   fsint \
335   util \
336   auth \
337   rxkad \
338   vlserver \
339   kauth \
340   des \
341   afsweb \
342   rxstat
343
344
345 libafs: minproject libafs_setup ${KERNELDIR}
346         ${COMPILE_PART1} libafs ${COMPILE_PART2}
347
348 libuafs: minproject libuafs_setup ${UKERNELDIR}
349         set -x; \
350         case ${SYS_NAME} in \
351         hp_ux102* ) \
352                 echo Skipping libuafs for ${SYS_NAME} ;; \
353         * ) \
354                 ${COMPILE_PART1} libuafs ${COMPILE_PART2} ;; \
355         esac
356
357 afsweb: minproject kauth dauth 
358         ${COMPILE_PART1} afsweb ${COMPILE_PART2}
359
360 update: project auth
361         ${COMPILE_PART1} update ${COMPILE_PART2}
362
363 log: project auth 
364         ${COMPILE_PART1} log ${COMPILE_PART2}
365
366 bu_utils: project
367         ${COMPILE_PART1} bu_utils ${COMPILE_PART2}
368
369 usd: project
370         ${COMPILE_PART1} usd ${COMPILE_PART2}
371
372 bubasics: project comerr
373         ${COMPILE_PART1} bubasics ${COMPILE_PART2}
374
375 butm: project bubasics usd
376         ${COMPILE_PART1} butm ${COMPILE_PART2}
377
378 butc: project bubasics butm budb bucoord cmd
379         ${COMPILE_PART1} butc ${COMPILE_PART2}
380
381 tbutc: project bubasics butm budb bucoord cmd butc
382         case ${SYS_NAME} in \
383         alpha_dux*|sgi_*|sun4x_*|rs_aix4*|*linux*|hp_ux110) \
384                 ${COMPILE_PART1} tbutc ${COMPILE_PART2} ;; \
385         *) \
386                 echo Not building MT butc for ${SYS_NAME} ;; \
387         esac
388
389 budb: project bubasics
390         ${COMPILE_PART1} budb ${COMPILE_PART2}
391
392 bucoord: project bubasics budb volser
393         ${COMPILE_PART1} bucoord ${COMPILE_PART2}
394
395 xstat: project
396         ${COMPILE_PART1} xstat ${COMPILE_PART2}
397
398 afsmonitor: project gtx xstat
399         ${COMPILE_PART1} afsmonitor ${COMPILE_PART2}
400
401 ircs: project
402         case ${SYS_NAME} in \
403         sgi_* ) \
404                 echo skip ircs for ${SYS_NAME} ;; \
405         *) \
406                 ${COMPILE_PART1} ircs ${COMPILE_PART2} ;; \
407         esac
408
409 wash: project
410         case ${SYS_NAME} in \
411         sgi_* ) \
412                 echo skip wash for ${SYS_NAME} ;; \
413         *) \
414                 ${COMPILE_PART1} wash ${COMPILE_PART2} ;; \
415         esac
416
417 tests: rxtests ubiktests
418
419 # pthread based user space RX library
420 libafsrpc: rx rxkad des
421         case ${SYS_NAME} in \
422         alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110) \
423         ${COMPILE_PART1} libafsrpc  ${COMPILE_PART2} ;; \
424         *) \
425                 echo Not building MT libafsrpc for ${SYS_NAME} ;; \
426         esac
427
428 libafsauthent: ubik auth kauth libafsrpc
429         case ${SYS_NAME} in \
430         alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110) \
431         ${COMPILE_PART1} libafsauthent  ${COMPILE_PART2} ;; \
432         *) \
433                 echo Not building MT libafsrpc for ${SYS_NAME} ;; \
434         esac
435
436 libadmin_real: 
437         ${COMPILE_PART1} libadmin ${COMPILE_PART2}
438         ${COMPILE_PART1} libadmin/adminutil ${COMPILE_PART2}
439         ${COMPILE_PART1} libadmin/vos ${COMPILE_PART2}
440         ${COMPILE_PART1} libadmin/client ${COMPILE_PART2}
441         ${COMPILE_PART1} libadmin/kas ${COMPILE_PART2}
442         ${COMPILE_PART1} libadmin/pts ${COMPILE_PART2}
443         ${COMPILE_PART1} libadmin/bos ${COMPILE_PART2}
444         ${COMPILE_PART1} libadmin/cfg ${COMPILE_PART2}
445         ${COMPILE_PART1} libadmin/test ${COMPILE_PART2}
446         ${COMPILE_PART1} libadmin/samples ${COMPILE_PART2}
447
448 libadmin: libafsauthent bozo
449         case ${SYS_NAME} in \
450         alpha_dux*|sgi_*|sun4x_*|rs_aix*|*linux*|hp_ux110) \
451                         $(MAKE) libadmin_real SYS_NAME=$(SYS_NAME) \
452                         WASHTOOL="$(WASHTOOL)" \
453                         COMPILE_PART1="$(COMPILE_PART1)" \
454                         COMPILE_PART2="$(COMPILE_PART2)" \
455                         SRCDIR=$(SRCDIR) DESTDIR=$(DESTDIR) \
456                         DBG_DEFS=$(DBG_DEFS) ;; \
457         *) \
458                 echo Not building MT libadmin for ${SYS_NAME} ;; \
459         esac
460
461 finale: project cmd comerr afsd allrcmds butc tbutc libafs libuafs audit kauth log package \
462         ptserver scout bu_utils ubik uss bozo vfsck volser \
463         venus update xstat afsmonitor dauth tests libafsrpc \
464         libafsauthent libadmin
465         ${COMPILE_PART1} finale ${COMPILE_PART2}
466
467 # Use washtool to ensure MakefileProto is current and obj/libafs exists.
468
469 libafs_setup: config minproject export
470 # How about if no RCSUPDATE exists?
471 #   Well then you're going to lose.  Or, if you insist, set
472 #   WASHTOOLRCSUPDATE to be a no-op
473 # Warning: The next few lines are _extremely_ sensitive to spaces and tabs.
474         ${WASHTOOL} object libafs
475         case ${SYS_NAME} in \
476         alpha_dux* ) \
477                 MKAFS_OSTYPE=DUX;; \
478         hp_ux* ) \
479                 MKAFS_OSTYPE=HPUX;; \
480         *linux*) \
481                 MKAFS_OSTYPE=LINUX;; \
482         rs_aix* ) \
483                 MKAFS_OSTYPE=AIX;; \
484         sgi_* ) \
485                 MKAFS_OSTYPE=IRIX;; \
486         sun4x_5* ) \
487                 MKAFS_OSTYPE=SOLARIS;; \
488         ppc_darwin* ) \
489                 MKAFS_OSTYPE=DARWIN;; \
490         * ) \
491                 echo WARNING: No MakefileProto for sys ${SYS_NAME} ; \
492         esac; \
493         obj/config/config src/libafs/MakefileProto.$$MKAFS_OSTYPE obj/libafs/Makefile ${SYS_NAME}
494
495 libuafs_setup: config minproject export
496 # How about if no RCSUPDATE exists?
497 #   Well then you're going to lose.  Or, if you insist, set
498 #   WASHTOOLRCSUPDATE to be a no-op
499         ${WASHTOOL} object libuafs
500         case ${SYS_NAME} in \
501         hp_ux* ) \
502                 MKAFS_OSTYPE=HPUX;; \
503         *linux*) \
504                 MKAFS_OSTYPE=LINUX;; \
505         rs_aix* ) \
506                 MKAFS_OSTYPE=AIX;; \
507         sun4x_5* ) \
508                 MKAFS_OSTYPE=SOLARIS;; \
509         alpha_dux* ) \
510                 MKAFS_OSTYPE=DUX;; \
511         sgi_6* ) \
512                 MKAFS_OSTYPE=IRIX;; \
513         ppc_darwin* ) \
514                 MKAFS_OSTYPE=DARWIN;; \
515         * ) \
516                 echo WARNING: No MakefileProto for sys ${SYS_NAME} ; \
517         esac; \
518         obj/config/config src/libuafs/MakefileProto.$$MKAFS_OSTYPE obj/libuafs/Makefile ${SYS_NAME}
519
520 # "COMPILE_PART1=${COMPILE_PART1}" "COMPILE_PART2=${COMPILE_PART2}" SYS_NAME=${SYS_NAME} ;; 
521
522 TARGET=finale
523 install:
524         $(MAKE) $(TARGET) "SYS_NAME=${SYS_NAME}" "WASHTOOL=${WASHTOOL}" \
525                 "COMPILE_PART1=${COMPILE_PART1}" \
526                 "COMPILE_PART2=${COMPILE_PART2}" \
527                  DESTDIR=`pwd`/${SYS_NAME}/dest/ \
528                  SRCDIR=`pwd`/${SYS_NAME}/dest/ \
529                  "DBG_DEFS=${DBG_DEFS}"
530
531 # sgi: "NON_SHARED=-non_shared"
532 #updatekdir:
533 #       ${WASHTOOL} rcsupdate ${KERNELDIR} libafs
534
535 kupdate: updatekdir libafs_setup libuafs_setup
536
537 blibafs:
538         $(MAKE) libafs "WASHTOOL=${WASHTOOL}" "WASHTOOLFLAGS=-argument kinstall" SYS_NAME=${SYS_NAME} "CPUARCH=${CPUARCH}" "MPSP=${MPSP}" "DBG_DEFS=${DBG_DEFS}"
539
540 blibuafs:
541         $(MAKE) libuafs "WASHTOOL=${WASHTOOL}" "WASHTOOLFLAGS=-argument ukinstall" SYS_NAME=${SYS_NAME} "CPUARCH=${CPUARCH}" "MPSP=${MPSP}" "DBG_DEFS=${DBG_DEFS}"
542
543 bwebafs: sys
544         $(MAKE) libuafs "WASHTOOL=${WASHTOOL}" "WASHTOOLFLAGS=-argument webinstall" SYS_NAME=${SYS_NAME} "CPUARCH=${CPUARCH}" "MPSP=${MPSP}" "DBG_DEFS=${DBG_DEFS}"
545
546 clean:
547         ${WASHTOOL} every "cd obj/%s; $(MAKE) clean" -rootd obj
548
549 checklist:
550         ${WASHTOOL} every -command \
551           'cd rcs/%s; echo ; echo In %s:; if test x = "x`/bin/ls RCS/*,v`"; then exit 0; else rlog -I RCS/*,v; fi'
552
553 links:
554         echo "Remove the obj directory"
555         - /bin/rm -rf @sys/obj/* ;
556         - /bin/rm -rf @sys/dest/* ;
557         - /bin/mkdir @sys/obj ;
558         echo "Create the obj directories"
559         here=`pwd` ; \
560         cd src; \
561         for file in `find [!NW]* -type d -print` ; do \
562                 /bin/mkdir $${here}/obj/$${file} ; \
563         done;
564         echo "Create the obj file links"
565         here=`pwd` ; \
566         cd src; \
567         for file in `find [!NW]* -type f -print` ; do \
568                 /bin/ln -s `pwd`/$${file} $${here}/obj/$${file} ; \
569         done;