[kelbt-users] [(maybe) bug fix + patch] resolve included files relative to current '.kl'/'.kh' file
Elijah Epifanov
elijah.epifanov at gmail.com
Wed Jan 14 22:34:57 UTC 2009
diff -Naur klscan.old.rl klscan.rl
--- klscan.old.rl 2008-10-07 03:42:24.000000000 +0400
+++ klscan.rl 2009-01-15 01:31:23.000000000 +0300
@@ -181,15 +181,30 @@
//cout << "INCLUDE STATEMENT " << includeFileName << endl;
/* Open the input file for reading. */
- ifstream *inFile = new ifstream( includeFileName );
+ char *completeFileName = (char*) malloc(strlen(includeFileName) +
strlen(fileName) + 2);
+ char *lastSlash = strrchr(fileName, '/');
+ if (lastSlash == NULL) {
+ free(completeFileName);
+ completeFileName = includeFileName;
+ } else {
+ memcpy(completeFileName, fileName, lastSlash - fileName);
+ completeFileName[lastSlash - fileName] = '/';
+ strcpy(completeFileName + (lastSlash - fileName) + 1, includeFileName);
+ }
+
+
+ ifstream *inFile = new ifstream( completeFileName );
istream *inStream = inFile;
if ( ! inFile->is_open() )
- error() << "include: could not open " << includeFileName << " for
reading" << endl;
+ error() << "include: could not open " << completeFileName << " for
reading" << endl;
- Scanner subScanner( includeFileName, *inStream, parserDict,
include_depth+1 );
+ Scanner subScanner( completeFileName, *inStream, parserDict,
include_depth+1 );
subScanner.do_scan();
delete inFile;
+ if (completeFileName != includeFileName) {
+ free(completeFileName);
+ }
}
action handle_write
===================================
I needed this because I use scons build system, it invokes kelbt like this:
$ kelbt build/module_parser.kl -o build/module_parser.cpp
ps: diff against 0.13 version
More information about the kelbt-users
mailing list