Blame src/cc1.c

Packit Service 8bf002
/*
Packit Service 8bf002
 * cc1.c:   dummy cc1 and cc1plus to be invoked by MinGW's GCC
Packit Service 8bf002
 *      MinGW's GCC does not invoke shell-script named cc1.
Packit Service 8bf002
 */
Packit Service 8bf002
Packit Service 8bf002
#include "stdio.h"
Packit Service 8bf002
#include "string.h"
Packit Service 8bf002
#include "process.h"
Packit Service 8bf002
Packit Service 8bf002
#define ARG_LIM 64
Packit Service 8bf002
Packit Service 8bf002
int exec_program( int argc, char ** argv);
Packit Service 8bf002
Packit Service 8bf002
int main( int argc, char ** argv) {
Packit Service 8bf002
    int     status;
Packit Service 8bf002
Packit Service 8bf002
    if (argc - 1 >= ARG_LIM) {
Packit Service 8bf002
        fprintf( stderr, "Too many arguments.\n");
Packit Service 8bf002
        return  1;
Packit Service 8bf002
    }
Packit Service 8bf002
    status = exec_program( argc, argv);
Packit Service 8bf002
                    /* MinGW does not have fork() nor wait().   */
Packit Service 8bf002
    return  status;
Packit Service 8bf002
}
Packit Service 8bf002
Packit Service 8bf002
int exec_program( int argc, char ** argv) {
Packit Service 8bf002
    char *  buf[ ARG_LIM];
Packit Service 8bf002
    char    temp[ FILENAME_MAX];
Packit Service 8bf002
    char *  tp;
Packit Service 8bf002
    int     plus = 0;
Packit Service 8bf002
    int     n = 1;
Packit Service 8bf002
    int     i;
Packit Service 8bf002
    int     status;
Packit Service 8bf002
    size_t  len;
Packit Service 8bf002
Packit Service 8bf002
    if (strstr( argv[ 0], "cc1plus"))
Packit Service 8bf002
        plus = 1;                   /* C++  */
Packit Service 8bf002
    tp = strstr( argv[ 0], "cc1");
Packit Service 8bf002
    len = tp - argv[ 0];
Packit Service 8bf002
    memcpy( temp, argv[ 0], len);
Packit Service 8bf002
    temp[ len] = '\0';
Packit Service 8bf002
    tp = temp + len;
Packit Service 8bf002
    for (i = 1; i < argc; i++)
Packit Service 8bf002
        if ((strcmp( argv[ i], "-fpreprocessed") == 0)
Packit Service 8bf002
                || (strncmp( argv[ i], "-traditional", 12) == 0))
Packit Service 8bf002
            break;                  /* Invoke cc1 or cc1plus    */
Packit Service 8bf002
    if (i < argc) {
Packit Service 8bf002
        strcpy( tp, plus ? "cc1plus_gnuc.exe" : "cc1_gnuc.exe");
Packit Service 8bf002
    } else {                        /* Invoke mcpp              */
Packit Service 8bf002
        strcpy( tp, "mcpp.exe");
Packit Service 8bf002
        if (plus)
Packit Service 8bf002
            buf[ n++] = "-+";       /* Insert the option        */
Packit Service 8bf002
    }
Packit Service 8bf002
    buf[ 0] = temp;
Packit Service 8bf002
    for (i = 1; i < argc; i++, n++)
Packit Service 8bf002
        buf[ n] = argv[ i];
Packit Service 8bf002
    buf[ n] = NULL;
Packit Service 8bf002
Packit Service 8bf002
    status = spawnv( _P_WAIT, buf[ 0], buf);
Packit Service 8bf002
    return  status;
Packit Service 8bf002
}