replace const string literal XSCHEM_LIBRARY_PATH with array of const string literals, one per path, to get rid of C89 509 character limit

This commit is contained in:
stefan schippers 2025-09-26 15:57:40 +02:00
parent e1bb16ccf1
commit 05e7f36148
6 changed files with 43 additions and 22 deletions

View File

@ -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"

View File

@ -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;

View File

@ -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]="";

View File

@ -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

View File

@ -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);

View File

@ -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];