jbsrc/lib/src/core/jb-variable.h (4153B) - raw
1 /* 2 * JB, the Jean-Yves Lefort's Build System 3 * Copyright (C) 2008 Jean-Yves Lefort <jylefort@brutele.be> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 #ifndef _JB_VARIABLE_H 21 #define _JB_VARIABLE_H 22 23 #include <stdarg.h> 24 #include <sys/types.h> 25 #include <sys/stat.h> 26 #include <glib-object.h> 27 28 typedef enum 29 { 30 /* allow the user to set it on the command line */ 31 JB_VARIABLE_USER_SETTABLE = 1 << 0, 32 33 /* add -DWITH_name=0|1 (bool variables only) */ 34 JB_VARIABLE_C_DEFINE = 1 << 1, 35 36 /* omit it from the configure report */ 37 JB_VARIABLE_NO_REPORT = 1 << 2 38 } JBVariableFlags; 39 40 typedef struct 41 { 42 char *name; 43 } JBVariableGroup; 44 45 typedef struct 46 { 47 char *name; 48 49 GType gtype; 50 51 gboolean (*from_string) (const char *str, GValue *value, GError **err); 52 char * (*to_string) (const GValue *value); 53 } JBVariableType; 54 55 typedef struct 56 { 57 JBVariableType *type; 58 char *name; 59 60 /* can be NULL if the group is NULL */ 61 char *description; 62 63 /* if NULL, the variable is omitted from the help and report */ 64 JBVariableGroup *group; 65 66 JBVariableFlags flags; 67 68 GValue value; 69 70 int user_set : 1; 71 } JBVariable; 72 73 extern GSList *jb_variables; 74 75 extern GSList *jb_variable_groups; 76 77 extern JBVariableGroup *jb_variable_group_compiler_options; 78 extern JBVariableGroup *jb_variable_group_installation_options; 79 extern JBVariableGroup *jb_variable_group_external_programs; 80 81 extern JBVariableType *jb_variable_type_bool; 82 extern JBVariableType *jb_variable_type_string; 83 extern JBVariableType *jb_variable_type_mode; 84 85 void jb_variable_init (void); 86 87 JBVariableGroup *jb_variable_add_group (const char *name); 88 89 JBVariableType *jb_variable_get_type (const char *name); 90 91 JBVariable *jb_variable_get_variable (const char *name); 92 JBVariable *jb_variable_get_variable_or_error (const char *name); 93 94 JBVariable *jb_variable_add (JBVariableType *type, 95 const char *name, 96 const char *description, 97 JBVariableGroup *group, 98 JBVariableFlags flags); 99 100 void jb_variable_add_bool (const char *name, 101 const char *description, 102 JBVariableGroup *group, 103 JBVariableFlags flags, 104 gboolean default_value); 105 void jb_variable_add_string (const char *name, 106 const char *description, 107 JBVariableGroup *group, 108 JBVariableFlags flags, 109 const char *default_value); 110 void jb_variable_add_mode (const char *name, 111 const char *description, 112 JBVariableGroup *group, 113 JBVariableFlags flags, 114 mode_t default_value); 115 116 gboolean jb_variable_get_bool (const char *name); 117 void jb_variable_set_bool (const char *name, gboolean value); 118 119 const char *jb_variable_get_string (const char *name); 120 const char *jb_variable_get_string_or_null (const char *name); 121 void jb_variable_set_string (const char *name, const char *value); 122 123 mode_t jb_variable_get_mode (const char *name); 124 void jb_variable_set_mode (const char *name, mode_t value); 125 126 void jb_variable_set_package_flags (const char *name, 127 const char *cflags, 128 const char *cppflags, 129 const char *ldflags, 130 const char *libs); 131 132 gboolean jb_variable_set_from_string (JBVariable *self, 133 const char *value, 134 GError **err); 135 136 char *jb_variable_to_string (JBVariable *self); 137 138 char *jb_variable_evaluate (JBVariable *variable); 139 char *jb_variable_expand (const char *str, ...) G_GNUC_NULL_TERMINATED; 140 char *jb_variable_expandv (const char *str, va_list args); 141 142 const char *jb_variable_get_type_name (JBVariable *self); 143 144 #endif /* _JB_VARIABLE_H */