var W = WScript;
var F;
try {
	F = W.CreateObject('Scripting.FileSystemObject');
} catch(e) {
	W.Echo('FSO creation failed: ' + e.message);
	W.Quit(1);
}
var f;
try {
	f = F.GetFile(WScript.ScriptFullName);
} catch(e) {
	W.Echo('I don\'t exit: ' + e.message);
	W.Quit(1);
}

var dir_win32 = f.ParentFolder;
try {
	f = F.GetFolder(dir_win32);
} catch(e) {
	W.Echo('GetFolder failed: ' + e.message);
	W.Quit(1);
}
var dir_root = f.ParentFolder;
var file_versionsta = dir_root + '\\libclamav\\version.h.static';
var file_versionout = dir_root + '\\libclamav\\version.h';

W.Echo('Generating version.h');
if(F.FileExists(file_versionout))
	F.DeleteFile(file_versionout, true);

if(F.FileExists(file_versionsta)) {
	try {
		F.CopyFile(file_versionsta, file_versionout, true);
	} catch(e) {
		W.Echo('Cannot copy '+ file_versionsta +' to ' + file_versionout + ': ' + e.message);
		W.Quit(1);
	}
} else {
	var S;
	var version = '';
	try {
		S = W.CreateObject('WScript.Shell');
	} catch(e) {
		W.Echo('No Shell available: ' + e.message);
		W.Quit(1);
	}
	try {
		var git = S.Exec('git describe --always');
		version = git.StdOut.ReadAll();
		while(git.Status == 0) {
			W.Sleep(100);
		}
		if(git.ExitCode != 0) {
			W.Echo('WARNING: git describe returned ' + git.ExitCode);
			version = '';
		} else {
                        version = version.replace(/[\r\n]+$/, '');
                        if(version.match(/^clamav-([^-]+)$/))
				version = RegExp.$1;
                        else
				version = 'devel-' + version;
			version = '#define REPO_VERSION "' + version + '"';
		}
	} catch (e) {
		W.Echo('WARNING: Error executing git: ' + e.message);
	}
	of = F.CreateTextFile(file_versionout, true);
	if(!of) {
		W.Echo('Cannot open '+file_versionout+' for writing');
		W.Quit(1);
	}
	of.WriteLine('/* AUTOMATICALLY GENERATED BY configure.js */');
	if(version != '')
		of.WriteLine(version);
	else
		W.Echo('WARNING: unable to determine repository revision');
	of.close();
}

W.Echo('Work complete');
W.Quit(0);
