Actual source code: ex61.c
1: static const char help[] = "Tests env: directive in test harness language.\n\n";
3: #include <petscsys.h>
5: int main(int argc, char *argv[])
6: {
7: PetscBool env_set;
8: char env_vars[PETSC_MAX_PATH_LEN];
9: int num_env;
10: char **env_vars_arr;
13: PetscInitialize(&argc, &argv, NULL, help);
14: PetscArrayzero(env_vars, PETSC_MAX_PATH_LEN);
16: PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "Test Options", NULL);
17: PetscOptionsString("-env_vars_def", "Environment variables set", NULL, env_vars, env_vars, sizeof(env_vars), &env_set);
18: PetscOptionsEnd();
20: PetscStrToArray(env_vars, ' ', &num_env, &env_vars_arr);
21: for (int i = 0; i < num_env; ++i) {
22: const char *current_var = env_vars_arr[i];
23: PetscBool set, equal;
24: size_t name_len;
25: char env[PETSC_MAX_PATH_LEN];
26: char *name, *value;
28: // given FOO=bar we want to extract
29: // name = FOO
30: // value = bar
31: PetscStrchr(current_var, '=', &value);
34: // value points to '=' so increment it first
35: ++value;
37: name_len = (size_t)(value - current_var);
38: PetscMalloc1(name_len, &name);
39: PetscStrncpy(name, env_vars_arr[i], name_len);
41: PetscArrayzero(env, PETSC_MAX_PATH_LEN);
42: PetscOptionsGetenv(PETSC_COMM_WORLD, name, env, sizeof(env), &set);
44: PetscStrcmp(value, env, &equal);
46: PetscFree(name);
47: }
48: PetscStrToArrayDestroy(num_env, env_vars_arr);
50: PetscFinalize();
51: return 0;
52: }
54: /*TEST
56: testset:
57: output_file: ./output/empty.out
58: args: -env_vars_def 'FOO=1 BAR=0 BAZ= BOP=1'
59: suffix: env_set
60: test:
61: env: FOO=1 BAR=0 BAZ= BOP=${FOO}
62: suffix: all_one_line
63: test:
64: env: FOO=1
65: env: BAR=0
66: env: BAZ=
67: env: BOP=${FOO}
68: suffix: all_separate_lines
70: test:
71: output_file: ./output/empty.out
72: args: -env_vars_def 'FOO=hello'
73: env: FOO='hello'
74: suffix: env_set_quoted
76: test:
77: output_file: ./output/empty.out
78: suffix: env_not_set
80: TEST*/