1951eb098SLisandro Dalcin #define PETSC_DESIRE_FEATURE_TEST_MACROS /* for strdup() */ 2f996e368SLisandro Dalcin #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/ 3951eb098SLisandro Dalcin 4f996e368SLisandro Dalcin #if defined(PETSC_HAVE_YAML) 5951eb098SLisandro Dalcin #include <yaml.h> /* use external LibYAML */ 6951eb098SLisandro Dalcin #else 7951eb098SLisandro Dalcin #include <../src/sys/yaml/include/yaml.h> 8f996e368SLisandro Dalcin #endif 9f996e368SLisandro Dalcin 10f996e368SLisandro Dalcin static MPI_Comm petsc_yaml_comm = MPI_COMM_NULL; /* only used for parallel error handling */ 11f996e368SLisandro Dalcin 129fbee547SJacob Faibussowitsch static inline MPI_Comm PetscYAMLGetComm(void) 13f996e368SLisandro Dalcin { 14f996e368SLisandro Dalcin return PetscLikely(petsc_yaml_comm != MPI_COMM_NULL) ? petsc_yaml_comm : (petsc_yaml_comm = PETSC_COMM_SELF); 15f996e368SLisandro Dalcin } 16f996e368SLisandro Dalcin 179fbee547SJacob Faibussowitsch static inline MPI_Comm PetscYAMLSetComm(MPI_Comm comm) 18f996e368SLisandro Dalcin { 19f996e368SLisandro Dalcin MPI_Comm prev = PetscYAMLGetComm(); petsc_yaml_comm = comm; return prev; 20f996e368SLisandro Dalcin } 21f996e368SLisandro Dalcin 22f996e368SLisandro Dalcin #define TAG(node) ((const char *)((node)->tag)) 23f996e368SLisandro Dalcin #define STR(node) ((const char *)((node)->data.scalar.value)) 24f996e368SLisandro Dalcin #define SEQ(node) ((node)->data.sequence.items) 25f996e368SLisandro Dalcin #define MAP(node) ((node)->data.mapping.pairs) 26f996e368SLisandro Dalcin 27f996e368SLisandro Dalcin static PetscErrorCode PetscParseLayerYAML(PetscOptions options, yaml_document_t *doc, yaml_node_t *node) 28f996e368SLisandro Dalcin { 29f996e368SLisandro Dalcin MPI_Comm comm = PetscYAMLGetComm(); 30f996e368SLisandro Dalcin char name[PETSC_MAX_OPTION_NAME] = "", prefix[PETSC_MAX_OPTION_NAME] = ""; 31f996e368SLisandro Dalcin 32f996e368SLisandro Dalcin PetscFunctionBegin; 332b8ac955SLisandro Dalcin if (node->type == YAML_SCALAR_NODE && !STR(node)[0]) PetscFunctionReturn(0); /* empty */ 342c71b3e2SJacob Faibussowitsch PetscCheckFalse(node->type != YAML_MAPPING_NODE,comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected mapping"); 35f996e368SLisandro Dalcin for (yaml_node_pair_t *pair = MAP(node).start; pair < MAP(node).top; pair++) { 36f996e368SLisandro Dalcin yaml_node_t *keynode = yaml_document_get_node(doc, pair->key); 37f996e368SLisandro Dalcin yaml_node_t *valnode = yaml_document_get_node(doc, pair->value); 38f996e368SLisandro Dalcin PetscBool isMergeKey,isDummyKey,isIncludeTag; 39f996e368SLisandro Dalcin 40*28b400f6SJacob Faibussowitsch PetscCheck(keynode,comm, PETSC_ERR_LIB, "Corrupt YAML document"); 41*28b400f6SJacob Faibussowitsch PetscCheck(valnode,comm, PETSC_ERR_LIB, "Corrupt YAML document"); 422c71b3e2SJacob Faibussowitsch PetscCheckFalse(keynode->type != YAML_SCALAR_NODE,comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected scalar"); 43f996e368SLisandro Dalcin 44f996e368SLisandro Dalcin /* "<<" is the merge key: don't increment the prefix */ 455f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrcmp(STR(keynode), "<<", &isMergeKey)); 46f996e368SLisandro Dalcin if (isMergeKey) { 47f996e368SLisandro Dalcin if (valnode->type == YAML_SEQUENCE_NODE) { 48f996e368SLisandro Dalcin for (yaml_node_item_t *item = SEQ(valnode).start; item < SEQ(valnode).top; item++) { 49f996e368SLisandro Dalcin yaml_node_t *itemnode = yaml_document_get_node(doc, *item); 50*28b400f6SJacob Faibussowitsch PetscCheck(itemnode,comm, PETSC_ERR_LIB, "Corrupt YAML document"); 512c71b3e2SJacob Faibussowitsch PetscCheckFalse(itemnode->type != YAML_MAPPING_NODE,comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected mapping"); 525f80ce2aSJacob Faibussowitsch CHKERRQ(PetscParseLayerYAML(options, doc, itemnode)); 53f996e368SLisandro Dalcin } 54f996e368SLisandro Dalcin } else if (valnode->type == YAML_MAPPING_NODE) { 555f80ce2aSJacob Faibussowitsch CHKERRQ(PetscParseLayerYAML(options, doc, valnode)); 56f996e368SLisandro Dalcin } else SETERRQ(comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected sequence or mapping"); 57f996e368SLisandro Dalcin continue; /* to next pair */ 58f996e368SLisandro Dalcin } 59f996e368SLisandro Dalcin 60f996e368SLisandro Dalcin /* "$$*" are treated as dummy keys, we use them for !include tags and to define anchors */ 615f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrbeginswith(STR(keynode), "$$", &isDummyKey)); 62f996e368SLisandro Dalcin if (isDummyKey) { 635f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrendswith(TAG(valnode), "!include", &isIncludeTag)); 64f996e368SLisandro Dalcin if (isIncludeTag) { /* TODO: add proper support relative paths */ 655f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsInsertFileYAML(comm, options, STR(valnode), PETSC_TRUE)); 66f996e368SLisandro Dalcin } 67f996e368SLisandro Dalcin continue; /* to next pair */ 68f996e368SLisandro Dalcin } 69f996e368SLisandro Dalcin 70f996e368SLisandro Dalcin if (valnode->type == YAML_SCALAR_NODE) { 715f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSNPrintf(name, sizeof(name), "-%s", STR(keynode))); 725f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsSetValue(options, name, STR(valnode))); 73f996e368SLisandro Dalcin 74f996e368SLisandro Dalcin } else if (valnode->type == YAML_SEQUENCE_NODE) { 75f996e368SLisandro Dalcin PetscSegBuffer seg; 76f996e368SLisandro Dalcin char *buf, *strlist; 77f996e368SLisandro Dalcin PetscBool addSep = PETSC_FALSE; 78f996e368SLisandro Dalcin 795f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSegBufferCreate(sizeof(char), PETSC_MAX_PATH_LEN, &seg)); 80f996e368SLisandro Dalcin for (yaml_node_item_t *item = SEQ(valnode).start; item < SEQ(valnode).top; item++) { 81f996e368SLisandro Dalcin yaml_node_t *itemnode = yaml_document_get_node(doc, *item); 82f996e368SLisandro Dalcin const char *itemstr = NULL; 83f996e368SLisandro Dalcin size_t itemlen; 84f996e368SLisandro Dalcin 85*28b400f6SJacob Faibussowitsch PetscCheck(itemnode,comm, PETSC_ERR_LIB, "Corrupt YAML document"); 86f996e368SLisandro Dalcin 87f996e368SLisandro Dalcin if (itemnode->type == YAML_SCALAR_NODE) { 88f996e368SLisandro Dalcin itemstr = STR(itemnode); 89f996e368SLisandro Dalcin 90f996e368SLisandro Dalcin } else if (itemnode->type == YAML_MAPPING_NODE) { 91f996e368SLisandro Dalcin yaml_node_pair_t *kvn = itemnode->data.mapping.pairs.start; 92f996e368SLisandro Dalcin yaml_node_pair_t *top = itemnode->data.mapping.pairs.top; 93f996e368SLisandro Dalcin 942c71b3e2SJacob Faibussowitsch PetscCheckFalse(top - kvn > 1,comm, PETSC_ERR_SUP, "Unsupported YAML node value: expected a single key:value pair"); 95f996e368SLisandro Dalcin if (top - kvn > 0) { 96f996e368SLisandro Dalcin yaml_node_t *kn = yaml_document_get_node(doc, kvn->key); 97f996e368SLisandro Dalcin yaml_node_t *vn = yaml_document_get_node(doc, kvn->value); 98f996e368SLisandro Dalcin 99*28b400f6SJacob Faibussowitsch PetscCheck(kn,comm, PETSC_ERR_LIB, "Corrupt YAML document"); 100*28b400f6SJacob Faibussowitsch PetscCheck(vn,comm, PETSC_ERR_LIB, "Corrupt YAML document"); 1012c71b3e2SJacob Faibussowitsch PetscCheckFalse(kn->type != YAML_SCALAR_NODE,comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected scalar"); 102f996e368SLisandro Dalcin 1035f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrcmp(STR(kn), "<<", &isMergeKey)); 104*28b400f6SJacob Faibussowitsch PetscCheck(!isMergeKey,comm, PETSC_ERR_SUP, "Unsupported YAML node value: merge key '<<' not supported here"); 105f996e368SLisandro Dalcin 1065f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrbeginswith(STR(kn), "$$", &isDummyKey)); 107f996e368SLisandro Dalcin if (isDummyKey) continue; 108f996e368SLisandro Dalcin itemstr = STR(kn); 109f996e368SLisandro Dalcin } 110f996e368SLisandro Dalcin 1115f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSNPrintf(prefix,sizeof(prefix), "%s_", STR(keynode))); 1125f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsPrefixPush(options, prefix)); 1135f80ce2aSJacob Faibussowitsch CHKERRQ(PetscParseLayerYAML(options, doc, itemnode)); 1145f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsPrefixPop(options)); 115f996e368SLisandro Dalcin 116f996e368SLisandro Dalcin } else SETERRQ(comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected scalar or mapping"); 117f996e368SLisandro Dalcin 1185f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrlen(itemstr, &itemlen)); 119f996e368SLisandro Dalcin if (itemlen) { 120f996e368SLisandro Dalcin if (addSep) { 1215f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSegBufferGet(seg, 1, &buf)); 1225f80ce2aSJacob Faibussowitsch CHKERRQ(PetscArraycpy(buf, ",", 1)); 123f996e368SLisandro Dalcin } 1245f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSegBufferGet(seg, itemlen, &buf)); 1255f80ce2aSJacob Faibussowitsch CHKERRQ(PetscArraycpy(buf, itemstr, itemlen)); 126f996e368SLisandro Dalcin addSep = PETSC_TRUE; 127f996e368SLisandro Dalcin } 128f996e368SLisandro Dalcin } 1295f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSegBufferGet(seg, 1, &buf)); 1305f80ce2aSJacob Faibussowitsch CHKERRQ(PetscArrayzero(buf, 1)); 1315f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSegBufferExtractAlloc(seg, &strlist)); 1325f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSegBufferDestroy(&seg)); 133f996e368SLisandro Dalcin 1345f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSNPrintf(name, sizeof(name), "-%s", STR(keynode))); 1355f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsSetValue(options, name, strlist)); 1365f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(strlist)); 137f996e368SLisandro Dalcin 138f996e368SLisandro Dalcin } else if (valnode->type == YAML_MAPPING_NODE) { 1395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSNPrintf(prefix,sizeof(prefix), "%s_", STR(keynode))); 1405f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsPrefixPush(options, prefix)); 1415f80ce2aSJacob Faibussowitsch CHKERRQ(PetscParseLayerYAML(options, doc, valnode)); 1425f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsPrefixPop(options)); 143f996e368SLisandro Dalcin 144f996e368SLisandro Dalcin } else SETERRQ(comm, PETSC_ERR_SUP, "Unsupported YAML node type: expected scalar, sequence or mapping"); 145f996e368SLisandro Dalcin } 146f996e368SLisandro Dalcin PetscFunctionReturn(0); 147f996e368SLisandro Dalcin } 148f996e368SLisandro Dalcin 149f996e368SLisandro Dalcin /*@C 150f996e368SLisandro Dalcin PetscOptionsInsertStringYAML - Inserts YAML-formatted options into the database from a string 151f996e368SLisandro Dalcin 152f996e368SLisandro Dalcin Logically Collective 153f996e368SLisandro Dalcin 154d8d19677SJose E. Roman Input Parameters: 155f996e368SLisandro Dalcin + options - options database, use NULL for default global database 156f996e368SLisandro Dalcin - in_str - YAML-formatted string options 157f996e368SLisandro Dalcin 158f996e368SLisandro Dalcin Level: intermediate 159f996e368SLisandro Dalcin 160f996e368SLisandro Dalcin .seealso: PetscOptionsSetValue(), PetscOptionsView(), PetscOptionsHasName(), PetscOptionsGetInt(), 161f996e368SLisandro Dalcin PetscOptionsGetReal(), PetscOptionsGetString(), PetscOptionsGetIntArray(), PetscOptionsBool(), 162f996e368SLisandro Dalcin PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 163f996e368SLisandro Dalcin PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 164f996e368SLisandro Dalcin PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 165f996e368SLisandro Dalcin PetscOptionsFList(), PetscOptionsEList(), PetscOptionsInsertFile(), PetscOptionsInsertFileYAML() 166f996e368SLisandro Dalcin @*/ 167f996e368SLisandro Dalcin PetscErrorCode PetscOptionsInsertStringYAML(PetscOptions options,const char in_str[]) 168f996e368SLisandro Dalcin { 169f996e368SLisandro Dalcin MPI_Comm comm = PetscYAMLGetComm(); 170f996e368SLisandro Dalcin yaml_parser_t parser; 171f996e368SLisandro Dalcin yaml_document_t doc; 172f996e368SLisandro Dalcin yaml_node_t *root; 173f996e368SLisandro Dalcin PetscErrorCode ierr; 174f996e368SLisandro Dalcin 175f996e368SLisandro Dalcin PetscFunctionBegin; 176f996e368SLisandro Dalcin if (!in_str) in_str = ""; 177*28b400f6SJacob Faibussowitsch ierr = !yaml_parser_initialize(&parser); PetscCheck(!ierr,comm, PETSC_ERR_LIB, "YAML parser initialization error"); 178f996e368SLisandro Dalcin yaml_parser_set_input_string(&parser, (const unsigned char *)in_str, strlen(in_str)); 179f996e368SLisandro Dalcin do { 180*28b400f6SJacob Faibussowitsch ierr = !yaml_parser_load(&parser, &doc); PetscCheck(!ierr,comm, PETSC_ERR_LIB, "YAML parser loading error"); 181f996e368SLisandro Dalcin root = yaml_document_get_root_node(&doc); 182f996e368SLisandro Dalcin if (root) { 1835f80ce2aSJacob Faibussowitsch CHKERRQ(PetscParseLayerYAML(options, &doc, root)); 184f996e368SLisandro Dalcin } 185f996e368SLisandro Dalcin yaml_document_delete(&doc); 186f996e368SLisandro Dalcin } while (root); 187f996e368SLisandro Dalcin yaml_parser_delete(&parser); 188f996e368SLisandro Dalcin PetscFunctionReturn(0); 189f996e368SLisandro Dalcin } 190f996e368SLisandro Dalcin 191f996e368SLisandro Dalcin /*@C 1927a30eb05SPatrick Sanan PetscOptionsInsertFileYAML - Insert a YAML-formatted file in the options database 193f996e368SLisandro Dalcin 194f996e368SLisandro Dalcin Collective 195f996e368SLisandro Dalcin 196d8d19677SJose E. Roman Input Parameters: 197f996e368SLisandro Dalcin + comm - the processes that will share the options (usually PETSC_COMM_WORLD) 198f996e368SLisandro Dalcin . options - options database, use NULL for default global database 199f996e368SLisandro Dalcin . file - name of file 200f996e368SLisandro Dalcin - require - if PETSC_TRUE will generate an error if the file does not exist 201f996e368SLisandro Dalcin 202f996e368SLisandro Dalcin PETSc will generate an error condition that stops the program if a YAML error 203f996e368SLisandro Dalcin is detected, hence the user should check that the YAML file is valid before 204f996e368SLisandro Dalcin supplying it, for instance at http://www.yamllint.com/ . 205f996e368SLisandro Dalcin 2067a30eb05SPatrick Sanan Uses PetscOptionsInsertStringYAML(). 207f996e368SLisandro Dalcin 208f996e368SLisandro Dalcin Level: intermediate 209f996e368SLisandro Dalcin 210f996e368SLisandro Dalcin .seealso: PetscOptionsSetValue(), PetscOptionsView(), PetscOptionsHasName(), PetscOptionsGetInt(), 211f996e368SLisandro Dalcin PetscOptionsGetReal(), PetscOptionsGetString(), PetscOptionsGetIntArray(), PetscOptionsBool(), 212f996e368SLisandro Dalcin PetscOptionsName(), PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsHead(), 213f996e368SLisandro Dalcin PetscOptionsStringArray(),PetscOptionsRealArray(), PetscOptionsScalar(), 214f996e368SLisandro Dalcin PetscOptionsBoolGroupBegin(), PetscOptionsBoolGroup(), PetscOptionsBoolGroupEnd(), 215f996e368SLisandro Dalcin PetscOptionsFList(), PetscOptionsEList(), PetscOptionsInsertFile(), PetscOptionsInsertStringYAML() 216f996e368SLisandro Dalcin @*/ 217f996e368SLisandro Dalcin PetscErrorCode PetscOptionsInsertFileYAML(MPI_Comm comm,PetscOptions options,const char file[],PetscBool require) 218f996e368SLisandro Dalcin { 219f996e368SLisandro Dalcin int yamlLength = -1; 220f996e368SLisandro Dalcin char *yamlString = NULL; 221f996e368SLisandro Dalcin MPI_Comm prev; 222f996e368SLisandro Dalcin PetscMPIInt rank; 223f996e368SLisandro Dalcin 224f996e368SLisandro Dalcin PetscFunctionBegin; 2255f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(comm, &rank)); 226dd400576SPatrick Sanan if (rank == 0) { 227f996e368SLisandro Dalcin char fpath[PETSC_MAX_PATH_LEN]; 228f996e368SLisandro Dalcin char fname[PETSC_MAX_PATH_LEN]; 229f996e368SLisandro Dalcin FILE *fd; 230f996e368SLisandro Dalcin size_t rd; 231f996e368SLisandro Dalcin 2325f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrreplace(PETSC_COMM_SELF, file, fpath, sizeof(fpath))); 2335f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFixFilename(fpath, fname)); 234f996e368SLisandro Dalcin 235f996e368SLisandro Dalcin fd = fopen(fname, "r"); 236f996e368SLisandro Dalcin if (fd) { 237f996e368SLisandro Dalcin fseek(fd, 0, SEEK_END); 238f996e368SLisandro Dalcin yamlLength = (int)ftell(fd); 239f996e368SLisandro Dalcin fseek(fd, 0, SEEK_SET); 2402c71b3e2SJacob Faibussowitsch PetscCheckFalse(yamlLength < 0,PETSC_COMM_SELF, PETSC_ERR_FILE_OPEN, "Unable to query size of YAML file: %s", fname); 2415f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(yamlLength+1, &yamlString)); 242f996e368SLisandro Dalcin rd = fread(yamlString, 1, (size_t)yamlLength, fd); 2432c71b3e2SJacob Faibussowitsch PetscCheckFalse(rd != (size_t)yamlLength,PETSC_COMM_SELF, PETSC_ERR_FILE_READ, "Unable to read entire YAML file: %s", fname); 244f996e368SLisandro Dalcin yamlString[yamlLength] = 0; 245f996e368SLisandro Dalcin fclose(fd); 246f996e368SLisandro Dalcin } 247f996e368SLisandro Dalcin } 248f996e368SLisandro Dalcin 2495f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Bcast(&yamlLength, 1, MPI_INT, 0, comm)); 2502c71b3e2SJacob Faibussowitsch PetscCheckFalse(require && yamlLength < 0,comm, PETSC_ERR_FILE_OPEN, "Unable to open YAML option file: %s", file); 251f996e368SLisandro Dalcin if (yamlLength < 0) PetscFunctionReturn(0); 252f996e368SLisandro Dalcin 2535f80ce2aSJacob Faibussowitsch if (rank) CHKERRQ(PetscMalloc1(yamlLength+1, &yamlString)); 2545f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Bcast(yamlString, yamlLength+1, MPI_CHAR, 0, comm)); 255f996e368SLisandro Dalcin 256f996e368SLisandro Dalcin prev = PetscYAMLSetComm(comm); 2575f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsInsertStringYAML(options, yamlString)); 258f996e368SLisandro Dalcin (void) PetscYAMLSetComm(prev); 259f996e368SLisandro Dalcin 2605f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(yamlString)); 261f996e368SLisandro Dalcin PetscFunctionReturn(0); 262f996e368SLisandro Dalcin } 263951eb098SLisandro Dalcin 264951eb098SLisandro Dalcin #if !defined(PETSC_HAVE_YAML) 265951eb098SLisandro Dalcin 266951eb098SLisandro Dalcin /* 267951eb098SLisandro Dalcin #if !defined(PETSC_HAVE_STRDUP) 268951eb098SLisandro Dalcin #define strdup(s) (char*)memcpy(malloc(strlen(s)+1),s,strlen(s)+1) 269951eb098SLisandro Dalcin #endif 270951eb098SLisandro Dalcin */ 271951eb098SLisandro Dalcin 272951eb098SLisandro Dalcin /* Embed LibYAML in this compilation unit */ 273951eb098SLisandro Dalcin #include <../src/sys/yaml/src/api.c> 274951eb098SLisandro Dalcin #include <../src/sys/yaml/src/loader.c> 275951eb098SLisandro Dalcin #include <../src/sys/yaml/src/parser.c> 276951eb098SLisandro Dalcin #include <../src/sys/yaml/src/reader.c> 2776d1d8577SJunchao Zhang 2786d1d8577SJunchao Zhang /* 2796d1d8577SJunchao Zhang Avoid compiler warnings like 2806d1d8577SJunchao Zhang scanner.c, line 3181: warning: integer conversion resulted in a change of sign 2816d1d8577SJunchao Zhang *(string.pointer++) = '\xC2'; 2826d1d8577SJunchao Zhang 2836d1d8577SJunchao Zhang Once yaml fixes them, we can remove the pragmas 2846d1d8577SJunchao Zhang */ 2856d1d8577SJunchao Zhang #pragma GCC diagnostic push 2866d1d8577SJunchao Zhang #pragma GCC diagnostic ignored "-Wsign-conversion" 287951eb098SLisandro Dalcin #include <../src/sys/yaml/src/scanner.c> 2886d1d8577SJunchao Zhang #pragma GCC diagnostic pop 289951eb098SLisandro Dalcin 290951eb098SLisandro Dalcin /* Silence a few unused-function warnings */ 291951eb098SLisandro Dalcin static PETSC_UNUSED void petsc_yaml_unused(void) 292951eb098SLisandro Dalcin { 293951eb098SLisandro Dalcin (void)yaml_parser_scan; 294951eb098SLisandro Dalcin (void)yaml_document_get_node; 295951eb098SLisandro Dalcin (void)yaml_parser_set_encoding; 296951eb098SLisandro Dalcin (void)yaml_parser_set_input; 297951eb098SLisandro Dalcin (void)yaml_parser_set_input_file; 298951eb098SLisandro Dalcin } 299951eb098SLisandro Dalcin 300951eb098SLisandro Dalcin #endif 301