www.digitalmars.com         C & C++   DMDScript  

D - (Ann): Dependency walker for D source files

reply "Lars Ivar Igesund" <larsivi stud.ntnu.no> writes:
Hi!

I've made a dependency walker for D source files. Given an input
file, it searches through it and the imported modules to find all
d files that the input file depend on. (Source is attached, compile
with "dmd depsrc.d", only deps are to platform independent parts
of phobos. Therefore it should work on both win32 and linux, but
only win32 has been tested.)

If an imported module imports other modules privately, these aren't
searched.
If the imported module is part of phobos, it is ignored.
The output consists of the base file that is checked, all the modules
it depends on, a path where this module is found and the depths
where the modules are found. (If a module is imported from a
module that is imported from the base file, the module is said to be
found on depth 2.)

By default, the found dependencies are printed to the console. Use
-w/--writetofile to have them written to the file "depfile". (This don't
work due to recently reported phobos bug.).
There are no known bugs :)
The source code is free in all ways (except that it is copyrighted.)

The dependencies should be easy to automatically process. Given
the command
depsrc -Isomepath foo.d bar.d, the output will be something like:
# foo.d ## moduledep1 pathtomoduledep1 1,2 moduledep2 pathtomoduledep2 3 # bar.d ## moduledep3 pathtomoduledep3 1 ... ... What's the use for this program? It might be a nice diagnostic if you don't have control over which modules have have been imported from where. Also it can be used by build systems to find the dependencies such that it knows when to recompile/relink. If anyone wants to include it in their packages, feel free (dmd, dide, leds, etc.) It would be nice if someone would like to test it on linux. Suggestions, fixes, etc are welcome. Lars Ivar Igesund begin 666 depsrc.d M+RH-"B J(&1E<'-R8RYD#0H *B!$97!E;F1E;F-Y('=A;&ME<B!F;W( 1"!S M;W5R8V4 9FEL97,N#0H *B!#;W!Y<FEG:'0 ,C P,R!,87)S($EV87( 26=E M<W5N9" \;&%R<VEV87(G870G:6=E<W5N9"YN970^#0H * T*("H 4&5R;6ES M<VEO;B!T;R!U<V4L(&-O<'DL(&UO9&EF>2P 9&ES=')I8G5T92!A;F0 <V5L M;"!T:&ES('-O9G1W87)E#0H *B!A;F0 :71S(&1O8W5M96YT871I;VX 9F]R M(&%N>2!P=7)P;W-E(&ES(&AE<F5B>2!G<F%N=&5D('=I=&AO=70 9F5E+ T* M("H <')O=FED960 =&AA="!T:&4 86)O=F4 8V]P>7)I9VAT(&YO=&EC92!A M<'!E87( :6X 86QL(&-O<&EE<R!A;F0-"B J('1H870 8F]T:"!T:&%T(&-O M<'ER:6=H="!N;W1I8V4 86YD('1H:7, <&5R;6ES<VEO;B!N;W1I8V4 87!P M96%R#0H *B!I;B!S=7!P;W)T:6YG(&1O8W5M96YT871I;VXN($ET(&ES('!R M;W9I9&5D(")A<R!I<R( =VET:&]U="!E>'!R97-S( T*("H ;W( :6UP;&EE M9"!W87)R86YT>2X-"B J+PT*#0II;7!O<G0 9FEL93L-"FEM<&]R="!P871H M.PT*:6UP;W)T('-T<F5A;3L-"FEM<&]R="!S=')I;F<[#0II;7!O<G0 8RYS M=&1I;SL-" T*8F]O;"!H96QP8V%L;&5D(#T 9F%L<V4[#0IB;V]L('9E<G-I M;VYC86QL960 /2!F86QS93L-"F)O;VP =W)I=&4 /2!F86QS93L-"FEN="!C M=7)O<'0 /2 Q.PT*:6YT(&YU;7!A=&AS(#T ,#L-"FEN="!A;&QP871H<R ] M(#$P.PT*:6YT(&1E<'1H;&EM:70 /2 M,3L-"FEN="!D97!T:" ](# [#0II M;G0 ;G5M9&5P<R ](# [#0II;G0 86QL9&5P<R ](#$P.PT*8VAA<B!;75M= M(&1E<&UO9',[#0IC:&%R(%M=6UT 9&5P9FEL97,[#0IC:&%R(%M=6UT 9&5P M9&5P=&AS.PT*8VAA<B!;75M=('!A=&AS.PT*8VAA<B!;75M=(&%R9W-L:7-T M.PT*+R\ 1DE8344Z(#(P,#,R-C$P#0HO+R!5<&1A=&4 =&AE('!H;V)O<R!A M<G)A>2!W:&5N(&YE8V5S<V%R>0T*8V]N<W0 8VAA<B!;75M=('!H;V)O<R ] M(%L-"B (" B8V]M<&EL97(B+ T*(" (")C;VYV(BP-"B (" B8W1Y<&4B M+ T*(" (")D871E(BP-"B (" B9FEL92(L#0H (" (F=C(BP-"B (" B M;6%T:"(L#0H (" (F]B:F5C="(L#0H (" (F]U=&)U9F9E<B(L#0H (" M(G!A=& B+ T*(" (")P<F]C97-S(BP-"B (" B<F%N9&]M(BP-"B (" B M<F5G97AP(BP-"B (" B<W1D:6YT(BP-"B (" B<W1R96%M(BP-"B (" B M<W1R:6YG(BP-"B (" B<WES=&5M(BP-"B (" B=&AR96%D(BP-"B (" B M=7)I(BP-"B (" B=71F(BP-"B (" B>FEP(BP-"B (" B8RYS=&1I;R(L M#0H (" (FEN=')I;G-I8R(L#0H (" (G=I;F1O=W,B+ T*(" (")$+G=I M;C,R+G)E9VES=')Y(B!=.PT*#0HO* T*("H 1G5N8W1I;VX 8V%L;&5D('=H M96X =&AE(")H96QP(B!O<'1I;VX :7, <W!E8VEF:65D+ T*("HO#0H-"G9O M:60 ;W!T2&5L<" I#0I[#0H (&]P=%9E<G-I;VXH*3L-"B :68 *"%H96QP M8V%L;&5D*2![#0H (" <')I;G1F*")<;B( ? T*(" (" (" (" B4WEN M=&%X.B!D97!S<F, 6V]P=&EO;G-=(%MS<F, +BXN75QN(B!^#0H (" (" M(" ("( ("U)6W!A=&A=(" (" (" (" (" 061D(&$ <&%T:"!T;R!B M92!S96%R8VAE9"Y<;B( ? T*(" (" (" (" B(" M:"\M+6AE;' (" M(" (" (" (%!R:6YT<R!T:&ES(&AE;' =&%B;&4N7&XB('X-"B (" M(" (" (B +60]6VYU;5TO+2UD97!T:#U;;G5M72!,:6UI="!T:&4 9&5P M=& <V5A<F-H960 7&XB('X-"B (" (" (" (B (" (" (" (" M(" (" (" (" (" (" (&9O<B!D97!E;F1E;F-I97,N7&XB('X-"B M(" (" (" (B +58O+2UV97)S:6]N(" (" (" ("!0<FEN=', =&AE M('9E<G-I;VXN7&XB('X-"B (" (" (" (B +7<O+2UW<FET971O9FEL M92 (" ("!0<FEN=', =&AE(&1E<&5N9&5N8VEE<R!T;R!T:&4 9FEL95QN M(B!^#0H (" (" (" ("( (" (" (" (" (" (" (" (" (" G M9&5P9FEL92< :6YS=&5A9"!O9B!T;R!T:&4 8V]N<V]L92XB*3L-"B ?0T* M("!H96QP8V%L;&5D(#T =')U93L-"GT-" T*+RH-"B J($9U;F-T:6]N('1H M870 8VAE8VMS(&EF(&%N(&%R9W5M96YT(&ES(&%N(&]P=&EO;BX-"B J+PT* M#0IB;V]L(&-H96-K3W!T:6]N*&EN="!A<F<I#0I[#0H ('-W:71C:" H87)G M<VQI<W1;87)G72D >PT*("!C87-E("(M+79E<G-I;VXB. T*("!C87-E("(M M5B(Z#0H (" ;W!T5F5R<VEO;B I.PT*(" (')E='5R;B!T<G5E.PT*(" M(&)R96%K.PT*("!C87-E("(M+6AE;' B. T*("!C87-E("(M:"(Z#0H (" M;W!T2&5L<" I.PT*(" (')E='5R;B!T<G5E.PT*(" (&)R96%K.PT*("!C M87-E("(M+7=R:71E=&]F:6QE(CH-"B 8V%S92 B+7<B. T*(" (&]P=%=R M:71E*"D[#0H (" <F5T=7)N('1R=64[#0H (" 8G)E86L[#0H (&-A<V4 M(BTM9&5P=& ](CH-"B ("!O<'1$97!T:"AA<F<L('1R=64I.PT*(" (')E M='5R;B!T<G5E.PT*(" (&)R96%K.PT*("!C87-E("(M9#TB. T*(" (&]P M=$1E<'1H*&%R9RP 9F%L<V4I.PT*(" (')E='5R;B!T<G5E.PT*(" (&)R M96%K.PT*("!D969A=6QT. T*(" (&)R96%K.PT*("!]#0H (&EF("AC;7 H M87)G<VQI<W1;87)G75LP+BXR72P (BU)(BD /3T ,"D >PT*(" (&]P=$EM M<&]R="AA<F<I.PT*(" (')E='5R;B!T<G5E.PT*("!]#0H (')E='5R;B!F M86QS93L-"GT-" T*+RH-"B J($9U;F-T:6]N('1H870 <W1A<G1S('1H92!D M97!E;F1E;F-Y('=A;&MI;F< 9F]R(&)A<V4 <V]U<F-E(&9I;&5S+ T*("HO M#0H-"G9O:60 9&5P0F%S92AI;G0 87)G*0T*>PT*("!A9&1.97="87-E1FEL M92AA<F=S;&ES=%MA<F==*3L-"B 9&5P5V%L:RAA<F=S;&ES=%MA<F==+" B M(BP =')U92D[#0I]#0H-"B\J#0H *B!&=6YC=&EO;B!T:&%T(&1O('1H92!M M86EN(&1E<&5N9&5N8WD =V%L:VEN9R!R96-U<G-I=F5L>2X 268 :70 9FEN M9 T*("H 9FEL97, =&AA="!H87, 8F5E;B!W86QK960 8F5F;W)E+"!I="!S M:VEP<R!I="!T;R!A=F]I9"!I;F9I;FET90T*("H 8WEC;&EC(&1E<&5N9&5N M8VEE<RX-"B J+PT*#0IV;VED(&1E<%=A;&LH8VAA<B!;72!F:6QE+"!C:&%R M(%M=(&UO9"P 8F]O;"!B87-E*0T*>PT*("!C:&%R(%M=(&9I;&5P871H(#T M9FEL93L-"B :6YT(&D /2 P.PT*("!W:&EL92 H:2 \(&YU;7!A=&AS("8F M("%F:6QE17AI<W0H9FEL97!A=& I*2![#0H (" 9FEL97!A=& /2!P871H M+FIO:6XH<&%T:'-;:5TL(&9I;&4I.PT*(" (&DK*SL-"B ?0T*("!&:6QE M('-R8R ](&YE=R!&:6QE*&9I;&5P871H*3L-"B =VAI;&4 *"%S<F,N96]F M*"DI('L-"B ("!C:&%R(%M=(&QI;F4 /2!S<F,N<F5A9$QI;F4H*3L-"B M("!C:&%R(%M=6UT <W1A=&5M96YT<R ]('-P;&ET*&QI;F4L("([(BD[#0H M(" 9F]R("AI;G0 :2 ](# [(&D /"!S=&%T96UE;G1S+FQE;F=T:#L :2LK M("D >PT*(" (" :6YT('!O<R ](&9I;F0H<W1A=&5M96YT<UMI72P (FEM M<&]R="(I.PT*(" (" :68 *'!O<R ]/2 M,2D >PT*(" (" ("!C;VYT M:6YU93L-"B (" ('T-"B (" (&5L<V4 >PT*(" (" ("!I9B H(6)A M<V4I('L-"B (" (" ("!I;G0 <')I=G!O<R ](')F:6YD*'-T871E;65N M='-;:5TL(")P<FEV871E(BD[#0H (" (" (" :68 *'!R:79P;W, /B M M,2 F)B!P<FEV<&]S(#P <&]S*2![#0H (" (" (" ("!C:&%R(%M=(&EM M<'-T;70 /2!S=&%T96UE;G1S6VE=6W!R:79P;W,N+G!O<RLW73L #0H (" M(" (" ("!C:&%R(%M=6UT =V]R9', /2!S<&QI="AI;7!S=&UT*3L-"B M(" (" (" (&EF("AW;W)D<RYL96YG=& /3T ,BD >PT*(" (" (" M(" ("!C;VYT:6YU93L-"B (" (" (" ('T-"B (" (" ("!]#0H M(" (" ('T-"B (" (" 8VAA<B!;72!M;V0 /2!S=')I<"AS=&%T96UE M;G1S6VE=6W!O<RLW+BYS=&%T96UE;G1S6VE=+FQE;F=T:%TI.PT*(" (" M("!I9B H8VAE8VM.;W1-;V0H;6]D*2D >PT*(" (" (" (&-O;G1I;G5E M.PT*(" (" ("!]#0H (" (" (&-H87( 6UT 9G [#0H (" (" (&EF M("AC:&5C:U!H;V)O<RAM;V0I*2![#0H (" (" (" 8V]N=&EN=64[#0H M(" (" ('T-"B (" (" 9G /2!C<F5A=&5&:6QE4&%T:"AM;V0I.PT* M(" (" ("!D97!T:"LK.PT*(" (" ("!I9B H9&5P=&AL:6UI=" ]/2 M M,2!\?"!D97!T:" \/2!D97!T:&QI;6ET*2![(" -"B (" (" ("!D97!7 M86QK*&9P+"!M;V0L(&9A;'-E*3L-"B (" (" ?0T*(" (" ("!D97!T M:"TM.PT*(" (" ?0T*(" ('T-"B ?0T*("!I9B H(6)A<V4I('L-"B M("!A9&1$97 H9FEL97!A=& L(&UO9"P 9&5P=& I.R -"B ?0T*?0T*#0HO M* T*("H 1G5N8W1I;VX 8V%L;&5D(&EF('1H92 B=F5R<VEO;B( ;W!T:6]N M(&ES('5S960N#0H *B\-" T*=F]I9"!O<'1697)S:6]N*"D-"GL-"B :68 M*"%V97)S:6]N8V%L;&5D*2![#0H (" <')I;G1F*")$97!E;F1E;F-Y('=A M;&ME<B!F;W( 1"!S;W5R8V4 9FEL97,N7&XB('X-"B (" (" (" (E9E M<G-I;VX ,"XU+B!#;W!Y<FEG:'0 3&%R<R!)=F%R($EG97-U;F0 ,C P,UQN M(BD[#0H ('T-"B =F5R<VEO;F-A;&QE9" ]('1R=64[#0I]#0H-"B\J#0H M*B!&=6YC=&EO;B!C86QL960 :68 =&AE(")W<FET971O9FEL92( ;W!T:6]N M(&ES('5S960N#0H *B\-" T*=F]I9"!O<'17<FET92 I#0I[#0H ('=R:71E M(#T =')U93L-"GT-" T*+RH-"B J($9U;F-T:6]N(&-A;&QE9"!I9B!T:&4 M(F1E<'1H(B!O<'1I;VX :7, =7-E9"!T;R!D96-I9&4 =&AE(&UA>&EM=6T- M"B J(&1E<'1H(&9O<B!R96-U<G-I;VXN#0H *B\-" T*=F]I9"!O<'1$97!T M:"AI;G0 87)G+"!B;V]L(&1O=6)L961A<V I#0I[#0H (&EF("AD;W5B;&5D M87-H*2![#0H (" 9&5P=&AL:6UI=" ]("AI;G0I871O:2AA<F=S;&ES=%MA M<F==6S N+F%R9W-L:7-T6V%R9UTN;&5N9W1H72D[#0H ('T-"B 96QS92![ M#0H (" 9&5P=&AL:6UI=" ]("AI;G0I871O:2AA<F=S;&ES=%MA<F==6S,N M+F%R9W-L:7-T6V%R9UTN;&5N9W1H72D[#0H ('T-"GT-" T*+RH-"B J($9U M;F-T:6]N(&-A;&QE9"!F;W( 86QL('1H92 B+4DB(&EM<&]R="!O<'1I;VYS M('5S960N#0H *B\-" T*=F]I9"!O<'1);7!O<G0H:6YT(&%R9RD-"GL-"B M:68 *&%R9W-L:7-T6V%R9UTN;&5N9W1H(#T](#(I('L-"B ("!R971U<FX[ M#0H ('T-"B 861D4&%T:"AA<F=S;&ES=%MA<F==6S(N+F%R9W-L:7-T6V%R M9UTN;&5N9W1H72D[#0I]#0H-"B\J#0H *B!&=6YC=&EO;B!T:&%T(&%D9', M82!D97!E;F1E;F-Y('1O('1H92!L:7-T('=H96X :70 :7, =F5R:69I960N M#0H *B!!('!A=& 86YD('1H92!D97!T:"!W:&5R92!I="!W87, 9F]U;F0 M:7, 86QS;R!A9&1E9"X 268 =&AE#0H *B!D97!E;F1E;F-Y(&AA<R!B965N M(&9O=6YD(&)E9F]R92P =&AE(&YE=R!D97!T:"!I<R!A9&1E9"!T;R!T:&4- M"B J('-A;64 96YT<GDN#0H *B\-" T*=F]I9"!A9&1$97 H8VAA<B!;72!F M:6QE<&%T:"P 8VAA<B!;72!M;V0L(&EN="!D97!T:"D-"GL-"B 9F]R("AI M;G0 :2 ](# [(&D /"!D97!M;V1S+FQE;F=T:#L :2LK*2![#0H (" :68 M*&-M<"AD97!M;V1S6VE=+"!M;V0I(#T](# I('L-"B (" (&1E<&1E<'1H M<UMI72!^/2 B+"([#0H (" ("!D97!D97!T:'-;:5T ?CT =&]3=')I;F<H M9&5P=& I.PT*(" (" <F5T=7)N.PT*(" ('T-"B ?0T*("!N=6UD97!S M*RL[#0H (&EF("AN=6UD97!S(#X 86QL9&5P<RD >PT*(" (&%L;&1E<', M*CT ,CL-"B ("!D97!M;V1S+FQE;F=T:" ](&%L;&1E<',[#0H (" 9&5P M9FEL97,N;&5N9W1H(#T 86QL9&5P<SL-"B ("!D97!D97!T:',N;&5N9W1H M(#T 86QL9&5P<SL-"B ?0T*("!D97!M;V1S6VYU;61E<',M,5T /2!M;V0[ M#0H (&1E<&9I;&5S6VYU;61E<',M,5T /2!F:6QE<&%T:#L-"B 9&5P9&5P M=&AS6VYU;61E<',M,5T /2!T;U-T<FEN9RAD97!T:"D[#0I]#0H-"B\J#0H M*B!&=6YC=&EO;B!T:&%T(&%D9', =&AE(&9I;&5N86UE(&]F('1H92!C=7)R M96YT(&-H96-K960 9FEL92!T;PT*("H =&AE('!R:6YT;W5T+ T*("HO#0H- M"G9O:60 861D3F5W0F%S949I;&4H8VAA<B!;72!F:6QE*0T*>PT*("!N=6UD M97!S("L](#,[#0H (&EF("AN=6UD97!S(#X 86QL9&5P<RD >PT*(" (&%L M;&1E<', *CT ,CL-"B ("!D97!M;V1S+FQE;F=T:" ](&%L;&1E<',[#0H M(" 9&5P9FEL97,N;&5N9W1H(#T 86QL9&5P<SL-"B ("!D97!D97!T:',N M;&5N9W1H(#T 86QL9&5P<SL-"B ?0T*("!D97!M;V1S6VYU;61E<',M,UT M/2 B(R([#0H (&1E<&UO9'-;;G5M9&5P<RTR72 ](&9I;&4[#0H (&1E<&UO M9'-;;G5M9&5P<RTQ72 ]("(C(R([#0H (&1E<&9I;&5S6VYU;61E<',M,UT M/2!D97!F:6QE<UMN=6UD97!S+3)=(#T 9&5P9FEL97-;;G5M9&5P<RTQ72 ] M("(B.PT*("!D97!D97!T:'-;;G5M9&5P<RTS72 ](&1E<&1E<'1H<UMN=6UD M97!S+3)=(#T 9&5P9&5P=&AS6VYU;61E<',M,5T /2 B(CL-"GT-" T*+RH- M"B J($9U;F-T:6]N('1H870 =&%K97, 82!M;V1U;&4 ;F%M92!A;F0 8W)E M871E<R!A(')E86P <&%T:"X-"B J+PT*( T*8VAA<B!;72!C<F5A=&5&:6QE M4&%T:"AC:&%R(%M=(&UO9"D-"GL-"B 8VAA<B!;72!T96UP;6]D93L-"B M=&5M<&UO9&4 /2!R97!L86-E*&UO9"P (BXB+"!S97 I.PT*("!T96UP;6]D M92!^/2 B+F0B.PT*("!R971U<FX =&5M<&UO9&4[#0I]#0H-"B\J#0H *B!# M:&5C:W, :68 =&AE(&9O=6YD(&1E<&5N9&5N8WD :7, 82!P87)T(&]F('!H M;V)O<R!I;B!W:&EC:"!C87-E#0H *B!I="!I<R!I9VYO<F5D+ T*("HO#0H- M"F)O;VP 8VAE8VM0:&]B;W,H8VAA<B!;72!M;V0I#0I[#0H (&9O<B H:6YT M(&D /2 P.R!I(#P <&AO8F]S+FQE;F=T:#L :2LK*2![#0H (" :68 *&-M M<"AM;V0L('!H;V)O<UMI72D /3T ,"D >PT*(" (" <F5T=7)N('1R=64[ M#0H (" ?0T*("!]#0H (')E='5R;B!F86QS93L-"GT-" T*+RH-"B J($-H M96-K<R!I9B!T:&4 9F]U;F0 ;6]D=6QE(')E86QL>2!C86X 8F4 82!M;V1U M;&4 <VEN8V4 =&AE('!A<G-I;F<-"B J(&ES(&$ 8FET(&AA8VMI<V N#0H M*B\-" T*8F]O;"!C:&5C:TYO=$UO9"AC:&%R(%M=(&UO9"D-"GL-"B 8VAA M<B!;72!I;&QC:&%R<R ]("(I*%M=+RPK/R([#0H (&EF("AF:6YD*&QE='1E M<G,L(&UO9%LP72D /3T +3$I('L-"B ("!R971U<FX =')U93L-"B ?0T* M("!F;W( *&EN="!I(#T ,3L :2 \(&UO9"YL96YG=& [(&DK*RD >PT*(" M(&EF("AF:6YD*&EL;&-H87)S+"!M;V1;:5TI(#X +3$I('L-"B (" (')E M='5R;B!T<G5E.PT*(" ('T-"B ?0T*("!R971U<FX 9F%L<V4[#0I]#0H- M"B\J#0H *B!!9&1S(&$ <&%T:"!G:79E;B!W:71H("(M22( =&\ =&AE('!A M=& ;&ES="X-"B J+PT*#0IV;VED(&%D9%!A=& H8VAA<B!;72!P871H*0T* M>PT*("!N=6UP871H<RLK.PT*("!I9B H;G5M<&%T:', /B!A;&QP871H<RD M>PT*(" (&%L;'!A=&AS("H](#([#0H (" <&%T:',N;&5N9W1H(#T 86QL M<&%T:',[#0H ('T-"B <&%T:'-;;G5M<&%T:', +2 Q72 ]('!A=& [#0I] M#0H-"B\J#0H *B!#:&5C:W, :68 82!F:6QE(&5X:7-T+ T*("HO#0H-"F)O M;VP 9FEL945X:7-T*&-H87( 6UT 9FEL92D-"GL-"B 8F]O;"!R97-U;'0 M/2!T<G5E.PT*("!T<GD >PT*(" (')E860H9FEL92D[#0H ('T-"B 8V%T M8V *$9I;&5%<G)O<B!E*2![#0H (" <F5S=6QT(#T 9F%L<V4[#0H ('T- M"B <F5T=7)N(')E<W5L=#L-"GT-" T*:6YT(&UA:6XH8VAA<EM=6UT 87)G M<RD-"GL-"B :68 *&%R9W,N;&5N9W1H(#T](#$I('L-"B ("!O<'1(96QP M*"D[#0H (" <F5T=7)N(# [#0H ('T-"B #0H (&1E<&UO9',N;&5N9W1H M(#T ,3 [#0H (&1E<&9I;&5S+FQE;F=T:" ](#$P.PT*("!D97!D97!T:',N M;&5N9W1H(#T ,3 [#0H ('!A=&AS+FQE;F=T:" ](#$P.PT*#0H (&%R9W-L M:7-T(#T 87)G<SL-"B =VAI;&4 *&-U<F]P=" \(&%R9W,N;&5N9W1H("8F M(&-H96-K3W!T:6]N*&-U<F]P="DI('L-"B ("!C=7)O<'0K*SL-"B ?0T* M#0H (&EF("AC=7)O<'0 /"!A<F=S+FQE;F=T:"D >PT*(" (&9O<B H:6YT M(&D /2!C=7)O<'0[(&D /"!A<F=S+FQE;F=T:#L :2LK*2![#0H (" ("!D M97!"87-E*&DI.PT*(" ('T-"B ?0T*#0H (&EF("AW<FET92D >PT*(" M($9I;&4 9&5P9FEL92 ](&YE=R!&:6QE*")D97!S(BP 1FEL94UO9&4N3W5T M*3L-"B ("!F;W( *&EN="!I(#T ,#L :2 \(&YU;61E<',[(&DK*RD >PT* M(" (" <')I;G1F*&1E<&UO9'-;:5T ?B B("( ?B!D97!F:6QE<UMI72!^ M("( (B!^(&1E<&1E<'1H<UMI72!^(")<;B(I.PT*(" ('T-"B ("!D97!F M:6QE+F-L;W-E*"D[#0H ('T-"B 96QS92![#0H (" 9F]R("AI;G0 :2 ] M(# [(&D /"!N=6UD97!S.R!I*RLI('L-"B (" ('!R:6YT9BAD97!M;V1S M6VE=('X (B B('X 9&5P9FEL97-;:5T ?B B("( ?B!D97!D97!T:'-;:5T H?B B7&XB*3L-"B ("!]#0H ('T-" T*("!R971U<FX ,3L-"GT-" `` ` end
Oct 26 2003
parent "Lars Ivar Igesund" <larsivi stud.ntnu.no> writes:
I've now added a switch "-m" or "--make-syntax" that when used
will print out the dependencies in make syntax. It looks like this:

 depsrc -m foo.d
