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 }.