1*d83cc019SAndroid Build Coastguard Worker #ifndef RUNNER_SETTINGS_H 2*d83cc019SAndroid Build Coastguard Worker #define RUNNER_SETTINGS_H 3*d83cc019SAndroid Build Coastguard Worker 4*d83cc019SAndroid Build Coastguard Worker #include <stdbool.h> 5*d83cc019SAndroid Build Coastguard Worker #include <stddef.h> 6*d83cc019SAndroid Build Coastguard Worker #include <sys/types.h> 7*d83cc019SAndroid Build Coastguard Worker #include <stdio.h> 8*d83cc019SAndroid Build Coastguard Worker #include <glib.h> 9*d83cc019SAndroid Build Coastguard Worker 10*d83cc019SAndroid Build Coastguard Worker enum { 11*d83cc019SAndroid Build Coastguard Worker LOG_LEVEL_NORMAL = 0, 12*d83cc019SAndroid Build Coastguard Worker LOG_LEVEL_QUIET = -1, 13*d83cc019SAndroid Build Coastguard Worker LOG_LEVEL_VERBOSE = 1, 14*d83cc019SAndroid Build Coastguard Worker }; 15*d83cc019SAndroid Build Coastguard Worker 16*d83cc019SAndroid Build Coastguard Worker #define ABORT_TAINT (1 << 0) 17*d83cc019SAndroid Build Coastguard Worker #define ABORT_LOCKDEP (1 << 1) 18*d83cc019SAndroid Build Coastguard Worker #define ABORT_ALL (ABORT_TAINT | ABORT_LOCKDEP) 19*d83cc019SAndroid Build Coastguard Worker 20*d83cc019SAndroid Build Coastguard Worker _Static_assert(ABORT_ALL == (ABORT_TAINT | ABORT_LOCKDEP), "ABORT_ALL must be all conditions bitwise or'd"); 21*d83cc019SAndroid Build Coastguard Worker 22*d83cc019SAndroid Build Coastguard Worker struct regex_list { 23*d83cc019SAndroid Build Coastguard Worker char **regex_strings; 24*d83cc019SAndroid Build Coastguard Worker GRegex **regexes; 25*d83cc019SAndroid Build Coastguard Worker size_t size; 26*d83cc019SAndroid Build Coastguard Worker }; 27*d83cc019SAndroid Build Coastguard Worker 28*d83cc019SAndroid Build Coastguard Worker struct settings { 29*d83cc019SAndroid Build Coastguard Worker int abort_mask; 30*d83cc019SAndroid Build Coastguard Worker char *test_list; 31*d83cc019SAndroid Build Coastguard Worker char *name; 32*d83cc019SAndroid Build Coastguard Worker bool dry_run; 33*d83cc019SAndroid Build Coastguard Worker struct regex_list include_regexes; 34*d83cc019SAndroid Build Coastguard Worker struct regex_list exclude_regexes; 35*d83cc019SAndroid Build Coastguard Worker bool sync; 36*d83cc019SAndroid Build Coastguard Worker int log_level; 37*d83cc019SAndroid Build Coastguard Worker bool overwrite; 38*d83cc019SAndroid Build Coastguard Worker bool multiple_mode; 39*d83cc019SAndroid Build Coastguard Worker int inactivity_timeout; 40*d83cc019SAndroid Build Coastguard Worker int overall_timeout; 41*d83cc019SAndroid Build Coastguard Worker bool use_watchdog; 42*d83cc019SAndroid Build Coastguard Worker char *test_root; 43*d83cc019SAndroid Build Coastguard Worker char *results_path; 44*d83cc019SAndroid Build Coastguard Worker bool piglit_style_dmesg; 45*d83cc019SAndroid Build Coastguard Worker int dmesg_warn_level; 46*d83cc019SAndroid Build Coastguard Worker bool list_all; 47*d83cc019SAndroid Build Coastguard Worker }; 48*d83cc019SAndroid Build Coastguard Worker 49*d83cc019SAndroid Build Coastguard Worker /** 50*d83cc019SAndroid Build Coastguard Worker * init_settings: 51*d83cc019SAndroid Build Coastguard Worker * 52*d83cc019SAndroid Build Coastguard Worker * Initializes a settings object to an empty state (all values NULL, 0 53*d83cc019SAndroid Build Coastguard Worker * or false). 54*d83cc019SAndroid Build Coastguard Worker * 55*d83cc019SAndroid Build Coastguard Worker * @settings: Object to initialize. Storage for it must exist. 56*d83cc019SAndroid Build Coastguard Worker */ 57*d83cc019SAndroid Build Coastguard Worker void init_settings(struct settings *settings); 58*d83cc019SAndroid Build Coastguard Worker 59*d83cc019SAndroid Build Coastguard Worker /** 60*d83cc019SAndroid Build Coastguard Worker * free_settings: 61*d83cc019SAndroid Build Coastguard Worker * 62*d83cc019SAndroid Build Coastguard Worker * Releases all allocated resources for a settings object and 63*d83cc019SAndroid Build Coastguard Worker * initializes it to an empty state (see #init_settings). 64*d83cc019SAndroid Build Coastguard Worker * 65*d83cc019SAndroid Build Coastguard Worker * @settings: Object to release and initialize. 66*d83cc019SAndroid Build Coastguard Worker */ 67*d83cc019SAndroid Build Coastguard Worker void free_settings(struct settings *settings); 68*d83cc019SAndroid Build Coastguard Worker 69*d83cc019SAndroid Build Coastguard Worker /** 70*d83cc019SAndroid Build Coastguard Worker * parse_options: 71*d83cc019SAndroid Build Coastguard Worker * 72*d83cc019SAndroid Build Coastguard Worker * Parses command line options and sets the settings object to 73*d83cc019SAndroid Build Coastguard Worker * designated values. 74*d83cc019SAndroid Build Coastguard Worker * 75*d83cc019SAndroid Build Coastguard Worker * The function can be called again on the same settings object. The 76*d83cc019SAndroid Build Coastguard Worker * old values will be properly released and cleared. On a parse 77*d83cc019SAndroid Build Coastguard Worker * failure, the settings object will be in an empty state (see 78*d83cc019SAndroid Build Coastguard Worker * #init_settings) and usage instructions will be printed with an 79*d83cc019SAndroid Build Coastguard Worker * error message. 80*d83cc019SAndroid Build Coastguard Worker * 81*d83cc019SAndroid Build Coastguard Worker * @argc: Argument count 82*d83cc019SAndroid Build Coastguard Worker * @argv: Argument array. First element is the program name. 83*d83cc019SAndroid Build Coastguard Worker * @settings: Settings object to fill with values. Must have proper 84*d83cc019SAndroid Build Coastguard Worker * storage. 85*d83cc019SAndroid Build Coastguard Worker * 86*d83cc019SAndroid Build Coastguard Worker * Returns: True on successful parse, false on error. 87*d83cc019SAndroid Build Coastguard Worker */ 88*d83cc019SAndroid Build Coastguard Worker bool parse_options(int argc, char **argv, 89*d83cc019SAndroid Build Coastguard Worker struct settings *settings); 90*d83cc019SAndroid Build Coastguard Worker 91*d83cc019SAndroid Build Coastguard Worker /** 92*d83cc019SAndroid Build Coastguard Worker * validate_settings: 93*d83cc019SAndroid Build Coastguard Worker * 94*d83cc019SAndroid Build Coastguard Worker * Checks the settings object against the system to see if executing 95*d83cc019SAndroid Build Coastguard Worker * on it can be done. Checks pathnames for existence and access 96*d83cc019SAndroid Build Coastguard Worker * rights. Note that this function will not check that the designated 97*d83cc019SAndroid Build Coastguard Worker * job listing (through a test-list file or the -t/-x flags) yields a 98*d83cc019SAndroid Build Coastguard Worker * non-zero amount of testing to be done. On errors, usage 99*d83cc019SAndroid Build Coastguard Worker * instructions will be printed with an error message. 100*d83cc019SAndroid Build Coastguard Worker * 101*d83cc019SAndroid Build Coastguard Worker * @settings: Settings object to check. 102*d83cc019SAndroid Build Coastguard Worker * 103*d83cc019SAndroid Build Coastguard Worker * Returns: True on valid settings, false on any error. 104*d83cc019SAndroid Build Coastguard Worker */ 105*d83cc019SAndroid Build Coastguard Worker bool validate_settings(struct settings *settings); 106*d83cc019SAndroid Build Coastguard Worker 107*d83cc019SAndroid Build Coastguard Worker /* TODO: Better place for this */ 108*d83cc019SAndroid Build Coastguard Worker char *absolute_path(char *path); 109*d83cc019SAndroid Build Coastguard Worker 110*d83cc019SAndroid Build Coastguard Worker /** 111*d83cc019SAndroid Build Coastguard Worker * serialize_settings: 112*d83cc019SAndroid Build Coastguard Worker * 113*d83cc019SAndroid Build Coastguard Worker * Serializes the settings object to a file in the results_path 114*d83cc019SAndroid Build Coastguard Worker * directory. 115*d83cc019SAndroid Build Coastguard Worker * 116*d83cc019SAndroid Build Coastguard Worker * @settings: Settings object to serialize. 117*d83cc019SAndroid Build Coastguard Worker */ 118*d83cc019SAndroid Build Coastguard Worker bool serialize_settings(struct settings *settings); 119*d83cc019SAndroid Build Coastguard Worker 120*d83cc019SAndroid Build Coastguard Worker bool read_settings_from_file(struct settings *settings, FILE* f); 121*d83cc019SAndroid Build Coastguard Worker bool read_settings_from_dir(struct settings *settings, int dirfd); 122*d83cc019SAndroid Build Coastguard Worker 123*d83cc019SAndroid Build Coastguard Worker #endif 124