void testInputFiles(int numFilenames, char* filename[]) { inputFilenames = (const char**)malloc((numFilenames+1)*sizeof(char*)); int i; char achar; for (i = 0; i < numFilenames; i++) { if (!isRecognizedSource(filename[i])) { USR_FATAL(astr("file '", filename[i], "' does not have a recognized suffix")); } // WE SHOULDN"T TRY TO OPEN .h files, just .c and .chpl and .o if (!isCHeader(filename[i])) { FILE* testfile = openInputFile(filename[i]); if (fscanf(testfile, "%c", &achar) != 1) { USR_FATAL(astr("source file '", filename[i], "' is either empty or a directory")); } closeInputFile(testfile); } inputFilenames[i] = astr(filename[i]); } inputFilenames[i] = NULL; if (!foundChplSource) USR_FATAL("Command line contains no .chpl source files"); }
void genIncludeCommandLineHeaders(FILE* outfile) { int filenum = 0; while (const char* inputFilename = nthFilename(filenum++)) { if (isCHeader(inputFilename)) { fprintf(outfile, "#include \"%s\"\n", inputFilename); } } }
void addSourceFiles(int numNewFilenames, const char* filename[]) { static int numInputFiles = 0; int cursor = numInputFiles; char achar; numInputFiles += numNewFilenames; inputFilenames = (const char**)realloc(inputFilenames, (numInputFiles+1)*sizeof(char*)); for (int i = 0; i < numNewFilenames; i++) { if (!isRecognizedSource(filename[i])) { USR_FATAL(astr("file '", filename[i], "' does not have a recognized suffix")); } // WE SHOULDN"T TRY TO OPEN .h files, just .c and .chpl and .o if (!isCHeader(filename[i])) { FILE* testfile = openInputFile(filename[i]); if (fscanf(testfile, "%c", &achar) != 1) { USR_FATAL(astr("source file '", filename[i], "' is either empty or a directory")); } closeInputFile(testfile); } // // Don't add the same file twice -- it's unnecessary and can mess // up things like unprotected headers // bool duplicate = false; const char* newFilename = astr(filename[i]); for (int j = 0; j < cursor; j++) { if (inputFilenames[j] == newFilename) { // legal due to astr() duplicate = true; break; } } if (duplicate) { numInputFiles--; } else { inputFilenames[cursor++] = newFilename; } } inputFilenames[cursor] = NULL; if (!foundChplSource && fUseIPE == false) USR_FATAL("Command line contains no .chpl source files"); }
static bool isRecognizedSource(const char* filename) { return (isCSource(filename) || isCHeader(filename) || isObjFile(filename) || isChplSource(filename)); }