aboutsummaryrefslogtreecommitdiff
path: root/src/driver/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/driver/main.c')
-rw-r--r--src/driver/main.c37
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));