From e4c73c5b8de4a71f0e82076318a0163936655a8c Mon Sep 17 00:00:00 2001 From: kpfleming Date: Mon, 20 Jun 2005 17:26:08 +0000 Subject: move tools used during build into build_tools subdirectory clean up Makefile headers git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5942 f38db490-d61c-443f-a65b-d21fe96a405b --- build_tools/.cvsignore | 1 + build_tools/make_build_h | 20 +++ build_tools/make_defaults_h | 25 ++++ build_tools/make_version_h | 10 ++ build_tools/mkdep | 123 ++++++++++++++++ build_tools/vercomp.c | 349 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 528 insertions(+) create mode 100755 build_tools/.cvsignore create mode 100755 build_tools/make_build_h create mode 100755 build_tools/make_defaults_h create mode 100755 build_tools/make_version_h create mode 100755 build_tools/mkdep create mode 100755 build_tools/vercomp.c (limited to 'build_tools') diff --git a/build_tools/.cvsignore b/build_tools/.cvsignore new file mode 100755 index 000000000..1f389ab1d --- /dev/null +++ b/build_tools/.cvsignore @@ -0,0 +1 @@ +vercomp diff --git a/build_tools/make_build_h b/build_tools/make_build_h new file mode 100755 index 000000000..fda1cea38 --- /dev/null +++ b/build_tools/make_build_h @@ -0,0 +1,20 @@ +#!/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 diff --git a/build_tools/make_defaults_h b/build_tools/make_defaults_h new file mode 100755 index 000000000..7b9411111 --- /dev/null +++ b/build_tools/make_defaults_h @@ -0,0 +1,25 @@ +#!/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 diff --git a/build_tools/make_version_h b/build_tools/make_version_h new file mode 100755 index 000000000..f0e81f70a --- /dev/null +++ b/build_tools/make_version_h @@ -0,0 +1,10 @@ +#!/bin/sh +cat << END +/* + * version.h + * Automatically generated + */ +#define ASTERISK_VERSION "${ASTERISKVERSION}" +#define ASTERISK_VERSION_NUM ${ASTERISKVERSIONNUM} + +END diff --git a/build_tools/mkdep b/build_tools/mkdep new file mode 100755 index 000000000..84f969b1d --- /dev/null +++ b/build_tools/mkdep @@ -0,0 +1,123 @@ +#!/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 diff --git a/build_tools/vercomp.c b/build_tools/vercomp.c new file mode 100755 index 000000000..acc32f181 --- /dev/null +++ b/build_tools/vercomp.c @@ -0,0 +1,349 @@ +/* + * 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: + + 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 +#include + +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: \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 */ +} -- cgit v1.2.3