Tcl Source Code

Hex Artifact Content
Login

Artifact d8764a0fd5af9ca26e835306b18679b36de10875:


0000: 23 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  #===============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
0050: 23 0a 23 20 6d 6b 64 65 70 65 6e 64 20 3a 20 67  #.# mkdepend : g
0060: 65 6e 65 72 61 74 65 20 64 65 70 65 6e 64 65 6e  enerate dependen
0070: 63 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  cy information f
0080: 72 6f 6d 20 43 2f 43 2b 2b 20 66 69 6c 65 73 0a  rom C/C++ files.
0090: 23 0a 23 20 43 6f 70 79 72 69 67 68 74 20 28 63  #.# Copyright (c
00a0: 29 20 31 39 39 38 2c 20 4e 61 74 20 50 72 79 63  ) 1998, Nat Pryc
00b0: 65 0a 23 0a 23 20 50 65 72 6d 69 73 73 69 6f 6e  e.#.# Permission
00c0: 20 69 73 20 68 65 72 65 62 79 20 67 72 61 6e 74   is hereby grant
00d0: 65 64 2c 20 77 69 74 68 6f 75 74 20 77 72 69 74  ed, without writ
00e0: 74 65 6e 20 61 67 72 65 65 6d 65 6e 74 20 61 6e  ten agreement an
00f0: 64 20 77 69 74 68 6f 75 74 0a 23 20 6c 69 63 65  d without.# lice
0100: 6e 73 65 20 6f 72 20 72 6f 79 61 6c 74 79 20 66  nse or royalty f
0110: 65 65 73 2c 20 74 6f 20 75 73 65 2c 20 63 6f 70  ees, to use, cop
0120: 79 2c 20 6d 6f 64 69 66 79 2c 20 61 6e 64 20 64  y, modify, and d
0130: 69 73 74 72 69 62 75 74 65 20 74 68 69 73 0a 23  istribute this.#
0140: 20 73 6f 66 74 77 61 72 65 20 61 6e 64 20 69 74   software and it
0150: 73 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  s documentation 
0160: 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2c  for any purpose,
0170: 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 74   provided that t
0180: 68 65 0a 23 20 61 62 6f 76 65 20 63 6f 70 79 72  he.# above copyr
0190: 69 67 68 74 20 6e 6f 74 69 63 65 20 61 6e 64 20  ight notice and 
01a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77  the following tw
01b0: 6f 20 70 61 72 61 67 72 61 70 68 73 20 61 70 70  o paragraphs app
01c0: 65 61 72 20 69 6e 0a 23 20 61 6c 6c 20 63 6f 70  ear in.# all cop
01d0: 69 65 73 20 6f 66 20 74 68 69 73 20 73 6f 66 74  ies of this soft
01e0: 77 61 72 65 2e 0a 23 0a 23 20 49 4e 20 4e 4f 20  ware..#.# IN NO 
01f0: 45 56 45 4e 54 20 53 48 41 4c 4c 20 54 48 45 20  EVENT SHALL THE 
0200: 41 55 54 48 4f 52 20 42 45 20 4c 49 41 42 4c 45  AUTHOR BE LIABLE
0210: 20 54 4f 20 41 4e 59 20 50 41 52 54 59 20 46 4f   TO ANY PARTY FO
0220: 52 20 44 49 52 45 43 54 2c 20 49 4e 44 49 52 45  R DIRECT, INDIRE
0230: 43 54 2c 0a 23 20 53 50 45 43 49 41 4c 2c 20 49  CT,.# SPECIAL, I
0240: 4e 43 49 44 45 4e 54 41 4c 2c 20 4f 52 20 43 4f  NCIDENTAL, OR CO
0250: 4e 53 45 51 55 45 4e 54 49 41 4c 20 44 41 4d 41  NSEQUENTIAL DAMA
0260: 47 45 53 20 41 52 49 53 49 4e 47 20 4f 55 54 20  GES ARISING OUT 
0270: 4f 46 20 54 48 45 20 55 53 45 20 4f 46 0a 23 20  OF THE USE OF.# 
0280: 54 48 49 53 20 53 4f 46 54 57 41 52 45 20 41 4e  THIS SOFTWARE AN
0290: 44 20 49 54 53 20 44 4f 43 55 4d 45 4e 54 41 54  D ITS DOCUMENTAT
02a0: 49 4f 4e 2c 20 45 56 45 4e 20 49 46 20 54 48 45  ION, EVEN IF THE
02b0: 20 41 55 54 48 4f 52 20 48 41 53 20 42 45 45 4e   AUTHOR HAS BEEN
02c0: 20 41 44 56 49 53 45 44 0a 23 20 4f 46 20 54 48   ADVISED.# OF TH
02d0: 45 20 50 4f 53 53 49 42 49 4c 49 54 59 20 4f 46  E POSSIBILITY OF
02e0: 20 53 55 43 48 20 44 41 4d 41 47 45 2e 0a 23 0a   SUCH DAMAGE..#.
02f0: 23 20 54 48 45 20 41 55 54 48 4f 52 20 53 50 45  # THE AUTHOR SPE
0300: 43 49 46 49 43 41 4c 4c 59 20 44 49 53 43 4c 41  CIFICALLY DISCLA
0310: 49 4d 53 20 41 4e 59 20 57 41 52 52 41 4e 54 49  IMS ANY WARRANTI
0320: 45 53 2c 20 49 4e 43 4c 55 44 49 4e 47 2c 20 42  ES, INCLUDING, B
0330: 55 54 20 4e 4f 54 0a 23 20 4c 49 4d 49 54 45 44  UT NOT.# LIMITED
0340: 20 54 4f 2c 20 54 48 45 20 49 4d 50 4c 49 45 44   TO, THE IMPLIED
0350: 20 57 41 52 52 41 4e 54 49 45 53 20 4f 46 20 4d   WARRANTIES OF M
0360: 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 41  ERCHANTABILITY A
0370: 4e 44 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41  ND FITNESS FOR A
0380: 0a 23 20 50 41 52 54 49 43 55 4c 41 52 20 50 55  .# PARTICULAR PU
0390: 52 50 4f 53 45 2e 20 20 54 48 45 20 53 4f 46 54  RPOSE.  THE SOFT
03a0: 57 41 52 45 20 50 52 4f 56 49 44 45 44 20 48 45  WARE PROVIDED HE
03b0: 52 45 55 4e 44 45 52 20 49 53 20 4f 4e 20 41 4e  REUNDER IS ON AN
03c0: 20 22 41 53 20 49 53 22 0a 23 20 42 41 53 49 53   "AS IS".# BASIS
03d0: 2c 20 41 4e 44 20 54 48 45 20 41 55 54 48 4f 52  , AND THE AUTHOR
03e0: 20 48 41 53 20 4e 4f 20 4f 42 4c 49 47 41 54 49   HAS NO OBLIGATI
03f0: 4f 4e 20 54 4f 20 50 52 4f 56 49 44 45 20 20 4d  ON TO PROVIDE  M
0400: 41 49 4e 54 45 4e 41 4e 43 45 2c 20 53 55 50 50  AINTENANCE, SUPP
0410: 4f 52 54 2c 0a 23 20 55 50 44 41 54 45 53 2c 20  ORT,.# UPDATES, 
0420: 45 4e 48 41 4e 43 45 4d 45 4e 54 53 2c 20 4f 52  ENHANCEMENTS, OR
0430: 20 4d 4f 44 49 46 49 43 41 54 49 4f 4e 53 2e 0a   MODIFICATIONS..
0440: 23 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  #===============
0450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
0490: 23 0a 23 20 4d 6f 64 69 66 69 65 64 20 68 65 61  #.# Modified hea
04a0: 76 69 6c 79 20 62 79 20 44 61 76 69 64 20 47 72  vily by David Gr
04b0: 61 76 65 72 65 61 75 78 20 3c 64 61 76 79 67 72  avereaux <davygr
04c0: 76 79 40 70 6f 62 6f 78 2e 63 6f 6d 3e 20 61 62  [email protected]> ab
04d0: 6f 75 74 20 39 2f 31 37 2f 32 30 30 36 2e 0a 23  out 9/17/2006..#
04e0: 20 4f 72 69 67 69 6e 61 6c 20 63 61 6e 20 62 65   Original can be
04f0: 20 66 6f 75 6e 64 20 40 0a 23 09 68 74 74 70 3a   found @.#.http:
0500: 2f 2f 77 65 62 2e 61 72 63 68 69 76 65 2e 6f 72  //web.archive.or
0510: 67 2f 77 65 62 2f 32 30 30 37 30 36 31 36 32 30  g/web/2007061620
0520: 35 39 32 34 2f 68 74 74 70 3a 2f 2f 77 77 77 2e  5924/http://www.
0530: 64 6f 63 2e 69 63 2e 61 63 2e 75 6b 2f 7e 6e 70  doc.ic.ac.uk/~np
0540: 32 2f 73 6f 66 74 77 61 72 65 2f 6d 6b 64 65 70  2/software/mkdep
0550: 65 6e 64 2e 68 74 6d 6c 0a 23 3d 3d 3d 3d 3d 3d  end.html.#======
0560: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0570: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
05a0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 61 72 72 61 79 20  ========..array 
05b0: 73 65 74 20 6d 6f 64 65 5f 64 61 74 61 20 7b 7d  set mode_data {}
05c0: 0a 73 65 74 20 6d 6f 64 65 5f 64 61 74 61 28 76  .set mode_data(v
05d0: 63 33 32 29 20 7b 63 6c 20 2d 6e 6f 6c 6f 67 6f  c32) {cl -nologo
05e0: 20 2d 45 7d 0a 0a 73 65 74 20 73 6f 75 72 63 65   -E}..set source
05f0: 5f 65 78 74 65 6e 73 69 6f 6e 73 20 5b 6c 69 73  _extensions [lis
0600: 74 20 2e 63 20 2e 63 70 70 20 2e 63 78 78 20 2e  t .c .cpp .cxx .
0610: 63 63 5d 0a 0a 73 65 74 20 65 78 63 6c 75 64 65  cc]..set exclude
0620: 73 20 5b 6c 69 73 74 5d 0a 69 66 20 5b 69 6e 66  s [list].if [inf
0630: 6f 20 65 78 69 73 74 73 20 65 6e 76 28 49 4e 43  o exists env(INC
0640: 4c 55 44 45 29 5d 20 7b 0a 20 20 20 20 73 65 74  LUDE)] {.    set
0650: 20 72 61 77 45 78 63 6c 75 64 65 73 20 5b 73 70   rawExcludes [sp
0660: 6c 69 74 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  lit [string trim
0670: 20 24 65 6e 76 28 49 4e 43 4c 55 44 45 29 20 22   $env(INCLUDE) "
0680: 3b 22 5d 20 22 3b 22 5d 0a 20 20 20 20 66 6f 72  ;"] ";"].    for
0690: 65 61 63 68 20 65 78 63 6c 75 64 65 20 24 72 61  each exclude $ra
06a0: 77 45 78 63 6c 75 64 65 73 20 7b 0a 09 6c 61 70  wExcludes {..lap
06b0: 70 65 6e 64 20 65 78 63 6c 75 64 65 73 20 5b 66  pend excludes [f
06c0: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 24 65  ile normalize $e
06d0: 78 63 6c 75 64 65 5d 0a 20 20 20 20 7d 0a 7d 0a  xclude].    }.}.
06e0: 0a 0a 23 20 6f 70 65 6e 4f 75 74 70 75 74 20 2d  ..# openOutput -
06f0: 2d 0a 23 0a 23 09 4f 70 65 6e 73 20 74 68 65 20  -.#.#.Opens the 
0700: 6f 75 74 70 75 74 20 66 69 6c 65 2e 0a 23 0a 23  output file..#.#
0710: 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 09 66 69   Arguments:.#.fi
0720: 6c 65 09 54 68 65 20 66 69 6c 65 20 74 6f 20 6f  le.The file to o
0730: 70 65 6e 0a 23 0a 23 20 52 65 73 75 6c 74 73 3a  pen.#.# Results:
0740: 0a 23 09 4e 6f 6e 65 2e 0a 0a 70 72 6f 63 20 6f  .#.None...proc o
0750: 70 65 6e 4f 75 74 70 75 74 20 7b 66 69 6c 65 7d  penOutput {file}
0760: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6f 75   {.    global ou
0770: 74 70 75 74 0a 20 20 20 20 73 65 74 20 6f 75 74  tput.    set out
0780: 70 75 74 20 5b 6f 70 65 6e 20 24 66 69 6c 65 20  put [open $file 
0790: 77 5d 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74  w].    puts $out
07a0: 70 75 74 20 22 23 20 41 75 74 6f 6d 61 74 69 63  put "# Automatic
07b0: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 61  ally generated a
07c0: 74 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20  t [clock format 
07d0: 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 20  [clock seconds] 
07e0: 2d 66 6f 72 6d 61 74 20 22 25 59 2d 25 6d 2d 25  -format "%Y-%m-%
07f0: 64 54 25 48 3a 25 4d 3a 25 53 22 5d 20 62 79 20  dT%H:%M:%S"] by 
0800: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5c 6e 22  [info script]\n"
0810: 0a 7d 0a 0a 23 20 63 6c 6f 73 65 4f 75 74 70 75  .}..# closeOutpu
0820: 74 20 2d 2d 0a 23 0a 23 09 43 6c 6f 73 65 73 20  t --.#.#.Closes 
0830: 6f 75 74 70 75 74 20 66 69 6c 65 2e 0a 23 0a 23  output file..#.#
0840: 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 09 6e 6f   Arguments:.#.no
0850: 6e 65 0a 23 0a 23 20 52 65 73 75 6c 74 73 3a 0a  ne.#.# Results:.
0860: 23 09 4e 6f 6e 65 2e 0a 0a 70 72 6f 63 20 63 6c  #.None...proc cl
0870: 6f 73 65 4f 75 74 70 75 74 20 7b 7d 20 7b 0a 20  oseOutput {} {. 
0880: 20 20 20 67 6c 6f 62 61 6c 20 6f 75 74 70 75 74     global output
0890: 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  .    if {[string
08a0: 20 6d 61 74 63 68 20 73 74 64 6f 75 74 20 24 6f   match stdout $o
08b0: 75 74 70 75 74 5d 20 21 3d 20 30 7d 20 7b 0a 20  utput] != 0} {. 
08c0: 20 20 20 20 20 20 20 63 6c 6f 73 65 20 24 6f 75         close $ou
08d0: 74 70 75 74 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20  tput.    }.}..# 
08e0: 72 65 61 64 44 65 70 65 6e 64 73 20 2d 2d 0a 23  readDepends --.#
08f0: 0a 23 09 52 65 61 64 20 6f 66 66 20 43 43 50 20  .#.Read off CCP 
0900: 70 69 70 65 20 66 6f 72 20 23 6c 69 6e 65 20 72  pipe for #line r
0910: 65 66 65 72 65 6e 63 65 73 2e 0a 23 0a 23 20 41  eferences..#.# A
0920: 72 67 75 6d 65 6e 74 73 3a 0a 23 09 63 68 61 6e  rguments:.#.chan
0930: 09 54 68 65 20 70 69 70 65 20 63 68 61 6e 6e 65  .The pipe channe
0940: 6c 20 77 65 20 61 72 65 20 72 65 61 64 69 6e 67  l we are reading
0950: 20 69 6e 2e 0a 23 0a 23 20 52 65 73 75 6c 74 73   in..#.# Results
0960: 3a 0a 23 09 52 61 77 20 64 65 70 65 6e 64 65 6e  :.#.Raw dependen
0970: 63 79 20 6c 69 73 74 20 70 61 69 72 73 2e 0a 0a  cy list pairs...
0980: 70 72 6f 63 20 72 65 61 64 44 65 70 65 6e 64 73  proc readDepends
0990: 20 7b 63 68 61 6e 7d 20 7b 0a 20 20 20 20 73 65   {chan} {.    se
09a0: 74 20 6c 69 6e 65 20 22 22 0a 20 20 20 20 61 72  t line "".    ar
09b0: 72 61 79 20 73 65 74 20 64 65 70 65 6e 64 73 20  ray set depends 
09c0: 7b 7d 0a 0a 20 20 20 20 77 68 69 6c 65 20 7b 5b  {}..    while {[
09d0: 67 65 74 73 20 24 63 68 61 6e 20 6c 69 6e 65 5d  gets $chan line]
09e0: 20 21 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 20 20   != -1} {.      
09f0: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e    if {[regexp {^
0a00: 23 6c 69 6e 65 20 5b 30 2d 39 5d 2b 20 5c 22 28  #line [0-9]+ \"(
0a10: 2e 2a 29 5c 22 24 7d 20 24 6c 69 6e 65 20 64 75  .*)\"$} $line du
0a20: 6d 6d 79 20 66 6e 61 6d 65 5d 20 21 3d 20 30 7d  mmy fname] != 0}
0a30: 20 7b 0a 09 20 20 20 20 73 65 74 20 66 6e 61 6d   {..    set fnam
0a40: 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a  e [file normaliz
0a50: 65 20 24 66 6e 61 6d 65 5d 0a 20 20 20 20 20 20  e $fname].      
0a60: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
0a70: 20 65 78 69 73 74 73 20 74 61 72 67 65 74 5d 7d   exists target]}
0a80: 20 7b 0a 09 09 23 20 74 68 69 73 20 69 73 20 6f   {...# this is o
0a90: 75 72 73 65 6c 66 0a 09 09 73 65 74 20 74 61 72  urself...set tar
0aa0: 67 65 74 20 24 66 6e 61 6d 65 0a 09 09 70 75 74  get $fname...put
0ab0: 73 20 73 74 64 65 72 72 20 22 70 72 6f 63 65 73  s stderr "proces
0ac0: 73 69 6e 67 20 5b 66 69 6c 65 20 74 61 69 6c 20  sing [file tail 
0ad0: 24 66 6e 61 6d 65 5d 22 0a 20 20 20 20 20 20 20  $fname]".       
0ae0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09       } else {...
0af0: 23 20 64 6f 6e 27 74 20 69 6e 63 6c 75 64 65 20  # don't include 
0b00: 6f 75 72 73 65 6c 76 65 73 20 61 73 20 61 20 64  ourselves as a d
0b10: 65 70 65 6e 64 65 6e 63 79 20 6f 66 20 6f 75 72  ependency of our
0b20: 73 65 6c 66 2e 0a 09 09 69 66 20 7b 21 5b 73 74  self....if {![st
0b30: 72 69 6e 67 20 63 6f 6d 70 61 72 65 20 24 66 6e  ring compare $fn
0b40: 61 6d 65 20 24 74 61 72 67 65 74 5d 7d 20 7b 63  ame $target]} {c
0b50: 6f 6e 74 69 6e 75 65 7d 0a 09 09 23 20 73 74 6f  ontinue}...# sto
0b60: 72 65 20 69 6e 20 61 6e 20 61 72 72 61 79 20 73  re in an array s
0b70: 6f 20 6d 75 6c 74 69 70 6c 65 20 6f 63 63 75 72  o multiple occur
0b80: 61 6e 63 65 73 20 61 72 65 20 6e 6f 74 20 63 6f  ances are not co
0b90: 75 6e 74 65 64 2e 0a 20 20 20 20 20 20 20 20 20  unted..         
0ba0: 20 20 20 20 20 20 20 73 65 74 20 64 65 70 65 6e         set depen
0bb0: 64 73 28 24 74 61 72 67 65 74 7c 24 66 6e 61 6d  ds($target|$fnam
0bc0: 65 29 20 22 22 0a 20 20 20 20 20 20 20 20 20 20  e) "".          
0bd0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
0be0: 20 20 7d 0a 0a 20 20 20 20 73 65 74 20 72 65 73    }..    set res
0bf0: 75 6c 74 20 7b 7d 0a 20 20 20 20 66 6f 72 65 61  ult {}.    forea
0c00: 63 68 20 6e 20 5b 61 72 72 61 79 20 6e 61 6d 65  ch n [array name
0c10: 73 20 64 65 70 65 6e 64 73 5d 20 7b 0a 20 20 20  s depends] {.   
0c20: 20 20 20 20 20 73 65 74 20 70 61 69 72 20 5b 73       set pair [s
0c30: 70 6c 69 74 20 24 6e 20 22 7c 22 5d 0a 20 20 20  plit $n "|"].   
0c40: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
0c50: 75 6c 74 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65  ult [list [linde
0c60: 78 20 24 70 61 69 72 20 30 5d 20 5b 6c 69 6e 64  x $pair 0] [lind
0c70: 65 78 20 24 70 61 69 72 20 31 5d 5d 0a 20 20 20  ex $pair 1]].   
0c80: 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 24   }..    return $
0c90: 72 65 73 75 6c 74 0a 7d 0a 0a 23 20 77 72 69 74  result.}..# writ
0ca0: 65 44 65 70 65 6e 64 73 20 2d 2d 0a 23 0a 23 09  eDepends --.#.#.
0cb0: 57 72 69 74 65 20 74 68 65 20 70 72 6f 63 65 73  Write the proces
0cc0: 73 65 64 20 6c 69 73 74 20 6f 75 74 20 74 6f 20  sed list out to 
0cd0: 74 68 65 20 66 69 6c 65 2e 0a 23 0a 23 20 41 72  the file..#.# Ar
0ce0: 67 75 6d 65 6e 74 73 3a 0a 23 09 6f 75 74 09 09  guments:.#.out..
0cf0: 54 68 65 20 63 68 61 6e 6e 65 6c 20 74 6f 20 77  The channel to w
0d00: 72 69 74 65 20 74 6f 2e 0a 23 09 64 65 70 65 6e  rite to..#.depen
0d10: 64 73 09 09 54 68 65 20 6c 69 73 74 20 6f 66 20  ds..The list of 
0d20: 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69 72 73  dependency pairs
0d30: 0a 23 0a 23 20 52 65 73 75 6c 74 73 3a 0a 23 09  .#.# Results:.#.
0d40: 4e 6f 6e 65 2e 0a 0a 70 72 6f 63 20 77 72 69 74  None...proc writ
0d50: 65 44 65 70 65 6e 64 73 20 7b 6f 75 74 20 64 65  eDepends {out de
0d60: 70 65 6e 64 73 7d 20 7b 0a 20 20 20 20 66 6f 72  pends} {.    for
0d70: 65 61 63 68 20 70 61 69 72 20 24 64 65 70 65 6e  each pair $depen
0d80: 64 73 20 7b 0a 20 20 20 20 20 20 20 20 70 75 74  ds {.        put
0d90: 73 20 24 6f 75 74 20 22 5b 6c 69 6e 64 65 78 20  s $out "[lindex 
0da0: 24 70 61 69 72 20 30 5d 20 3a 20 5c 5c 5c 6e 5c  $pair 0] : \\\n\
0db0: 74 5b 6a 6f 69 6e 20 5b 6c 69 6e 64 65 78 20 24  t[join [lindex $
0dc0: 70 61 69 72 20 31 5d 20 22 20 5c 5c 5c 6e 5c 74  pair 1] " \\\n\t
0dd0: 22 5d 22 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 73  "]".    }.}..# s
0de0: 74 72 69 6e 67 53 74 61 72 74 73 57 69 74 68 20  tringStartsWith 
0df0: 2d 2d 0a 23 0a 23 09 43 6f 6d 70 61 72 65 73 20  --.#.#.Compares 
0e00: 73 65 63 6f 6e 64 20 73 74 72 69 6e 67 20 74 6f  second string to
0e10: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0e20: 66 20 74 68 65 20 66 69 72 73 74 2e 0a 23 0a 23  f the first..#.#
0e30: 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 09 73 74   Arguments:.#.st
0e40: 72 09 09 54 68 65 20 73 74 72 69 6e 67 20 74 6f  r..The string to
0e50: 20 74 65 73 74 20 74 68 65 20 62 65 67 69 6e 6e   test the beginn
0e60: 69 6e 67 20 6f 66 2e 0a 23 09 70 72 65 66 69 78  ing of..#.prefix
0e70: 09 09 54 68 65 20 73 74 72 69 6e 67 20 74 6f 20  ..The string to 
0e80: 74 65 73 74 20 61 67 61 69 6e 73 74 0a 23 0a 23  test against.#.#
0e90: 20 52 65 73 75 6c 74 73 3a 0a 23 09 74 68 65 20   Results:.#.the 
0ea0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  result of the co
0eb0: 6d 70 61 72 69 73 6f 6e 2e 0a 0a 70 72 6f 63 20  mparison...proc 
0ec0: 73 74 72 69 6e 67 53 74 61 72 74 73 57 69 74 68  stringStartsWith
0ed0: 20 7b 73 74 72 20 70 72 65 66 69 78 7d 20 7b 0a   {str prefix} {.
0ee0: 20 20 20 20 73 65 74 20 66 72 6f 6e 74 20 5b 73      set front [s
0ef0: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 73 74 72  tring range $str
0f00: 20 30 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e   0 [expr {[strin
0f10: 67 20 6c 65 6e 67 74 68 20 24 70 72 65 66 69 78  g length $prefix
0f20: 5d 20 2d 20 31 7d 5d 5d 0a 20 20 20 20 72 65 74  ] - 1}]].    ret
0f30: 75 72 6e 20 5b 65 78 70 72 20 7b 5b 73 74 72 69  urn [expr {[stri
0f40: 6e 67 20 63 6f 6d 70 61 72 65 20 5b 73 74 72 69  ng compare [stri
0f50: 6e 67 20 74 6f 6c 6f 77 65 72 20 24 70 72 65 66  ng tolower $pref
0f60: 69 78 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ix] \.          
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string 
0f90: 74 6f 6c 6f 77 65 72 20 24 66 72 6f 6e 74 5d 5d  tolower $front]]
0fa0: 20 3d 3d 20 30 7d 5d 0a 7d 0a 0a 23 20 66 69 6c   == 0}].}..# fil
0fb0: 74 65 72 45 78 63 6c 75 64 65 73 20 2d 2d 0a 23  terExcludes --.#
0fc0: 0a 23 09 52 65 6d 6f 76 65 20 6e 6f 6e 2d 70 72  .#.Remove non-pr
0fd0: 6f 6a 65 63 74 20 68 65 61 64 65 72 20 66 69 6c  oject header fil
0fe0: 65 73 2e 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74  es..#.# Argument
0ff0: 73 3a 0a 23 09 64 65 70 65 6e 64 73 09 09 4c 69  s:.#.depends..Li
1000: 73 74 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 79  st of dependency
1010: 20 70 61 69 72 73 2e 0a 23 09 65 78 63 6c 75 64   pairs..#.exclud
1020: 65 73 09 4c 69 73 74 20 6f 66 20 64 69 72 65 63  es.List of direc
1030: 74 6f 72 69 65 73 20 74 68 61 74 20 73 68 6f 75  tories that shou
1040: 6c 64 20 62 65 20 72 65 6d 6f 76 65 64 0a 23 0a  ld be removed.#.
1050: 23 20 52 65 73 75 6c 74 73 3a 0a 23 09 74 68 65  # Results:.#.the
1060: 20 70 72 6f 63 65 73 73 65 64 20 64 65 70 65 6e   processed depen
1070: 64 65 6e 63 79 20 6c 69 73 74 2e 0a 0a 70 72 6f  dency list...pro
1080: 63 20 66 69 6c 74 65 72 45 78 63 6c 75 64 65 73  c filterExcludes
1090: 20 7b 64 65 70 65 6e 64 73 20 65 78 63 6c 75 64   {depends exclud
10a0: 65 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 66 69  es} {.    set fi
10b0: 6c 74 65 72 65 64 20 7b 7d 0a 0a 20 20 20 20 66  ltered {}..    f
10c0: 6f 72 65 61 63 68 20 70 61 69 72 20 24 64 65 70  oreach pair $dep
10d0: 65 6e 64 73 20 7b 0a 20 20 20 20 20 20 20 20 73  ends {.        s
10e0: 65 74 20 65 78 63 6c 75 64 65 64 20 30 0a 20 20  et excluded 0.  
10f0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 20 5b        set file [
1100: 6c 69 6e 64 65 78 20 24 70 61 69 72 20 31 5d 0a  lindex $pair 1].
1110: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
1120: 20 64 69 72 20 24 65 78 63 6c 75 64 65 73 20 7b   dir $excludes {
1130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1140: 5b 73 74 72 69 6e 67 53 74 61 72 74 73 57 69 74  [stringStartsWit
1150: 68 20 24 66 69 6c 65 20 24 64 69 72 5d 20 7b 0a  h $file $dir] {.
1160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1170: 73 65 74 20 65 78 63 6c 75 64 65 64 20 31 0a 20  set excluded 1. 
1180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1190: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
11a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20    }.        }.. 
11b0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 65 78 63         if {!$exc
11c0: 6c 75 64 65 64 7d 20 7b 0a 20 20 20 20 20 20 20  luded} {.       
11d0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 66 69 6c       lappend fil
11e0: 74 65 72 65 64 20 24 70 61 69 72 0a 20 20 20 20  tered $pair.    
11f0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
1200: 20 72 65 74 75 72 6e 20 24 66 69 6c 74 65 72 65   return $filtere
1210: 64 0a 7d 0a 0a 23 20 72 65 70 6c 61 63 65 50 72  d.}..# replacePr
1220: 65 66 69 78 20 2d 2d 0a 23 0a 23 09 54 61 6b 65  efix --.#.#.Take
1230: 20 74 68 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 20   the normalized 
1240: 73 65 61 72 63 68 20 70 61 74 68 20 61 6e 64 20  search path and 
1250: 70 75 74 20 62 61 63 6b 20 74 68 65 0a 23 09 6d  put back the.#.m
1260: 61 63 72 6f 20 6e 61 6d 65 20 66 6f 72 20 69 74  acro name for it
1270: 2e 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a  ..#.# Arguments:
1280: 0a 23 09 66 69 6c 65 09 66 69 6c 65 6e 61 6d 65  .#.file.filename
1290: 2e 0a 23 0a 23 20 52 65 73 75 6c 74 73 3a 0a 23  ..#.# Results:.#
12a0: 09 66 69 6c 65 6e 61 6d 65 20 70 72 6f 70 65 72  .filename proper
12b0: 6c 79 20 72 65 70 6c 61 63 65 64 20 77 69 74 68  ly replaced with
12c0: 20 6d 61 63 72 6f 20 66 6f 72 20 69 74 2e 0a 0a   macro for it...
12d0: 70 72 6f 63 20 72 65 70 6c 61 63 65 50 72 65 66  proc replacePref
12e0: 69 78 20 7b 66 69 6c 65 7d 20 7b 0a 20 20 20 20  ix {file} {.    
12f0: 67 6c 6f 62 61 6c 20 73 72 63 50 61 74 68 4c 69  global srcPathLi
1300: 73 74 20 73 72 63 50 61 74 68 52 65 70 6c 61 63  st srcPathReplac
1310: 65 4c 69 73 74 0a 0a 20 20 20 20 66 6f 72 65 61  eList..    forea
1320: 63 68 20 77 61 73 20 24 73 72 63 50 61 74 68 4c  ch was $srcPathL
1330: 69 73 74 20 69 73 20 24 73 72 63 50 61 74 68 52  ist is $srcPathR
1340: 65 70 6c 61 63 65 4c 69 73 74 20 7b 0a 09 72 65  eplaceList {..re
1350: 67 73 75 62 20 24 77 61 73 20 24 66 69 6c 65 20  gsub $was $file 
1360: 24 69 73 20 66 69 6c 65 0a 20 20 20 20 7d 0a 20  $is file.    }. 
1370: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 0a     return $file.
1380: 7d 0a 0a 23 20 72 65 62 61 73 65 46 69 6c 65 73  }..# rebaseFiles
1390: 20 2d 2d 0a 23 0a 23 09 52 65 70 6c 61 63 65 73   --.#.#.Replaces
13a0: 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 70 61 74 68   normalized path
13b0: 73 20 77 69 74 68 20 6f 72 69 67 69 6e 61 6c 20  s with original 
13c0: 6d 61 63 72 6f 20 6e 61 6d 65 73 2e 0a 23 0a 23  macro names..#.#
13d0: 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 09 64 65   Arguments:.#.de
13e0: 70 65 6e 64 73 09 09 44 65 70 65 6e 64 65 6e 63  pends..Dependenc
13f0: 79 20 70 61 69 72 20 6c 69 73 74 2e 0a 23 0a 23  y pair list..#.#
1400: 20 52 65 73 75 6c 74 73 3a 0a 23 09 54 68 65 20   Results:.#.The 
1410: 70 72 6f 63 65 73 73 65 64 20 64 65 70 65 6e 64  processed depend
1420: 65 6e 63 79 20 70 61 69 72 20 6c 69 73 74 2e 0a  ency pair list..
1430: 0a 70 72 6f 63 20 72 65 62 61 73 65 46 69 6c 65  .proc rebaseFile
1440: 73 20 7b 64 65 70 65 6e 64 73 7d 20 7b 0a 20 20  s {depends} {.  
1450: 20 20 73 65 74 20 72 65 62 61 73 65 64 20 7b 7d    set rebased {}
1460: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 69  .    foreach pai
1470: 72 20 24 64 65 70 65 6e 64 73 20 7b 0a 20 20 20  r $depends {.   
1480: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 62       lappend reb
1490: 61 73 65 64 20 5b 6c 69 73 74 20 5c 0a 20 20 20  ased [list \.   
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 72 65               [re
14b0: 70 6c 61 63 65 50 72 65 66 69 78 20 5b 6c 69 6e  placePrefix [lin
14c0: 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 5c 0a  dex $pair 0]] \.
14d0: 09 09 5b 72 65 70 6c 61 63 65 50 72 65 66 69 78  ..[replacePrefix
14e0: 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 31   [lindex $pair 1
14f0: 5d 5d 5d 0a 0a 20 20 20 20 7d 0a 20 20 20 20 72  ]]]..    }.    r
1500: 65 74 75 72 6e 20 24 72 65 62 61 73 65 64 0a 7d  eturn $rebased.}
1510: 0a 0a 23 20 63 6f 6d 70 72 65 73 73 44 65 70 73  ..# compressDeps
1520: 20 2d 2d 0a 23 0a 23 09 43 6f 6d 70 72 65 73 73   --.#.#.Compress
1530: 65 73 20 73 61 6d 65 20 6e 61 6d 65 64 20 74 72  es same named tr
1540: 61 67 65 74 73 20 69 6e 74 6f 20 6f 6e 65 20 70  agets into one p
1550: 61 69 72 20 77 69 74 68 0a 23 09 6d 75 6c 74 69  air with.#.multi
1560: 70 6c 65 20 64 65 70 73 2e 0a 23 0a 23 20 41 72  ple deps..#.# Ar
1570: 67 75 6d 65 6e 74 73 3a 0a 23 09 64 65 70 65 6e  guments:.#.depen
1580: 64 73 09 44 65 70 65 6e 64 65 6e 63 79 20 70 61  ds.Dependency pa
1590: 69 72 20 6c 69 73 74 2e 0a 23 0a 23 20 52 65 73  ir list..#.# Res
15a0: 75 6c 74 73 3a 0a 23 09 54 68 65 20 70 72 6f 63  ults:.#.The proc
15b0: 65 73 73 65 64 20 6c 69 73 74 2e 0a 0a 70 72 6f  essed list...pro
15c0: 63 20 63 6f 6d 70 72 65 73 73 44 65 70 73 20 7b  c compressDeps {
15d0: 64 65 70 65 6e 64 73 7d 20 7b 0a 20 20 20 20 61  depends} {.    a
15e0: 72 72 61 79 20 73 65 74 20 63 6f 6d 70 72 65 73  rray set compres
15f0: 73 65 64 20 5b 6c 69 73 74 5d 0a 0a 20 20 20 20  sed [list]..    
1600: 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 64 65  foreach pair $de
1610: 70 65 6e 64 73 20 7b 0a 09 6c 61 70 70 65 6e 64  pends {..lappend
1620: 20 63 6f 6d 70 72 65 73 73 65 64 28 5b 6c 69 6e   compressed([lin
1630: 64 65 78 20 24 70 61 69 72 20 30 5d 29 20 5b 6c  dex $pair 0]) [l
1640: 69 6e 64 65 78 20 24 70 61 69 72 20 31 5d 0a 20  index $pair 1]. 
1650: 20 20 20 7d 0a 0a 20 20 20 20 73 65 74 20 72 65     }..    set re
1660: 73 75 6c 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  sult [list].    
1670: 66 6f 72 65 61 63 68 20 6e 20 5b 61 72 72 61 79  foreach n [array
1680: 20 6e 61 6d 65 73 20 63 6f 6d 70 72 65 73 73 65   names compresse
1690: 64 5d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  d] {.        lap
16a0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73  pend result [lis
16b0: 74 20 24 6e 20 5b 6c 73 6f 72 74 20 24 63 6f 6d  t $n [lsort $com
16c0: 70 72 65 73 73 65 64 28 24 6e 29 5d 5d 0a 20 20  pressed($n)]].  
16d0: 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20    }..    return 
16e0: 24 72 65 73 75 6c 74 0a 7d 0a 0a 23 20 61 64 64  $result.}..# add
16f0: 53 65 61 72 63 68 50 61 74 68 20 2d 2d 0a 23 0a  SearchPath --.#.
1700: 23 09 41 64 64 73 20 61 20 6e 65 77 20 73 65 74  #.Adds a new set
1710: 20 6f 66 20 70 61 74 68 20 61 6e 64 20 72 65 70   of path and rep
1720: 6c 61 63 65 6d 65 6e 74 20 73 74 72 69 6e 67 20  lacement string 
1730: 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69  to the global li
1740: 73 74 2e 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74  st..#.# Argument
1750: 73 3a 0a 23 09 6e 65 77 50 61 74 68 49 6e 66 6f  s:.#.newPathInfo
1760: 09 63 6f 6d 6d 61 20 73 65 70 65 72 61 74 65 64  .comma seperated
1770: 20 70 61 74 68 20 61 6e 64 20 72 65 70 6c 61 63   path and replac
1780: 65 6d 65 6e 74 20 73 74 72 69 6e 67 0a 23 0a 23  ement string.#.#
1790: 20 52 65 73 75 6c 74 73 3a 0a 23 09 4e 6f 6e 65   Results:.#.None
17a0: 2e 0a 0a 70 72 6f 63 20 61 64 64 53 65 61 72 63  ...proc addSearc
17b0: 68 50 61 74 68 20 7b 6e 65 77 50 61 74 68 49 6e  hPath {newPathIn
17c0: 66 6f 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c  fo} {.    global
17d0: 20 73 72 63 50 61 74 68 4c 69 73 74 20 73 72 63   srcPathList src
17e0: 50 61 74 68 52 65 70 6c 61 63 65 4c 69 73 74 0a  PathReplaceList.
17f0: 0a 20 20 20 20 73 65 74 20 69 6e 66 6f 4c 69 73  .    set infoLis
1800: 74 20 5b 73 70 6c 69 74 20 24 6e 65 77 50 61 74  t [split $newPat
1810: 68 49 6e 66 6f 20 2c 5d 0a 20 20 20 20 6c 61 70  hInfo ,].    lap
1820: 70 65 6e 64 20 73 72 63 50 61 74 68 4c 69 73 74  pend srcPathList
1830: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
1840: 20 5b 6c 69 6e 64 65 78 20 24 69 6e 66 6f 4c 69   [lindex $infoLi
1850: 73 74 20 30 5d 5d 0a 20 20 20 20 6c 61 70 70 65  st 0]].    lappe
1860: 6e 64 20 73 72 63 50 61 74 68 52 65 70 6c 61 63  nd srcPathReplac
1870: 65 4c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 69  eList [lindex $i
1880: 6e 66 6f 4c 69 73 74 20 31 5d 0a 7d 0a 0a 0a 23  nfoList 1].}...#
1890: 20 64 69 73 70 6c 61 79 55 73 61 67 65 20 2d 2d   displayUsage --
18a0: 0a 23 0a 23 09 44 69 73 70 6c 61 79 73 20 75 73  .#.#.Displays us
18b0: 61 67 65 20 74 6f 20 73 74 64 65 72 72 0a 23 0a  age to stderr.#.
18c0: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 09 6e  # Arguments:.#.n
18d0: 6f 6e 65 2e 0a 23 0a 23 20 52 65 73 75 6c 74 73  one..#.# Results
18e0: 3a 0a 23 09 4e 6f 6e 65 2e 0a 0a 70 72 6f 63 20  :.#.None...proc 
18f0: 64 69 73 70 6c 61 79 55 73 61 67 65 20 7b 7d 20  displayUsage {} 
1900: 7b 0a 20 20 20 20 70 75 74 73 20 73 74 64 65 72  {.    puts stder
1910: 72 20 22 6d 6b 64 65 70 65 6e 64 2e 74 63 6c 20  r "mkdepend.tcl 
1920: 5c 5b 6f 70 74 69 6f 6e 73 5c 5d 20 67 65 6e 65  \[options\] gene
1930: 72 69 63 44 69 72 2c 6d 61 63 72 6f 4e 61 6d 65  ricDir,macroName
1940: 20 63 6f 6d 70 61 74 44 69 72 2c 6d 61 63 72 6f   compatDir,macro
1950: 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 44 69 72  Name platformDir
1960: 2c 6d 61 63 72 6f 4e 61 6d 65 22 0a 7d 0a 0a 23  ,macroName".}..#
1970: 20 72 65 61 64 49 6e 70 75 74 4c 69 73 74 46 69   readInputListFi
1980: 6c 65 20 2d 2d 0a 23 0a 23 09 4f 70 65 6e 20 61  le --.#.#.Open a
1990: 6e 64 20 72 65 61 64 20 74 68 65 20 6f 62 6a 65  nd read the obje
19a0: 63 74 20 66 69 6c 65 20 6c 69 73 74 2e 0a 23 0a  ct file list..#.
19b0: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 09 6f  # Arguments:.#.o
19c0: 62 6a 65 63 74 4c 69 73 74 46 69 6c 65 20 2d 20  bjectListFile - 
19d0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65  name of the file
19e0: 20 74 6f 20 6f 70 65 6e 2e 0a 23 0a 23 20 52 65   to open..#.# Re
19f0: 73 75 6c 74 73 3a 0a 23 09 4e 6f 6e 65 2e 0a 0a  sults:.#.None...
1a00: 70 72 6f 63 20 72 65 61 64 49 6e 70 75 74 4c 69  proc readInputLi
1a10: 73 74 46 69 6c 65 20 7b 6f 62 6a 65 63 74 4c 69  stFile {objectLi
1a20: 73 74 46 69 6c 65 7d 20 7b 0a 20 20 20 20 67 6c  stFile} {.    gl
1a30: 6f 62 61 6c 20 73 72 63 46 69 6c 65 4c 69 73 74  obal srcFileList
1a40: 20 73 72 63 50 61 74 68 4c 69 73 74 20 73 6f 75   srcPathList sou
1a50: 72 63 65 5f 65 78 74 65 6e 73 69 6f 6e 73 0a 20  rce_extensions. 
1a60: 20 20 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 24     set f [open $
1a70: 6f 62 6a 65 63 74 4c 69 73 74 46 69 6c 65 20 72  objectListFile r
1a80: 5d 0a 20 20 20 20 73 65 74 20 66 6c 20 5b 72 65  ].    set fl [re
1a90: 61 64 20 24 66 5d 0a 20 20 20 20 63 6c 6f 73 65  ad $f].    close
1aa0: 20 24 66 0a 0a 20 20 20 20 23 20 66 69 78 20 6e   $f..    # fix n
1ab0: 61 74 69 76 65 20 70 61 74 68 20 73 65 70 65 72  ative path seper
1ac0: 61 74 6f 72 20 73 6f 20 69 74 20 69 73 6e 27 74  ator so it isn't
1ad0: 20 74 72 65 61 74 65 64 20 61 73 20 61 6e 20 65   treated as an e
1ae0: 73 63 61 70 65 2e 0a 20 20 20 20 72 65 67 73 75  scape..    regsu
1af0: 62 20 2d 61 6c 6c 20 7b 5c 5c 7d 20 24 66 6c 20  b -all {\\} $fl 
1b00: 7b 2f 7d 20 66 6c 0a 0a 20 20 20 20 23 20 54 72  {/} fl..    # Tr
1b10: 65 61 74 20 74 68 65 20 73 74 72 69 6e 67 20 61  eat the string a
1b20: 73 20 61 20 6c 69 73 74 20 73 6f 20 66 69 6c 65  s a list so file
1b30: 6e 61 6d 65 73 20 62 65 74 77 65 65 6e 20 64 6f  names between do
1b40: 75 62 6c 65 20 71 75 6f 74 65 73 20 61 72 65 0a  uble quotes are.
1b50: 20 20 20 20 23 20 74 72 65 61 74 65 64 20 61 73      # treated as
1b60: 20 6c 69 73 74 20 65 6c 65 6d 65 6e 74 73 2e 0a   list elements..
1b70: 20 20 20 20 66 6f 72 65 61 63 68 20 66 6e 61 6d      foreach fnam
1b80: 65 20 24 66 6c 20 7b 0a 09 23 20 43 6f 6d 70 69  e $fl {..# Compi
1b90: 6c 65 64 20 2e 72 65 73 20 72 65 73 6f 75 72 63  led .res resourc
1ba0: 65 20 66 69 6c 65 73 20 73 68 6f 75 6c 64 20 62  e files should b
1bb0: 65 20 69 67 6e 6f 72 65 64 2e 0a 09 69 66 20 7b  e ignored...if {
1bc0: 5b 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20  [file extension 
1bd0: 24 66 6e 61 6d 65 5d 20 6e 65 20 22 2e 6f 62 6a  $fname] ne ".obj
1be0: 22 7d 20 7b 63 6f 6e 74 69 6e 75 65 7d 0a 0a 09  "} {continue}...
1bf0: 23 20 4a 75 73 74 20 66 69 6c 65 6e 61 6d 65 20  # Just filename 
1c00: 77 69 74 68 6f 75 74 20 70 61 74 68 20 6f 72 20  without path or 
1c10: 65 78 74 65 6e 73 69 6f 6e 20 62 65 63 61 75 73  extension becaus
1c20: 65 20 74 68 65 20 70 61 74 68 20 69 73 0a 09 23  e the path is..#
1c30: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
1c40: 74 6f 72 79 2c 20 6e 6f 74 20 77 68 65 72 65 20  tory, not where 
1c50: 74 68 65 20 73 6f 75 72 63 65 20 66 69 6c 65 73  the source files
1c60: 20 61 72 65 20 6c 6f 63 61 74 65 64 2e 0a 09 73   are located...s
1c70: 65 74 20 62 61 73 65 4e 61 6d 65 20 5b 66 69 6c  et baseName [fil
1c80: 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65  e rootname [file
1c90: 20 74 61 69 6c 20 24 66 6e 61 6d 65 5d 5d 0a 0a   tail $fname]]..
1ca0: 09 73 65 74 20 66 6f 75 6e 64 20 30 0a 09 66 6f  .set found 0..fo
1cb0: 72 65 61 63 68 20 70 61 74 68 20 24 73 72 63 50  reach path $srcP
1cc0: 61 74 68 4c 69 73 74 20 7b 0a 09 20 20 20 20 66  athList {..    f
1cd0: 6f 72 65 61 63 68 20 65 78 74 20 24 73 6f 75 72  oreach ext $sour
1ce0: 63 65 5f 65 78 74 65 6e 73 69 6f 6e 73 20 7b 0a  ce_extensions {.
1cf0: 09 09 73 65 74 20 74 65 73 74 20 5b 66 69 6c 65  ..set test [file
1d00: 20 6a 6f 69 6e 20 24 70 61 74 68 20 24 7b 62 61   join $path ${ba
1d10: 73 65 4e 61 6d 65 7d 24 7b 65 78 74 7d 5d 0a 09  seName}${ext}]..
1d20: 09 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74  .if {[file exist
1d30: 20 24 74 65 73 74 5d 7d 20 7b 0a 09 09 20 20 20   $test]} {...   
1d40: 20 6c 61 70 70 65 6e 64 20 73 72 63 46 69 6c 65   lappend srcFile
1d50: 4c 69 73 74 20 24 74 65 73 74 0a 09 09 20 20 20  List $test...   
1d60: 20 73 65 74 20 66 6f 75 6e 64 20 31 0a 09 09 20   set found 1... 
1d70: 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09 20 20     break...}..  
1d80: 20 20 7d 0a 09 20 20 20 20 69 66 20 7b 24 66 6f    }..    if {$fo
1d90: 75 6e 64 7d 20 62 72 65 61 6b 0a 09 7d 0a 20 20  und} break..}.  
1da0: 20 20 7d 0a 7d 0a 0a 23 20 6d 61 69 6e 20 2d 2d    }.}..# main --
1db0: 0a 23 0a 23 09 54 68 65 20 6d 61 69 6e 20 70 72  .#.#.The main pr
1dc0: 6f 63 65 64 75 72 65 20 6f 66 20 74 68 69 73 20  ocedure of this 
1dd0: 73 63 72 69 70 74 2e 0a 23 0a 23 20 41 72 67 75  script..#.# Argu
1de0: 6d 65 6e 74 73 3a 0a 23 09 6e 6f 6e 65 2e 0a 23  ments:.#.none..#
1df0: 0a 23 20 52 65 73 75 6c 74 73 3a 0a 23 09 4e 6f  .# Results:.#.No
1e00: 6e 65 2e 0a 0a 70 72 6f 63 20 6d 61 69 6e 20 7b  ne...proc main {
1e10: 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 61  } {.    global a
1e20: 72 67 63 20 61 72 67 76 20 6d 6f 64 65 20 6d 6f  rgc argv mode mo
1e30: 64 65 5f 64 61 74 61 20 73 72 63 46 69 6c 65 4c  de_data srcFileL
1e40: 69 73 74 20 73 72 63 50 61 74 68 4c 69 73 74 20  ist srcPathList 
1e50: 65 78 63 6c 75 64 65 73 0a 20 20 20 20 67 6c 6f  excludes.    glo
1e60: 62 61 6c 20 72 65 6d 6f 76 65 5f 70 72 65 66 69  bal remove_prefi
1e70: 78 20 74 61 72 67 65 74 5f 70 72 65 66 69 78 20  x target_prefix 
1e80: 6f 75 74 70 75 74 20 65 6e 76 0a 0a 20 20 20 20  output env..    
1e90: 73 65 74 20 73 72 63 50 61 74 68 4c 69 73 74 20  set srcPathList 
1ea0: 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 73  [list].    set s
1eb0: 72 63 46 69 6c 65 4c 69 73 74 20 5b 6c 69 73 74  rcFileList [list
1ec0: 5d 0a 0a 20 20 20 20 69 66 20 7b 24 61 72 67 63  ]..    if {$argc
1ed0: 20 3d 3d 20 31 7d 20 7b 64 69 73 70 6c 61 79 55   == 1} {displayU
1ee0: 73 61 67 65 7d 0a 0a 20 20 20 20 23 20 50 61 72  sage}..    # Par
1ef0: 73 65 20 6d 6b 64 65 70 65 6e 64 20 69 6e 70 75  se mkdepend inpu
1f00: 74 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69  t.    for {set i
1f10: 20 30 7d 20 7b 24 69 20 3c 20 5b 6c 6c 65 6e 67   0} {$i < [lleng
1f20: 74 68 20 24 61 72 67 76 5d 7d 20 7b 69 6e 63 72  th $argv]} {incr
1f30: 20 69 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 67   i} {..switch -g
1f40: 6c 6f 62 20 2d 2d 20 5b 73 65 74 20 61 72 67 20  lob -- [set arg 
1f50: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69  [lindex $argv $i
1f60: 5d 5d 20 7b 0a 09 20 20 20 20 2d 76 63 33 32 20  ]] {..    -vc32 
1f70: 7b 0a 09 09 73 65 74 20 6d 6f 64 65 20 76 63 33  {...set mode vc3
1f80: 32 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 2d 62  2..    }..    -b
1f90: 63 33 32 20 7b 0a 09 09 73 65 74 20 6d 6f 64 65  c32 {...set mode
1fa0: 20 62 63 33 32 0a 09 20 20 20 20 7d 0a 09 20 20   bc32..    }..  
1fb0: 20 20 2d 77 63 33 32 20 7b 0a 09 09 73 65 74 20    -wc32 {...set 
1fc0: 6d 6f 64 65 20 77 63 33 32 0a 09 20 20 20 20 7d  mode wc32..    }
1fd0: 0a 09 20 20 20 20 2d 6c 63 33 32 20 7b 0a 09 09  ..    -lc32 {...
1fe0: 73 65 74 20 6d 6f 64 65 20 6c 63 33 32 0a 09 20  set mode lc32.. 
1ff0: 20 20 20 7d 0a 09 20 20 20 20 2d 6d 67 77 33 32     }..    -mgw32
2000: 20 7b 0a 09 09 73 65 74 20 6d 6f 64 65 20 6d 67   {...set mode mg
2010: 77 33 32 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  w32..    }..    
2020: 2d 70 61 73 73 74 68 72 75 3a 2a 20 7b 0a 09 09  -passthru:* {...
2030: 73 65 74 20 70 61 73 73 74 68 72 75 20 5b 73 74  set passthru [st
2040: 72 69 6e 67 20 72 61 6e 67 65 20 24 61 72 67 20  ring range $arg 
2050: 31 30 20 65 6e 64 5d 0a 09 09 72 65 67 73 75 62  10 end]...regsub
2060: 20 2d 61 6c 6c 20 7b 22 7d 20 24 70 61 73 73 74   -all {"} $passt
2070: 68 72 75 20 7b 5c 22 7d 20 70 61 73 73 74 68 72  hru {\"} passthr
2080: 75 0a 09 09 72 65 67 73 75 62 20 2d 61 6c 6c 20  u...regsub -all 
2090: 7b 5c 5c 7d 20 24 70 61 73 73 74 68 72 75 20 7b  {\\} $passthru {
20a0: 2f 7d 20 70 61 73 73 74 68 72 75 0a 09 20 20 20  /} passthru..   
20b0: 20 7d 0a 09 20 20 20 20 2d 6f 75 74 3a 2a 20 7b   }..    -out:* {
20c0: 0a 09 09 6f 70 65 6e 4f 75 74 70 75 74 20 5b 73  ...openOutput [s
20d0: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 61 72 67  tring range $arg
20e0: 20 35 20 65 6e 64 5d 0a 09 20 20 20 20 7d 0a 09   5 end]..    }..
20f0: 20 20 20 20 40 2a 20 7b 0a 09 09 73 65 74 20 6f      @* {...set o
2100: 62 6a 66 69 6c 65 20 5b 73 74 72 69 6e 67 20 72  bjfile [string r
2110: 61 6e 67 65 20 24 61 72 67 20 31 20 65 6e 64 5d  ange $arg 1 end]
2120: 0a 09 09 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  ...regsub -all {
2130: 5c 5c 7d 20 24 6f 62 6a 66 69 6c 65 20 7b 2f 7d  \\} $objfile {/}
2140: 20 6f 62 6a 66 69 6c 65 0a 09 09 72 65 61 64 49   objfile...readI
2150: 6e 70 75 74 4c 69 73 74 46 69 6c 65 20 24 6f 62  nputListFile $ob
2160: 6a 66 69 6c 65 0a 09 20 20 20 20 7d 0a 09 20 20  jfile..    }..  
2170: 20 20 2d 3f 20 2d 20 2d 68 65 6c 70 20 2d 20 2d    -? - -help - -
2180: 2d 68 65 6c 70 20 7b 0a 09 09 64 69 73 70 6c 61  -help {...displa
2190: 79 55 73 61 67 65 0a 09 09 65 78 69 74 20 31 0a  yUsage...exit 1.
21a0: 09 20 20 20 20 7d 0a 09 20 20 20 20 64 65 66 61  .    }..    defa
21b0: 75 6c 74 20 7b 0a 09 09 69 66 20 7b 21 5b 69 6e  ult {...if {![in
21c0: 66 6f 20 65 78 69 73 74 20 6d 6f 64 65 5d 7d 20  fo exist mode]} 
21d0: 7b 0a 09 09 20 20 20 20 70 75 74 73 20 73 74 64  {...    puts std
21e0: 65 72 72 20 22 6d 6f 64 65 20 6e 6f 74 20 73 65  err "mode not se
21f0: 74 22 0a 09 09 20 20 20 20 64 69 73 70 6c 61 79  t"...    display
2200: 55 73 61 67 65 0a 09 09 7d 0a 09 09 61 64 64 53  Usage...}...addS
2210: 65 61 72 63 68 50 61 74 68 20 24 61 72 67 0a 09  earchPath $arg..
2220: 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a      }..}.    }..
2230: 20 20 20 20 23 20 45 78 65 63 75 74 65 20 74 68      # Execute th
2240: 65 20 43 50 50 20 63 6f 6d 6d 61 6e 64 20 61 6e  e CPP command an
2250: 64 20 70 61 72 73 65 20 6f 75 74 70 75 74 0a 0a  d parse output..
2260: 20 20 20 20 66 6f 72 65 61 63 68 20 73 72 63 46      foreach srcF
2270: 69 6c 65 20 24 73 72 63 46 69 6c 65 4c 69 73 74  ile $srcFileList
2280: 20 7b 0a 09 69 66 20 7b 5b 63 61 74 63 68 20 7b   {..if {[catch {
2290: 0a 09 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e  ..    set comman
22a0: 64 20 22 24 6d 6f 64 65 5f 64 61 74 61 28 24 6d  d "$mode_data($m
22b0: 6f 64 65 29 20 24 70 61 73 73 74 68 72 75 20 5c  ode) $passthru \
22c0: 22 24 73 72 63 46 69 6c 65 5c 22 22 0a 09 20 20  "$srcFile\""..  
22d0: 20 20 73 65 74 20 69 6e 70 75 74 20 5b 6f 70 65    set input [ope
22e0: 6e 20 7c 24 63 6f 6d 6d 61 6e 64 20 72 5d 0a 09  n |$command r]..
22f0: 20 20 20 20 73 65 74 20 64 65 70 65 6e 64 73 20      set depends 
2300: 5b 72 65 61 64 44 65 70 65 6e 64 73 20 24 69 6e  [readDepends $in
2310: 70 75 74 5d 0a 09 20 20 20 20 73 65 74 20 73 74  put]..    set st
2320: 61 74 75 73 20 5b 63 61 74 63 68 20 7b 63 6c 6f  atus [catch {clo
2330: 73 65 20 24 69 6e 70 75 74 7d 20 72 65 73 75 6c  se $input} resul
2340: 74 5d 0a 09 20 20 20 20 69 66 20 7b 24 73 74 61  t]..    if {$sta
2350: 74 75 73 20 3d 3d 20 31 20 26 26 20 5b 6c 69 6e  tus == 1 && [lin
2360: 64 65 78 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65  dex $::errorCode
2370: 20 30 5d 20 65 71 20 22 43 48 49 4c 44 53 54 41   0] eq "CHILDSTA
2380: 54 55 53 22 7d 20 7b 0a 09 09 66 6f 72 65 61 63  TUS"} {...foreac
2390: 68 20 7b 20 2d 20 70 69 64 20 63 6f 64 65 20 7d  h { - pid code }
23a0: 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 62 72   $::errorCode br
23b0: 65 61 6b 0a 09 09 69 66 20 7b 24 63 6f 64 65 20  eak...if {$code 
23c0: 3d 3d 20 32 7d 20 7b 0a 09 09 20 20 20 20 23 20  == 2} {...    # 
23d0: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 64 69 65  preprocessor die
23e0: 64 20 61 20 63 72 75 65 6c 20 64 65 61 74 68 2e  d a cruel death.
23f0: 0a 09 09 20 20 20 20 65 72 72 6f 72 20 24 72 65  ...    error $re
2400: 73 75 6c 74 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  sult...}..    }.
2410: 09 7d 20 65 72 72 5d 7d 20 7b 0a 09 20 20 20 20  .} err]} {..    
2420: 70 75 74 73 20 73 74 64 65 72 72 20 22 65 72 72  puts stderr "err
2430: 6f 72 20 6f 63 75 72 72 65 64 3a 20 24 65 72 72  or ocurred: $err
2440: 5c 6e 22 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75  \n"..    continu
2450: 65 0a 09 7d 0a 09 73 65 74 20 64 65 70 65 6e 64  e..}..set depend
2460: 73 20 5b 66 69 6c 74 65 72 45 78 63 6c 75 64 65  s [filterExclude
2470: 73 20 24 64 65 70 65 6e 64 73 20 24 65 78 63 6c  s $depends $excl
2480: 75 64 65 73 5d 0a 09 73 65 74 20 64 65 70 65 6e  udes]..set depen
2490: 64 73 20 5b 72 65 62 61 73 65 46 69 6c 65 73 20  ds [rebaseFiles 
24a0: 24 64 65 70 65 6e 64 73 5d 0a 09 73 65 74 20 64  $depends]..set d
24b0: 65 70 65 6e 64 73 20 5b 63 6f 6d 70 72 65 73 73  epends [compress
24c0: 44 65 70 73 20 24 64 65 70 65 6e 64 73 5d 0a 09  Deps $depends]..
24d0: 77 72 69 74 65 44 65 70 65 6e 64 73 20 24 6f 75  writeDepends $ou
24e0: 74 70 75 74 20 24 64 65 70 65 6e 64 73 0a 20 20  tput $depends.  
24f0: 20 20 7d 0a 0a 20 20 20 20 63 6c 6f 73 65 4f 75    }..    closeOu
2500: 74 70 75 74 0a 7d 0a 0a 23 20 6b 69 63 6b 20 69  tput.}..# kick i
2510: 74 20 75 70 2e 0a 6d 61 69 6e 0a                 t up..main.