static void recurseThroughIncludes(char *fileName, struct lm *lm, struct hash *circularHash, struct raLevel *level, struct raFile **pFileList) /* Recurse through include files. */ { struct raFile *raFile = raFileRead(fileName, level, lm); slAddHead(pFileList, raFile); struct raRecord *r; for (r = raFile->recordList; r != NULL; r = r->next) { struct raTag *tag = r->tagList; if (sameString(tag->name, "include")) { for (; tag != NULL; tag = tag->next) { if (!sameString(tag->name, "include")) recordAbort(r, "Non-include tag %s in an include stanza", tag->name); char *relPath = tag->val; char dir[PATH_LEN]; splitPath(fileName, dir, NULL, NULL); char includeName[PATH_LEN]; safef(includeName, sizeof(includeName), "%s%s", dir, relPath); if (hashLookup(circularHash, includeName)) recordAbort(r, "Including file %s in an infinite loop", includeName); recurseThroughIncludes(includeName, lm, circularHash, level, pFileList); } } } }
int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (optionExists("help")) { printHelp(); } if (argc != 3) { usage(); } outMdb = optionVal("outMdb", outMdb); onlyCompTdb = optionExists("onlyCompTdb"); release = optionVal("release", release); releaseNum = optionInt("releaseNum", releaseNum); char *database = argv[1]; char *composite = argv[2]; char defaultMetaDb[1024]; char defaultDownloadDir[1024]; char tempDownloadDir[1024]; char *src = getSrcDir(); char *org = cloneString(hOrganism(database)); org[0] = tolower(org[0]); /* If user doesn't provide a metaDB, assume the path using the database and composite */ safef(defaultMetaDb, sizeof(defaultMetaDb), "%s/hg/makeDb/trackDb/%s/%s/metaDb/%s/%s.ra", src, org, database, release, composite); /* If user doesn't provide a downloadDir, assume the path using the database and composite */ safef(defaultDownloadDir, sizeof(defaultDownloadDir), "/usr/local/apache/htdocs-hgdownload/goldenPath/%s/encodeDCC/%s", database, composite); safef(tempDownloadDir, sizeof(tempDownloadDir), "/usr/local/apache/htdocs-hgdownload/goldenPath/%s/encodeDCC/%s", database, composite); if (releaseNum) safef(defaultDownloadDir, sizeof(defaultDownloadDir), "%s/release%d", tempDownloadDir, releaseNum); /* If user doesn't provide a trackDB, assume the path using the database and composite */ char defaultTrackDb[1024]; /* Load encode composite-includer trackDb.wgEncode.ra */ char trackDbIncluder[1024]; safef(trackDbIncluder, sizeof(trackDbIncluder), "%s/hg/makeDb/trackDb/%s/%s/%s", src, org, database, "trackDb.wgEncode.ra"); struct raFile *includerFile = raFileRead(trackDbIncluder); /* Find the correct trackDb.ra for the composite */ int numTagsFound = -1; char *compositeName = findCompositeRa(includerFile, composite, release, &numTagsFound); if (!compositeName) errAbort("unable to find composite .ra for the track in trackDb.wgEncode.ra\n"); // if numTagsFound == 1 then a composite .ra with a single alpha tag exists already, // so no further work required on trackDb.wgEncode.ra safef(defaultTrackDb, sizeof(defaultTrackDb), "%s/hg/makeDb/trackDb/%s/%s/%s", src, org, database, compositeName); verbose(1,"database: %s\ncomposite: %s\nrelease %s\ndefault trackDb: %s\ndefault metaDb: %s\ndefault downloadDir: %s\n", database, composite, release, defaultTrackDb, defaultMetaDb, defaultDownloadDir); char *metaDb = optionVal("metaDb",defaultMetaDb); replaceTildeWithHome(&metaDb); if (!fileExists(metaDb)) errAbort("metaDb %s does not exist.", metaDb); char *trackDb = optionVal("trackDb",defaultTrackDb); replaceTildeWithHome(&trackDb); if (!fileExists(trackDb)) errAbort("trackDb %s does not exist.", trackDb); char *downloadDir = optionVal("downloadDir",defaultDownloadDir); replaceTildeWithHome(&downloadDir); if (!fileExists(downloadDir)) errAbort("downloadDir %s does not exist.", downloadDir); printf("metaDb = %s\n trackDb = %s\n downloadDir = %s\n",metaDb,trackDb,downloadDir); metaCheck(database, composite, metaDb, trackDb, downloadDir); return 0; }