diff --git a/config.h.in b/config.h.in index c63c3268..5c3ce56f 100644 --- a/config.h.in +++ b/config.h.in @@ -51,7 +51,7 @@ print [@ /* typedef @sys/types/size/4_u_int@ xuint32_t; */ /* typedef @sys/types/size/4_s_int@ xint32_t; */ #define PREFIX "@/local/xschem/prefix@" -#define XSCHEM_LIBRARY_PATH "@/local/xschem/xschem-lib-path@" +#define XSCHEM_LIBRARY_PATH { @/local/xschem/xschem-lib-path@ } #define USER_CONF_DIR "@/local/xschem/user-conf-dir@" #define XSCHEM_SHAREDIR PREFIX "/share/xschem" diff --git a/scconfig/hooks.c b/scconfig/hooks.c index a132babd..eb68de51 100644 --- a/scconfig/hooks.c +++ b/scconfig/hooks.c @@ -155,64 +155,81 @@ int hook_postarg() } if (get("/local/xschem/xschem-lib-path") == NULL) { - put("/local/xschem/xschem-lib-path", get("/local/xschem/user-lib-path")); - append("/local/xschem/xschem-lib-path", ":"); - append("/local/xschem/xschem-lib-path", get("/local/xschem/sys-lib-path")); + put("/local/xschem/xschem-lib-path", "\\\n \""); + append("/local/xschem/xschem-lib-path", get("/local/xschem/user-lib-path")); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); + append("/local/xschem/xschem-lib-path", get("/local/xschem/sys-lib-path")); + append("/local/xschem/xschem-lib-path", "\",\\\n "); + + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/examples"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/ngspice"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/ngspice_verilog_cosim"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/logic"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/xschem_simulator"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/generators"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/inst_sch_select"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/binto7seg"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/pcb"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/rom8k"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); - append("/local/xschem/xschem-lib-path", ":"); + append("/local/xschem/xschem-lib-path", "\""); append("/local/xschem/xschem-lib-path", get("/local/xschem/prefix")); append("/local/xschem/xschem-lib-path", "/"); append("/local/xschem/xschem-lib-path", "share/doc/xschem/analyses"); + append("/local/xschem/xschem-lib-path", "\",\\\n "); + + append("/local/xschem/xschem-lib-path", "NULL"); } return 0; diff --git a/src/globals.c b/src/globals.c index 69bc92b2..e1942621 100644 --- a/src/globals.c +++ b/src/globals.c @@ -172,6 +172,7 @@ int help=0; /* help option set to global scope, printing help is deferred */ /* when configuration xschemrc has been read 20140406 */ FILE *errfp = NULL; int exit_code = 0; /* success */ +const char *xschem_library_path[] = XSCHEM_LIBRARY_PATH; char home_dir[PATH_MAX]; /* home dir obtained via getpwuid */ char user_conf_dir[PATH_MAX]; char sel_file[PATH_MAX]=""; diff --git a/src/scheduler.c b/src/scheduler.c index 4bf29bea..6022567d 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -2184,6 +2184,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg my_snprintf(res, S(res), "need_reb_sel_arr=%d\n", xctx->need_reb_sel_arr); Tcl_AppendResult(interp, res, NULL); my_snprintf(res, S(res), "undo_type=%d\n", xctx->undo_type); Tcl_AppendResult(interp, res, NULL); my_snprintf(res, S(res), "******* end global variables:*******\n"); Tcl_AppendResult(interp, res, NULL); + my_snprintf(res, S(res), "XSCHEM_LIBRARY_PATH=%s\n", + tclgetvar("XSCHEM_LIBRARY_PATH")); Tcl_AppendResult(interp, res, NULL); #ifdef __unix__ my_snprintf(res, S(res), "******* Xserver options: *******\n"); Tcl_AppendResult(interp, res, NULL); @@ -2215,9 +2217,6 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg #ifdef USER_CONF_DIR my_snprintf(res, S(res), "USER_CONF_DIR=%s\n", USER_CONF_DIR); Tcl_AppendResult(interp, res, NULL); #endif - #ifdef XSCHEM_LIBRARY_PATH - my_snprintf(res, S(res), "XSCHEM_LIBRARY_PATH=%s\n", XSCHEM_LIBRARY_PATH); Tcl_AppendResult(interp, res, NULL); - #endif #ifdef HAS_SNPRINTF my_snprintf(res, S(res), "HAS_SNPRINTF=%s\n", HAS_SNPRINTF); Tcl_AppendResult(interp, res, NULL); #endif diff --git a/src/xinit.c b/src/xinit.c index 2cdf8759..4d24adbe 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -2504,10 +2504,13 @@ int Tcl_AppInit(Tcl_Interp *inter) dbg(1, "Using compile-time XSCHEM_SHAREDIR = %s\n", XSCHEM_SHAREDIR); } - my_snprintf(tmp, S(tmp),"regsub -all {~/} {%s} {%s/}", XSCHEM_LIBRARY_PATH, home_dir); - tcleval(tmp); - tclsetvar("XSCHEM_LIBRARY_PATH", tclresult()); - + /* build TCL XSCHEM_LIBRARY_PATH from const array of strings xschem_library_path */ + tcleval("set XSCHEM_LIBRARY_PATH {}"); + for(i = 0;; i++) { + if(!xschem_library_path[i]) break; + if(i) tcleval("append XSCHEM_LIBRARY_PATH :"); + tclvareval("append XSCHEM_LIBRARY_PATH ", xschem_library_path[i], NULL); + } /* create user conf dir , remove ~ if present */ my_snprintf(tmp, S(tmp),"regsub {^~/} {%s} {%s/}", USER_CONF_DIR, home_dir); diff --git a/src/xschem.h b/src/xschem.h index 200074ff..ce38145c 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -1215,6 +1215,7 @@ extern int help; extern char *cad_icon[]; extern FILE *errfp; extern int exit_code; +extern const char *xschem_library_path[]; extern char home_dir[PATH_MAX]; /* home dir obtained via getpwuid */ extern char user_conf_dir[PATH_MAX]; /* usually ~/.xschem */ extern char sel_file[PATH_MAX];