Fossil

Hex Artifact Content
Login

Artifact a2b7770e72894b7ecaa6f24b7b70ef83b672d272d6e9657649716a24dd4d2691:


0000: 2f 2a 0a 2a 2a 20 54 68 69 73 20 43 20 70 72 6f  /*.** This C pro
0010: 67 72 61 6d 20 67 65 6e 65 72 61 74 65 73 20 74  gram generates t
0020: 68 65 20 22 56 45 52 53 49 4f 4e 2e 68 22 20 68  he "VERSION.h" h
0030: 65 61 64 65 72 20 66 69 6c 65 20 66 72 6f 6d 20  eader file from 
0040: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 65  information.** e
0050: 78 74 72 61 63 74 65 64 20 6f 75 74 20 6f 66 20  xtracted out of 
0060: 74 68 65 20 22 6d 61 6e 69 66 65 73 74 22 2c 20  the "manifest", 
0070: 22 6d 61 6e 69 66 65 73 74 2e 75 75 69 64 22 2c  "manifest.uuid",
0080: 20 61 6e 64 20 22 56 45 52 53 49 4f 4e 22 20 66   and "VERSION" f
0090: 69 6c 65 73 2e 0a 2a 2a 20 43 61 6c 6c 20 74 68  iles..** Call th
00a0: 69 73 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20  is program with 
00b0: 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 3a  three arguments:
00c0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2e 2f 61 2e 6f  .**.**     ./a.o
00d0: 75 74 20 6d 61 6e 69 66 65 73 74 2e 75 75 69 64  ut manifest.uuid
00e0: 20 6d 61 6e 69 66 65 73 74 20 56 45 52 53 49 4f   manifest VERSIO
00f0: 4e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  N.**.** Note tha
0100: 74 20 74 68 65 20 6d 61 6e 69 66 65 73 74 2e 75  t the manifest.u
0110: 75 69 64 20 61 6e 64 20 6d 61 6e 69 66 65 73 74  uid and manifest
0120: 20 66 69 6c 65 73 20 61 72 65 20 67 65 6e 65 72   files are gener
0130: 61 74 65 64 20 62 79 20 46 6f 73 73 69 6c 2e 0a  ated by Fossil..
0140: 2a 2a 0a 2a 2a 20 54 68 65 20 6f 75 74 70 75 74  **.** The output
0150: 20 62 65 63 6f 6d 65 73 20 74 68 65 20 22 56 45   becomes the "VE
0160: 52 53 49 4f 4e 2e 68 22 20 66 69 6c 65 2e 20 20  RSION.h" file.  
0170: 54 68 65 20 6f 75 74 70 75 74 20 69 73 20 61 20  The output is a 
0180: 43 2d 6c 61 6e 67 75 61 67 65 0a 2a 2a 20 68 65  C-language.** he
0190: 61 64 65 72 20 74 68 61 74 20 63 6f 6e 74 61 69  ader that contai
01a0: 6e 73 20 23 64 65 66 69 6e 65 73 20 66 6f 72 20  ns #defines for 
01b0: 76 61 72 69 6f 75 73 20 70 72 6f 70 65 72 74 69  various properti
01c0: 65 73 20 6f 66 20 74 68 65 20 62 75 69 6c 64 3a  es of the build:
01d0: 0a 2a 2a 0a 2a 2a 20 20 20 4d 41 4e 49 46 45 53  .**.**   MANIFES
01e0: 54 5f 55 55 49 44 20 20 20 20 20 20 20 20 20 20  T_UUID          
01f0: 20 20 20 20 54 68 65 73 65 20 76 61 6c 75 65 73      These values
0200: 20 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67   are text string
0210: 73 20 74 68 61 74 0a 2a 2a 20 20 20 4d 41 4e 49  s that.**   MANI
0220: 46 45 53 54 5f 56 45 52 53 49 4f 4e 20 20 20 20  FEST_VERSION    
0230: 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 79 20         identify 
0240: 74 68 65 20 46 6f 73 73 69 6c 20 63 68 65 63 6b  the Fossil check
0250: 2d 69 6e 20 74 6f 20 77 68 69 63 68 0a 2a 2a 20  -in to which.** 
0260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
0280: 20 73 6f 75 72 63 65 20 74 72 65 65 20 62 65 6c   source tree bel
0290: 6f 6e 67 73 2e 20 20 54 68 65 79 20 64 6f 20 6e  ongs.  They do n
02a0: 6f 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ot.**           
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02c0: 20 20 20 74 61 6b 65 20 69 6e 74 6f 20 61 63 63     take into acc
02d0: 6f 75 6e 74 20 61 6e 79 20 75 6e 63 6f 6d 6d 69  ount any uncommi
02e0: 74 74 65 64 20 65 64 69 74 73 2e 0a 2a 2a 0a 2a  tted edits..**.*
02f0: 2a 20 20 20 46 4f 53 53 49 4c 5f 42 55 49 4c 44  *   FOSSIL_BUILD
0300: 5f 48 41 53 48 20 20 20 20 20 20 20 20 20 20 41  _HASH          A
0310: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 73 74 72   hexadecimal str
0320: 69 6e 67 20 74 68 61 74 20 69 73 20 61 20 73 74  ing that is a st
0330: 72 6f 6e 67 20 68 61 73 68 0a 2a 2a 20 20 20 20  rong hash.**    
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
0360: 20 4d 41 4e 49 46 45 53 54 5f 55 55 49 44 20 74   MANIFEST_UUID t
0370: 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65  ogether with the
0380: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03a0: 20 63 75 72 72 65 6e 74 20 74 69 6d 65 20 6f 66   current time of
03b0: 20 74 68 65 20 62 75 69 6c 64 2e 20 20 57 65 20   the build.  We 
03c0: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 0a 2a 2a  normally want.**
03d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
03f0: 69 73 20 74 6f 20 62 65 20 64 69 66 66 65 72 65  is to be differe
0400: 6e 74 20 6f 6e 20 65 61 63 68 20 62 75 69 6c 64  nt on each build
0410: 2c 20 61 73 20 74 68 65 0a 2a 2a 20 20 20 20 20  , as the.**     
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0430: 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 69           value i
0440: 73 20 75 73 65 64 20 74 6f 20 65 78 70 69 72 65  s used to expire
0450: 20 45 54 61 67 3a 20 66 69 65 6c 64 73 20 69 6e   ETag: fields in
0460: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 48 54 54 50 20 72 65 71 75 65 73 74 73 2e 20   HTTP requests. 
0490: 20 42 75 74 20 69 66 20 79 6f 75 20 6e 65 65 64   But if you need
04a0: 20 74 6f 20 64 6f 0a 2a 2a 20 20 20 20 20 20 20   to do.**       
04b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04c0: 20 20 20 20 20 20 20 72 65 70 65 61 74 61 62 6c         repeatabl
04d0: 65 20 62 79 74 65 2d 66 6f 72 2d 62 79 74 65 20  e byte-for-byte 
04e0: 69 64 65 6e 74 69 63 61 6c 20 62 75 69 6c 64 73  identical builds
04f0: 2c 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ,.**            
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 61 64 64 20 74 68 65 20 2d 44 46 4f 53 53    add the -DFOSS
0520: 49 4c 5f 42 55 49 4c 44 5f 45 50 4f 43 48 3d 6e  IL_BUILD_EPOCH=n
0530: 20 6f 70 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20   option..**.**  
0540: 20 4d 41 4e 49 46 45 53 54 5f 44 41 54 45 20 20   MANIFEST_DATE  
0550: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
0560: 64 61 74 65 2f 74 69 6d 65 20 6f 66 20 74 68 65  date/time of the
0570: 20 73 6f 75 72 63 65 2d 63 6f 64 65 20 63 68 65   source-code che
0580: 63 6b 2d 69 6e 0a 2a 2a 20 20 20 4d 41 4e 49 46  ck-in.**   MANIF
0590: 45 53 54 5f 59 45 41 52 20 20 20 20 20 20 20 20  EST_YEAR        
05a0: 20 20 20 20 20 20 69 6e 20 76 61 72 69 6f 75 73        in various
05b0: 20 66 6f 72 6d 61 74 73 2e 0a 2a 2a 20 20 20 4d   formats..**   M
05c0: 41 4e 49 46 45 53 54 5f 4e 55 4d 45 52 49 43 5f  ANIFEST_NUMERIC_
05d0: 44 41 54 45 0a 2a 2a 20 20 20 4d 41 4e 49 46 45  DATE.**   MANIFE
05e0: 53 54 5f 4e 55 4d 45 52 49 43 5f 54 49 4d 45 0a  ST_NUMERIC_TIME.
05f0: 2a 2a 0a 2a 2a 20 20 20 52 45 4c 45 41 53 45 5f  **.**   RELEASE_
0600: 56 45 52 53 49 4f 4e 20 20 20 20 20 20 20 20 20  VERSION         
0610: 20 20 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6e     The version n
0620: 75 6d 62 65 72 20 28 66 72 6f 6d 20 74 68 65 20  umber (from the 
0630: 56 45 52 53 49 4f 4e 20 73 6f 75 72 63 65 0a 2a  VERSION source.*
0640: 2a 20 20 20 52 45 4c 45 41 53 45 5f 56 45 52 53  *   RELEASE_VERS
0650: 49 4f 4e 5f 4e 55 4d 42 45 52 20 20 20 20 20 66  ION_NUMBER     f
0660: 69 6c 65 29 20 69 6e 20 76 61 72 69 6f 75 73 20  ile) in various 
0670: 66 6f 72 6d 61 74 2e 0a 2a 2a 20 20 20 52 45 4c  format..**   REL
0680: 45 41 53 45 5f 52 45 53 4f 55 52 43 45 5f 56 45  EASE_RESOURCE_VE
0690: 52 53 49 4f 4e 0a 2a 2a 0a 2a 2a 20 4e 65 77 20  RSION.**.** New 
06a0: 23 64 65 66 69 6e 65 73 20 6d 61 79 20 62 65 20  #defines may be 
06b0: 61 64 64 65 64 20 69 6e 20 74 68 65 20 66 75 74  added in the fut
06c0: 75 72 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ure..*/.#include
06d0: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
06e0: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23  ude <string.h>.#
06f0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
0700: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79  h>.#include <cty
0710: 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  pe.h>.#include <
0720: 74 69 6d 65 2e 68 3e 0a 0a 23 69 66 20 64 65 66  time.h>..#if def
0730: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
0740: 26 20 28 5f 4d 53 43 5f 56 45 52 20 3c 20 31 38  & (_MSC_VER < 18
0750: 30 30 29 20 2f 2a 20 4d 53 56 53 20 32 30 31 33  00) /* MSVS 2013
0760: 20 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 73 74   */.#  define st
0770: 72 74 6f 6c 6c 20 5f 73 74 72 74 6f 69 36 34 0a  rtoll _strtoi64.
0780: 23 65 6e 64 69 66 0a 0a 73 74 61 74 69 63 20 46  #endif..static F
0790: 49 4c 45 20 2a 6f 70 65 6e 5f 66 6f 72 5f 72 65  ILE *open_for_re
07a0: 61 64 69 6e 67 28 63 6f 6e 73 74 20 63 68 61 72  ading(const char
07b0: 20 2a 7a 46 69 6c 65 6e 61 6d 65 29 7b 0a 20 20   *zFilename){.  
07c0: 46 49 4c 45 20 2a 66 20 3d 20 66 6f 70 65 6e 28  FILE *f = fopen(
07d0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 22 72 22 29 3b  zFilename, "r");
07e0: 0a 20 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a 20  .  if( f==0 ){. 
07f0: 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72     fprintf(stder
0800: 72 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  r, "cannot open 
0810: 5c 22 25 73 5c 22 20 66 6f 72 20 72 65 61 64 69  \"%s\" for readi
0820: 6e 67 5c 6e 22 2c 20 7a 46 69 6c 65 6e 61 6d 65  ng\n", zFilename
0830: 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
0840: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a    }.  return f;.
0850: 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20 61  }../*.** Given a
0860: 6e 20 61 72 62 69 74 72 61 72 79 2d 6c 65 6e 67  n arbitrary-leng
0870: 74 68 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  th input string 
0880: 6b 65 79 20 7a 49 6e 2c 20 67 65 6e 65 72 61 74  key zIn, generat
0890: 65 0a 2a 2a 20 61 6e 20 4e 2d 62 79 74 65 20 68  e.** an N-byte h
08a0: 65 78 61 64 65 63 69 6d 61 6c 20 68 61 73 68 20  exadecimal hash 
08b0: 6f 66 20 74 68 61 74 20 73 74 72 69 6e 67 20 69  of that string i
08c0: 6e 74 6f 20 7a 4f 75 74 2e 0a 2a 2f 0a 73 74 61  nto zOut..*/.sta
08d0: 74 69 63 20 76 6f 69 64 20 68 61 73 68 28 63 6f  tic void hash(co
08e0: 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e 2c 20 69  nst char *zIn, i
08f0: 6e 74 20 4e 2c 20 63 68 61 72 20 2a 7a 4f 75 74  nt N, char *zOut
0900: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68  ){.  unsigned ch
0910: 61 72 20 69 2c 20 6a 2c 20 74 3b 0a 20 20 69 6e  ar i, j, t;.  in
0920: 74 20 6d 2c 20 6e 3b 0a 20 20 75 6e 73 69 67 6e  t m, n;.  unsign
0930: 65 64 20 63 68 61 72 20 73 5b 32 35 36 5d 3b 0a  ed char s[256];.
0940: 20 20 66 6f 72 28 6d 3d 30 3b 20 6d 3c 32 35 36    for(m=0; m<256
0950: 3b 20 6d 2b 2b 29 7b 20 73 5b 6d 5d 20 3d 20 6d  ; m++){ s[m] = m
0960: 3b 20 7d 0a 20 20 66 6f 72 28 6a 3d 30 2c 20 6d  ; }.  for(j=0, m
0970: 3d 6e 3d 30 3b 20 6d 3c 32 35 36 3b 20 6d 2b 2b  =n=0; m<256; m++
0980: 2c 20 6e 2b 2b 29 7b 0a 20 20 20 20 6a 20 2b 3d  , n++){.    j +=
0990: 20 73 5b 6d 5d 20 2b 20 7a 49 6e 5b 6e 5d 3b 0a   s[m] + zIn[n];.
09a0: 20 20 20 20 69 66 28 20 7a 49 6e 5b 6e 5d 3d 3d      if( zIn[n]==
09b0: 30 20 29 7b 20 6e 20 3d 20 2d 31 3b 20 7d 0a 20  0 ){ n = -1; }. 
09c0: 20 20 20 74 20 3d 20 73 5b 6a 5d 3b 0a 20 20 20     t = s[j];.   
09d0: 20 73 5b 6a 5d 20 3d 20 73 5b 6d 5d 3b 0a 20 20   s[j] = s[m];.  
09e0: 20 20 73 5b 6d 5d 20 3d 20 74 3b 0a 20 20 7d 0a    s[m] = t;.  }.
09f0: 20 20 69 20 3d 20 6a 20 3d 20 30 3b 0a 20 20 66    i = j = 0;.  f
0a00: 6f 72 28 6e 3d 30 3b 20 6e 3c 4e 2d 32 3b 20 6e  or(n=0; n<N-2; n
0a10: 2b 3d 32 29 7b 0a 20 20 20 20 69 2b 2b 3b 0a 20  +=2){.    i++;. 
0a20: 20 20 20 74 20 3d 20 73 5b 69 5d 3b 0a 20 20 20     t = s[i];.   
0a30: 20 6a 20 2b 3d 20 74 3b 0a 20 20 20 20 73 5b 69   j += t;.    s[i
0a40: 5d 20 3d 20 73 5b 6a 5d 3b 0a 20 20 20 20 73 5b  ] = s[j];.    s[
0a50: 6a 5d 20 3d 20 74 3b 0a 20 20 20 20 74 20 2b 3d  j] = t;.    t +=
0a60: 20 73 5b 69 5d 3b 0a 20 20 20 20 7a 4f 75 74 5b   s[i];.    zOut[
0a70: 6e 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  n] = "0123456789
0a80: 61 62 63 64 65 66 22 5b 28 74 3e 3e 34 29 26 30  abcdef"[(t>>4)&0
0a90: 78 66 5d 3b 0a 20 20 20 20 7a 4f 75 74 5b 6e 2b  xf];.    zOut[n+
0aa0: 31 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  1] = "0123456789
0ab0: 61 62 63 64 65 66 22 5b 74 26 30 78 66 5d 3b 0a  abcdef"[t&0xf];.
0ac0: 20 20 7d 0a 20 20 7a 4f 75 74 5b 6e 5d 20 3d 20    }.  zOut[n] = 
0ad0: 30 3b 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e 28 69  0;.}..int main(i
0ae0: 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 61  nt argc, char *a
0af0: 72 67 76 5b 5d 29 7b 0a 20 20 20 20 46 49 4c 45  rgv[]){.    FILE
0b00: 20 2a 6d 2c 2a 75 2c 2a 76 3b 0a 20 20 20 20 63   *m,*u,*v;.    c
0b10: 68 61 72 20 2a 7a 3b 0a 23 69 66 20 64 65 66 69  har *z;.#if defi
0b20: 6e 65 64 28 5f 5f 44 4d 43 5f 5f 29 20 20 20 20  ned(__DMC__)    
0b30: 20 20 20 20 20 20 20 20 2f 2a 20 65 2e 67 2e 20          /* e.g. 
0b40: 30 78 38 35 37 20 2a 2f 0a 20 20 20 20 69 6e 74  0x857 */.    int
0b50: 20 69 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20   i = 0;.#endif. 
0b60: 20 20 20 69 6e 74 20 6a 20 3d 20 30 2c 20 78 20     int j = 0, x 
0b70: 3d 20 30 2c 20 64 20 3d 20 30 3b 0a 20 20 20 20  = 0, d = 0;.    
0b80: 73 69 7a 65 5f 74 20 6e 3b 0a 20 20 20 20 69 6e  size_t n;.    in
0b90: 74 20 76 6e 5b 33 5d 3b 0a 20 20 20 20 63 68 61  t vn[3];.    cha
0ba0: 72 20 62 5b 31 30 30 30 5d 3b 0a 20 20 20 20 63  r b[1000];.    c
0bb0: 68 61 72 20 76 78 5b 31 30 30 30 5d 3b 0a 20 20  har vx[1000];.  
0bc0: 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b    if( argc!=4 ){
0bd0: 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73  .      fprintf(s
0be0: 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 25  tderr, "Usage: %
0bf0: 73 20 6d 61 6e 69 66 65 73 74 2e 75 75 69 64 20  s manifest.uuid 
0c00: 6d 61 6e 69 66 65 73 74 20 56 45 52 53 49 4f 4e  manifest VERSION
0c10: 5c 6e 22 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20  \n", argv[0]);. 
0c20: 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20       exit(1);.  
0c30: 20 20 7d 0a 20 20 20 20 6d 65 6d 73 65 74 28 62    }.    memset(b
0c40: 2c 30 2c 73 69 7a 65 6f 66 28 62 29 29 3b 0a 20  ,0,sizeof(b));. 
0c50: 20 20 20 6d 65 6d 73 65 74 28 76 78 2c 30 2c 73     memset(vx,0,s
0c60: 69 7a 65 6f 66 28 76 78 29 29 3b 0a 20 20 20 20  izeof(vx));.    
0c70: 75 20 3d 20 6f 70 65 6e 5f 66 6f 72 5f 72 65 61  u = open_for_rea
0c80: 64 69 6e 67 28 61 72 67 76 5b 31 5d 29 3b 0a 20  ding(argv[1]);. 
0c90: 20 20 20 69 66 28 20 66 67 65 74 73 28 62 2c 20     if( fgets(b, 
0ca0: 73 69 7a 65 6f 66 28 62 29 2d 31 2c 75 29 3d 3d  sizeof(b)-1,u)==
0cb0: 30 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e  0 ){.      fprin
0cc0: 74 66 28 73 74 64 65 72 72 2c 20 22 6d 61 6c 66  tf(stderr, "malf
0cd0: 6f 72 6d 65 64 20 6d 61 6e 69 66 65 73 74 2e 75  ormed manifest.u
0ce0: 75 69 64 20 66 69 6c 65 3a 20 25 73 5c 6e 22 2c  uid file: %s\n",
0cf0: 20 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 20   argv[1]);.     
0d00: 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a   exit(1);.    }.
0d10: 20 20 20 20 66 63 6c 6f 73 65 28 75 29 3b 0a 20      fclose(u);. 
0d20: 20 20 20 66 6f 72 28 7a 3d 62 3b 20 7a 5b 30 5d     for(z=b; z[0]
0d30: 20 26 26 20 7a 5b 30 5d 21 3d 27 5c 72 27 20 26   && z[0]!='\r' &
0d40: 26 20 7a 5b 30 5d 21 3d 27 5c 6e 27 3b 20 7a 2b  & z[0]!='\n'; z+
0d50: 2b 29 7b 7d 0a 20 20 20 20 2a 7a 20 3d 20 30 3b  +){}.    *z = 0;
0d60: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 23 64 65  .    printf("#de
0d70: 66 69 6e 65 20 4d 41 4e 49 46 45 53 54 5f 55 55  fine MANIFEST_UU
0d80: 49 44 20 5c 22 25 73 5c 22 5c 6e 22 2c 62 29 3b  ID \"%s\"\n",b);
0d90: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 23 64 65  .    printf("#de
0da0: 66 69 6e 65 20 4d 41 4e 49 46 45 53 54 5f 56 45  fine MANIFEST_VE
0db0: 52 53 49 4f 4e 20 5c 22 5b 25 31 30 2e 31 30 73  RSION \"[%10.10s
0dc0: 5d 5c 22 5c 6e 22 2c 62 29 3b 0a 20 20 20 20 6e  ]\"\n",b);.    n
0dd0: 20 3d 20 73 74 72 6c 65 6e 28 62 29 3b 0a 20 20   = strlen(b);.  
0de0: 20 20 69 66 28 20 6e 20 2b 20 35 30 20 3c 20 73    if( n + 50 < s
0df0: 69 7a 65 6f 66 28 62 29 20 29 7b 0a 23 69 66 64  izeof(b) ){.#ifd
0e00: 65 66 20 46 4f 53 53 49 4c 5f 42 55 49 4c 44 5f  ef FOSSIL_BUILD_
0e10: 45 50 4f 43 48 0a 23 64 65 66 69 6e 65 20 73 74  EPOCH.#define st
0e20: 72 28 73 29 20 23 73 0a 20 20 20 20 20 20 73 70  r(s) #s.      sp
0e30: 72 69 6e 74 66 28 62 2b 6e 2c 20 22 25 64 22 2c  rintf(b+n, "%d",
0e40: 20 28 69 6e 74 29 73 74 72 74 6f 6c 6c 28 73 74   (int)strtoll(st
0e50: 72 28 46 4f 53 53 49 4c 5f 42 55 49 4c 44 5f 45  r(FOSSIL_BUILD_E
0e60: 50 4f 43 48 29 2c 20 30 2c 20 31 30 29 29 3b 0a  POCH), 0, 10));.
0e70: 23 65 6c 73 65 0a 20 20 20 20 20 20 63 6f 6e 73  #else.      cons
0e80: 74 20 63 68 61 72 20 2a 7a 45 70 6f 63 68 20 3d  t char *zEpoch =
0e90: 20 67 65 74 65 6e 76 28 22 53 4f 55 52 43 45 5f   getenv("SOURCE_
0ea0: 44 41 54 45 5f 45 50 4f 43 48 22 29 3b 0a 20 20  DATE_EPOCH");.  
0eb0: 20 20 20 20 69 66 28 20 7a 45 70 6f 63 68 20 26      if( zEpoch &
0ec0: 26 20 69 73 64 69 67 69 74 28 7a 45 70 6f 63 68  & isdigit(zEpoch
0ed0: 5b 30 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20  [0]) ){.        
0ee0: 73 70 72 69 6e 74 66 28 62 2b 6e 2c 20 22 25 64  sprintf(b+n, "%d
0ef0: 22 2c 20 28 69 6e 74 29 73 74 72 74 6f 6c 6c 28  ", (int)strtoll(
0f00: 7a 45 70 6f 63 68 2c 20 30 2c 20 31 30 29 29 3b  zEpoch, 0, 10));
0f10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
0f20: 20 20 20 20 20 20 73 70 72 69 6e 74 66 28 62 2b        sprintf(b+
0f30: 6e 2c 20 22 25 64 22 2c 20 28 69 6e 74 29 74 69  n, "%d", (int)ti
0f40: 6d 65 28 30 29 29 3b 0a 20 20 20 20 20 20 7d 0a  me(0));.      }.
0f50: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 68 61 73  #endif.      has
0f60: 68 28 62 2c 33 33 2c 76 78 29 3b 0a 20 20 20 20  h(b,33,vx);.    
0f70: 20 20 70 72 69 6e 74 66 28 22 23 64 65 66 69 6e    printf("#defin
0f80: 65 20 46 4f 53 53 49 4c 5f 42 55 49 4c 44 5f 48  e FOSSIL_BUILD_H
0f90: 41 53 48 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 76  ASH \"%s\"\n", v
0fa0: 78 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 20  x);.    }.    m 
0fb0: 3d 20 6f 70 65 6e 5f 66 6f 72 5f 72 65 61 64 69  = open_for_readi
0fc0: 6e 67 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20  ng(argv[2]);.   
0fd0: 20 77 68 69 6c 65 28 62 20 3d 3d 20 20 66 67 65   while(b ==  fge
0fe0: 74 73 28 62 2c 20 73 69 7a 65 6f 66 28 62 29 2d  ts(b, sizeof(b)-
0ff0: 31 2c 6d 29 29 7b 0a 20 20 20 20 20 20 69 66 28  1,m)){.      if(
1000: 30 20 3d 3d 20 73 74 72 6e 63 6d 70 28 22 44 20  0 == strncmp("D 
1010: 22 2c 62 2c 32 29 29 7b 0a 20 20 20 20 20 20 20  ",b,2)){.       
1020: 20 69 6e 74 20 6b 2c 20 6e 3b 0a 20 20 20 20 20   int k, n;.     
1030: 20 20 20 63 68 61 72 20 7a 44 61 74 65 4e 75 6d     char zDateNum
1040: 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20 70 72  [30];.        pr
1050: 69 6e 74 66 28 22 23 64 65 66 69 6e 65 20 4d 41  intf("#define MA
1060: 4e 49 46 45 53 54 5f 44 41 54 45 20 5c 22 25 2e  NIFEST_DATE \"%.
1070: 31 30 73 20 25 2e 38 73 5c 22 5c 6e 22 2c 62 2b  10s %.8s\"\n",b+
1080: 32 2c 62 2b 31 33 29 3b 0a 20 20 20 20 20 20 20  2,b+13);.       
1090: 20 70 72 69 6e 74 66 28 22 23 64 65 66 69 6e 65   printf("#define
10a0: 20 4d 41 4e 49 46 45 53 54 5f 59 45 41 52 20 5c   MANIFEST_YEAR \
10b0: 22 25 2e 34 73 5c 22 5c 6e 22 2c 62 2b 32 29 3b  "%.4s\"\n",b+2);
10c0: 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 30 3b 0a  .        n = 0;.
10d0: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 30 3b          for(k=0;
10e0: 20 6b 3c 31 30 3b 20 6b 2b 2b 29 7b 0a 20 20 20   k<10; k++){.   
10f0: 20 20 20 20 20 20 20 69 66 28 20 69 73 64 69 67         if( isdig
1100: 69 74 28 62 5b 6b 2b 32 5d 29 20 29 20 7a 44 61  it(b[k+2]) ) zDa
1110: 74 65 4e 75 6d 5b 6e 2b 2b 5d 20 3d 20 62 5b 6b  teNum[n++] = b[k
1120: 2b 32 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  +2];.        }. 
1130: 20 20 20 20 20 20 20 7a 44 61 74 65 4e 75 6d 5b         zDateNum[
1140: 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  n] = 0;.        
1150: 70 72 69 6e 74 66 28 22 23 64 65 66 69 6e 65 20  printf("#define 
1160: 4d 41 4e 49 46 45 53 54 5f 4e 55 4d 45 52 49 43  MANIFEST_NUMERIC
1170: 5f 44 41 54 45 20 25 73 5c 6e 22 2c 20 7a 44 61  _DATE %s\n", zDa
1180: 74 65 4e 75 6d 29 3b 0a 20 20 20 20 20 20 20 20  teNum);.        
1190: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 66  n = 0;.        f
11a0: 6f 72 28 6b 3d 30 3b 20 6b 3c 38 3b 20 6b 2b 2b  or(k=0; k<8; k++
11b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
11c0: 20 69 73 64 69 67 69 74 28 62 5b 6b 2b 31 33 5d   isdigit(b[k+13]
11d0: 29 20 29 20 7a 44 61 74 65 4e 75 6d 5b 6e 2b 2b  ) ) zDateNum[n++
11e0: 5d 20 3d 20 62 5b 6b 2b 31 33 5d 3b 0a 20 20 20  ] = b[k+13];.   
11f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a       }.        z
1200: 44 61 74 65 4e 75 6d 5b 6e 5d 20 3d 20 30 3b 0a  DateNum[n] = 0;.
1210: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 30 3b          for(k=0;
1220: 20 7a 44 61 74 65 4e 75 6d 5b 6b 5d 3d 3d 27 30   zDateNum[k]=='0
1230: 27 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  '; k++){}.      
1240: 20 20 70 72 69 6e 74 66 28 22 23 64 65 66 69 6e    printf("#defin
1250: 65 20 4d 41 4e 49 46 45 53 54 5f 4e 55 4d 45 52  e MANIFEST_NUMER
1260: 49 43 5f 54 49 4d 45 20 25 73 5c 6e 22 2c 20 7a  IC_TIME %s\n", z
1270: 44 61 74 65 4e 75 6d 2b 6b 29 3b 0a 20 20 20 20  DateNum+k);.    
1280: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 63    }.    }.    fc
1290: 6c 6f 73 65 28 6d 29 3b 0a 20 20 20 20 76 20 3d  lose(m);.    v =
12a0: 20 6f 70 65 6e 5f 66 6f 72 5f 72 65 61 64 69 6e   open_for_readin
12b0: 67 28 61 72 67 76 5b 33 5d 29 3b 0a 20 20 20 20  g(argv[3]);.    
12c0: 69 66 28 20 66 67 65 74 73 28 62 2c 20 73 69 7a  if( fgets(b, siz
12d0: 65 6f 66 28 62 29 2d 31 2c 76 29 3d 3d 30 20 29  eof(b)-1,v)==0 )
12e0: 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28  {.      fprintf(
12f0: 73 74 64 65 72 72 2c 20 22 6d 61 6c 66 6f 72 6d  stderr, "malform
1300: 65 64 20 56 45 52 53 49 4f 4e 20 66 69 6c 65 3a  ed VERSION file:
1310: 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 33 5d 29   %s\n", argv[3])
1320: 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
1330: 0a 20 20 20 20 7d 0a 20 20 20 20 66 63 6c 6f 73  .    }.    fclos
1340: 65 28 76 29 3b 0a 20 20 20 20 66 6f 72 28 7a 3d  e(v);.    for(z=
1350: 62 3b 20 7a 5b 30 5d 20 26 26 20 7a 5b 30 5d 21  b; z[0] && z[0]!
1360: 3d 27 5c 72 27 20 26 26 20 7a 5b 30 5d 21 3d 27  ='\r' && z[0]!='
1370: 5c 6e 27 3b 20 7a 2b 2b 29 7b 7d 0a 20 20 20 20  \n'; z++){}.    
1380: 2a 7a 20 3d 20 30 3b 0a 20 20 20 20 70 72 69 6e  *z = 0;.    prin
1390: 74 66 28 22 23 64 65 66 69 6e 65 20 52 45 4c 45  tf("#define RELE
13a0: 41 53 45 5f 56 45 52 53 49 4f 4e 20 5c 22 25 73  ASE_VERSION \"%s
13b0: 5c 22 5c 6e 22 2c 20 62 29 3b 0a 20 20 20 20 7a  \"\n", b);.    z
13c0: 3d 62 3b 0a 20 20 20 20 76 6e 5b 30 5d 20 3d 20  =b;.    vn[0] = 
13d0: 76 6e 5b 31 5d 20 3d 20 76 6e 5b 32 5d 20 3d 20  vn[1] = vn[2] = 
13e0: 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 31 29 7b  0;.    while(1){
13f0: 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3e  .      if( z[0]>
1400: 3d 27 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 39  ='0' && z[0]<='9
1410: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 78 20 3d  ' ){.        x =
1420: 20 78 2a 31 30 20 2b 20 7a 5b 30 5d 20 2d 20 27   x*10 + z[0] - '
1430: 30 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  0';.      }else{
1440: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6a 3c 33  .        if( j<3
1450: 20 29 20 76 6e 5b 6a 2b 2b 5d 20 3d 20 78 3b 0a   ) vn[j++] = x;.
1460: 20 20 20 20 20 20 20 20 78 20 3d 20 30 3b 0a 20          x = 0;. 
1470: 20 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d         if( z[0]=
1480: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
1490: 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20    }.      z++;. 
14a0: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 7a 3d 76     }.    for(z=v
14b0: 78 3b 20 7a 5b 30 5d 3d 3d 27 30 27 3b 20 7a 2b  x; z[0]=='0'; z+
14c0: 2b 29 7b 7d 0a 20 20 20 20 70 72 69 6e 74 66 28  +){}.    printf(
14d0: 22 23 64 65 66 69 6e 65 20 52 45 4c 45 41 53 45  "#define RELEASE
14e0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
14f0: 25 64 25 30 32 64 25 30 32 64 5c 6e 22 2c 20 76  %d%02d%02d\n", v
1500: 6e 5b 30 5d 2c 20 76 6e 5b 31 5d 2c 20 76 6e 5b  n[0], vn[1], vn[
1510: 32 5d 29 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28  2]);.    memset(
1520: 76 78 2c 30 2c 73 69 7a 65 6f 66 28 76 78 29 29  vx,0,sizeof(vx))
1530: 3b 0a 20 20 20 20 73 74 72 63 70 79 28 76 78 2c  ;.    strcpy(vx,
1540: 62 29 3b 0a 20 20 20 20 66 6f 72 28 7a 3d 76 78  b);.    for(z=vx
1550: 3b 20 7a 5b 30 5d 3b 20 7a 2b 2b 29 7b 0a 20 20  ; z[0]; z++){.  
1560: 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d      if( z[0]=='-
1570: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 5b 30  ' ){.        z[0
1580: 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62  ] = 0;.        b
1590: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
15a0: 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d 27 2e      if( z[0]!='.
15b0: 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  ' ) continue;.  
15c0: 20 20 20 20 69 66 20 28 20 64 3c 33 20 29 7b 0a      if ( d<3 ){.
15d0: 20 20 20 20 20 20 20 20 7a 5b 30 5d 20 3d 20 27          z[0] = '
15e0: 2c 27 3b 0a 20 20 20 20 20 20 20 20 64 2b 2b 3b  ,';.        d++;
15f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1600: 20 20 20 20 20 20 7a 5b 30 5d 20 3d 20 27 5c 30        z[0] = '\0
1610: 27 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ';.        break
1620: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1630: 20 20 20 20 70 72 69 6e 74 66 28 22 23 64 65 66      printf("#def
1640: 69 6e 65 20 52 45 4c 45 41 53 45 5f 52 45 53 4f  ine RELEASE_RESO
1650: 55 52 43 45 5f 56 45 52 53 49 4f 4e 20 25 73 22  URCE_VERSION %s"
1660: 2c 20 76 78 29 3b 0a 20 20 20 20 77 68 69 6c 65  , vx);.    while
1670: 28 20 64 3c 33 20 29 7b 20 70 72 69 6e 74 66 28  ( d<3 ){ printf(
1680: 22 2c 30 22 29 3b 20 64 2b 2b 3b 20 7d 0a 20 20  ",0"); d++; }.  
1690: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
16a0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 44 4d  #if defined(__DM
16b0: 43 5f 5f 29 20 20 20 20 20 20 20 20 20 20 20 20  C__)            
16c0: 2f 2a 20 65 2e 67 2e 20 30 78 38 35 37 20 2a 2f  /* e.g. 0x857 */
16d0: 0a 20 20 20 20 64 20 3d 20 28 5f 5f 44 4d 43 5f  .    d = (__DMC_
16e0: 5f 20 26 20 30 78 46 30 30 29 20 3e 3e 20 38 3b  _ & 0xF00) >> 8;
16f0: 20 2f 2a 20 6d 61 6a 6f 72 20 2a 2f 0a 20 20 20   /* major */.   
1700: 20 78 20 3d 20 28 5f 5f 44 4d 43 5f 5f 20 26 20   x = (__DMC__ & 
1710: 30 78 30 46 30 29 20 3e 3e 20 34 3b 20 2f 2a 20  0x0F0) >> 4; /* 
1720: 6d 69 6e 6f 72 20 2a 2f 0a 20 20 20 20 69 20 3d  minor */.    i =
1730: 20 28 5f 5f 44 4d 43 5f 5f 20 26 20 30 78 30 30   (__DMC__ & 0x00
1740: 46 29 3b 20 20 20 20 20 20 2f 2a 20 72 65 76 69  F);      /* revi
1750: 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 70 72 69 6e  sion */.    prin
1760: 74 66 28 22 23 64 65 66 69 6e 65 20 43 4f 4d 50  tf("#define COMP
1770: 49 4c 45 52 5f 56 45 52 53 49 4f 4e 20 5c 22 25  ILER_VERSION \"%
1780: 64 2e 25 64 2e 25 64 5c 22 5c 6e 22 2c 20 64 2c  d.%d.%d\"\n", d,
1790: 20 78 2c 20 69 29 3b 0a 23 65 6c 69 66 20 64 65   x, i);.#elif de
17a0: 66 69 6e 65 64 28 5f 5f 50 4f 43 43 5f 5f 29 20  fined(__POCC__) 
17b0: 20 20 2f 2a 20 65 2e 67 2e 20 37 30 30 20 2a 2f    /* e.g. 700 */
17c0: 0a 20 20 20 20 64 20 3d 20 28 5f 5f 50 4f 43 43  .    d = (__POCC
17d0: 5f 5f 20 2f 20 31 30 30 29 3b 20 2f 2a 20 6d 61  __ / 100); /* ma
17e0: 6a 6f 72 20 2a 2f 0a 20 20 20 20 78 20 3d 20 28  jor */.    x = (
17f0: 5f 5f 50 4f 43 43 5f 5f 20 25 20 31 30 30 29 3b  __POCC__ % 100);
1800: 20 2f 2a 20 6d 69 6e 6f 72 20 2a 2f 0a 20 20 20   /* minor */.   
1810: 20 70 72 69 6e 74 66 28 22 23 64 65 66 69 6e 65   printf("#define
1820: 20 43 4f 4d 50 49 4c 45 52 5f 56 45 52 53 49 4f   COMPILER_VERSIO
1830: 4e 20 5c 22 25 64 2e 25 30 32 64 5c 22 5c 6e 22  N \"%d.%02d\"\n"
1840: 2c 20 64 2c 20 78 29 3b 0a 23 65 6c 69 66 20 64  , d, x);.#elif d
1850: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
1860: 20 20 20 2f 2a 20 65 2e 67 2e 20 31 38 30 30 20     /* e.g. 1800 
1870: 2a 2f 0a 20 20 20 20 64 20 3d 20 28 5f 4d 53 43  */.    d = (_MSC
1880: 5f 56 45 52 20 2f 20 31 30 30 29 3b 20 2f 2a 20  _VER / 100); /* 
1890: 6d 61 6a 6f 72 20 2a 2f 0a 20 20 20 20 78 20 3d  major */.    x =
18a0: 20 28 5f 4d 53 43 5f 56 45 52 20 25 20 31 30 30   (_MSC_VER % 100
18b0: 29 3b 20 2f 2a 20 6d 69 6e 6f 72 20 2a 2f 0a 20  ); /* minor */. 
18c0: 20 20 20 70 72 69 6e 74 66 28 22 23 64 65 66 69     printf("#defi
18d0: 6e 65 20 43 4f 4d 50 49 4c 45 52 5f 56 45 52 53  ne COMPILER_VERS
18e0: 49 4f 4e 20 5c 22 25 64 2e 25 30 32 64 5c 22 5c  ION \"%d.%02d\"\
18f0: 6e 22 2c 20 64 2c 20 78 29 3b 0a 23 65 6e 64 69  n", d, x);.#endi
1900: 66 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  f.    return 0;.
1910: 7d 0a                                            }.