[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