1 /* "$Header$ */
2 
3 /*
4  * Copyright (c) 1995-1997 Sam Leffler
5  * Copyright (c) 1995-1997 Silicon Graphics, Inc.
6  *
7  * Permission to use, copy, modify, distribute, and sell this software and
8  * its documentation for any purpose is hereby granted without fee, provided
9  * that (i) the above copyright notices and this permission notice appear in
10  * all copies of the software and related documentation, and (ii) the names of
11  * Sam Leffler and Silicon Graphics may not be used in any advertising or
12  * publicity relating to the software without the specific, prior written
13  * permission of Sam Leffler and Silicon Graphics.
14  *
15  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18  *
19  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24  * OF THIS SOFTWARE.
25  */
26 
27 /*
28  * Generate a library version string for systems that
29  * do not have a shell (by default this is done with
30  * awk and echo from the Makefile).
31  *
32  * This was written by Peter Greenham for Acorn systems.
33  *
34  * Syntax: mkversion [-v version-file] [<outfile>]
35  */
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <string.h>
39 
40 static void
usage(void)41 usage(void)
42 {
43     fprintf(stderr,
44             "usage: mkversion [-v version-file]\n"
45             "                 [-r releasedate-file] [outfile]\n");
46     exit(-1);
47 }
48 
49 static FILE*
openFile(char * filename)50 openFile(char* filename)
51 {
52     FILE* fd = fopen(filename, "r");
53     if (fd == NULL) {
54 	fprintf(stderr, "mkversion: %s: Could not open for reading.\n",
55 	    filename);
56 	exit(-1);
57     }
58     return (fd);
59 }
60 
61 int
main(int argc,char * argv[])62 main(int argc, char* argv[])
63 {
64     char* versionFile = "../VERSION";
65     char* releaseDateFile = "../RELEASE-DATE";
66     char version[128];
67     char rawReleaseDate[128];
68     char tiffLibVersion[128];
69     FILE* fd;
70     char* cp;
71 
72     argc--, argv++;
73     while (argc > 0 && argv[0][0] == '-') {
74 	if (strcmp(argv[0], "-v") == 0) {
75 	    if (argc < 1)
76 		usage();
77 	    argc--, argv++;
78 	    versionFile = argv[0];
79 	} else if (strcmp(argv[0], "-r") == 0) {
80 	    if (argc < 1)
81 		usage();
82 	    argc--, argv++;
83 	    releaseDateFile = argv[0];
84 	} else
85 	    usage();
86 	argc--, argv++;
87     }
88 
89     /*
90      * Read the VERSION file.
91      */
92     fd = openFile(versionFile);
93     if (fgets(version, sizeof (version)-1, fd) == NULL) {
94 	fprintf(stderr, "mkversion: No version information in %s.\n",
95 	    versionFile);
96 	exit(-1);
97     }
98     cp = strchr(version, '\n');
99     if (cp)
100 	*cp = '\0';
101     fclose(fd);
102 
103     /*
104      * Read the RELEASE-DATE, and translate format to emit TIFFLIB_VERSION.
105      */
106     fd = openFile(releaseDateFile);
107     if (fgets(rawReleaseDate, sizeof (rawReleaseDate)-1, fd) == NULL) {
108 	fprintf(stderr, "mkversion: No release date information in %s.\n",
109                 releaseDateFile);
110 	exit(-1);
111     }
112     fclose(fd);
113 
114     sprintf( tiffLibVersion, "#define TIFFLIB_VERSION %4.4s%2.2s%2.2s",
115              rawReleaseDate+6,
116              rawReleaseDate+0,
117              rawReleaseDate+3 );
118 
119     /*
120      * Emit the tiffvers.h file.
121      */
122     if (argc > 0) {
123 	fd = fopen(argv[0], "w");
124 	if (fd == NULL) {
125 	    fprintf(stderr, "mkversion: %s: Could not open for writing.\n",
126 		argv[0]);
127 	    exit(-1);
128 	}
129     } else
130 	fd = stdout;
131     fprintf(fd, "#define TIFFLIB_VERSION_STR \"LIBTIFF, Version %s\\n", version);
132     fprintf(fd, "Copyright (c) 1988-1996 Sam Leffler\\n");
133     fprintf(fd, "Copyright (c) 1991-1996 Silicon Graphics, Inc.\"\n");
134 
135     fprintf( fd,
136              "/*\n"
137              " * This define can be used in code that requires\n"
138              " * compilation-related definitions specific to a\n"
139              " * version or versions of the library.  Runtime\n"
140              " * version checking should be done based on the\n"
141              " * string returned by TIFFGetVersion.\n"
142              " */\n" );
143     fprintf(fd, "%s\n", tiffLibVersion );
144 
145     if (fd != stdout)
146 	fclose(fd);
147     return (0);
148 }
149