foo.obj : foo.d dep1.d dep2.d dep3.d ... The object suffix is .obj on Windows and .o on linux. One hitch; only one input file is supported when using this switch. Lars Ivar Igesund "Lars Ivar Igesund" <larsivi stud.ntnu.no> wrote in message news:bngc8g$mel$1 digitaldaemon.com...
 Hi!

 I've made a dependency walker for D source files. Given an input
 file, it searches through it and the imported modules to find all
 d files that the input file depend on. (Source is attached, compile
 with "dmd depsrc.d", only deps are to platform independent parts
 of phobos. Therefore it should work on both win32 and linux, but
 only win32 has been tested.)

 If an imported module imports other modules privately, these aren't
 searched.
 If the imported module is part of phobos, it is ignored.
 The output consists of the base file that is checked, all the modules
 it depends on, a path where this module is found and the depths
 where the modules are found. (If a module is imported from a
 module that is imported from the base file, the module is said to be
 found on depth 2.)

 By default, the found dependencies are printed to the console. Use
 -w/--writetofile to have them written to the file "depfile". (This don't
 work due to recently reported phobos bug.).
 There are no known bugs :)
 The source code is free in all ways (except that it is copyrighted.)

 The dependencies should be easy to automatically process. Given
 the command
depsrc -Isomepath foo.d bar.d, the output will be something like:
# foo.d ## moduledep1 pathtomoduledep1 1,2 moduledep2 pathtomoduledep2 3 # bar.d ## moduledep3 pathtomoduledep3 1 ... ... What's the use for this program? It might be a nice diagnostic if you don't have control over which modules have have been imported from where. Also it can be used by build systems to find the dependencies such that it knows when to recompile/relink. If anyone wants to include it in their packages, feel free (dmd, dide,
leds,
 etc.)

 It would be nice if someone would like to test it on linux.
 Suggestions, fixes, etc are welcome.

 Lars Ivar Igesund
