Update of /usr/cvsroot/asterisk/build_tools
In directory mongoose.digium.com:/tmp/cvs-serv32287/build_tools

Added Files:
        .cvsignore make_build_h make_defaults_h make_version_h mkdep 
        vercomp.c 
Log Message:
move tools used during build into build_tools subdirectory
clean up Makefile headers


--- NEW FILE: .cvsignore ---
vercomp

--- NEW FILE: make_build_h ---
#!/bin/sh
HOSTNAME=`uname -n`
KERNEL=`uname -r`
MACHINE=`uname -m`
OS=`uname -s`
USER=`whoami`
DATE=`date --utc "+%Y-%m-%d %H:%M:%S"`
cat << END
/*
 * build.h 
 * Automatically generated
 */
#define BUILD_HOSTNAME "${HOSTNAME}"
#define BUILD_KERNEL "${KERNEL}"
#define BUILD_MACHINE "${MACHINE}"
#define BUILD_OS "${OS}"
#define BUILD_DATE "${DATE}"
#define BUILD_USER "${USER}"

END

--- NEW FILE: make_defaults_h ---
#!/bin/sh
cat << END
/*
 * defaults.h 
 * Automatically generated
 */
#define AST_CONFIG_DIR "${INSTALL_PATH}${ASTETCDIR}"
#define AST_RUN_DIR    "${INSTALL_PATH}${ASTVARRUNDIR}"
#define AST_SOCKET     "${INSTALL_PATH}${ASTVARRUNDIR}/asterisk.ctl"
#define AST_PID        "${INSTALL_PATH}${ASTVARRUNDIR}/asterisk.pid"
#define AST_MODULE_DIR "${INSTALL_PATH}${MODULES_DIR}"
#define AST_SPOOL_DIR  "${INSTALL_PATH}${ASTSPOOLDIR}"
#define AST_VAR_DIR    "${INSTALL_PATH}${ASTVARLIBDIR}"
#define AST_LOG_DIR    "${INSTALL_PATH}${ASTLOGDIR}"
#define AST_AGI_DIR    "${INSTALL_PATH}${AGI_DIR}"
#define AST_KEY_DIR    "${INSTALL_PATH}${ASTVARLIBDIR}/keys"
#define AST_DB         "${INSTALL_PATH}${ASTVARLIBDIR}/astdb"
#define AST_TMP_DIR    "${INSTALL_PATH}${ASTSPOOLDIR}/tmp"

#define AST_CONFIG_FILE "${INSTALL_PATH}${ASTCONFPATH}"

#define AST_SOUNDS     "${INSTALL_PATH}${ASTVARLIBDIR}/sounds"
#define AST_IMAGES     "${INSTALL_PATH}${ASTVARLIBDIR}/images"

END

--- NEW FILE: make_version_h ---
#!/bin/sh
cat << END
/*
 * version.h 
 * Automatically generated
 */
#define ASTERISK_VERSION "${ASTERISKVERSION}"
#define ASTERISK_VERSION_NUM ${ASTERISKVERSIONNUM}

END

--- NEW FILE: mkdep ---
#!/bin/sh -
#
#       $OpenBSD: mkdep.gcc.sh,v 1.8 1998/09/02 06:40:07 deraadt Exp $
#       $NetBSD: mkdep.gcc.sh,v 1.9 1994/12/23 07:34:59 jtc Exp $
#
# Copyright (c) 1991, 1993
#       The Regents of the University of California.  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#       This product includes software developed by the University of
#       California, Berkeley and its contributors.
# 4. Neither the name of the University nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#       @(#)mkdep.gcc.sh        8.1 (Berkeley) 6/6/93
#

D=.depend                       # default dependency file is .depend
append=0
pflag=
dflag=

while :
        do case "$1" in
                # -a appends to the depend file
                -a)
                        append=1
                        shift ;;

                # -f allows you to select a makefile name
                -f)
                        D=$2
                        shift; shift ;;

                # the -p flag produces "program: program.c" style dependencies
                # so .o's don't get produced
                -p)
                        pflag=p
                        shift ;;

                # the -d flag produces double-colon rules instead of 
single-colon rules
                -d)
                        dflag=d
                        shift ;;

                *)
                        break ;;
        esac
done

if [ $# = 0 ] ; then
        echo 'usage: mkdep [-p] [-d] [-f depend_file] [cc_flags] file ...'
        exit 1
fi

DTMP=/tmp/mkdep$$
TMP=$DTMP/mkdep

um=`umask`
umask 022
mkdir $DTMP
if [ $? != 0 ] ; then
        echo failed to create tmp dir $DTMP
        exit 1
fi

umask $um
trap 'rm -rf $DTMP ; trap 2 ; kill -2 $$' 1 2 3 13 15

if [ x$pflag = xp ]; then
        ${CC:-cc} -M "$@" 2>/dev/null | sed -e 's;\.o :; :;' -e 's; \./; ;g' > 
$TMP
elif [ x$dflag = xd ]; then
        ${CC:-cc} -M "$@" 2>/dev/null | sed -e 's;\.o:;\.o::;' -e 's; \./; ;g' 
> $TMP
else
        ${CC:-cc} -M "$@" 2>/dev/null | sed -e 's; \./; ;g' > $TMP
fi

if [ $? != 0 ]; then
        echo 'mkdep: compile failed.'
        rm -rf $DTMP
        exit 1
fi

if [ $append = 1 ]; then
        cat $TMP >> $D
        if [ $? != 0 ]; then
                echo 'mkdep: append failed.'
                rm -rf $DTMP
                exit 1
        fi
else
        mv $TMP $D
        if [ $? != 0 ]; then
                echo 'mkdep: rename failed.'
                rm -rf $DTMP
                exit 1
        fi
fi

rm -rf $DTMP
exit 0

--- NEW FILE: vercomp.c ---
/*
 * 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 <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 */
}

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to