diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ee43699..c3fb06c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ cmake_minimum_required (VERSION 3.9) -project(STA VERSION 2.0.15) +project(STA VERSION 2.0.16) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_CXX_STANDARD 11) diff --git a/app/Main.cc b/app/Main.cc index 171b8859..3eaa2743 100644 --- a/app/Main.cc +++ b/app/Main.cc @@ -37,7 +37,7 @@ extern const char *tcl_inits[]; int main(int argc, - char **argv) + char *argv[]) { if (argc == 2 && stringEq(argv[1], "-help")) { showUseage(argv[0]); diff --git a/app/StaMain.cc b/app/StaMain.cc index 643cecf9..4b255660 100644 --- a/app/StaMain.cc +++ b/app/StaMain.cc @@ -37,7 +37,7 @@ static const char *init_filename = "[file join $env(HOME) .sta]"; void staMain(Sta *sta, int argc, - char **argv, + char *argv[], SwigInitFunc swig_init, const char *tcl_inits[]) { @@ -82,7 +82,7 @@ parseThreadsArg(int argc, // Set globals to pass to staTclAppInit. void staSetupAppInit(int argc, - char **argv, + char *argv[], SwigInitFunc swig_init, const char *tcl_inits[]) { @@ -121,43 +121,65 @@ staTclAppInit(Tcl_Interp *interp) if (!findCmdLineFlag(argc, argv, "-no_init")) sourceTclFile(init_filename, true, true, interp); - // "-x cmd" is evaled before -f file is sourced. - char *cmd = findCmdLineKey(argc, argv, "-x"); - if (cmd) - Tcl_Eval(interp, cmd); - - // "-f cmd_file" is evaled as "source -echo -verbose file". - char *file = findCmdLineKey(argc, argv, "-f"); - if (file) - sourceTclFile(file, true, true, interp); + bool exit_after_cmd_file = findCmdLineFlag(argc, argv, "-exit"); + if (argc > 2 || + (argc > 1 && argv[1][0] == '-')) + showUseage(argv[0]); + else { + if (argc == 2) { + char *cmd_file = argv[1]; + if (cmd_file) { + sourceTclFile(cmd_file, false, false, interp); + if (exit_after_cmd_file) + exit(EXIT_SUCCESS); + } + } + } return TCL_OK; } bool -findCmdLineFlag(int argc, - char **argv, +findCmdLineFlag(int &argc, + char *argv[], const char *flag) { - for (int argi = 1; argi < argc; argi++) { - char *arg = argv[argi]; - if (stringEq(arg, flag)) - return true; + bool found = false; + int j = 1; + int argc1 = argc; + for (int i = 1; i < argc1; i++) { + char *arg = argv[i]; + if (stringEq(arg, flag)) { + found = true; + // remove flag from argv. + argc--; + } + else + argv[j++] = argv[i]; } - return false; + return found; } char * -findCmdLineKey(int argc, - char **argv, +findCmdLineKey(int &argc, + char *argv[], const char *key) { - for (int argi = 1; argi < argc; argi++) { - char *arg = argv[argi]; - if (stringEq(arg, key) && argi + 1 < argc) - return argv[argi + 1]; + char *value = nullptr; + int j = 1; + int argc1 = argc; + for (int i = 1; i < argc1; i++) { + char *arg = argv[i]; + if (stringEq(arg, key) && i + 1 < argc) { + value = argv[i + 1]; + // remove key and value from argv. + i++; + argc -= 2; + } + else + argv[j++] = argv[i]; } - return nullptr; + return value; } // Use overridden version of source to echo cmds and results. @@ -210,14 +232,14 @@ evalTclInit(Tcl_Interp *interp, void showUseage(char *prog) { - printf("Usage: %s [-help] [-version] [-no_init] [-f cmd_file]\n", prog); + printf("Usage: %s [-help] [-version] [-no_init] [-exit] cmd_file\n", prog); printf(" -help show help and exit\n"); printf(" -version show version and exit\n"); printf(" -no_init do not read .sta init file\n"); - printf(" -x cmd evaluate cmd\n"); - printf(" -f cmd_file source cmd_file\n"); printf(" -threads count|max use count threads\n"); printf(" -no_splash do not show the license splash at startup\n"); + printf(" -exit exit after reading cmd_file\n"); + printf(" cmd_file source cmd_file\n"); } } // namespace diff --git a/app/StaMain.hh b/app/StaMain.hh index d1074975..e6a740ea 100644 --- a/app/StaMain.hh +++ b/app/StaMain.hh @@ -29,14 +29,14 @@ typedef int (*SwigInitFunc)(Tcl_Interp *); void staMain(Sta *sta, int argc, - char **argv, + char *argv[], SwigInitFunc swig_init, const char *tcl_inits[]); // Set arguments passed to staTclAppInit inside the tcl interpreter. void staSetupAppInit(int argc, - char **argv, + char *argv[], SwigInitFunc swig_init, const char *tcl_inits[]); @@ -53,12 +53,12 @@ evalTclInit(Tcl_Interp *interp, const char *inits[]); bool -findCmdLineFlag(int argc, - char **argv, +findCmdLineFlag(int &argc, + char *argv[], const char *flag); char * -findCmdLineKey(int argc, - char **argv, +findCmdLineKey(int &argc, + char *argv[], const char *key); void diff --git a/doc/ChangeLog.txt b/doc/ChangeLog.txt index df0122e8..73dedf7b 100644 --- a/doc/ChangeLog.txt +++ b/doc/ChangeLog.txt @@ -6,6 +6,19 @@ This file summarizes user visible changes for each release. Release 2.0.0 2018/09/28 ------------------------- +The command line options have changed to the following: + + -help show help and exit + -version show version and exit + -no_init do not read .sta init file + -threads count|max use count threads + -no_splash do not show the license splash at startup + -exit exit after reading cmd_file + cmd_file source cmd_file + + +.... + Builds using Autotools/configure are no longer supported. Use CMake as documented in README.mb. diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 14c08383..32579683 100644 Binary files a/doc/OpenSTA.odt and b/doc/OpenSTA.odt differ