Blame tool/cpp_test.c

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