cdlcompilertoolkit/src/CdlTkWriteDll.cpp
changeset 0 f58d6ec98e88
child 1 b700e12870ca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cdlcompilertoolkit/src/CdlTkWriteDll.cpp	Thu Dec 17 09:14:18 2009 +0200
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#pragma warning (disable:4786)	// disable "identifier was truncated to '255' characters in the browser information" warning
+#include "CdlCompilerToolkit/CdlTkProcess.h"
+#include "CdlTkPriv.h"
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <sstream>
+using namespace std;
+
+namespace CdlCompilerToolkit {
+
+CCdlTkWriteDll::CCdlTkWriteDll(const CCdlTkDll& aDll)
+: iDll(aDll)
+	{
+	}
+
+CCdlTkWriteDll::~CCdlTkWriteDll()
+	{
+	}
+
+void CCdlTkWriteDll::Process()
+	{
+	WriteBldInf();
+	WriteMmp();
+	WriteMainCpp();
+	WriteInstanceIdHeader();
+	WriteEcomRss();
+	WriteEcomDetailRss();
+	}
+
+
+//
+// BLD.INF
+//
+
+const string KBldInf = "\
+/*\n\
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n\
+* All rights reserved.\n\
+* This component and the accompanying materials are made available\n\
+* under the terms of  \"Eclipse Public License v1.0\"\n\
+* which accompanies this distribution, and is available\n\
+* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n\
+*\n\
+* Initial Contributors:\n\
+* Nokia Corporation - initial contribution.\n\
+*\n\
+* Contributors:\n\
+*\n\
+* Description:\n\
+*\n\
+*/\n\n\
+// This file was generated by:\n\
+// $CMDLINE\n\
+// It lists the makefile for a customisation DLL.\n\
+// It may be modified manually.\n\
+\n\
+PRJ_MMPFILES\n\
+$MMP_NAME\n";
+
+void CCdlTkWriteDll::WriteBldInf() const
+	{
+	string name = CdlTkUtil::OutputPath() + "bld.inf";
+	ofstream stream;
+	CCdlTkFileCleanup tempFile;
+	CdlTkUtil::OpenTempOutput(stream, tempFile);
+	stream << 
+		CdlTkUtil::Replace("$CMDLINE", CdlTkUtil::CommandLine(),
+		CdlTkUtil::Replace("$MMP_NAME", CdlTkUtil::ToLower(CdlTkUtil::StripPath(iDll.Name()+".mmp")), KBldInf));
+	stream.close();
+	CdlTkUtil::ExportFileIfWritable(tempFile, name);
+	}
+
+
+//
+// MMP
+//
+
+const string KMmp = "\
+/*\n\
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n\
+* All rights reserved.\n\
+* This component and the accompanying materials are made available\n\
+* under the terms of \"Eclipse Public License v1.0\"\n\
+* which accompanies this distribution, and is available\n\
+* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n\
+*\n\
+* Initial Contributors:\n\
+* Nokia Corporation - initial contribution.\n\
+*\n\
+* Contributors:\n\
+*\n\
+* Description:\n\
+*\n\
+*/\n\n\
+// This file was generated by:\n\
+// $CMDLINE\n\
+// It contains the project definition for a customisation DLL.\n\
+// It may be modified manually.\n\
+#include <platform_paths.hrh>\n\
+\n\
+target           $UID.dll\n\
+targettype		 PLUGIN\n\
+UID 			 0x10009D8D 0x$UID\n\
+CAPABILITY       CAP_ECOM_PLUGIN\n\
+VENDORID         VID_DEFAULT\n\
+\n\
+SOURCEPATH       .\n\
+userinclude      .\n\
+systeminclude    .\n\
+MW_LAYER_SYSTEMINCLUDE\n\
+\n\
+source           $DLL_SRC_NAME.cpp\n\
+$SOURCE\
+\n\
+library          euser.lib\n\
+$LIBRARIES\
+\n\
+START RESOURCE	 $UID.rss\n\
+TARGET       $UID.rsc\n\
+END\n\
+START RESOURCE   $UID_cdl_detail.rss\n\
+TARGETPATH       resource\\cdl\n\
+END\n\
+\n\
+$EXTRA";
+
+const string KMmpSourceLine = "source           $NAME.cpp\n";
+const string KMmpLibLine = "library          $NAME\n";
+
+void CCdlTkWriteDll::WriteMmp() const
+	{
+	string name = CdlTkUtil::ToLower(CdlTkUtil::OutputPath() + iDll.Name() + ".mmp");
+	ofstream stream;
+	CCdlTkFileCleanup tempFile;
+	CdlTkUtil::OpenTempOutput(stream, tempFile);
+
+	string source;
+	for (CCdlTkDll::CInstances::const_iterator pName = iDll.Instances().begin(); pName != iDll.Instances().end(); ++pName)
+		CdlTkUtil::AppendString(source, CdlTkUtil::Replace("$NAME", CdlTkUtil::CorrectFilenameCase(*pName), KMmpSourceLine));
+
+	string libraries;
+	for (CCdlTkDll::CLibraries::const_iterator pLib = iDll.Libraries().begin(); pLib != iDll.Libraries().end(); ++pLib)
+		CdlTkUtil::AppendString(libraries, CdlTkUtil::Replace("$NAME", *pLib, KMmpLibLine));
+
+	CdlTkUtil::CReplaceSet mmpSet;
+	mmpSet.Add("$DLL_NAME", iDll.Name());
+	mmpSet.Add("$DLL_SRC_NAME", CdlTkUtil::CorrectFilenameCase(iDll.Name()));
+	mmpSet.Add("$UID", CdlTkUtil::IntToHexString(iDll.Uid()).substr(2));
+	mmpSet.Add("$SOURCE", source);
+	mmpSet.Add("$LIBRARIES", libraries);
+	mmpSet.Add("$EXTRA", iDll.ExtraMmp());
+	mmpSet.Add("$CMDLINE", CdlTkUtil::CommandLine());
+	string mmp = CdlTkUtil::MultiReplace(mmpSet, KMmp);
+
+	stream << mmp;
+	stream.close();
+
+	CdlTkUtil::ExportFileIfWritable(tempFile, name);
+	}
+
+
+//
+// CPP
+//
+
+const string KMainCpp = "\
+/*\n\
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n\
+* All rights reserved.\n\
+* This component and the accompanying materials are made available\n\
+* under the terms of \"Eclipse Public License v1.0\"\n\
+* which accompanies this distribution, and is available\n\
+* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n\
+*\n\
+* Initial Contributors:\n\
+* Nokia Corporation - initial contribution.\n\
+*\n\
+* Contributors:\n\
+*\n\
+* Description:\n\
+*\n\
+*/\n\n\
+// This file was generated by:\n\
+// $CMDLINE\n\
+// This is the main source file for a customisation DLL.\n\
+// It may be modified manually.\n\
+\n\
+$INCLUDES\
+\n\
+CDL_ARRAY_START(SCdlCustomisation, KCdlData)\n\
+\t{\n\
+$INSTANCES\
+\t}\n\
+CDL_ARRAY_END(SCdlCustomisation, KCdlData);\n\
+\n\
+GLREF_D const SCdlMain KCdlMainExport =\n\
+\t{\n\
+\t$MAJOR_VER,\n\
+\t$MINOR_VER,\n\
+\t&KCdlData\n\
+\t};\n\
+\n\
+#include <ecom/ecom.h>\n\
+#include <ecom/implementationproxy.h>\n\
+\n\
+static TAny* MainExport()\n\
+	{\n\
+	return (TAny*)&KCdlMainExport;\n\
+	}\n\
+\n\
+const TImplementationProxy ImplementationTable[] =\n\
+	{\n\
+		{{$DLLUID}, ::MainExport}\n\
+	};\n\
+\n\
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)\n\
+	{\n\
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);\n\
+	return ImplementationTable;\n\
+	}\n\
+\n\
+\n";
+
+string KMainCppInclude = "#include \"$NAME.h\"\n";
+string KMainCppInstance = "\t\tCDL_CUSTOMISATION($CPP_NAME),\n";
+
+void CCdlTkWriteDll::WriteMainCpp() const
+	{
+	string name = CdlTkUtil::CorrectFilenameCase(CdlTkUtil::OutputPath() + iDll.Name() + ".cpp");
+	ofstream stream;
+	CCdlTkFileCleanup tempFile;
+	CdlTkUtil::OpenTempOutput(stream, tempFile);
+
+	string includes;
+	string instances;
+	for (CCdlTkDll::CInstances::const_iterator pName = iDll.Instances().begin(); pName != iDll.Instances().end(); ++pName)
+		{
+		CdlTkUtil::AppendString(includes, CdlTkUtil::Replace("$NAME", CdlTkUtil::ToLower(*pName), KMainCppInclude));
+		CdlTkUtil::AppendString(instances, CdlTkUtil::Replace("$CPP_NAME", CdlTkUtil::ToCpp(*pName), KMainCppInstance));
+		}
+
+	stringstream majorVer;
+	majorVer << KCdlCompilerMajorVersion;
+
+	stringstream minorVer;
+	minorVer << KCdlCompilerMinorVersion;
+
+	CdlTkUtil::CReplaceSet cppSet;
+	cppSet.Add("$MAJOR_VER", majorVer.str());
+	cppSet.Add("$MINOR_VER", minorVer.str());
+	cppSet.Add("$INCLUDES", includes);
+	cppSet.Add("$INSTANCES", instances);
+	cppSet.Add("$CMDLINE", CdlTkUtil::CommandLine());
+	cppSet.Add("$DLLUID", CdlTkUtil::IntToHexString(iDll.Uid()));
+	string cpp = CdlTkUtil::MultiReplace(cppSet, KMainCpp);
+
+	stream << cpp;
+	stream.close();
+
+	CdlTkUtil::ExportFileIfWritable(tempFile, name);
+	}
+
+//
+// Instance ID Header
+//
+
+const string KInstHeaderBody = "\
+/*\n\
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n\
+* All rights reserved.\n\
+* This component and the accompanying materials are made available\n\
+* under the terms of \"Eclipse Public License v1.0\"\n\
+* which accompanies this distribution, and is available\n\
+* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n\
+*\n\
+* Initial Contributors:\n\
+* Nokia Corporation - initial contribution.\n\
+*\n\
+* Contributors:\n\
+*\n\
+* Description:\n\
+*\n\
+*/\n\n\
+// Header file for automatic instance id assignment for $DLL_NAME, generated by:\n\
+// $CMDLINE\n\
+#ifndef $DLL_NAME_INST_IDS\n\
+#define $DLL_NAME_INST_IDS\n\
+\n\
+$IDS\
+\n\
+#endif\n";
+
+const string KInstHeaderId = "#define $ID $NUM\n";
+
+void CCdlTkWriteDll::WriteInstanceIdHeader() const
+	{
+	string name = CdlTkUtil::ToLower(CdlTkUtil::OutputPath() + KDllInstHeader);
+	ofstream stream;
+	CCdlTkFileCleanup tempFile;
+	CdlTkUtil::OpenTempOutput(stream, tempFile);
+
+	int num = 0;
+	string ids;
+	for (CCdlTkDll::CInstances::const_iterator pName = iDll.Instances().begin(); pName != iDll.Instances().end(); ++pName)
+		{
+		string name = CCdlTkInstance::InstanceNameToDllInstanceName(*pName);
+		string id = CdlTkUtil::Replace("$ID", name, KInstHeaderId);
+		id = CdlTkUtil::Replace("$NUM", CdlTkUtil::IntToHexString(num), id);
+		CdlTkUtil::AppendString(ids, id);
+		num++;
+		}
+
+	CdlTkUtil::CReplaceSet headerSet;
+	headerSet.Add("$DLL_NAME", iDll.Name());
+	headerSet.Add("$IDS", ids);
+	headerSet.Add("$CMDLINE", CdlTkUtil::CommandLine());
+	string header = CdlTkUtil::MultiReplace(headerSet, KInstHeaderBody);
+
+	stream << header;
+	stream.close();
+
+	CdlTkUtil::ExportFileIfWritable(tempFile, name);
+	}
+
+const string KEComRss = "\
+/*\n\
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n\
+* All rights reserved.\n\
+* This component and the accompanying materials are made available\n\
+* under the terms of \"Eclipse Public License v1.0\"\n\
+* which accompanies this distribution, and is available\n\
+* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n\
+*\n\
+* Initial Contributors:\n\
+* Nokia Corporation - initial contribution.\n\
+*\n\
+* Contributors:\n\
+*\n\
+* Description:\n\
+*\n\
+*/\n\n\
+#include <ecom/registryinfo.rh>\n\
+#include <cdlecom.hrh>\n\
+\n\
+CDL_ECOM_MAIN_REG_WITH_VERSION(0x$DLLUID, $DLLVER)\n";
+
+void CCdlTkWriteDll::WriteEcomRss() const
+	{
+	string dllUid = CdlTkUtil::IntToHexString(iDll.Uid()).substr(2);
+	string dllVer = CdlTkUtil::IntToString(iDll.Version());
+	string name = CdlTkUtil::ToLower(CdlTkUtil::OutputPath() + dllUid + ".rss");
+	ofstream stream;
+	CCdlTkFileCleanup tempFile;
+	CdlTkUtil::OpenTempOutput(stream, tempFile);
+
+	CdlTkUtil::CReplaceSet rssSet;
+	rssSet.Add("$DLLUID", dllUid);
+	rssSet.Add("$DLLVER", dllVer);
+	string rss = CdlTkUtil::MultiReplace(rssSet, KEComRss);
+
+	stream << rss;
+	stream.close();
+
+	CdlTkUtil::ExportFileIfWritable(tempFile, name);
+	}
+
+const string KEComDetailRss = "\
+/*\n\
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n\
+* All rights reserved.\n\
+* This component and the accompanying materials are made available\n\
+* under the terms of \"Eclipse Public License v1.0\"\n\
+* which accompanies this distribution, and is available\n\
+* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n\
+*\n\
+* Initial Contributors:\n\
+* Nokia Corporation - initial contribution.\n\
+*\n\
+* Contributors:\n\
+*\n\
+* Description:\n\
+*\n\
+*/\n\n\
+#include <cdlecom.rh>\n\
+#include <cdlecom.hrh>\n\
+\n\
+$INCLUDES\
+\n\
+CDL_ECOM_REG_DETAIL_START\n\
+$INSTANCES\
+CDL_ECOM_REG_DETAIL_END\n";
+
+string KDetailRssInclude = "#include \"$NAME.hrh\"\n";
+string KDetailRssInstance = "\tCDL_ECOM_DETAIL_IMPL($CPP_NAME)\n";
+
+void CCdlTkWriteDll::WriteEcomDetailRss() const
+	{
+	string dllUid = CdlTkUtil::IntToHexString(iDll.Uid()).substr(2);
+	string name = CdlTkUtil::ToLower(CdlTkUtil::OutputPath() + dllUid + "_cdl_detail.rss");
+	ofstream stream;
+	CCdlTkFileCleanup tempFile;
+	CdlTkUtil::OpenTempOutput(stream, tempFile);
+
+	string includes;
+	string instances;
+	CCdlTkDll::CInstances::const_iterator begin = iDll.Instances().begin();
+	for (CCdlTkDll::CInstances::const_iterator pName = begin; pName != iDll.Instances().end(); ++pName)
+		{
+		string instance = (pName != begin) ? "," : "";
+		instance += CdlTkUtil::Replace("$CPP_NAME", CdlTkUtil::ToCpp(*pName), KDetailRssInstance);
+		CdlTkUtil::AppendString(instances, instance);
+		CdlTkUtil::AppendString(includes, CdlTkUtil::Replace("$NAME", CdlTkUtil::ToLower(*pName), KDetailRssInclude));
+		}
+
+	CdlTkUtil::CReplaceSet rssSet;
+	rssSet.Add("$INCLUDES", includes);
+	rssSet.Add("$INSTANCES", instances);
+	string rss = CdlTkUtil::MultiReplace(rssSet, KEComDetailRss);
+
+	stream << rss;
+	stream.close();
+
+	CdlTkUtil::ExportFileIfWritable(tempFile, name);
+	}
+
+}	// end of namespace CdlCompilerToolkit