Alessandro Bonazzi e075990ed3 Patch level : 12.0 no-patch
Files correlati     :
Commento            :

Aggiunto il preprocessore c++ mcpp per sostituire il compilatore nella compilazione delle maschere.
2020-11-28 16:24:08 +01:00

179 lines
5.0 KiB
C

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