diff options
author | dos-reis <gdr@axiomatics.org> | 2009-10-25 19:01:37 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2009-10-25 19:01:37 +0000 |
commit | e23e15aa5c1a1e476fb022edaefe95f5fbe9c97e (patch) | |
tree | c790d6930c5a54c1ece2ec21afdcbe9dc6b5fdeb /src/driver/main.c | |
parent | 465174ff1bb6292faefe0e047833fa2df5c1c92f (diff) | |
download | open-axiom-e23e15aa5c1a1e476fb022edaefe95f5fbe9c97e.tar.gz |
* lib/cfuns-c.c (oa_concatenate_string): Define.
* include/open-axiom.h (openaxiom_ifs): New.
(OPENAXIOM_TEXINPUTS_PATH): Likewise.
(OPENAXIOM_BIBINPUTS_PATH): Likewise.
* driver/main.c (augment_variable): New.
(upgrade_environment): Likewise. Call publish_systemdir.
(main): Call it instead of publish_systemdir. Handle 'spawn' driver.
* driver/utils.h (openaxiom_execute_driver): New kind of driver.
* driver/utils.c (openaxiom_preprocess_arguments): Tidy.
(openaxiom_execute_core): Likewise.
* sman/sman.c (process_arguments): Likewise.
(process_options): Likewise.
Diffstat (limited to 'src/driver/main.c')
-rw-r--r-- | src/driver/main.c | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/driver/main.c b/src/driver/main.c index a943a95f..15e27d8b 100644 --- a/src/driver/main.c +++ b/src/driver/main.c @@ -58,6 +58,33 @@ publish_systemdir(const char* dir) } } +static void +augment_variable(const char* name, const char* value) { + const char* oldval = oa_getenv(name); + const int value_length = strlen(value); + const int oldval_length = oldval == 0 ? 0 : strlen(oldval); + const int newval_length = value_length + 1 + oldval_length; + char* newval = (char*) malloc(newval_length + 1); + + strcpy(newval,value); + if (oldval != 0) { + newval[value_length] = openaxiom_ifs; + strcpy(newval + value_length + 1, oldval); + } + + if (!oa_setenv(name, newval)) + perror("oa_augment_environment_variable"); +} + +static void +upgrade_environment(const char* sysdir) { + augment_variable("TEXINPUTS", + oa_concatenate_string(sysdir, OPENAXIOM_TEXINPUTS_PATH)); + augment_variable("BIBINPUTS", + oa_concatenate_string(sysdir, OPENAXIOM_BIBINPUTS_PATH)); + publish_systemdir(sysdir); +} + int main(int argc, char* argv[]) @@ -65,17 +92,22 @@ main(int argc, char* argv[]) openaxiom_command command = { }; openaxiom_driver driver = openaxiom_preprocess_arguments(&command, argc, argv); + upgrade_environment(command.root_dir); - putenv("LC_ALL=C"); - setlocale(LC_ALL, ""); switch (driver) { case openaxiom_null_driver: return 0; /* Bye. */ case openaxiom_core_driver: case openaxiom_script_driver: case openaxiom_compiler_driver: + putenv("LC_ALL=C"); + setlocale(LC_ALL, ""); return openaxiom_execute_core(&command, driver); + case openaxiom_execute_driver: + return oa_spawn(&command.core, + openaxiom_spawn_search_path | openaxiom_spawn_replace); + case openaxiom_sman_driver: break; @@ -87,7 +119,6 @@ main(int argc, char* argv[]) /* Should not happen on MS platforms. */ abort(); #else /* __WIN32__ */ - publish_systemdir(command.root_dir); execv(openaxiom_make_path_for(command.root_dir, openaxiom_sman_driver), argv); perror(strerror(errno)); |