aboutsummaryrefslogtreecommitdiffstats
path: root/build_tools/vercomp.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-08-26 19:21:57 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-08-26 19:21:57 +0000
commit47d5a354390642b1fbd3e0d8aeaeb936cbf29970 (patch)
tree612752c3bdbf4a14117ed4e9c7cfd9a4518f2496 /build_tools/vercomp.c
parentfa4f46db7d9008c335ddd0d75a606af5db35b864 (diff)
switch to 'new' expression parser, remove support for old parser
provide parser files in source tree, so flex/bison are not need to build update Makefile to use simpler techniques to build parser update README to remove references to old vs. new parsers remove version comparison tool used for flex/bison programs git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6420 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'build_tools/vercomp.c')
-rwxr-xr-xbuild_tools/vercomp.c350
1 files changed, 0 insertions, 350 deletions
diff --git a/build_tools/vercomp.c b/build_tools/vercomp.c
deleted file mode 100755
index b2ba102af..000000000
--- a/build_tools/vercomp.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Asterisk -- A telephony toolkit for Linux.
- *
- * A simple program version comparison tool.
- *
- * Copyright (C) 2005, Steven Michael Murphy (murf at e-tools dot com).
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License
- */
-
-/* vercomp.c
- args: <program> <comparison> <version>
-
- where:
-
- program = path to program (bison or flex)
- comparison = ">", "<", "<=", ">=", "=" -- depending on shell, you may have to use backslash escapes
- version = a version compare against, say 1.875, or 2.5.4, or whatever.
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-char *program_version[5];
-char *arg_version[5];
-
-void get_program_version_string(char *command, char *output)
-{
- char cbuf[8000];
- char pbuf[8000];
- char zbuf[8000];
- char *res;
- FILE *p1;
-
- zbuf[0] = 0;
-
- sprintf( cbuf, "%s --version", command );
- p1 = popen(cbuf, "r");
- if( !p1 )
- {
- fprintf(stderr,"vercomp: Could not execute the command: %s\n", command);
- exit(125);
- }
- /* the first line is the magic one */
- res = fgets(zbuf, 8000, p1);
- /* clear the trailing blank */
- if( zbuf[strlen(zbuf)-1] == '\n' )
- zbuf[strlen(zbuf)-1] = 0;
- /* the rest is cruft, just empty the input stream */
- while( res )
- {
- res = fgets(pbuf, 8000, p1);
- }
- /* close the stream. Hopefully, we have what we need */
- pclose(p1);
- /* all we want is the last "word"-- so find the last blank, and grab everything after that */
-
- res = strrchr(zbuf,' ');
- if( !res )
- {
- fprintf(stderr,"Something is wrong with the version string: %s\n", zbuf);
- exit(124);
- }
- strcpy(output,res+1);
-}
-
-
-void extract_version(char *ver_string, char **where)
-{
- int i=0;
- char *p=ver_string;
-
- while( p && *p )
- {
- where[i++] = p;
- p = strchr(p,'.');
- if( p )
- {
- *p= 0;
- p++;
- }
- }
-}
-
-void compare_versions(char *compare_func)
-{
- int i;
-
- for(i=0;i<5;i++)
- {
- /* start out at the beginning, then go to the end */
- if( program_version[i] && arg_version[i] && *program_version[i] && *arg_version[i] )
- {
-
- if( strlen(program_version[i]) == strspn(program_version[i],"0123456789")
- && strlen(arg_version[i]) == strspn(arg_version[i],"0123456789") )
- {
- /* just pure numbers -- do a numeric compare */
- int pv = atoi(program_version[i]);
- int av = atoi(arg_version[i]);
-
- if( pv < av )
- {
- if( !strcmp(compare_func,"=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("true\n");
- exit(0);
- }
- }
- else if( pv > av )
- {
- if( !strcmp(compare_func,"=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("false\n");
- exit(0);
- }
- }
- }
- else
- {
- /* other junk thrown in -- do string compare */
- int res = strcmp(program_version[i], arg_version[i]);
- if( res < 0 ) /* prog is less than arg */
- {
- if( !strcmp(compare_func,"=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("true\n");
- exit(0);
- }
- }
- else if( res > 0 ) /* prog is greater than arg */
- {
- if( !strcmp(compare_func,"=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("false\n");
- exit(0);
- }
- }
- }
- }
- else if( program_version[i] && *program_version[i] )
- {
- if( !strcmp(compare_func,"=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("false\n");
- exit(0);
- }
-
- }
- else if( arg_version[i] && *arg_version[i] )
- {
- if( !strcmp(compare_func,"=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("true\n");
- exit(0);
- }
- }
- else
- break;
- }
- if( !strcmp(compare_func,"=") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<") )
- {
- printf("false\n");
- exit(0);
- }
- else if( !strcmp(compare_func, ">=") )
- {
- printf("true\n");
- exit(0);
- }
- else if( !strcmp(compare_func, "<=") )
- {
- printf("true\n");
- exit(0);
- }
-}
-
-void usage(void)
-{
- printf("Usage: <program-path> <comparison> <version>\n\
-\n\
- where:\n\
-\n\
- program-path = path to program (bison or flex)\n\
- comparison = '>', '<', '<=', '>=', '=' -- depending on shell, you may have to use backslash escapes\n\
- version = a version compare against, say 1.875, or 2.5.4, or whatever.\n\n");
-}
-
-
-int main(int argc, char **argv)
-{
- char program_version_string[8000];
-
- /* before starting, check args and make sure all is OK */
- if( argc < 4 || argc > 4 )
- {
- usage();
- exit(-256);
- }
- if ( strcmp(argv[2],"=") && strcmp(argv[2],">") && strcmp(argv[2],"<") && strcmp(argv[2],">=") && strcmp(argv[2],"<=") )
- {
- fprintf(stderr,"vercomp: ILLEGAL input Comparison value: %s\n\n", argv[2]);
- usage();
- exit(-256);
- }
-
- /* first, extract a version from the command line arg */
- extract_version(argv[3], arg_version);
-
- /* next, extract a version from the command line */
- get_program_version_string(argv[1], program_version_string);
- extract_version(program_version_string, program_version);
-
- /* next compare and return result */
- compare_versions(argv[2]);
- /* the above func shouldn't return */
-}