Blame tool/cpp_test.c

Packit b40e2e
/*
Packit b40e2e
 * cpp_test.c:  to compile and run n_*.c, i_*.c;
Packit b40e2e
 *              make a summary of the results.
Packit b40e2e
 *      1998/08 by kmatsui
Packit b40e2e
 *              Made after runtest.c and summtest.c of
Packit b40e2e
 *              "Plum-Hall Validation Sampler".
Packit b40e2e
 *      2005/03 by kmatsui
Packit b40e2e
 *              Changed 'PGNUM'.
Packit b40e2e
 *      2006/07 by kmatsui
Packit b40e2e
 *              Changed 'PGNUM'.
Packit b40e2e
 *              Changed non-prototype declarations to prototype ones.
Packit b40e2e
 *              Removed DOS-extender option.
Packit b40e2e
 */
Packit b40e2e
Packit b40e2e
#include    "stdio.h"
Packit b40e2e
#include    "stdlib.h"
Packit b40e2e
#include    "string.h"
Packit b40e2e
#include    "ctype.h"
Packit b40e2e
#include    "errno.h"
Packit b40e2e
Packit b40e2e
#define NAMEMAX     8
Packit b40e2e
#define PGMNUM      35
Packit b40e2e
Packit b40e2e
#if     __MSDOS__ || __WIN32__ || _WIN32
Packit b40e2e
#define PATH_DELIM  '\\'
Packit b40e2e
#else
Packit b40e2e
#define PATH_DELIM  '/'
Packit b40e2e
#endif
Packit b40e2e
Packit b40e2e
#if 0
Packit b40e2e
extern int  sleep( unsigned int seconds);
Packit b40e2e
#endif
Packit b40e2e
Packit b40e2e
void    test_cpp( int argc, char **argv);
Packit b40e2e
void    sum_test( void);
Packit b40e2e
void    usage( void);
Packit b40e2e
Packit b40e2e
char    comp_fmt[ BUFSIZ/2] = "cc -o%s %s.c";
Packit b40e2e
char    cmp_name[ NAMEMAX+1];
Packit b40e2e
char    out_file[ NAMEMAX+5];
Packit b40e2e
char    err_file[ NAMEMAX+5];
Packit b40e2e
char    sum_file[ NAMEMAX+5];
Packit b40e2e
char    err_name[ PGMNUM][ NAMEMAX+5];
Packit b40e2e
char    buf[ BUFSIZ];
Packit b40e2e
Packit b40e2e
int main( int argc, char **argv) {
Packit b40e2e
    char    *cp;
Packit b40e2e
    int     i;
Packit b40e2e
Packit b40e2e
    if (argc < 2)
Packit b40e2e
        usage();
Packit b40e2e
    if (! isalpha( argv[ 1][ 0])
Packit b40e2e
            || strchr( argv[ 1], '.') != NULL
Packit b40e2e
            || strlen( argv[ 1]) > NAMEMAX) {
Packit b40e2e
        usage();
Packit b40e2e
    }
Packit b40e2e
    strcpy( cmp_name, argv[ 1]);
Packit b40e2e
    sprintf( sum_file, "%s.sum", cmp_name);
Packit b40e2e
    sprintf( out_file, "%s.out", cmp_name);
Packit b40e2e
    sprintf( err_file, "%s.err", cmp_name);
Packit b40e2e
    for (cp = cmp_name; (i = *cp) != 0; cp++) {
Packit b40e2e
        if (i == '-' || i == '_' || i == '~')
Packit b40e2e
            *cp = '|';      /* Convert horizontal line to vertical line */
Packit b40e2e
    }
Packit b40e2e
    if (argc > 2)
Packit b40e2e
        strcpy( comp_fmt, argv[ 2]);
Packit b40e2e
    if (freopen( out_file, "w", stdout) == NULL)
Packit b40e2e
        usage();
Packit b40e2e
    if (freopen( err_file, "w", stderr) == NULL)
Packit b40e2e
        usage();
Packit b40e2e
    setbuf( stdout, NULL);
Packit b40e2e
    setbuf( stderr, NULL);
Packit b40e2e
Packit b40e2e
    test_cpp( argc, argv);
Packit b40e2e
    sum_test();
Packit b40e2e
Packit b40e2e
    return  0;
Packit b40e2e
}
Packit b40e2e
Packit b40e2e
void    test_cpp( int argc, char ** argv) {
Packit b40e2e
    int     i, len;
Packit b40e2e
    int     pgm_num;
Packit b40e2e
Packit b40e2e
    for (pgm_num = 0; pgm_num < PGMNUM && ! feof( stdin); pgm_num++) {
Packit b40e2e
        /* for each input program   */
Packit b40e2e
        char    pgm_name[ NAMEMAX+2];
Packit b40e2e
Packit b40e2e
        fgets( pgm_name, NAMEMAX+1, stdin);
Packit b40e2e
        if ((len = strlen( pgm_name)) < 2 || *(pgm_name + len - 1) != '\n')
Packit b40e2e
            continue;           /* skip erroneous line      */
Packit b40e2e
        else
Packit b40e2e
            *(pgm_name + len - 1) = '\0';   /* remove '\n'  */
Packit b40e2e
Packit b40e2e
        sprintf( buf, comp_fmt, pgm_name, pgm_name);
Packit b40e2e
        system( buf);
Packit b40e2e
        printf( "COMPILE:    %s\n", buf);
Packit b40e2e
#if 0
Packit b40e2e
        sleep( 1);                      /* Wait a moment    */
Packit b40e2e
#endif
Packit b40e2e
        sprintf( err_name[ pgm_num], "%s.err", pgm_name);
Packit b40e2e
        freopen( err_name[ pgm_num], "w", stderr);
Packit b40e2e
        sprintf( buf, ".%c%s", PATH_DELIM, pgm_name);
Packit b40e2e
        system( buf);
Packit b40e2e
        printf( "EXECUTE:    %s\n", buf);
Packit b40e2e
#if 0
Packit b40e2e
        sleep( 1);                      /* Wait a moment    */
Packit b40e2e
#endif
Packit b40e2e
        freopen( err_file, "a", stderr);
Packit b40e2e
        for (i = 3; i < argc; ++i) {
Packit b40e2e
            sprintf( buf, argv[i], pgm_name, pgm_name);
Packit b40e2e
            system( buf);
Packit b40e2e
            printf( "CLEANUP:    %s\n", buf);
Packit b40e2e
        }
Packit b40e2e
    }   /* end loop over each program   */
Packit b40e2e
}
Packit b40e2e
Packit b40e2e
void    sum_test( void)
Packit b40e2e
{
Packit b40e2e
    FILE    *sumfp, *errfp;
Packit b40e2e
    char    *cp;
Packit b40e2e
    int     i, len;
Packit b40e2e
    int     nerror = 0;
Packit b40e2e
    int     pgm_num;
Packit b40e2e
Packit b40e2e
    /* Make a column of summary */
Packit b40e2e
    if ((sumfp = fopen( sum_file, "w")) == NULL) {
Packit b40e2e
        fprintf( stderr, "Can't open %s\n", sum_file);
Packit b40e2e
        exit( errno);
Packit b40e2e
    }
Packit b40e2e
    len = strlen( cmp_name);
Packit b40e2e
    for (i = 0; i < len; i++)
Packit b40e2e
        fprintf( sumfp, "  %c\n", cmp_name[i]);
Packit b40e2e
    for (i = len; i <= NAMEMAX; i++)
Packit b40e2e
        fputs( "   \n", sumfp);
Packit b40e2e
Packit b40e2e
    for (pgm_num = 0; pgm_num < PGMNUM; pgm_num++) {
Packit b40e2e
        if ((errfp = fopen( err_name[ pgm_num], "r")) == NULL) {
Packit b40e2e
            fputs( "  -\n", sumfp);
Packit b40e2e
            nerror++;
Packit b40e2e
        } else {
Packit b40e2e
            cp = fgets( buf, BUFSIZ, errfp);
Packit b40e2e
            if (cp == NULL || strcmp( buf, "started\n") != 0) {
Packit b40e2e
                fputs( "  -\n", sumfp);
Packit b40e2e
                nerror++;
Packit b40e2e
            } else {
Packit b40e2e
                fgets( buf, BUFSIZ, errfp);
Packit b40e2e
                if (strcmp( "success\n", buf) != 0) {
Packit b40e2e
                    fputs( "  o\n", sumfp);
Packit b40e2e
                    nerror++;
Packit b40e2e
                } else {
Packit b40e2e
                    fputs( "  *\n", sumfp);
Packit b40e2e
                }
Packit b40e2e
            }
Packit b40e2e
            fclose( errfp);
Packit b40e2e
        }
Packit b40e2e
    }
Packit b40e2e
Packit b40e2e
    fprintf( sumfp, "\n%3d\n", nerror);
Packit b40e2e
}
Packit b40e2e
Packit b40e2e
void    usage( void)
Packit b40e2e
{
Packit b40e2e
    fputs( "Usage:\n"
Packit b40e2e
    "  cpp_test compiler-name \"compile command\" \"cleaning command\"s\n"
Packit b40e2e
    "  Compiler-name must be 8 bytes or less and must be without dot.\n"
Packit b40e2e
    "  Number of \"cleaning command\"s can be any.\n"
Packit b40e2e
    "  Do this command in mcpp's test-c directory.\n"
Packit b40e2e
    "Examples:\n"
Packit b40e2e
	"    cpp_test GCC332 \"gcc -std=iso9899:199409 -o%s %s.c\""
Packit b40e2e
    " \"rm %s\" < n_i_.lst\n"
Packit b40e2e
    "    cpp_test VC2005 \"cl -Za -D_CRT_SECURE_NO_DEPRECATE -Fe%s.exe %s.c\""
Packit b40e2e
    " \"del %s.exe\" < n_i_.lst\n"
Packit b40e2e
    "    cpp_test MCPP26 \"gcc -Wp,-23 -std=iso9899:199409 -o%s %s.c\""
Packit b40e2e
    " \"rm %s\" < n_i_.lst\n"
Packit b40e2e
            , stderr);
Packit b40e2e
    exit( 0);
Packit b40e2e
}
Packit b40e2e