X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=ac9385656809bc1652edb44083c02b23afe3bf5f;hb=8b40d36f8024802d5d99882bd58491130d260b38;hp=c766791178517c1e3617467478a35079ca37ee8e;hpb=d01869ffd7b94923f721a301a48918771303bced;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index c7667911..ac938565 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -91,10 +91,9 @@ int ds390_jammed = 0; char scratchFileName[PATH_MAX]; char buffer[PATH_MAX * 2]; -#define OPTION_HELP "-help" - #define LENGTH(_a) (sizeof(_a)/sizeof(*(_a))) +#define OPTION_HELP "--help" #define OPTION_STACK_8BIT "--stack-8bit" #define OPTION_OUT_FMT_IHX "--out-fmt-ihx" #define OPTION_OUT_FMT_S19 "--out-fmt-s19" @@ -146,7 +145,7 @@ char buffer[PATH_MAX * 2]; static const OPTION optionsTable[] = { { 0, NULL, NULL, "General options" }, - { 0, "--help", NULL, "Display this help" }, + { 0, OPTION_HELP, NULL, "Display this help" }, { 'v', OPTION_VERSION, NULL, "Display sdcc's version" }, { 0, "--verbose", &options.verbose, "Trace calls to the preprocessor, assembler, and linker" }, { 'V', NULL, &options.verboseExec, "Execute verbosely. Show sub commands as they are run" }, @@ -165,7 +164,7 @@ optionsTable[] = { { 'o', NULL, NULL, "Place the output into the given path resp. file" }, { 0, OPTION_PRINT_SEARCH_DIRS, &options.printSearchDirs, "display the directories in the compiler's search path"}, { 0, OPTION_MSVC_ERROR_STYLE, &options.vc_err_style, "messages are compatible with Micro$oft visual studio"}, - { 0, OPTION_USE_STDOUT, &options.use_stdout, "send errors to stdout instead of stderr"}, + { 0, OPTION_USE_STDOUT, NULL, "send errors to stdout instead of stderr"}, { 0, "--nostdlib", &options.nostdlib, "Do not include the standard library directory in the search path" }, { 0, "--nostdinc", &options.nostdinc, "Do not include the standard include directory in the search path" }, { 0, OPTION_LESS_PEDANTIC, NULL, "Disable some of the more pedantic warnings" }, @@ -263,8 +262,10 @@ optionsTable[] = { { 0, OPTION_STACK_LOC, NULL, " Stack pointer initial value" }, { 0, OPTION_DATA_LOC, NULL, " Direct data start location" }, { 0, OPTION_IDATA_LOC, NULL, NULL }, +#if !OPT_DISABLE_DS390 || !OPT_DISABLE_MCS51 || !OPT_DISABLE_PIC + { 0, OPTION_STACK_SIZE, NULL,"MCS51/DS390/PIC - Tells the linker to allocate this space for stack"}, +#endif #if !OPT_DISABLE_DS390 || !OPT_DISABLE_MCS51 - { 0, OPTION_STACK_SIZE, NULL,"MCS51/DS390 - Tells the linker to allocate this space for stack"}, { 0, OPTION_PACK_IRAM, NULL,"MCS51/DS390 - Tells the linker to pack variables in internal ram (default)"}, { 0, OPTION_NO_PACK_IRAM, &options.no_pack_iram,"MCS51/DS390 - Tells the linker not to pack variables in internal ram"}, #endif @@ -499,17 +500,7 @@ static void printUsage (void) { int i; -#if defined(__MINGW32__) - FILE *stream = stdout; -#elif defined(__DJGPP__) - FILE *stream = stdout; -#elif defined(_MSC_VER) - FILE *stream = stdout; -#elif defined(__BORLANDC__) - FILE *stream = stdout; -#else FILE *stream = stderr; -#endif printVersionInfo (stream); fprintf (stream, @@ -721,7 +712,7 @@ getStringArg(const char *szStart, char **argv, int *pi, int argc) { werror (E_ARGUMENT_MISSING, szStart); /* Die here rather than checking for errors later. */ - exit(-1); + exit(EXIT_FAILURE); } else { @@ -891,6 +882,15 @@ parseCmdLine (int argc, char **argv) /* options */ if (argv[i][0] == '-' && argv[i][1] == '-') { + if (strcmp (argv[i], OPTION_USE_STDOUT) == 0) + { + if (options.use_stdout == 0) + { + options.use_stdout = 1; + dup2(STDOUT_FILENO, STDERR_FILENO); + } + continue; + } if (strcmp (argv[i], OPTION_HELP) == 0) { printUsage (); @@ -966,7 +966,7 @@ parseCmdLine (int argc, char **argv) if (strcmp (argv[i], OPTION_VERSION) == 0) { printVersionInfo (stdout); - exit (0); + exit (EXIT_SUCCESS); continue; } @@ -1438,7 +1438,6 @@ parseCmdLine (int argc, char **argv) werror (E_FILE_OPEN_ERR, scratchFileName); } MSVC_style(options.vc_err_style); - if(options.use_stdout) dup2(STDOUT_FILENO, STDERR_FILENO); return 0; } @@ -1533,14 +1532,14 @@ linkEdit (char **envp) /* data segment start. If zero, the linker chooses the best place for data */ - if(options.data_loc) + if (options.data_loc) { WRITE_SEG_LOC (DATA_NAME, options.data_loc); } /* xdata segment start. If zero, the linker chooses the best place for xdata */ - if(options.xdata_loc) + if (options.xdata_loc) { WRITE_SEG_LOC (XDATA_NAME, options.xdata_loc); } @@ -1620,7 +1619,7 @@ linkEdit (char **envp) fprintf(stderr, "Add support for your FLAT24 target in %s @ line %d\n", __FILE__, __LINE__); - exit(-1); + exit(EXIT_FAILURE); } break; case MODEL_PAGE0: @@ -1668,7 +1667,7 @@ linkEdit (char **envp) fprintf(stderr, "Add support for your FLAT24 target in %s @ line %d\n", __FILE__, __LINE__); - exit(-1); + exit(EXIT_FAILURE); } } #endif @@ -1833,6 +1832,13 @@ linkEdit (char **envp) /* if (options.verbose)fprintf(stderr, "linker command line: %s\n", buffer); */ system_ret = my_system (buffer); + +#ifdef _WIN32 + #define STRCMP stricmp +#else + #define STRCMP strcmp +#endif + /* TODO: most linker don't have a -o parameter */ /* -o option overrides default name? */ if (fullDstFileName) @@ -1861,8 +1867,8 @@ linkEdit (char **envp) strncatz (scratchFileName, options.out_fmt ? ".S19" : ".ihx", sizeof(scratchFileName)); - if (strcmp (fullDstFileName, scratchFileName)) - unlink (fullDstFileName); + if (STRCMP (fullDstFileName, scratchFileName)) + remove (fullDstFileName); rename (scratchFileName, fullDstFileName); strncpyz (buffer, fullDstFileName, sizeof(buffer)); @@ -1877,15 +1883,15 @@ linkEdit (char **envp) strncatz (scratchFileName, ".map", sizeof(scratchFileName)); *q = 0; strncatz(buffer, ".map", sizeof(buffer)); - if (strcmp (scratchFileName, buffer)) - unlink (buffer); + if (STRCMP (scratchFileName, buffer)) + remove (buffer); rename (scratchFileName, buffer); *p = 0; strncatz (scratchFileName, ".mem", sizeof(scratchFileName)); *q = 0; strncatz(buffer, ".mem", sizeof(buffer)); - if (strcmp (scratchFileName, buffer)) - unlink (buffer); + if (STRCMP (scratchFileName, buffer)) + remove (buffer); rename (scratchFileName, buffer); if (options.debug) { @@ -1893,14 +1899,14 @@ linkEdit (char **envp) strncatz (scratchFileName, ".cdb", sizeof(scratchFileName)); *q = 0; strncatz(buffer, ".cdb", sizeof(buffer)); - if (strcmp (scratchFileName, buffer)) - unlink (buffer); + if (STRCMP (scratchFileName, buffer)) + remove (buffer); rename (scratchFileName, buffer); /* and the OMF file without extension: */ *p = 0; *q = 0; - if (strcmp (scratchFileName, buffer)) - unlink (buffer); + if (STRCMP (scratchFileName, buffer)) + remove (buffer); rename (scratchFileName, buffer); } } @@ -1953,7 +1959,7 @@ assemble (char **envp) port->linker.rel_ext, sizeof(scratchFileName)); if (strcmp (scratchFileName, fullDstFileName)) - unlink (fullDstFileName); + remove (fullDstFileName); rename (scratchFileName, fullDstFileName); } } @@ -2316,7 +2322,7 @@ main (int argc, char **argv, char **envp) atexit(rm_tmpfiles); /* install signal handler; - it's only purpuse is to call exit() to remove temp files */ + it's only purpose is to call exit() to remove temp files */ if (!getenv("SDCC_LEAVE_SIGNALS")) { signal (SIGABRT, sig_handler);