diff --git a/src/deptool.cpp b/src/deptool.cpp
index cf58a7902544fd723e9fdfc84871b866f51049a4..45a01c4e7517e5e619dd9376fc605c700870d119 100644 (file)
--- a/src/deptool.cpp
+++ b/src/deptool.cpp
std::map<String, FileRec *> files;
+ bool checked;
+
private:
void init()
{
+ type = UNKNOWN;
+ checked = false;
}
void assign(const FileRec &other)
baseName = other.baseName;
suffix = other.suffix;
files = other.files;
+ checked = other.checked;
}
};
/**
*
*/
- bool saveDepFile();
+ bool saveDepFile(bool doXml);
+
+ /**
+ *
+ */
+ bool saveCmakeFile();
/**
*
char *fileBuf;
int fileSize;
+
+ static const int readBufLen = 8192;
+ char readBuf[8193];
};
if (fullname.size() < 2)
return;
- unsigned int pos = fullname.find_last_of('/');
+ String::size_type pos = fullname.find_last_of('/');
if (pos != fullname.npos && pos<fullname.size()-1)
{
path = fullname.substr(0, pos);
{
if (fname.size() < 2)
return "";
- unsigned int pos = fname.find_last_of('.');
+ String::size_type pos = fname.find_last_of('.');
if (pos == fname.npos)
return "";
pos++;
return false;
}
String buf;
- while (true)
+ while (!feof(f))
{
- int ch = fgetc(f);
- if (ch < 0)
- break;
- buf.push_back((char)ch);
+ int len = fread(readBuf, 1, readBufLen, f);
+ readBuf[len] = '\0';
+ buf.append(readBuf);
}
fclose(f);
processDependency(ofile, include, 0);
}
+ /*
else if (include->type == FileRec::HFILE)
{
String fname = iter->first;
processReference(hfile, fname, 0);
}
+ */
}
return false;
if (!generateDependencies())
return false;
- saveDepFile();
- saveRefFile(true);
+ saveDepFile(false);
+ saveCmakeFile();
+ //saveRefFile(true);
return true;
}
* This is the main product. This file lists the Include directives,
* the Object list, and the dependency list.
*/
-bool DepTool::saveDepFile()
+bool DepTool::saveDepFile(bool doXml)
{
time_t tim;
time(&tim);
{
trace("cannot open 'make.dep' for writing");
}
- fprintf(f, "########################################################\n");
- fprintf(f, "## File: make.dep\n");
- fprintf(f, "## Generated by DepTool at :%s", ctime(&tim));
- fprintf(f, "########################################################\n");
+ if (doXml)
+ {
+ fprintf(f, "<?xml version='1.0'?>\n");
+ fprintf(f, "<deptool>\n");
+ fprintf(f, "\n");
+ fprintf(f, "<!--\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## File: make.dep\n");
+ fprintf(f, "## Generated by DepTool at :%s", ctime(&tim));
+ fprintf(f, "########################################################\n");
+ fprintf(f, "-->\n");
- fprintf(f, "\n\n");
+ fprintf(f, "\n\n");
- fprintf(f, "########################################################\n");
- fprintf(f, "## I N C L U D E\n");
- fprintf(f, "########################################################\n");
- fprintf(f, "DEPTOOL_INCLUDE =");
+ fprintf(f, "\n");
+ fprintf(f, "<!--\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## I N C L U D E\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "-->\n");
+ fprintf(f, "<includes>\n");
- std::vector<String>::iterator inciter;
- for (inciter=directories.begin() ; inciter!=directories.end() ; inciter++)
- {
- fprintf(f, " \\\n");
- String dirname = *inciter;
- fprintf(f, "-I%s", dirname.c_str());
- }
+ std::vector<String>::iterator inciter;
+ for (inciter=directories.begin() ; inciter!=directories.end() ; inciter++)
+ {
+ String dirname = *inciter;
+ fprintf(f, " <inc name='%s'/>\n", dirname.c_str());
+ }
- fprintf(f, "\n\n\n");
- fprintf(f, "########################################################\n");
- fprintf(f, "## O B J E C T S\n");
- fprintf(f, "########################################################\n");
- fprintf(f, "DEPTOOL_OBJECTS =");
+ fprintf(f, "</includes>\n");
+ fprintf(f, "\n\n\n");
+ fprintf(f, "<!--\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## O B J E C T S\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "-->\n");
+ fprintf(f, "<objects>\n");
- std::map<String, FileRec *>::iterator oiter;
- for (oiter=allFiles.begin() ; oiter!=allFiles.end() ; oiter++)
- {
- FileRec *frec = oiter->second;
- if (frec->type == FileRec::CFILE)
+ std::map<String, FileRec *>::iterator oiter;
+ for (oiter=allFiles.begin() ; oiter!=allFiles.end() ; oiter++)
{
- fprintf(f, " \\\n");
- String fname = frec->path;
- if (fname.size()>0)
- fname.append("/");
- fname.append(frec->baseName);
- fname.append(".o");
- fprintf(f, "%s", fname.c_str());
+ FileRec *frec = oiter->second;
+ if (frec->type == FileRec::CFILE)
+ {
+ String fname = frec->path;
+ if (fname.size()>0)
+ fname.append("/");
+ fname.append(frec->baseName);
+ fname.append(".o");
+ fprintf(f, " <obj name='%s'/>\n", fname.c_str());
+ }
}
- }
- fprintf(f, "\n\n\n");
- fprintf(f, "########################################################\n");
- fprintf(f, "## D E P E N D E N C I E S\n");
- fprintf(f, "########################################################\n");
- std::map<String, FileRec *>::iterator iter;
- for (iter=depFiles.begin() ; iter!=depFiles.end() ; iter++)
+ fprintf(f, "</objects>\n");
+ fprintf(f, "\n\n\n");
+ fprintf(f, "<!--\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## D E P E N D E N C I E S\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "-->\n");
+ fprintf(f, "<dependencies>\n\n");
+ std::map<String, FileRec *>::iterator iter;
+ for (iter=depFiles.begin() ; iter!=depFiles.end() ; iter++)
+ {
+ FileRec *frec = iter->second;
+ if (frec->type == FileRec::OFILE)
+ {
+ String fname = iter->first;
+ fprintf(f, "<file name='%s'>\n", fname.c_str());
+ std::map<String, FileRec *>::iterator citer;
+ for (citer=frec->files.begin() ; citer!=frec->files.end() ; citer++)
+ {
+ String cfname = citer->first;
+ fprintf(f, " <dep name='%s'/>\n", cfname.c_str());
+ }
+ fprintf(f, "</file>\n\n");
+ }
+ }
+
+ fprintf(f, "</dependencies>\n");
+ fprintf(f, "\n\n\n");
+ fprintf(f, "</deptool>\n");
+ fprintf(f, "<!--\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## E N D\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "-->\n");
+ }
+ else // ######### !XML
{
- FileRec *frec = iter->second;
- if (frec->type == FileRec::OFILE)
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## File: make.dep\n");
+ fprintf(f, "## Generated by DepTool at :%s", ctime(&tim));
+ fprintf(f, "########################################################\n");
+
+ fprintf(f, "\n\n");
+
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## I N C L U D E\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "DEPTOOL_INCLUDE =");
+
+ std::vector<String>::iterator inciter;
+ for (inciter=directories.begin() ; inciter!=directories.end() ; inciter++)
+ {
+ fprintf(f, " \\\n");
+ String dirname = *inciter;
+ fprintf(f, "-I%s", dirname.c_str());
+ }
+
+ fprintf(f, "\n\n\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## O B J E C T S\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "DEPTOOL_OBJECTS =");
+
+ std::map<String, FileRec *>::iterator oiter;
+ for (oiter=allFiles.begin() ; oiter!=allFiles.end() ; oiter++)
{
- String fname = iter->first;
- fprintf(f, "%s:", fname.c_str());
- std::map<String, FileRec *>::iterator citer;
- for (citer=frec->files.begin() ; citer!=frec->files.end() ; citer++)
+ FileRec *frec = oiter->second;
+ if (frec->type == FileRec::CFILE)
{
- String cfname = citer->first;
fprintf(f, " \\\n");
- fprintf(f, "\t%s", cfname.c_str());
+ String fname = frec->path;
+ if (fname.size()>0)
+ fname.append("/");
+ fname.append(frec->baseName);
+ fname.append(".o");
+ fprintf(f, "%s", fname.c_str());
}
- fprintf(f, "\n\n\n");
}
- }
- fprintf(f, "\n\n\n");
- fprintf(f, "########################################################\n");
- fprintf(f, "## E N D\n");
- fprintf(f, "########################################################\n");
+
+ fprintf(f, "\n\n\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## D E P E N D E N C I E S\n");
+ fprintf(f, "########################################################\n");
+ std::map<String, FileRec *>::iterator iter;
+ for (iter=depFiles.begin() ; iter!=depFiles.end() ; iter++)
+ {
+ FileRec *frec = iter->second;
+ if (frec->type == FileRec::OFILE)
+ {
+ String fname = iter->first;
+ fprintf(f, "%s:", fname.c_str());
+ std::map<String, FileRec *>::iterator citer;
+ for (citer=frec->files.begin() ; citer!=frec->files.end() ; citer++)
+ {
+ String cfname = citer->first;
+ fprintf(f, " \\\n");
+ fprintf(f, "\t%s", cfname.c_str());
+ }
+ fprintf(f, "\n\n\n");
+ }
+ }
+
+ fprintf(f, "\n\n\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## E N D\n");
+ fprintf(f, "########################################################\n");
+ }
fclose(f);
fprintf(f, "## Note: The metric is the 'distance' of inclusion from\n");
fprintf(f, "## the given file.\n");
fprintf(f, "########################################################\n");
- fprintf(f, "--!>\n");
+ fprintf(f, "-->\n");
fprintf(f, "\n\n");
fprintf(f, "########################################################\n");
fprintf(f, "## E N D\n");
fprintf(f, "########################################################\n");
- fprintf(f, "--!>\n");
+ fprintf(f, "-->\n");
}
else //######### not xml
}
+/**
+ * This is a new thing. It creates a cmake file that should be able to
+ * build the entire thing.
+ */
+bool DepTool::saveCmakeFile()
+{
+ time_t tim;
+ time(&tim);
+
+ FILE *f = fopen("CMakeLists.txt", "w");
+ if (!f)
+ {
+ trace("cannot open 'CMakeLists.txt' for writing");
+ }
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## File: CMakeLists.txt\n");
+ fprintf(f, "## Generated by DepTool at :%s", ctime(&tim));
+ fprintf(f, "########################################################\n");
+
+ fprintf(f, "\n\n");
+
+ fprintf(f, "\n\n\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## P R O J E C T\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "project (INKSCAPE)\n");
+ fprintf(f, "\n\n\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## O B J E C T S\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "set (INKSCAPE_SRCS\n");
+
+ std::map<String, FileRec *>::iterator oiter;
+ for (oiter=allFiles.begin() ; oiter!=allFiles.end() ; oiter++)
+ {
+ FileRec *frec = oiter->second;
+ if (frec->type == FileRec::CFILE)
+ {
+ //fprintf(f, " \\\n");
+ String fname = frec->path;
+ if (fname.size()>0)
+ fname.append("/");
+ fname.append(frec->baseName);
+ fname.append(".");
+ fname.append(frec->suffix);
+ fprintf(f, "%s\n", fname.c_str());
+ }
+ }
+ fprintf(f, ")\n\n");
+
+ fprintf(f, "add_executable (inkscape ${INKSCAPE_SRCS})\n");
+
+ fprintf(f, "\n\n\n");
+ fprintf(f, "########################################################\n");
+ fprintf(f, "## E N D\n");
+ fprintf(f, "########################################################\n");
+
+ fclose(f);
+
+ return true;
+}
+
+