rh

Hex Artifact Content
Login

Artifact 5665e10159a333665a1256585e99a3d0cb0635331b78f89e4ce06a1b9c5d49e8:


0000: 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e  #!/usr/local/bin
0010: 2f 70 65 72 6c 20 2d 2d 0a 23 0a 23 20 72 63 73  /perl --.#.# rcs
0020: 69 64 3a 20 24 49 64 3a 20 6d 61 6b 65 64 65 70  id: $Id: makedep
0030: 2c 76 20 31 2e 31 20 31 39 39 34 2f 30 31 2f 31  ,v 1.1 1994/01/1
0040: 32 20 31 39 3a 33 36 3a 30 33 20 72 69 63 6b 20  2 19:36:03 rick 
0050: 45 78 70 20 24 0a 23 0a 23 2a 2a 2a 2a 2a 2a 2a  Exp $.#.#*******
0060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 23 0a  **************#.
00a0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00e0: 20 20 20 20 20 20 20 0a 23 20 20 50 45 52 4c 20         .#  PERL 
00f0: 53 43 52 49 50 54 3a 20 20 6d 61 6b 65 64 65 70  SCRIPT:  makedep
0100: 0a 23 20 20 41 55 54 48 4f 52 3a 20 20 20 20 20  .#  AUTHOR:     
0110: 20 20 52 69 63 6b 20 4f 68 6e 65 6d 75 73 0a 23    Rick Ohnemus.#
0120: 20 20 41 42 53 54 52 41 43 54 3a 0a 23 0a 23 20    ABSTRACT:.#.# 
0130: 54 68 69 73 20 73 63 72 69 70 74 20 67 65 6e 65  This script gene
0140: 72 61 74 65 73 20 74 68 65 20 6d 61 6b 65 20 64  rates the make d
0150: 65 70 65 6e 64 65 6e 63 69 65 73 20 66 6f 72 20  ependencies for 
0160: 6e 6f 72 6d 61 6c 20 66 69 6c 65 73 20 61 6e 64  normal files and
0170: 0a 23 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73  .# library files
0180: 20 61 6e 64 20 77 72 69 74 65 73 20 74 68 65 6d   and writes them
0190: 20 74 6f 20 74 68 65 20 66 69 6c 65 20 73 70 65   to the file spe
01a0: 63 69 66 69 65 64 20 6f 6e 20 74 68 65 20 63 6f  cified on the co
01b0: 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0a 23 0a 23 20  mmand line..#.# 
01c0: 4f 70 74 69 6f 6e 73 3a 0a 23 09 2d 61 09 09 6f  Options:.#.-a..o
01d0: 75 74 70 75 74 20 24 28 41 52 43 48 29 20 69 6e  utput $(ARCH) in
01e0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 61 6e   dependencies an
01f0: 64 20 63 6f 6d 70 69 6c 65 20 6c 69 6e 65 73 0a  d compile lines.
0200: 23 09 2d 63 09 09 6f 75 74 70 75 74 20 63 6f 6d  #.-c..output com
0210: 70 69 6c 65 20 6c 69 6e 65 73 0a 23 09 2d 65 20  pile lines.#.-e 
0220: 65 78 63 6c 75 73 69 6f 6e 09 70 61 74 74 65 72  exclusion.patter
0230: 6e 20 74 6f 20 65 78 63 6c 75 64 65 20 66 72 6f  n to exclude fro
0240: 6d 20 64 65 70 65 6e 64 65 6e 63 79 20 6c 69 73  m dependency lis
0250: 74 20 28 6d 61 79 20 62 65 0a 23 09 09 09 73 70  t (may be.#...sp
0260: 65 63 69 66 69 65 64 20 6d 75 6c 74 69 70 6c 65  ecified multiple
0270: 20 74 69 6d 65 73 29 0a 23 09 2d 6c 20 6c 69 62   times).#.-l lib
0280: 72 61 72 79 09 6c 69 62 72 61 72 79 20 6e 61 6d  rary.library nam
0290: 65 20 69 66 20 64 6f 69 6e 67 20 64 65 70 65 6e  e if doing depen
02a0: 64 65 6e 63 69 65 73 20 66 6f 72 20 61 20 6c 69  dencies for a li
02b0: 62 72 61 72 79 0a 23 09 2d 6d 20 6d 61 6b 65 66  brary.#.-m makef
02c0: 69 6c 65 09 6d 61 6b 65 66 69 6c 65 20 74 6f 20  ile.makefile to 
02d0: 6d 6f 64 69 66 79 0a 23 09 2d 6f 20 70 70 5f 6f  modify.#.-o pp_o
02e0: 70 74 69 6f 6e 73 09 70 72 65 70 72 6f 63 65 73  ptions.preproces
02f0: 73 6f 72 20 6f 70 74 69 6f 6e 73 0a 23 09 2d 70  sor options.#.-p
0300: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 09 70 72   preprocessor.pr
0310: 65 70 72 6f 63 65 73 73 6f 72 20 74 6f 20 75 73  eprocessor to us
0320: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 62 75 69  e instead of bui
0330: 6c 74 69 6e 0a 23 09 2d 72 09 09 72 65 70 6c 61  ltin.#.-r..repla
0340: 63 65 20 65 6e 74 69 72 65 20 63 6f 6e 74 65 6e  ce entire conten
0350: 74 73 20 6f 66 20 6d 61 6b 65 66 69 6c 65 0a 23  ts of makefile.#
0360: 09 2d 73 09 09 73 65 70 61 72 61 74 65 20 64 65  .-s..separate de
0370: 70 65 6e 64 65 6e 63 69 65 73 20 66 72 6f 6d 20  pendencies from 
0380: 72 65 73 74 20 6f 66 20 66 69 6c 65 20 77 69 74  rest of file wit
0390: 68 0a 23 09 09 09 22 23 23 23 20 44 4f 20 4e 4f  h.#..."### DO NO
03a0: 54 20 44 45 4c 45 54 45 20 54 48 49 53 20 4c 49  T DELETE THIS LI
03b0: 4e 45 20 2d 20 6d 61 6b 65 20 64 65 70 65 6e 64  NE - make depend
03c0: 20 6e 65 65 64 73 20 69 74 22 0a 23 09 2d 74 20   needs it".#.-t 
03d0: 73 74 72 69 6e 67 09 70 61 74 74 65 72 6e 20 74  string.pattern t
03e0: 6f 20 73 74 72 69 70 20 66 72 6f 6d 20 6f 62 6a  o strip from obj
03f0: 65 63 74 20 6e 61 6d 65 73 20 28 6d 61 79 20 62  ect names (may b
0400: 65 20 73 70 65 63 69 66 69 65 64 0a 23 09 09 09  e specified.#...
0410: 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 29 0a  multiple times).
0420: 23 0a 23 20 4f 74 68 65 72 20 61 72 67 75 6d 65  #.# Other argume
0430: 6e 74 73 20 28 69 6e 20 6f 72 64 65 72 20 6f 66  nts (in order of
0440: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 75 73   command line us
0450: 65 29 3a 0a 23 09 6d 61 6b 65 20 76 61 72 69 61  e):.#.make varia
0460: 62 6c 65 73 20 61 6e 64 20 76 61 6c 75 65 73 0a  bles and values.
0470: 23 09 09 6d 61 6b 65 20 6d 61 63 72 6f 73 20 74  #..make macros t
0480: 6f 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 20  o substitute in 
0490: 67 65 6e 65 72 61 74 65 64 20 64 65 70 65 6e 64  generated depend
04a0: 65 6e 63 69 65 73 0a 23 09 09 76 61 72 69 61 62  encies.#..variab
04b0: 6c 65 3d 76 61 6c 75 65 0a 23 09 66 69 6c 65 73  le=value.#.files
04c0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 64 65 70   to generate dep
04d0: 65 6e 64 65 6e 63 69 65 73 20 66 6f 72 0a 23 0a  endencies for.#.
04e0: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
04f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0500: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0510: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0520: 2a 2a 2a 2a 2a 2a 23 0a 23 0a 0a 23 20 53 65 74  ******#.#..# Set
0530: 20 64 65 66 61 75 6c 74 20 70 72 65 70 72 6f 63   default preproc
0540: 65 73 73 6f 72 2e 0a 0a 24 50 72 65 70 72 6f 63  essor...$Preproc
0550: 65 73 73 6f 72 20 3d 20 22 67 63 63 20 2d 45 22  essor = "gcc -E"
0560: 3b 0a 23 24 50 72 65 70 72 6f 63 65 73 73 6f 72  ;.#$Preprocessor
0570: 20 3d 20 22 63 63 20 2d 45 22 3b 0a 23 24 50 72   = "cc -E";.#$Pr
0580: 65 70 72 6f 63 65 73 73 6f 72 20 3d 20 22 2f 6c  eprocessor = "/l
0590: 69 62 2f 63 70 70 22 3b 0a 0a 24 55 73 61 67 65  ib/cpp";..$Usage
05a0: 20 3d 20 22 55 73 61 67 65 3a 20 24 30 20 5b 2d   = "Usage: $0 [-
05b0: 61 63 72 73 5d 20 5b 2d 65 20 65 78 63 6c 75 73  acrs] [-e exclus
05c0: 69 6f 6e 5d 20 5b 2d 74 20 73 74 72 69 70 5f 73  ion] [-t strip_s
05d0: 74 72 69 6e 67 5d 20 5b 2d 6c 20 6c 69 62 72 61  tring] [-l libra
05e0: 72 79 5d 20 5b 2d 6d 20 6d 61 6b 65 66 69 6c 65  ry] [-m makefile
05f0: 5d 20 5b 2d 6f 20 70 72 65 70 72 6f 63 65 73 73  ] [-o preprocess
0600: 6f 72 5f 6f 70 74 69 6f 6e 73 5d 20 5b 2d 70 20  or_options] [-p 
0610: 70 72 65 70 72 6f 63 65 73 73 6f 72 5d 20 5b 76  preprocessor] [v
0620: 61 72 69 61 62 6c 65 3d 76 61 6c 75 65 20 2e 2e  ariable=value ..
0630: 2e 5d 20 66 69 6c 65 20 5b 2e 2e 2e 5d 5c 6e 22  .] file [...]\n"
0640: 3b 0a 0a 23 20 67 65 74 20 73 77 69 74 63 68 65  ;..# get switche
0650: 73 20 61 6e 64 20 76 61 6c 75 65 73 0a 0a 64 69  s and values..di
0660: 65 20 24 55 73 61 67 65 20 75 6e 6c 65 73 73 20  e $Usage unless 
0670: 26 47 65 74 6f 70 74 73 28 27 61 63 65 26 74 26  &Getopts('ace&t&
0680: 6c 3a 6d 3a 6f 3a 70 3a 72 73 27 29 3b 0a 0a 24  l:m:o:p:rs');..$
0690: 41 72 63 68 20 3d 20 64 65 66 69 6e 65 64 28 24  Arch = defined($
06a0: 6f 70 74 5f 61 29 20 3f 20 31 20 3a 20 30 3b 09  opt_a) ? 1 : 0;.
06b0: 23 20 75 73 65 20 24 28 41 52 43 48 29 20 6d 61  # use $(ARCH) ma
06c0: 63 72 6f 20 69 6e 20 6f 75 74 70 75 74 0a 24 43  cro in output.$C
06d0: 63 20 3d 20 64 65 66 69 6e 65 64 28 24 6f 70 74  c = defined($opt
06e0: 5f 63 29 20 3f 20 31 20 3a 20 30 3b 09 09 23 20  _c) ? 1 : 0;..# 
06f0: 6f 75 74 70 75 74 20 43 43 20 6c 69 6e 65 73 0a  output CC lines.
0700: 0a 23 20 74 68 69 6e 67 73 20 74 6f 20 65 78 63  .# things to exc
0710: 6c 75 64 65 20 66 72 6f 6d 20 64 65 70 65 6e 64  lude from depend
0720: 65 6e 63 69 65 73 0a 69 66 20 28 64 65 66 69 6e  encies.if (defin
0730: 65 64 28 40 6f 70 74 5f 65 29 29 20 7b 0a 20 20  ed(@opt_e)) {.  
0740: 20 20 69 66 20 28 24 23 6f 70 74 5f 65 20 3d 3d    if ($#opt_e ==
0750: 20 24 5b 29 20 7b 0a 09 24 45 78 63 6c 75 64 65   $[) {..$Exclude
0760: 20 3d 20 22 28 24 6f 70 74 5f 65 5b 24 5b 5d 29   = "($opt_e[$[])
0770: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  ";.    }.    els
0780: 65 20 7b 0a 09 66 6f 72 20 28 24 69 20 3d 20 24  e {..for ($i = $
0790: 5b 3b 20 24 69 20 3c 3d 20 24 23 6f 70 74 5f 65  [; $i <= $#opt_e
07a0: 3b 20 2b 2b 24 69 29 20 7b 0a 09 20 20 20 20 24  ; ++$i) {..    $
07b0: 45 78 63 6c 75 64 65 20 2e 3d 20 22 28 24 6f 70  Exclude .= "($op
07c0: 74 5f 65 5b 24 69 5d 29 7c 22 3b 0a 09 7d 0a 09  t_e[$i])|";..}..
07d0: 63 68 6f 70 28 24 45 78 63 6c 75 64 65 29 3b 09  chop($Exclude);.
07e0: 09 23 20 72 65 6d 6f 76 65 20 74 72 61 69 6c 69  .# remove traili
07f0: 6e 67 20 27 7c 27 0a 20 20 20 20 7d 0a 7d 0a 0a  ng '|'.    }.}..
0800: 23 20 74 68 69 6e 67 73 20 74 6f 20 73 74 72 69  # things to stri
0810: 70 20 66 72 6f 6d 20 6f 62 6a 65 63 74 20 6e 61  p from object na
0820: 6d 65 73 0a 69 66 20 28 64 65 66 69 6e 65 64 28  mes.if (defined(
0830: 40 6f 70 74 5f 74 29 29 20 7b 0a 20 20 20 20 69  @opt_t)) {.    i
0840: 66 20 28 24 23 6f 70 74 5f 74 20 3d 3d 20 24 5b  f ($#opt_t == $[
0850: 29 20 7b 0a 09 24 53 74 72 69 70 73 20 3d 20 22  ) {..$Strips = "
0860: 28 24 6f 70 74 5f 74 5b 24 5b 5d 29 22 3b 0a 20  ($opt_t[$[])";. 
0870: 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b 0a     }.    else {.
0880: 09 66 6f 72 20 28 24 69 20 3d 20 24 5b 3b 20 24  .for ($i = $[; $
0890: 69 20 3c 3d 20 24 23 6f 70 74 5f 74 3b 20 2b 2b  i <= $#opt_t; ++
08a0: 24 69 29 20 7b 0a 09 20 20 20 20 24 53 74 72 69  $i) {..    $Stri
08b0: 70 73 20 2e 3d 20 22 28 24 6f 70 74 5f 74 5b 24  ps .= "($opt_t[$
08c0: 69 5d 29 7c 22 3b 0a 09 7d 0a 09 63 68 6f 70 28  i])|";..}..chop(
08d0: 24 53 74 72 69 70 73 29 3b 09 09 23 20 72 65 6d  $Strips);..# rem
08e0: 6f 76 65 20 74 72 61 69 6c 69 6e 67 20 27 7c 27  ove trailing '|'
08f0: 0a 20 20 20 20 7d 0a 7d 0a 0a 24 4c 69 62 72 61  .    }.}..$Libra
0900: 72 79 20 3d 20 24 6f 70 74 5f 6c 20 69 66 20 28  ry = $opt_l if (
0910: 64 65 66 69 6e 65 64 28 24 6f 70 74 5f 6c 29 29  defined($opt_l))
0920: 3b 09 23 20 64 6f 20 6c 69 62 72 61 72 79 20 64  ;.# do library d
0930: 65 70 65 6e 65 64 65 6e 63 69 65 73 0a 24 4d 61  epenedencies.$Ma
0940: 6b 65 66 69 6c 65 20 3d 20 64 65 66 69 6e 65 64  kefile = defined
0950: 28 24 6f 70 74 5f 6d 29 20 3f 20 24 6f 70 74 5f  ($opt_m) ? $opt_
0960: 6d 20 3a 20 27 4d 61 6b 65 66 69 6c 65 27 3b 09  m : 'Makefile';.
0970: 23 20 6d 61 6b 65 66 69 6c 65 20 74 6f 20 6d 6f  # makefile to mo
0980: 64 69 66 79 0a 24 50 50 4f 70 74 69 6f 6e 73 20  dify.$PPOptions 
0990: 3d 20 64 65 66 69 6e 65 64 28 24 6f 70 74 5f 6f  = defined($opt_o
09a0: 29 20 3f 20 24 6f 70 74 5f 6f 20 3a 20 27 27 3b  ) ? $opt_o : '';
09b0: 09 23 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20  .# preprocessor 
09c0: 6f 70 74 69 6f 6e 73 0a 24 50 72 65 70 72 6f 63  options.$Preproc
09d0: 65 73 73 6f 72 20 3d 20 24 6f 70 74 5f 70 20 69  essor = $opt_p i
09e0: 66 20 28 64 65 66 69 6e 65 64 28 24 6f 70 74 5f  f (defined($opt_
09f0: 70 29 29 3b 09 23 20 70 72 65 70 72 6f 63 65 73  p));.# preproces
0a00: 73 6f 72 0a 24 52 65 70 6c 61 63 65 20 3d 20 64  sor.$Replace = d
0a10: 65 66 69 6e 65 64 28 24 6f 70 74 5f 72 29 20 3f  efined($opt_r) ?
0a20: 20 31 20 3a 20 30 3b 09 23 20 72 65 70 6c 61 63   1 : 0;.# replac
0a30: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 6d 61  e contents of ma
0a40: 6b 65 66 69 6c 65 0a 24 53 65 70 61 72 61 74 65  kefile.$Separate
0a50: 20 3d 20 64 65 66 69 6e 65 64 28 24 6f 70 74 5f   = defined($opt_
0a60: 73 29 20 3f 20 31 20 3a 20 30 3b 09 23 20 6f 75  s) ? 1 : 0;.# ou
0a70: 74 70 75 74 20 73 65 70 61 72 61 74 69 6f 6e 20  tput separation 
0a80: 6c 69 6e 65 0a 0a 75 6e 64 65 66 28 24 6f 70 74  line..undef($opt
0a90: 5f 61 29 3b 0a 75 6e 64 65 66 28 24 6f 70 74 5f  _a);.undef($opt_
0aa0: 63 29 3b 0a 75 6e 64 65 66 28 40 6f 70 74 5f 65  c);.undef(@opt_e
0ab0: 29 3b 0a 75 6e 64 65 66 28 24 6f 70 74 5f 6c 29  );.undef($opt_l)
0ac0: 3b 0a 75 6e 64 65 66 28 24 6f 70 74 5f 6d 29 3b  ;.undef($opt_m);
0ad0: 0a 75 6e 64 65 66 28 24 6f 70 74 5f 6f 29 3b 0a  .undef($opt_o);.
0ae0: 75 6e 64 65 66 28 24 6f 70 74 5f 70 29 3b 0a 75  undef($opt_p);.u
0af0: 6e 64 65 66 28 24 6f 70 74 5f 72 29 3b 0a 75 6e  ndef($opt_r);.un
0b00: 64 65 66 28 24 6f 70 74 5f 73 29 3b 0a 75 6e 64  def($opt_s);.und
0b10: 65 66 28 40 6f 70 74 5f 74 29 3b 0a 0a 23 20 49  ef(@opt_t);..# I
0b20: 73 20 74 68 65 20 6d 61 6b 65 66 69 6c 65 20 72  s the makefile r
0b30: 65 61 64 61 62 6c 65 3f 0a 64 69 65 20 22 24 30  eadable?.die "$0
0b40: 3a 20 24 4d 61 6b 65 66 69 6c 65 3a 20 24 21 5c  : $Makefile: $!\
0b50: 6e 22 20 69 66 20 28 21 20 2d 72 20 24 4d 61 6b  n" if (! -r $Mak
0b60: 65 66 69 6c 65 29 3b 0a 0a 23 20 43 68 65 63 6b  efile);..# Check
0b70: 20 66 6f 72 20 69 6e 76 61 6c 69 64 20 70 72 65   for invalid pre
0b80: 70 72 6f 63 65 73 73 6f 72 20 6f 70 74 69 6f 6e  processor option
0b90: 73 0a 40 50 70 4f 70 74 73 20 3d 20 73 70 6c 69  s.@PpOpts = spli
0ba0: 74 28 27 20 27 2c 20 24 50 50 4f 70 74 69 6f 6e  t(' ', $PPOption
0bb0: 73 29 3b 0a 40 50 70 4f 70 74 73 20 3d 20 67 72  s);.@PpOpts = gr
0bc0: 65 70 28 21 2f 5e 2d 5b 42 43 44 49 4d 50 52 55  ep(!/^-[BCDIMPRU
0bd0: 5d 2f 6f 2c 20 40 50 70 4f 70 74 73 29 3b 0a 64  ]/o, @PpOpts);.d
0be0: 69 65 20 22 24 30 3a 20 69 6e 76 61 6c 69 64 20  ie "$0: invalid 
0bf0: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6f 70 74  preprocessor opt
0c00: 69 6f 6e 73 3a 20 40 50 70 4f 70 74 73 5c 6e 22  ions: @PpOpts\n"
0c10: 20 69 66 20 28 24 23 50 70 4f 70 74 73 20 3e 3d   if ($#PpOpts >=
0c20: 20 30 29 3b 0a 75 6e 64 65 66 28 40 50 70 4f 70   0);.undef(@PpOp
0c30: 74 73 29 3b 0a 0a 23 20 4d 61 6b 65 20 61 73 73  ts);..# Make ass
0c40: 6f 63 69 61 74 69 76 65 20 61 72 72 61 79 73 20  ociative arrays 
0c50: 66 6f 72 20 61 6c 6c 20 6d 61 6b 65 20 76 61 72  for all make var
0c60: 69 61 62 6c 65 73 20 66 72 6f 6d 20 74 68 65 20  iables from the 
0c70: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0a 23 20 61  command line.# a
0c80: 6e 64 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65  nd anything else
0c90: 20 28 68 6f 70 65 66 75 6c 6c 79 20 73 6f 75 72   (hopefully sour
0ca0: 63 65 20 66 69 6c 65 73 29 0a 0a 25 56 6d 61 70  ce files)..%Vmap
0cb0: 20 3d 20 28 29 3b 0a 66 6f 72 20 28 40 41 52 47   = ();.for (@ARG
0cc0: 56 29 20 7b 0a 20 20 20 20 69 66 20 28 2f 28 5c  V) {.    if (/(\
0cd0: 77 2e 2a 29 3d 28 2e 2b 29 2f 6f 29 20 7b 0a 09  w.*)=(.+)/o) {..
0ce0: 24 56 6d 61 70 7b 24 32 7d 20 3d 20 24 31 3b 0a  $Vmap{$2} = $1;.
0cf0: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b      }.    else {
0d00: 0a 09 70 75 73 68 28 40 53 6f 75 72 63 65 73 2c  ..push(@Sources,
0d10: 20 24 5f 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 23   $_);.    }.}..#
0d20: 20 53 6f 72 74 20 74 68 65 20 6d 61 63 72 6f 73   Sort the macros
0d30: 20 69 6e 20 72 65 76 65 72 73 65 20 6c 65 6e 67   in reverse leng
0d40: 74 68 20 6f 72 64 65 72 20 28 6c 6f 6e 67 65 73  th order (longes
0d50: 74 20 66 69 72 73 74 29 0a 40 56 6b 65 79 73 20  t first).@Vkeys 
0d60: 3d 20 73 6f 72 74 20 7b 20 6c 65 6e 67 74 68 28  = sort { length(
0d70: 24 62 29 20 3c 3d 3e 20 6c 65 6e 67 74 68 28 24  $b) <=> length($
0d80: 61 29 20 7d 20 6b 65 79 73 28 25 56 6d 61 70 29  a) } keys(%Vmap)
0d90: 3b 0a 0a 64 69 65 20 22 24 55 73 61 67 65 22 20  ;..die "$Usage" 
0da0: 75 6e 6c 65 73 73 20 24 23 53 6f 75 72 63 65 73  unless $#Sources
0db0: 20 3e 3d 20 30 3b 09 23 20 6e 65 65 64 20 61 74   >= 0;.# need at
0dc0: 20 6c 65 61 73 74 20 31 20 73 6f 75 72 63 65 20   least 1 source 
0dd0: 66 69 6c 65 0a 0a 23 20 61 72 65 20 61 6c 6c 20  file..# are all 
0de0: 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 66 69  of the source fi
0df0: 6c 65 73 20 72 65 61 64 61 62 6c 65 3f 0a 24 62  les readable?.$b
0e00: 61 64 66 69 6c 65 73 20 3d 20 30 3b 0a 66 6f 72  adfiles = 0;.for
0e10: 20 28 40 53 6f 75 72 63 65 73 29 20 7b 0a 20 20   (@Sources) {.  
0e20: 20 20 69 66 20 28 21 20 2d 72 20 24 5f 29 20 7b    if (! -r $_) {
0e30: 0a 09 77 61 72 6e 20 22 24 30 3a 20 24 5f 3a 20  ..warn "$0: $_: 
0e40: 24 21 5c 6e 22 3b 0a 09 2b 2b 24 62 61 64 66 69  $!\n";..++$badfi
0e50: 6c 65 73 3b 0a 20 20 20 20 7d 0a 7d 0a 65 78 69  les;.    }.}.exi
0e60: 74 28 31 29 20 69 66 20 24 62 61 64 66 69 6c 65  t(1) if $badfile
0e70: 73 3b 09 23 20 65 78 69 74 20 69 66 20 31 20 6f  s;.# exit if 1 o
0e80: 72 20 6d 6f 72 65 20 73 6f 75 72 63 65 20 66 69  r more source fi
0e90: 6c 65 73 20 69 73 20 6e 6f 74 20 72 65 61 64 61  les is not reada
0ea0: 62 6c 65 0a 0a 23 20 43 72 65 61 74 65 20 74 65  ble..# Create te
0eb0: 6d 70 6f 72 61 72 79 20 6f 75 74 70 75 74 20 66  mporary output f
0ec0: 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 73 65 74  ile name and set
0ed0: 20 73 69 67 6e 61 6c 20 68 61 6e 64 6c 65 72 73   signal handlers
0ee0: 20 74 6f 20 72 65 6d 6f 76 65 0a 23 20 74 68 65   to remove.# the
0ef0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e   temporary file.
0f00: 0a 0a 24 54 65 6d 70 46 69 6c 65 20 3d 20 22 24  ..$TempFile = "$
0f10: 4d 61 6b 65 66 69 6c 65 2e 6e 65 77 2e 24 24 22  Makefile.new.$$"
0f20: 3b 0a 0a 24 53 49 47 7b 27 49 4e 54 27 7d 20 3d  ;..$SIG{'INT'} =
0f30: 20 27 63 6c 65 61 6e 75 70 27 3b 0a 24 53 49 47   'cleanup';.$SIG
0f40: 7b 27 51 55 49 54 27 7d 20 3d 20 27 63 6c 65 61  {'QUIT'} = 'clea
0f50: 6e 75 70 27 3b 0a 24 53 49 47 7b 27 48 55 50 27  nup';.$SIG{'HUP'
0f60: 7d 20 3d 20 27 63 6c 65 61 6e 75 70 27 3b 0a 0a  } = 'cleanup';..
0f70: 23 20 6f 70 65 6e 20 74 68 65 20 6f 75 74 70 75  # open the outpu
0f80: 74 20 66 69 6c 65 0a 0a 6f 70 65 6e 28 4f 55 54  t file..open(OUT
0f90: 50 55 54 2c 20 22 3e 20 24 54 65 6d 70 46 69 6c  PUT, "> $TempFil
0fa0: 65 22 29 20 7c 7c 20 64 69 65 20 22 63 61 6e 27  e") || die "can'
0fb0: 74 20 6f 70 65 6e 20 74 65 6d 70 20 66 69 6c 65  t open temp file
0fc0: 20 2d 20 24 21 5c 6e 22 3b 0a 73 65 6c 65 63 74   - $!\n";.select
0fd0: 28 4f 55 54 50 55 54 29 3b 0a 0a 23 20 63 6f 70  (OUTPUT);..# cop
0fe0: 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  y the contents o
0ff0: 66 20 74 68 65 20 6d 61 6b 65 66 69 6c 65 20 69  f the makefile i
1000: 66 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 77 61  f replacement wa
1010: 73 6e 27 74 20 73 70 65 63 69 66 69 65 64 0a 0a  sn't specified..
1020: 69 66 20 28 21 24 52 65 70 6c 61 63 65 29 20 7b  if (!$Replace) {
1030: 0a 20 20 20 20 6f 70 65 6e 28 49 4e 50 55 54 2c  .    open(INPUT,
1040: 20 22 3c 20 24 4d 61 6b 65 66 69 6c 65 22 29 20   "< $Makefile") 
1050: 7c 7c 20 64 69 65 20 22 63 61 6e 27 74 20 6f 70  || die "can't op
1060: 65 6e 20 24 4d 61 6b 65 66 69 6c 65 20 2d 20 24  en $Makefile - $
1070: 21 5c 6e 22 3b 0a 0a 20 20 20 20 23 20 49 66 20  !\n";..    # If 
1080: 73 65 70 61 72 61 74 69 6f 6e 20 77 61 73 20 72  separation was r
1090: 65 71 75 65 73 74 65 64 20 74 68 65 6e 20 63 6f  equested then co
10a0: 70 79 20 74 68 65 20 6d 61 6b 65 20 66 69 6c 65  py the make file
10b0: 20 75 6e 74 69 6c 20 74 68 65 0a 20 20 20 20 23   until the.    #
10c0: 20 73 65 70 61 72 61 74 69 6f 6e 20 6c 69 6e 65   separation line
10d0: 20 6f 72 20 65 6e 64 20 6f 66 20 66 69 6c 65 20   or end of file 
10e0: 69 73 20 66 6f 75 6e 64 2e 20 49 66 20 73 65 70  is found. If sep
10f0: 61 72 61 74 69 6f 6e 20 77 61 73 20 6e 6f 74 0a  aration was not.
1100: 20 20 20 20 23 20 72 65 71 75 65 73 74 65 64 20      # requested 
1110: 74 68 65 6e 20 6a 75 73 74 20 63 6f 70 79 20 74  then just copy t
1120: 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
1130: 68 65 20 6d 61 6b 65 66 69 6c 65 2e 0a 0a 20 20  he makefile...  
1140: 20 20 69 66 20 28 24 53 65 70 61 72 61 74 65 29    if ($Separate)
1150: 20 7b 0a 09 77 68 69 6c 65 20 28 3c 49 4e 50 55   {..while (<INPU
1160: 54 3e 29 20 7b 0a 09 20 20 20 20 2f 5e 23 23 23  T>) {..    /^###
1170: 20 44 4f 20 4e 4f 54 20 44 45 4c 45 54 45 20 54   DO NOT DELETE T
1180: 48 49 53 20 4c 49 4e 45 2f 6f 20 26 26 20 6c 61  HIS LINE/o && la
1190: 73 74 3b 0a 09 20 20 20 20 70 72 69 6e 74 3b 0a  st;..    print;.
11a0: 09 7d 0a 09 70 72 69 6e 74 20 22 23 23 23 20 44  .}..print "### D
11b0: 4f 20 4e 4f 54 20 44 45 4c 45 54 45 20 54 48 49  O NOT DELETE THI
11c0: 53 20 4c 49 4e 45 20 2d 20 6d 61 6b 65 20 64 65  S LINE - make de
11d0: 70 65 6e 64 20 6e 65 65 64 73 20 69 74 5c 6e 5c  pend needs it\n\
11e0: 6e 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c  n";.    }.    el
11f0: 73 65 20 7b 0a 09 77 68 69 6c 65 20 28 3c 49 4e  se {..while (<IN
1200: 50 55 54 3e 29 20 7b 0a 09 20 20 20 20 70 72 69  PUT>) {..    pri
1210: 6e 74 3b 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20  nt;..}.    }..  
1220: 20 20 23 20 64 6f 6e 27 74 20 6e 65 65 64 20 74    # don't need t
1230: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 61 6b 65  he original make
1240: 66 69 6c 65 20 61 6e 79 20 6d 6f 72 65 0a 20 20  file any more.  
1250: 20 20 63 6c 6f 73 65 28 49 4e 50 55 54 29 20 7c    close(INPUT) |
1260: 7c 20 64 69 65 20 22 63 61 6e 27 74 20 63 6c 6f  | die "can't clo
1270: 73 65 20 24 4d 61 6b 65 66 69 6c 65 20 2d 24 21  se $Makefile -$!
1280: 5c 6e 22 3b 0a 7d 0a 0a 23 20 4f 75 74 70 75 74  \n";.}..# Output
1290: 20 74 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65   the dependencie
12a0: 73 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  s for the librar
12b0: 79 20 69 74 73 65 6c 66 20 69 66 20 64 6f 69 6e  y itself if doin
12c0: 67 20 61 20 6c 69 62 72 61 72 79 2e 0a 0a 69 66  g a library...if
12d0: 20 28 64 65 66 69 6e 65 64 28 24 4c 69 62 72 61   (defined($Libra
12e0: 72 79 29 29 20 7b 0a 20 20 20 20 6c 6f 63 61 6c  ry)) {.    local
12f0: 28 24 54 65 6d 70 29 3b 0a 0a 20 20 20 20 66 6f  ($Temp);..    fo
1300: 72 20 28 40 53 6f 75 72 63 65 73 29 20 7b 0a 09  r (@Sources) {..
1310: 70 72 69 6e 74 20 22 24 4c 69 62 72 61 72 79 3a  print "$Library:
1320: 20 24 5f 5c 6e 22 3b 0a 20 20 20 20 7d 0a 20 20   $_\n";.    }.  
1330: 20 20 66 6f 72 20 28 40 53 6f 75 72 63 65 73 29    for (@Sources)
1340: 20 7b 0a 09 24 54 65 6d 70 20 3d 20 24 5f 3b 0a   {..$Temp = $_;.
1350: 09 24 54 65 6d 70 20 3d 7e 20 73 2f 5c 2e 63 2f  .$Temp =~ s/\.c/
1360: 2e 6f 2f 6f 3b 0a 09 70 72 69 6e 74 20 22 24 4c  .o/o;..print "$L
1370: 69 62 72 61 72 79 3a 20 24 4c 69 62 72 61 72 79  ibrary: $Library
1380: 28 24 54 65 6d 70 29 5c 6e 22 3b 0a 20 20 20 20  ($Temp)\n";.    
1390: 7d 0a 20 20 20 20 70 72 69 6e 74 20 22 5c 74 72  }.    print "\tr
13a0: 61 6e 6c 69 62 20 24 4c 69 62 72 61 72 79 5c 6e  anlib $Library\n
13b0: 5c 74 2d 63 68 6d 6f 64 20 36 36 34 20 24 4c 69  \t-chmod 664 $Li
13c0: 62 72 61 72 79 5c 6e 5c 6e 22 3b 0a 7d 0a 0a 23  brary\n\n";.}..#
13d0: 20 6f 75 74 70 75 74 20 74 68 65 20 64 65 70 65   output the depe
13e0: 6e 64 65 6e 63 69 65 73 20 66 6f 72 20 65 61 63  ndencies for eac
13f0: 68 20 73 6f 75 72 63 65 20 66 69 6c 65 0a 0a 24  h source file..$
1400: 62 61 64 66 69 6c 65 73 20 3d 20 30 3b 0a 66 6f  badfiles = 0;.fo
1410: 72 65 61 63 68 20 24 73 72 63 20 28 40 53 6f 75  reach $src (@Sou
1420: 72 63 65 73 29 20 7b 0a 0a 20 20 20 20 23 20 67  rces) {..    # g
1430: 65 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a  et dependencies.
1440: 20 20 20 20 6f 70 65 6e 28 43 50 50 2c 20 22 24      open(CPP, "$
1450: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 24 50 50  Preprocessor $PP
1460: 4f 70 74 69 6f 6e 73 20 24 73 72 63 7c 22 29 0a  Options $src|").
1470: 09 7c 7c 20 64 69 65 20 22 27 24 50 72 65 70 72  .|| die "'$Prepr
1480: 6f 63 65 73 73 6f 72 27 20 66 6f 72 20 24 73 72  ocessor' for $sr
1490: 63 20 66 61 69 6c 65 64 3a 20 24 21 5c 6e 22 3b  c failed: $!\n";
14a0: 0a 0a 20 20 20 20 25 69 6e 63 66 69 6c 65 73 20  ..    %incfiles 
14b0: 3d 20 28 29 3b 0a 20 20 20 20 77 68 69 6c 65 20  = ();.    while 
14c0: 28 3c 43 50 50 3e 29 20 7b 0a 09 24 69 6e 63 66  (<CPP>) {..$incf
14d0: 69 6c 65 73 7b 24 66 69 6c 65 6e 61 6d 65 7d 2b  iles{$filename}+
14e0: 2b 20 69 66 20 28 28 24 66 69 6c 65 6e 61 6d 65  + if (($filename
14f0: 29 20 3d 20 2f 5e 23 20 2b 5c 64 2b 20 2b 22 28  ) = /^# +\d+ +"(
1500: 2e 2a 29 22 2f 6f 29 3b 0a 20 20 20 20 7d 0a 20  .*)"/o);.    }. 
1510: 20 20 20 63 6c 6f 73 65 28 43 50 50 29 3b 0a 0a     close(CPP);..
1520: 20 20 20 20 40 64 65 70 65 6e 64 65 6e 63 69 65      @dependencie
1530: 73 20 3d 20 73 6f 72 74 20 6b 65 79 73 28 25 69  s = sort keys(%i
1540: 6e 63 66 69 6c 65 73 29 3b 0a 0a 20 20 20 20 23  ncfiles);..    #
1550: 20 64 6f 20 6d 61 6b 65 20 76 61 72 69 61 62 6c   do make variabl
1560: 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e 0a 20  e substitution. 
1570: 20 20 20 69 66 20 28 24 23 56 6b 65 79 73 20 3e     if ($#Vkeys >
1580: 3d 20 30 29 20 7b 0a 09 66 6f 72 20 28 40 64 65  = 0) {..for (@de
1590: 70 65 6e 64 65 6e 63 69 65 73 29 20 7b 0a 09 20  pendencies) {.. 
15a0: 20 20 20 66 6f 72 65 61 63 68 20 24 6b 65 79 20     foreach $key 
15b0: 28 40 56 6b 65 79 73 29 20 7b 0a 09 09 73 2f 24  (@Vkeys) {...s/$
15c0: 6b 65 79 2f 5c 24 28 24 56 6d 61 70 7b 24 6b 65  key/\$($Vmap{$ke
15d0: 79 7d 29 2f 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  y})/;..    }..}.
15e0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 64      }..    if (d
15f0: 65 66 69 6e 65 64 28 24 45 78 63 6c 75 64 65 29  efined($Exclude)
1600: 29 20 7b 0a 09 40 64 65 70 65 6e 64 65 6e 63 69  ) {..@dependenci
1610: 65 73 20 3d 20 67 72 65 70 28 21 2f 24 45 78 63  es = grep(!/$Exc
1620: 6c 75 64 65 2f 2c 20 40 64 65 70 65 6e 64 65 6e  lude/, @dependen
1630: 63 69 65 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  cies);.    }..  
1640: 20 20 69 66 20 28 24 23 64 65 70 65 6e 64 65 6e    if ($#dependen
1650: 63 69 65 73 20 3c 20 30 29 20 7b 0a 09 70 72 69  cies < 0) {..pri
1660: 6e 74 20 53 54 44 45 52 52 20 22 24 30 3a 20 6e  nt STDERR "$0: n
1670: 6f 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 66  o dependencies f
1680: 6f 72 20 24 73 72 63 5c 6e 22 3b 0a 09 2b 2b 24  or $src\n";..++$
1690: 62 61 64 66 69 6c 65 73 3b 0a 09 6e 65 78 74 3b  badfiles;..next;
16a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 24 4f 62 6a  .    }..    $Obj
16b0: 65 63 74 20 3d 20 24 73 72 63 3b 0a 20 20 20 20  ect = $src;.    
16c0: 24 4f 62 6a 65 63 74 20 3d 7e 20 73 2f 5c 2e 63  $Object =~ s/\.c
16d0: 2f 5c 2e 6f 2f 6f 3b 0a 0a 20 20 20 20 69 66 20  /\.o/o;..    if 
16e0: 28 64 65 66 69 6e 65 64 28 24 53 74 72 69 70 73  (defined($Strips
16f0: 29 29 20 7b 0a 09 24 4f 62 6a 65 63 74 20 3d 7e  )) {..$Object =~
1700: 20 73 2f 24 53 74 72 69 70 73 2f 2f 67 3b 0a 20   s/$Strips//g;. 
1710: 20 20 20 7d 0a 0a 20 20 20 20 23 20 70 72 69 6e     }..    # prin
1720: 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 61  t dependencies a
1730: 6e 64 20 63 6f 6d 70 69 6c 65 72 20 6c 69 6e 65  nd compiler line
1740: 20 74 6f 20 6d 61 6b 65 66 69 6c 65 0a 20 20 20   to makefile.   
1750: 20 69 66 20 28 64 65 66 69 6e 65 64 28 24 4c 69   if (defined($Li
1760: 62 72 61 72 79 29 29 20 7b 0a 09 66 6f 72 20 28  brary)) {..for (
1770: 40 64 65 70 65 6e 64 65 6e 63 69 65 73 29 20 7b  @dependencies) {
1780: 0a 09 20 20 20 20 70 72 69 6e 74 20 22 24 4c 69  ..    print "$Li
1790: 62 72 61 72 79 28 24 4f 62 6a 65 63 74 29 3a 20  brary($Object): 
17a0: 24 5f 5c 6e 22 3b 0a 09 7d 0a 09 69 66 20 28 24  $_\n";..}..if ($
17b0: 43 63 29 20 7b 0a 09 20 20 20 20 70 72 69 6e 74  Cc) {..    print
17c0: 20 22 5c 74 5c 24 28 43 43 29 20 5c 24 28 43 46   "\t\$(CC) \$(CF
17d0: 4c 41 47 53 29 20 2d 63 20 24 73 72 63 22 3b 0a  LAGS) -c $src";.
17e0: 09 20 20 20 20 69 66 20 28 24 41 72 63 68 29 20  .    if ($Arch) 
17f0: 7b 0a 09 09 70 72 69 6e 74 20 22 20 2d 6f 20 5c  {...print " -o \
1800: 24 28 41 52 43 48 29 2f 24 4f 62 6a 65 63 74 22  $(ARCH)/$Object"
1810: 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 70 72  ;..    }..    pr
1820: 69 6e 74 20 22 5c 6e 5c 74 61 72 20 72 76 20 24  int "\n\tar rv $
1830: 4c 69 62 72 61 72 79 20 24 4f 62 6a 65 63 74 5c  Library $Object\
1840: 6e 22 3b 0a 09 20 20 20 20 70 72 69 6e 74 20 22  n";..    print "
1850: 5c 74 72 61 6e 6c 69 62 20 24 4c 69 62 72 61 72  \tranlib $Librar
1860: 79 5c 6e 22 3b 0a 09 7d 0a 20 20 20 20 7d 0a 20  y\n";..}.    }. 
1870: 20 20 20 65 6c 73 65 20 7b 0a 09 69 66 20 28 24     else {..if ($
1880: 41 72 63 68 29 20 7b 0a 09 20 20 20 20 66 6f 72  Arch) {..    for
1890: 20 28 40 64 65 70 65 6e 64 65 6e 63 69 65 73 29   (@dependencies)
18a0: 20 7b 0a 09 09 70 72 69 6e 74 20 27 24 28 41 52   {...print '$(AR
18b0: 43 48 29 2f 27 2c 20 22 24 4f 62 6a 65 63 74 3a  CH)/', "$Object:
18c0: 20 24 5f 5c 6e 22 3b 0a 09 20 20 20 20 7d 0a 09   $_\n";..    }..
18d0: 20 20 20 20 24 43 63 20 26 26 20 70 72 69 6e 74      $Cc && print
18e0: 20 22 5c 74 22 20 2c 20 27 24 28 43 43 29 20 24   "\t" , '$(CC) $
18f0: 28 43 46 4c 41 47 53 29 20 2d 63 20 27 20 2c 20  (CFLAGS) -c ' , 
1900: 22 24 73 72 63 22 2c 20 27 20 2d 6f 20 24 40 27  "$src", ' -o $@'
1910: 2c 20 22 5c 6e 22 3b 0a 09 7d 0a 09 65 6c 73 65  , "\n";..}..else
1920: 20 7b 0a 09 20 20 20 20 66 6f 72 20 28 40 64 65   {..    for (@de
1930: 70 65 6e 64 65 6e 63 69 65 73 29 20 7b 0a 09 09  pendencies) {...
1940: 70 72 69 6e 74 20 22 24 4f 62 6a 65 63 74 3a 20  print "$Object: 
1950: 24 5f 5c 6e 22 3b 0a 09 20 20 20 20 7d 0a 09 20  $_\n";..    }.. 
1960: 20 20 20 24 43 63 20 26 26 20 70 72 69 6e 74 20     $Cc && print 
1970: 22 5c 74 22 20 2c 20 27 24 28 43 43 29 20 24 28  "\t" , '$(CC) $(
1980: 43 46 4c 41 47 53 29 20 2d 63 20 27 20 2c 20 22  CFLAGS) -c ' , "
1990: 24 73 72 63 5c 6e 22 3b 0a 09 7d 0a 20 20 20 20  $src\n";..}.    
19a0: 7d 0a 20 20 20 20 70 72 69 6e 74 20 22 5c 6e 22  }.    print "\n"
19b0: 3b 0a 7d 0a 0a 69 66 20 28 24 62 61 64 66 69 6c  ;.}..if ($badfil
19c0: 65 73 29 20 7b 0a 20 20 20 20 75 6e 6c 69 6e 6b  es) {.    unlink
19d0: 20 24 54 65 6d 70 46 69 6c 65 3b 0a 20 20 20 20   $TempFile;.    
19e0: 65 78 69 74 20 31 3b 0a 7d 0a 0a 72 65 6e 61 6d  exit 1;.}..renam
19f0: 65 28 24 4d 61 6b 65 66 69 6c 65 2c 20 22 24 4d  e($Makefile, "$M
1a00: 61 6b 65 66 69 6c 65 2e 42 41 4b 22 29 0a 20 20  akefile.BAK").  
1a10: 20 20 7c 7c 20 64 69 65 20 22 63 61 6e 27 74 20    || die "can't 
1a20: 72 65 6e 61 6d 65 20 24 4d 61 6b 65 66 69 6c 65  rename $Makefile
1a30: 20 74 6f 20 24 4d 61 6b 65 66 69 6c 65 2e 42 41   to $Makefile.BA
1a40: 4b 20 2d 20 24 21 5c 6e 22 3b 0a 0a 72 65 6e 61  K - $!\n";..rena
1a50: 6d 65 28 22 24 54 65 6d 70 46 69 6c 65 22 2c 20  me("$TempFile", 
1a60: 24 4d 61 6b 65 66 69 6c 65 29 0a 20 20 20 20 7c  $Makefile).    |
1a70: 7c 20 64 69 65 20 22 63 61 6e 27 74 20 72 65 6e  | die "can't ren
1a80: 61 6d 65 20 24 54 65 6d 70 46 69 6c 65 20 74 6f  ame $TempFile to
1a90: 20 24 4d 61 6b 65 66 69 6c 65 20 2d 20 24 21 5c   $Makefile - $!\
1aa0: 6e 22 3b 0a 0a 65 78 69 74 20 30 3b 0a 0a 0a 73  n";..exit 0;...s
1ab0: 75 62 20 47 65 74 6f 70 74 73 20 7b 0a 20 20 20  ub Getopts {.   
1ac0: 20 6c 6f 63 61 6c 28 24 61 72 67 75 6d 65 6e 74   local($argument
1ad0: 61 74 69 76 65 29 20 3d 20 40 5f 3b 0a 20 20 20  ative) = @_;.   
1ae0: 20 6c 6f 63 61 6c 28 40 61 72 67 73 2c 24 5f 2c   local(@args,$_,
1af0: 24 66 69 72 73 74 2c 24 72 65 73 74 29 3b 0a 20  $first,$rest);. 
1b00: 20 20 20 6c 6f 63 61 6c 28 24 65 72 72 73 29 20     local($errs) 
1b10: 3d 20 30 3b 0a 20 20 20 20 6c 6f 63 61 6c 28 24  = 0;.    local($
1b20: 5b 29 20 3d 20 30 3b 0a 0a 20 20 20 20 40 61 72  [) = 0;..    @ar
1b30: 67 73 20 3d 20 73 70 6c 69 74 28 20 2f 20 2a 2f  gs = split( / */
1b40: 6f 2c 20 24 61 72 67 75 6d 65 6e 74 61 74 69 76  o, $argumentativ
1b50: 65 20 29 3b 0a 0a 20 20 20 20 77 68 69 6c 65 28  e );..    while(
1b60: 40 41 52 47 56 20 26 26 20 28 24 5f 20 3d 20 24  @ARGV && ($_ = $
1b70: 41 52 47 56 5b 30 5d 29 20 3d 7e 20 2f 5e 2d 28  ARGV[0]) =~ /^-(
1b80: 2e 29 28 2e 2a 29 2f 6f 29 20 7b 0a 09 28 24 66  .)(.*)/o) {..($f
1b90: 69 72 73 74 2c 24 72 65 73 74 29 20 3d 20 28 24  irst,$rest) = ($
1ba0: 31 2c 24 32 29 3b 0a 09 24 70 6f 73 20 3d 20 69  1,$2);..$pos = i
1bb0: 6e 64 65 78 28 24 61 72 67 75 6d 65 6e 74 61 74  ndex($argumentat
1bc0: 69 76 65 2c 24 66 69 72 73 74 29 3b 0a 09 69 66  ive,$first);..if
1bd0: 28 24 70 6f 73 20 3e 3d 20 24 5b 29 20 7b 0a 09  ($pos >= $[) {..
1be0: 20 20 20 20 69 66 28 24 61 72 67 73 5b 24 70 6f      if($args[$po
1bf0: 73 2b 31 5d 20 65 71 20 27 3a 27 29 20 7b 0a 09  s+1] eq ':') {..
1c00: 09 73 68 69 66 74 28 40 41 52 47 56 29 3b 0a 09  .shift(@ARGV);..
1c10: 09 69 66 28 24 72 65 73 74 20 65 71 20 27 27 29  .if($rest eq '')
1c20: 20 7b 0a 09 09 20 20 20 20 2b 2b 24 65 72 72 73   {...    ++$errs
1c30: 20 75 6e 6c 65 73 73 20 40 41 52 47 56 3b 0a 09   unless @ARGV;..
1c40: 09 20 20 20 20 24 72 65 73 74 20 3d 20 73 68 69  .    $rest = shi
1c50: 66 74 28 40 41 52 47 56 29 3b 0a 09 09 7d 0a 09  ft(@ARGV);...}..
1c60: 09 65 76 61 6c 20 22 5c 24 6f 70 74 5f 24 66 69  .eval "\$opt_$fi
1c70: 72 73 74 20 3d 20 5c 24 72 65 73 74 3b 22 3b 0a  rst = \$rest;";.
1c80: 09 20 20 20 20 7d 0a 09 20 20 20 20 65 6c 73 69  .    }..    elsi
1c90: 66 28 24 61 72 67 73 5b 24 70 6f 73 2b 31 5d 20  f($args[$pos+1] 
1ca0: 65 71 20 27 26 27 29 20 7b 0a 09 09 73 68 69 66  eq '&') {...shif
1cb0: 74 28 40 41 52 47 56 29 3b 0a 09 09 69 66 28 24  t(@ARGV);...if($
1cc0: 72 65 73 74 20 65 71 20 27 27 29 20 7b 0a 09 09  rest eq '') {...
1cd0: 20 20 20 20 2b 2b 24 65 72 72 73 20 75 6e 6c 65      ++$errs unle
1ce0: 73 73 20 40 41 52 47 56 3b 0a 09 09 20 20 20 20  ss @ARGV;...    
1cf0: 24 72 65 73 74 20 3d 20 73 68 69 66 74 28 40 41  $rest = shift(@A
1d00: 52 47 56 29 3b 0a 09 09 7d 0a 09 09 65 76 61 6c  RGV);...}...eval
1d10: 20 22 70 75 73 68 28 5c 40 6f 70 74 5f 24 66 69   "push(\@opt_$fi
1d20: 72 73 74 2c 20 5c 24 72 65 73 74 29 3b 22 3b 0a  rst, \$rest);";.
1d30: 09 20 20 20 20 7d 0a 09 20 20 20 20 65 6c 73 65  .    }..    else
1d40: 20 7b 0a 09 09 65 76 61 6c 20 22 5c 24 6f 70 74   {...eval "\$opt
1d50: 5f 24 66 69 72 73 74 20 3d 20 31 22 3b 0a 09 09  _$first = 1";...
1d60: 69 66 28 24 72 65 73 74 20 65 71 20 27 27 29 20  if($rest eq '') 
1d70: 7b 0a 09 09 20 20 20 20 73 68 69 66 74 28 40 41  {...    shift(@A
1d80: 52 47 56 29 3b 0a 09 09 7d 0a 09 09 65 6c 73 65  RGV);...}...else
1d90: 20 7b 0a 09 09 20 20 20 20 24 41 52 47 56 5b 30   {...    $ARGV[0
1da0: 5d 20 3d 20 22 2d 24 72 65 73 74 22 3b 0a 09 09  ] = "-$rest";...
1db0: 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 65 6c 73  }..    }..}..els
1dc0: 65 20 7b 0a 09 20 20 20 20 70 72 69 6e 74 20 53  e {..    print S
1dd0: 54 44 45 52 52 20 22 55 6e 6b 6e 6f 77 6e 20 6f  TDERR "Unknown o
1de0: 70 74 69 6f 6e 3a 20 24 66 69 72 73 74 5c 6e 22  ption: $first\n"
1df0: 3b 0a 09 20 20 20 20 2b 2b 24 65 72 72 73 3b 0a  ;..    ++$errs;.
1e00: 09 20 20 20 20 69 66 28 24 72 65 73 74 20 6e 65  .    if($rest ne
1e10: 20 27 27 29 20 7b 0a 09 09 24 41 52 47 56 5b 30   '') {...$ARGV[0
1e20: 5d 20 3d 20 22 2d 24 72 65 73 74 22 3b 0a 09 20  ] = "-$rest";.. 
1e30: 20 20 20 7d 0a 09 20 20 20 20 65 6c 73 65 20 7b     }..    else {
1e40: 0a 09 09 73 68 69 66 74 28 40 41 52 47 56 29 3b  ...shift(@ARGV);
1e50: 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d  ..    }..}.    }
1e60: 0a 20 20 20 20 24 65 72 72 73 20 3d 3d 20 30 3b  .    $errs == 0;
1e70: 0a 7d 0a 0a 0a 73 75 62 20 63 6c 65 61 6e 75 70  .}...sub cleanup
1e80: 20 7b 0a 20 20 20 20 75 6e 6c 69 6e 6b 20 24 54   {.    unlink $T
1e90: 65 6d 70 46 69 6c 65 3b 0a 20 20 20 20 65 78 69  empFile;.    exi
1ea0: 74 20 30 3b 0a 7d 0a 0a 0a 23 20 4c 6f 63 61 6c  t 0;.}...# Local
1eb0: 20 56 61 72 69 61 62 6c 65 73 3a 0a 23 20 6d 6f   Variables:.# mo
1ec0: 64 65 3a 20 70 65 72 6c 0a 23 20 45 6e 64 3a 0a  de: perl.# End:.