begin 666 depsrc.d M+RH-"B J(&1E<'-R8RYD#0H *B!$97!E;F1E;F-Y('=A;&ME<B!F;W( 1"!S M;W5R8V4 9FEL97,N#0H *B!#;W!Y<FEG:'0 ,C P,R!,87)S($EV87( 26=E M<W5N9" \;&%R<VEV87(G870G:6=E<W5N9"YN970^#0H * T*("H 4&5R;6ES M<VEO;B!T;R!U<V4L(&-O<'DL(&UO9&EF>2P 9&ES=')I8G5T92!A;F0 <V5L M;"!T:&ES('-O9G1W87)E#0H *B!A;F0 :71S(&1O8W5M96YT871I;VX 9F]R M(&%N>2!P=7)P;W-E(&ES(&AE<F5B>2!G<F%N=&5D('=I=&AO=70 9F5E+ T* M("H <')O=FED960 =&AA="!T:&4 86)O=F4 8V]P>7)I9VAT(&YO=&EC92!A M<'!E87( :6X 86QL(&-O<&EE<R!A;F0-"B J('1H870 8F]T:"!T:&%T(&-O M<'ER:6=H="!N;W1I8V4 86YD('1H:7, <&5R;6ES<VEO;B!N;W1I8V4 87!P M96%R#0H *B!I;B!S=7!P;W)T:6YG(&1O8W5M96YT871I;VXN($ET(&ES('!R M;W9I9&5D(")A<R!I<R( =VET:&]U="!E>'!R97-S( T*("H ;W( :6UP;&EE M9"!W87)R86YT>2X-"B J+PT*#0II;7!O<G0 9FEL93L-"FEM<&]R="!P871H M.PT*:6UP;W)T('-T<F5A;3L-"FEM<&]R="!S=')I;F<[#0II;7!O<G0 8RYS M=&1I;SL-" T*8F]O;"!H96QP8V%L;&5D(#T 9F%L<V4[#0IB;V]L('9E<G-I M;VYC86QL960 /2!F86QS93L-"F)O;VP =W)I=&4 /2!F86QS93L-"F)O;VP M;6%K97-Y;G1A>" ](&9A;'-E.PT*:6YT(&-U<F]P=" ](#$[#0II;G0 ;G5M M<&%T:', /2 P.PT*:6YT(&%L;'!A=&AS(#T ,3 [#0II;G0 9&5P=&AL:6UI M=" ]("TQ.PT*:6YT(&1E<'1H(#T ,#L-"FEN="!N=6UD97!S(#T ,#L-"FEN M="!A;&QD97!S(#T ,3 [#0II;G0 9FER<W1F:6QE(#T ,3L-"F-H87( 6UU; M72!D97!M;V1S.PT*8VAA<B!;75M=(&1E<&9I;&5S.PT*8VAA<B!;75M=(&1E M<&1E<'1H<SL-"F-H87( 6UU;72!P871H<SL-"F-H87( 6UU;72!A<F=S;&ES M=#L-"B\O($9)6$U%.B R,# S,C8Q, T*+R\ 57!D871E('1H92!P:&]B;W, M87)R87D =VAE;B!N96-E<W-A<GD-"F-O;G-T(&-H87( 6UU;72!P:&]B;W, M/2!;#0H (" (F-O;7!I;&5R(BP-"B (" B8V]N=B(L#0H (" (F-T>7!E M(BP-"B (" B9&%T92(L#0H (" (F9I;&4B+ T*(" (")G8R(L#0H (" M(FUA=& B+ T*(" (")O8FIE8W0B+ T*(" (")O=71B=69F97(B+ T*(" M(")P871H(BP-"B (" B<')O8V5S<R(L#0H (" (G)A;F1O;2(L#0H (" M(G)E9V5X<"(L#0H (" (G-T9&EN="(L#0H (" (G-T<F5A;2(L#0H (" M(G-T<FEN9R(L#0H (" (G-Y<W1E;2(L#0H (" (G1H<F5A9"(L#0H (" M(G5R:2(L#0H (" (G5T9B(L#0H (" (GII<"(L#0H (" (F,N<W1D:6\B M+ T*(" (")I;G1R:6YS:6,B+ T*(" (")W:6YD;W=S(BP-"B (" B1"YW M:6XS,BYR96=I<W1R>2( 73L-" T*+RH-"B J($9U;F-T:6]N(&-A;&QE9"!W M:&5N('1H92 B:&5L<"( ;W!T:6]N(&ES('-P96-I9FEE9"X-"B J+PT*#0IV M;VED(&]P=$AE;' H*0T*>PT*("!O<'1697)S:6]N*"D[#0H (&EF(" A:&5L M<&-A;&QE9"D >PT*(" ('!R:6YT9B B7&XB('X-"B (" (" (" (E-Y M;G1A>#H 9&5P<W)C(%MO<'1I;VYS72!;<W)C("XN+EU<;B( ? T*(" (" M(" (" B(" M25MP871H72 (" (" (" (" ($%D9"!A('!A=& =&\ M8F4 <V5A<F-H960N7&XB('X-"B (" (" (" (B +6 O+2UH96QP(" M(" (" (" ("!0<FEN=', =&AI<R!H96QP('1A8FQE+EQN(B!^#0H (" M(" (" ("( ("UD/5MN=6U=+RTM9&5P=& ]6VYU;5T 3&EM:70 =&AE(&1E M<'1H('-E87)C:&5D(%QN(B!^#0H (" (" (" ("( (" (" (" (" M(" (" (" (" ("!F;W( 9&5P96YD96YC:65S+EQN(B!^#0H (" (" M(" ("( ("UM+RTM;6%K92US>6YT87 (" (" 4')I;G0 =&AE(&1E<&5N M9&5N8VEE<R!U<VEN9R!T:&4 ;6%K95QN(B!^#0H (" (" (" ("( (" M(" (" (" (" (" (" (" ("!S>6YT87 N(%PB;V)J96-T9FEL92 Z M('-R8R!D97!S7")<;B( ? T*(" (" (" (" B(" M5B\M+79E<G-I;VX M(" (" (" (%!R:6YT<R!T:&4 =F5R<VEO;BY<;B( ? T*(" (" (" M(" B(" M=R\M+7=R:71E=&]F:6QE(" (" (%!R:6YT<R!T:&4 9&5P96YD M96YC:65S('1O('1H92!F:6QE7&XB('X-"B (" (" (" (B (" (" M(" (" (" (" (" (" ("=D97!F:6QE)R!I;G-T96%D(&]F('1O('1H M92!C;VYS;VQE+B(I.PT*("!]#0H (&AE;'!C86QL960 /2!T<G5E.PT*?0T* M#0HO* T*("H 1G5N8W1I;VX =&AA="!C:&5C:W, :68 86X 87)G=6UE;G0 M:7, 86X ;W!T:6]N+ T*("HO#0H-"F)O;VP 8VAE8VM/<'1I;VXH:6YT(&%R M9RD-"GL-"B <W=I=&-H("AA<F=S;&ES=%MA<F==*2![#0H (&-A<V4 (BTM M=F5R<VEO;B(Z#0H (&-A<V4 (BU6(CH-"B ("!O<'1697)S:6]N*"D[#0H M(" <F5T=7)N('1R=64[#0H (" 8G)E86L[#0H (&-A<V4 (BTM:&5L<"(Z M#0H (&-A<V4 (BUH(CH-"B ("!O<'1(96QP*"D[#0H (" <F5T=7)N('1R M=64[#0H (" 8G)E86L[#0H (&-A<V4 (BTM=W)I=&5T;V9I;&4B. T*("!C M87-E("(M=R(Z#0H (" ;W!T5W)I=&4H*3L-"B ("!R971U<FX =')U93L- M"B ("!B<F5A:SL-"B 8V%S92 B+2UM86ME+7-Y;G1A>"(Z#0H (&-A<V4 M(BUM(CH-"B ("!O<'1-86ME4WEN=&%X*"D[#0H (" <F5T=7)N('1R=64[ M#0H (" 8G)E86L[#0H (&1E9F%U;'0Z#0H (" 8G)E86L[#0H ('T-"B M:68 *&-M<"AA<F=S;&ES=%MA<F==6S N+C-=+" B+60](BD /3T ,"D >PT* M(" (&]P=$1E<'1H*&%R9RP 9F%L<V4I.PT*(" (')E='5R;B!T<G5E.PT* M("!]#0H (&5L<V4 :68 *&-M<"AA<F=S;&ES=%MA<F==6S N+CA=+" B+2UD M97!T:"(I(#T](# I('L-"B ("!O<'1$97!T:"AA<F<L('1R=64I.PT*(" M(')E='5R;B!T<G5E.PT*("!]#0H (&EF("AC;7 H87)G<VQI<W1;87)G75LP M+BXR72P (BU)(BD /3T ,"D >PT*(" (&]P=$EM<&]R="AA<F<I.PT*(" M(')E='5R;B!T<G5E.PT*("!]#0H (')E='5R;B!F86QS93L-"GT-" T*+RH- M"B J($9U;F-T:6]N('1H870 <W1A<G1S('1H92!D97!E;F1E;F-Y('=A;&MI M;F< 9F]R(&)A<V4 <V]U<F-E(&9I;&5S+ T*("HO#0H-"G9O:60 9&5P0F%S M92AI;G0 87)G*0T*>PT*("!A9&1.97="87-E1FEL92AA<F=S;&ES=%MA<F== M*3L-"B 9&5P5V%L:RAA<F=S;&ES=%MA<F==+" B(BP =')U92D[#0I]#0H- M"B\J#0H *B!&=6YC=&EO;B!T:&%T(&1O('1H92!M86EN(&1E<&5N9&5N8WD M=V%L:VEN9R!R96-U<G-I=F5L>2X 268 :70 9FEN9 T*("H 9FEL97, =&AA M="!H87, 8F5E;B!W86QK960 8F5F;W)E+"!I="!S:VEP<R!I="!T;R!A=F]I M9"!I;F9I;FET90T*("H 8WEC;&EC(&1E<&5N9&5N8VEE<RX-"B J+PT*#0IV M;VED(&1E<%=A;&LH8VAA<B!;72!F:6QE+"!C:&%R(%M=(&UO9"P 8F]O;"!B M87-E*0T*>PT*("!C:&%R(%M=(&9I;&5P871H(#T 9FEL93L-"B :6YT(&D M/2 P.PT*("!W:&EL92 H:2 \(&YU;7!A=&AS("8F("%F:6QE17AI<W0H9FEL M97!A=& I*2![#0H (" 9FEL97!A=& /2!P871H+FIO:6XH<&%T:'-;:5TL M(&9I;&4I.PT*(" (&DK*SL-"B ?0T*("!&:6QE('-R8R ](&YE=R!&:6QE M*&9I;&5P871H*3L-"B =VAI;&4 *"%S<F,N96]F*"DI('L-"B ("!C:&%R M(%M=(&QI;F4 /2!S<F,N<F5A9$QI;F4H*3L-"B ("!C:&%R(%M=6UT <W1A M=&5M96YT<R ]('-P;&ET*&QI;F4L("([(BD[#0H (" 9F]R("AI;G0 :2 ] M(# [(&D /"!S=&%T96UE;G1S+FQE;F=T:#L :2LK("D >PT*(" (" :6YT M('!O<R ](&9I;F0H<W1A=&5M96YT<UMI72P (FEM<&]R="(I.PT*(" (" M:68 *'!O<R ]/2 M,2D >PT*(" (" ("!C;VYT:6YU93L-"B (" ('T- M"B (" (&5L<V4 >PT*(" (" ("!I9B H(6)A<V4I('L-"B (" (" M("!I;G0 <')I=G!O<R ](')F:6YD*'-T871E;65N='-;:5TL(")P<FEV871E M(BD[#0H (" (" (" :68 *'!R:79P;W, /B M,2 F)B!P<FEV<&]S(#P M<&]S*2![#0H (" (" (" ("!C:&%R(%M=(&EM<'-T;70 /2!S=&%T96UE M;G1S6VE=6W!R:79P;W,N+G!O<RLW73L #0H (" (" (" ("!C:&%R(%M= M6UT =V]R9', /2!S<&QI="AI;7!S=&UT*3L-"B (" (" (" (&EF("AW M;W)D<RYL96YG=& /3T ,BD >PT*(" (" (" (" ("!C;VYT:6YU93L- M"B (" (" (" ('T-"B (" (" ("!]#0H (" (" ('T-"B (" M(" 8VAA<B!;72!M;V0 /2!S=')I<"AS=&%T96UE;G1S6VE=6W!O<RLW+BYS M=&%T96UE;G1S6VE=+FQE;F=T:%TI.PT*(" (" ("!I9B H8VAE8VM.;W1- M;V0H;6]D*2D >PT*(" (" (" (&-O;G1I;G5E.PT*(" (" ("!]#0H M(" (" (&-H87( 6UT 9G [#0H (" (" (&EF("AC:&5C:U!H;V)O<RAM M;V0I*2![#0H (" (" (" 8V]N=&EN=64[#0H (" (" ('T-"B (" M(" 9G /2!C<F5A=&5&:6QE4&%T:"AM;V0I.PT*(" (" ("!D97!T:"LK M.PT*(" (" ("!I9B H9&5P=&AL:6UI=" ]/2 M,2!\?"!D97!T:" \/2!D M97!T:&QI;6ET*2![(" -"B (" (" ("!D97!786QK*&9P+"!M;V0L(&9A M;'-E*3L-"B (" (" ?0T*(" (" ("!D97!T:"TM.PT*(" (" ?0T* M(" ('T-"B ?0T*("!I9B H(6)A<V4I('L-"B ("!A9&1$97 H9FEL97!A M=& L(&UO9"P 9&5P=& I.R -"B ?0T*?0T*#0HO* T*("H 1G5N8W1I;VX M8V%L;&5D(&EF('1H92 B=F5R<VEO;B( ;W!T:6]N(&ES('5S960N#0H *B\- M" T*=F]I9"!O<'1697)S:6]N*"D-"GL-"B :68 *"%V97)S:6]N8V%L;&5D M*2![#0H (" <')I;G1F*")$97!E;F1E;F-Y('=A;&ME<B!F;W( 1"!S;W5R M8V4 9FEL97,N7&XB('X-"B (" (" (" (E9E<G-I;VX ,"XV+B!#;W!Y M<FEG:'0 3&%R<R!)=F%R($EG97-U;F0 ,C P,UQN(BD[#0H ('T-"B =F5R M<VEO;F-A;&QE9" ]('1R=64[#0I]#0H-"B\J#0H *B!&=6YC=&EO;B!C86QL M960 :68 =&AE(")W<FET971O9FEL92( ;W!T:6]N(&ES('5S960N#0H *B\- M" T*=F]I9"!O<'17<FET92 I#0I[#0H ('=R:71E(#T =')U93L-"GT-" T* M+RH-"B J($9U;F-T:6]N(&-A;&QE9"!I9B!T:&4 (F1E<'1H(B!O<'1I;VX M:7, =7-E9"!T;R!D96-I9&4 =&AE(&UA>&EM=6T-"B J(&1E<'1H(&9O<B!R M96-U<G-I;VXN#0H *B\-" T*=F]I9"!O<'1$97!T:"AI;G0 87)G+"!B;V]L M(&1O=6)L961A<V I#0I[#0H (&EF("AD;W5B;&5D87-H*2![#0H (" 9&5P M=&AL:6UI=" ]("AI;G0I871O:2AA<F=S;&ES=%MA<F==6S N+F%R9W-L:7-T M6V%R9UTN;&5N9W1H72D[#0H ('T-"B 96QS92![#0H (" 9&5P=&AL:6UI M=" ]("AI;G0I871O:2AA<F=S;&ES=%MA<F==6S,N+F%R9W-L:7-T6V%R9UTN M;&5N9W1H72D[#0H ('T-"GT-" T*+RH-"B J($9U;F-T:6]N(&-A;&QE9"!F M;W( 86QL('1H92 B+4DB(&EM<&]R="!O<'1I;VYS('5S960N#0H *B\-" T* M=F]I9"!O<'1);7!O<G0H:6YT(&%R9RD-"GL-"B :68 *&%R9W-L:7-T6V%R M9UTN;&5N9W1H(#T](#(I('L-"B ("!R971U<FX[#0H ('T-"B 861D4&%T M:"AA<F=S;&ES=%MA<F==6S(N+F%R9W-L:7-T6V%R9UTN;&5N9W1H72D[#0I] M#0H-"B\J#0H *B!&=6YC=&EO;B!C86QL960 =VAE;B!T:&4 (BUM(B\B+2UM M86ME+7-Y;G1A>"( ;W!T:6]N(&ES('5S960N#0H *B\-" T*=F]I9"!O<'1- M86ME4WEN=&%X*"D-"GL-"B ;6%K97-Y;G1A>" ]('1R=64[#0I]#0H-"B\J M#0H *B!&=6YC=&EO;B!T:&%T(&%D9', 82!D97!E;F1E;F-Y('1O('1H92!L M:7-T('=H96X :70 :7, =F5R:69I960N#0H *B!!('!A=& 86YD('1H92!D M97!T:"!W:&5R92!I="!W87, 9F]U;F0 :7, 86QS;R!A9&1E9"X 268 =&AE M#0H *B!D97!E;F1E;F-Y(&AA<R!B965N(&9O=6YD(&)E9F]R92P =&AE(&YE M=R!D97!T:"!I<R!A9&1E9"!T;R!T:&4-"B J('-A;64 96YT<GDN#0H *B\- M" T*=F]I9"!A9&1$97 H8VAA<B!;72!F:6QE<&%T:"P 8VAA<B!;72!M;V0L M(&EN="!D97!T:"D-"GL-"B 9F]R("AI;G0 :2 ](# [(&D /"!D97!M;V1S M+FQE;F=T:#L :2LK*2![#0H (" :68 *&-M<"AD97!M;V1S6VE=+"!M;V0I M(#T](# I('L-"B (" (&1E<&1E<'1H<UMI72!^/2 B+"([#0H (" ("!D M97!D97!T:'-;:5T ?CT =&]3=')I;F<H9&5P=& I.PT*(" (" <F5T=7)N M.PT*(" ('T-"B ?0T*("!N=6UD97!S*RL[#0H (&EF("AN=6UD97!S(#X M86QL9&5P<RD >PT*(" (&%L;&1E<', *CT ,CL-"B ("!D97!M;V1S+FQE M;F=T:" ](&%L;&1E<',[#0H (" 9&5P9FEL97,N;&5N9W1H(#T 86QL9&5P M<SL-"B ("!D97!D97!T:',N;&5N9W1H(#T 86QL9&5P<SL-"B ?0T*("!D M97!M;V1S6VYU;61E<',M,5T /2!M;V0[#0H (&1E<&9I;&5S6VYU;61E<',M M,5T /2!F:6QE<&%T:#L-"B 9&5P9&5P=&AS6VYU;61E<',M,5T /2!T;U-T M<FEN9RAD97!T:"D[#0I]#0H-"B\J#0H *B!&=6YC=&EO;B!T:&%T(&%D9', M=&AE(&9I;&5N86UE(&]F('1H92!C=7)R96YT(&-H96-K960 9FEL92!T;PT* M("H =&AE('!R:6YT;W5T+ T*("HO#0H-"G9O:60 861D3F5W0F%S949I;&4H M8VAA<B!;72!F:6QE*0T*>PT*("!N=6UD97!S("L](#,[#0H (&EF("AN=6UD M97!S(#X 86QL9&5P<RD >PT*(" (&%L;&1E<', *CT ,CL-"B ("!D97!M M;V1S+FQE;F=T:" ](&%L;&1E<',[#0H (" 9&5P9FEL97,N;&5N9W1H(#T M86QL9&5P<SL-"B ("!D97!D97!T:',N;&5N9W1H(#T 86QL9&5P<SL-"B M?0T*("!D97!M;V1S6VYU;61E<',M,UT /2 B(R([#0H (&1E<&UO9'-;;G5M M9&5P<RTR72 ](&9I;&4[#0H (&1E<&UO9'-;;G5M9&5P<RTQ72 ]("(C(R([ M#0H (&1E<&9I;&5S6VYU;61E<',M,UT /2!D97!F:6QE<UMN=6UD97!S+3)= M(#T 9&5P9FEL97-;;G5M9&5P<RTQ72 ]("(B.PT*("!D97!D97!T:'-;;G5M M9&5P<RTS72 ](&1E<&1E<'1H<UMN=6UD97!S+3)=(#T 9&5P9&5P=&AS6VYU M;61E<',M,5T /2 B(CL-"GT-" T*+RH-"B J($9U;F-T:6]N('1H870 =&%K M97, 82!M;V1U;&4 ;F%M92!A;F0 8W)E871E<R!A(')E86P <&%T:"X-"B J M+PT*( T*8VAA<B!;72!C<F5A=&5&:6QE4&%T:"AC:&%R(%M=(&UO9"D-"GL- M"B 8VAA<B!;72!T96UP;6]D93L-"B =&5M<&UO9&4 /2!R97!L86-E*&UO M9"P (BXB+"!S97 I.PT*("!T96UP;6]D92!^/2 B+F0B.PT*("!R971U<FX M=&5M<&UO9&4[#0I]#0H-"B\J#0H *B!#:&5C:W, :68 =&AE(&9O=6YD(&1E M<&5N9&5N8WD :7, 82!P87)T(&]F('!H;V)O<R!I;B!W:&EC:"!C87-E#0H M*B!I="!I<R!I9VYO<F5D+ T*("HO#0H-"F)O;VP 8VAE8VM0:&]B;W,H8VAA M<B!;72!M;V0I#0I[#0H (&9O<B H:6YT(&D /2 P.R!I(#P <&AO8F]S+FQE M;F=T:#L :2LK*2![#0H (" :68 *&-M<"AM;V0L('!H;V)O<UMI72D /3T M,"D >PT*(" (" <F5T=7)N('1R=64[#0H (" ?0T*("!]#0H (')E='5R M;B!F86QS93L-"GT-" T*+RH-"B J($-H96-K<R!I9B!T:&4 9F]U;F0 ;6]D M=6QE(')E86QL>2!C86X 8F4 82!M;V1U;&4 <VEN8V4 =&AE('!A<G-I;F<- M"B J(&ES(&$ 8FET(&AA8VMI<V N#0H *B\-" T*8F]O;"!C:&5C:TYO=$UO M9"AC:&%R(%M=(&UO9"D-"GL-"B 8VAA<B!;72!I;&QC:&%R<R ]("(I*%M= M+RPK/R([#0H (&EF("AF:6YD*&QE='1E<G,L(&UO9%LP72D /3T +3$I('L- M"B ("!R971U<FX =')U93L-"B ?0T*("!F;W( *&EN="!I(#T ,3L :2 \ M(&UO9"YL96YG=& [(&DK*RD >PT*(" (&EF("AF:6YD*&EL;&-H87)S+"!M M;V1;:5TI(#X +3$I('L-"B (" (')E='5R;B!T<G5E.PT*(" ('T-"B M?0T*("!R971U<FX 9F%L<V4[#0I]#0H-"B\J#0H *B!!9&1S(&$ <&%T:"!G M:79E;B!W:71H("(M22( =&\ =&AE('!A=& ;&ES="X-"B J+PT*#0IV;VED M(&%D9%!A=& H8VAA<B!;72!P871H*0T*>PT*("!N=6UP871H<RLK.PT*("!I M9B H;G5M<&%T:', /B!A;&QP871H<RD >PT*(" (&%L;'!A=&AS("H](#([ M#0H (" <&%T:',N;&5N9W1H(#T 86QL<&%T:',[#0H ('T-"B <&%T:'-; M;G5M<&%T:', +2 Q72 ]('!A=& [#0I]#0H-"B\J#0H *B!#:&5C:W, :68 M82!F:6QE(&5X:7-T+ T*("HO#0H-"F)O;VP 9FEL945X:7-T*&-H87( 6UT M9FEL92D-"GL-"B 8F]O;"!R97-U;'0 /2!T<G5E.PT*("!T<GD >PT*(" M(')E860H9FEL92D[#0H ('T-"B 8V%T8V *$9I;&5%<G)O<B!E*2![#0H M(" <F5S=6QT(#T 9F%L<V4[#0H ('T-"B <F5T=7)N(')E<W5L=#L-"GT- M" T*:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD-"GL-"B :68 *&%R9W,N;&5N M9W1H(#T](#$I('L-"B ("!O<'1(96QP*"D[#0H (" <F5T=7)N(# [#0H M('T-"B #0H (&1E<&UO9',N;&5N9W1H(#T ,3 [#0H (&1E<&9I;&5S+FQE M;F=T:" ](#$P.PT*("!D97!D97!T:',N;&5N9W1H(#T ,3 [#0H ('!A=&AS M+FQE;F=T:" ](#$P.PT*#0H (&%R9W-L:7-T(#T 87)G<SL-"B =VAI;&4 M*&-U<F]P=" \(&%R9W,N;&5N9W1H("8F(&-H96-K3W!T:6]N*&-U<F]P="DI M('L-"B ("!C=7)O<'0K*SL-"B ?0T*#0H (&EF("AC=7)O<'0 /"!A<F=S M+FQE;F=T:"D >PT*(" (&9I<G-T9FEL92 ](&-U<F]P=#L-"B ("!F;W( M*&EN="!I(#T 8W5R;W!T.R!I(#P 87)G<RYL96YG=& [(&DK*RD >PT*(" M(" 9&5P0F%S92AI*3L-"B ("!]#0H ('T-" T*("!I9B H=W)I=&4I('L- M"B ("!&:6QE(&1E<&9I;&4 /2!N97< 1FEL92 B9&5P<R(L($9I;&5-;V1E M+D]U="D[#0H (" 9F]R("AI;G0 :2 ](# [(&D /"!N=6UD97!S.R!I*RLI M('L-"B (" ('!R:6YT9BAD97!M;V1S6VE=('X (B B('X 9&5P9FEL97-; M:5T ?B B("( ?B!D97!D97!T:'-;:5T ?B B7&XB*3L-"B ("!]#0H (" M9&5P9FEL92YC;&]S92 I.PT*("!]#0H (&5L<V4 >PT*(" (&EF("AM86ME M<WEN=&%X*2![#0H (" ("!C:&%R(%M=(&]B:G-U9B ]("(B.PT*(" (" M=F5R<VEO;B H5VEN,S(I('L-"B (" (" ;V)J<W5F(#T (BYO8FHB.PT* M(" (" ?0T*(" (" =F5R<VEO;B H;&EN=7 I('L-"B (" (" ;V)J M<W5F(#T (BYO(CL-"B (" ('T-"B (" (&-H87( 6UT 9&5P<R ](')E M<&QA8V4H87)G<UMF:7)S=&9I;&5=+" B+F0B+"!O8FIS=68I.PT*(" (" M9&5P<R!^/2 B(#H (CL-"B (" (&1E<', ?CT 87)G<UMF:7)S=&9I;&5= M.PT*(" (" 9&5P<R!^/2 B("([#0H (" ("!F;W( *&EN="!I(#T ,SL M:2 \(&YU;61E<',[(&DK*RD >PT*(" (" ("!D97!S('X](&1E<&9I;&5S M6VE=('X (B B.PT*(" (" ?0T*(" (" <')I;G1F*&1E<',I.PT*(" M('T-"B ("!E;'-E('L-"B (" (&9O<B H:6YT(&D /2 P.R!I(#P ;G5M M9&5P<SL :2LK*2![#0H (" (" ('!R:6YT9BAD97!M;V1S6VE=('X (B B M('X 9&5P9FEL97-;:5T ?B B("( ?B!D97!D97!T:'-;:5T ?B B7&XB*3L- H"B (" ('T-"B ("!]#0H ('T-" T*("!R971U<FX ,3L-"GT-" `` ` end
Oct 27 2003