diff -r fa9d7d89d3d6 -r 68f68128601f sbsv1/abld/platform/cl_vscw.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv1/abld/platform/cl_vscw.pm Thu Nov 25 13:59:07 2010 +0000 @@ -0,0 +1,1860 @@ +# Copyright (c) 2001-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: +# + + +package Cl_vscw; + +# declare variables global for module + +my @Win32LibList=(); +my $Win32StdHeaders; +my $BaseAddressFlag; +my $Win32Resrc; + +my $MWCC; +my $MWLD; +my $MWIncludePath; +my $MWIncludeVar; + +# declare variables global for VS6 +my %IdeBlds=(); +my %PrjHdrs=(); +my $DspText=''; +my $VcprojText=''; +my $PlatName=&main::PlatName; +my $guid=''; + +require Exporter; +@ISA=qw(Exporter); +@EXPORT=qw( + PMHelp_Mmp + + PMCheckPlatformL + + PMPlatProcessMmp + + PMStartBldList + PMBld + PMStartSrcList + PMBitMapBld + PMResrcBld + PMAifBld + PMDoc + PMStartSrc + PMSrcDepend + PMSrcBldDepend + PMEndSrcBld + PMEndSrc + PMEndSrcList +); + +use Winutl; +use cl_generic; +use E32Variant; +use lockit_info; + +sub RoundUp1k($) { + # Accept C hexadecimal number (0xNNN). Convert argument to Kb + # rounded up to the next 1kb boundary. + use integer; + return (hex($_[0]) + 1023) / 1024; +} + + +sub PMHelp_Mmp { + &Winutl_Help_Mmp; +} + +sub SysTrg () { + return 1 if &main::SystemTrg; + my $ExportLibrary=&main::ExportLibrary; + return 1 if ($ExportLibrary =~ /EKERN/i); + my $Trg=&main::Trg; + return 1 if ($Trg =~ /KSRT/i); + return 0; +} + +sub PMCheckPlatformL { + + # check version of CodeWarrior for Symbian OS + + if (defined($ENV{MWCSym2Includes})) { + $MWCC = "mwccsym2.exe"; + $MWLD = "mwldsym2.exe"; + } + if (!defined($MWCC) && defined($ENV{MWSym2Libraries})) { + $MWCC = "mwccsym2.exe"; + $MWLD = "mwldsym2.exe"; + } + if (!defined($MWCC) && defined($ENV{CWFolder})) { + $MWCC = "mwcc.exe"; + $MWLD = "mwld.exe"; + } + if (!defined($MWCC)) { + die "ERROR: Unable to identify a valid CodeWarrior for Symbian OS installation\n"; + } + + # determine default include path + + $MWIncludeVar = 'MWCIncludes'; # default, even if it doesn't exist + $MWIncludePath = ''; # default is empty + + foreach my $var ('MWCSym2Includes','MWCWinx86Includes','MWCIncludes') { + if (defined($ENV{$var})) { + $MWIncludePath = $ENV{$var}; + $MWIncludeVar = $var; + last; + } + } +} + +sub PMPlatProcessMmp (@) { + &Winutl_DoMmp(\@_, $MWIncludePath); + $BaseAddressFlag=&Winutl_BaseAddress; + if ($BaseAddressFlag ne "") { + $BaseAddressFlag=" -imagebase \"$BaseAddressFlag\""; + } + @Win32LibList=&Winutl_Win32LibList; + $Win32Resrc=&Winutl_Win32Resrc; + $Win32StdHeaders=&Winutl_Win32StdHeaders; +} + +sub PMStartBldList($) { + my ($makecmd) = @_; + my $AifStructRef=&main::AifStructRef; + my $BaseTrg=&main::BaseTrg; + my $BitMapStructRef=&main::BitMapStructRef; + my @BldList=&main::BldList; + my @ChopSysIncPaths=&main::Path_Chop(&main::SysIncPaths); + my @ChopUserIncPaths=&main::Path_Chop(&main::UserIncPaths); + my $ExportLibrary=&main::ExportLibrary; + my $NoExportLibrary=&main::NoExportLibrary; + my $DefFile=&main::DefFile; + my $BasicTrgType=&main::BasicTrgType; + my $LibPath=&main::LibPath; + my @MacroList=&main::MacroList(); + push @MacroList, "__SUPPORT_CPP_EXCEPTIONS__"; + my $VariantFile=&main::VariantFile(); + my $ResourceStructRef=&main::ResourceStructRef; + my $Plat=&main::Plat; + my $Trg=&main::Trg; + my $TrgType=&main::TrgType; + my $WarningLevel=&main::CompilerOption("CW"); + my $LinkAs=&main::LinkAs; + + &main::Output( + "PATH=$ENV{EPOCROOT}epoc32\\tools\\;$ENV{PATH}", + "\n", + "Path=\$(PATH)", + "\n" + ); + +# Get the drive letter to call the Lada compiler to call it with absolute path + &main::Output( + "COMPILER_PATH=\"$ENV{EPOCROOT}epoc32\\tools\\nokia_compiler\\Symbian_Tools\\Command_Line_Tools\\\"", + "\n" + ); + + Generic_Header(0,$makecmd); # define standard things using absolute paths + + my $TrgDir=""; + my $AifTrgDir=""; + if (&Generic_Definition("TRGDIR") ne "") { + $TrgDir="\$(TRGDIR)\\"; + $AifTrgDir=$TrgDir; + } + +# Handle migration of binaries to secure location + + &Winutl_AdjustTargetPath(\$TrgDir); + +# Change - mwwinrc.exe uses MWWinx86Includes or MWCIncludes, but some installations +# fail to install either. Set MWCIncludes from the chosen variable as part +# of the Makefile. + if (!defined($ENV{MWCIncludes}) && $MWIncludeVar ne 'MWCIncludes') { + &main::Output( + "\n", + "MWCIncludes:=\$($MWIncludeVar)\n", + "export MWCIncludes\n", + "\n" + ); + } + + my $CompilerLibPath="$ENV{EPOCROOT}epoc32\\tools\\nokia_compiler\\Symbian_Support\\Runtime\\Runtime_x86\\Runtime_Win32\\Libs;$ENV{EPOCROOT}epoc32\\tools\\nokia_compiler\\Symbian_Support\\Win32-x86 Support\\Libraries\\Win32 SDK"; + &main::Output( + "\n", + "MWLibraries:=\+$CompilerLibPath\n", + "export MWLibraries\n", + "\n" + ); + &main::Output( + "\n", + "MWLibraryFiles:=gdi32.lib;user32.lib;kernel32.lib;\n", + "export MWLibraryFiles\n", + "\n" + ); + + &main::Output( + "# EPOC DEFINITIONS\n", + "\n", + "INCDIR = -cwd source -i-" + ); + foreach (@ChopUserIncPaths,@ChopSysIncPaths) { + &main::Output( + " \\\n -i \"$_\"" + ); + } + use Pathutl; + if($VariantFile){ + my $variantFilePath = Path_Split('Path',$VariantFile); + $VariantFile = Path_Split('FILE',$VariantFile); + # workaround for codewarrior defect: + # codewarrior at the moment doesn't accept an absolute path with the + # the -include option unless it contains a drive letter, this is solved + # by including the directory and the file separately + &main::Output("\\\n -i \"$variantFilePath \" -include \"$VariantFile\""); + } + &main::Output( + "\n", + "\n" + ); + + &main::Output( + "CWFLAGS =", + " -wchar_t off", # do not treat wchar_t as a predefined type + " -align 4", # long alignment + " -warnings on", # selection of warnings + " -w nohidevirtual", # turn off "hides inherited virtual function" warning + ",nounusedexpr", # turn off "expression has no side effect" warning + " -enum int", # use int for enumeration types + " -str pool", # pool strings into a single data object + " -exc ms", # SEH C++ exception implementation + " $WarningLevel" + + ); + if ($Win32StdHeaders or &main::Plat eq 'TOOLS') { + &main::Output( + " -stdinc" # insist because mwccsym2 has -nostdinc as the default(?) + ); + } + else { + &main::Output( + " -nostdinc" # insist because mwcc has -stdinc as the default. + ); + } + &main::Output( + "\n", + "\n" + ); + + &main::Output( + "CWDEFS = " + ); + foreach(@MacroList) { + &main::Output( + " -d \"$_\"" + ); + } + &main::Output( + " \$(USERDEFS)\n", + "\n" + ); + + foreach (@BldList) { + &main::Output( + "CW$_ = perl -S err_formatter.pl \$(COMPILER_PATH)$MWCC -msgstyle parseable " + ); + if (/DEB$/o) { + + if($PlatName eq "VS6") { + &main::Output( + ' -sym codeview' + ); + } + else + { + &main::Output( + ' -sym codeview_new' + ); + } + + +# euser change to apply inlining on the _NAKED functions + if ($BaseTrg!~/^EUSER$/oi) { + &main::Output( + ' -inline off' + ); + } + } + elsif (/REL$/o) { + &main::Output( + ' -O4,s' # highest level of optimisation, optimise for space + ); + } + &main::Output( + ' $(CWFLAGS)' + ); + foreach (&main::MacroList($_)) { + &main::Output( + " -d $_" + ); + } + &main::Output( + " \$(CWDEFS) \$(INCDIR)\n" + ); + } + &main::Output( + "\n", + "\n" + ); + + foreach (@BldList) { + &main::Output( + "$_ :" + ); + + if ($BasicTrgType !~ /IMPLIB/io) { + &main::Output ( + " \\\n", + "\t", &Generic_Quote("\$(EPOCTRG$_)\\$TrgDir$Trg") + ); + if (&Winutl_CopyForStaticLinkage) { + &main::Output( + " \\\n", + "\t", &Generic_Quote("\$(EPOCTRG$_)\\$Trg") + ); + } + } + +# lib has to come after the main target so that a .DEF file will be generated if the project is not frozen + if ($DefFile and not &main::ExportUnfrozen) { + &main::Output( + " \\\n", + "\tLIBRARY\n" + ); + } + &main::Output( + "\n", + "\n" + ); + } + + foreach (@BldList) { + my $makework="MAKEWORK$_"; + &main::Output( + "\n", + "RESOURCE$_ : $makework" + ); + + my $BitMapRef; + foreach $BitMapRef (@$BitMapStructRef) { + my $file="\$(EPOCTRG$_)\\$$BitMapRef{TrgPath}$$BitMapRef{Trg}"; + &Generic_MakeWorkFile($makework,$file); + &main::Output( + " \\\n", + "\t", &Generic_Quote($file) + ); + } + undef $BitMapRef; + + my $ResourceRef; + foreach $ResourceRef (@$ResourceStructRef) { + my $file="\$(EPOCTRG$_)\\$$ResourceRef{Trg}"; + &Generic_MakeWorkFile($makework,$file); + &main::Output( # must come before main target because source for target will depend on the + " \\\n", # *.rsg file in $EPOCIncPath + "\t", &Generic_Quote("$file") + ); + } + undef $ResourceRef; + + my $AifRef; + foreach $AifRef (@$AifStructRef) { + my $file="\$(EPOCTRG$_)\\$AifTrgDir$$AifRef{Trg}"; + &Generic_MakeWorkFile($makework,$file); + &main::Output( + " \\\n", + "\t", &Generic_Quote($file) + ); + } + undef $AifRef; + + &main::Output( + "\n" + ); + } + &main::Output( + "\n", + "\n", + ); + + &main::Output( + "\n", + "# REAL TARGET - LIBRARY\n", + "\n", + "LIBRARY : MAKEWORKLIBRARY" + ); + if ($BasicTrgType=~/^LIB$/o) { +# code to ensure that the static libraries for all builds are built at the library stage + foreach (@BldList) { + &main::Output( + " $_" + ); + } + } + elsif ($DefFile and !$NoExportLibrary) { + unless (&main::ExportUnfrozen) { + if (-e $DefFile) { # effectively "if project frozen ..." + my $LibLinkAs = ($BasicTrgType=~/^IMPLIB$/io) ? $LinkAs : $Trg; + &main::Output( + " ", &Generic_Quote("\$(EPOCLIB)\\UDEB\\$ExportLibrary.lib"), "\n", + "\n", + &Generic_Quote("\$(EPOCLIB)\\UDEB\\$ExportLibrary.lib"), " : ", + &Generic_Quote($DefFile), "\n", + "\tperl -S prepdef.pl ",&Generic_Quote($DefFile)," \"\$(EPOCBLD)\\$ExportLibrary.prep.def\"\n", + "\t\$(COMPILER_PATH)$MWLD -msgstyle gcc \"\$(EPOCBLD)\\$ExportLibrary.prep.def\" -importlib -o \$\@", + " -addcommand \"out:$LibLinkAs\" -warnings off", + "\n" + ); + } else { + &main::Output( + "\n", + "\t\@echo WARNING: Not attempting to create \"\$(EPOCLIB)\\UDEB\\$ExportLibrary.lib\".\n", + "\t\@echo When exports are frozen in \"$DefFile\", regenerate Makefile.\n" + ); + } + } else { + &main::Output( + "\n", + "\t\@echo Not attempting to create \"\$(EPOCLIB)\\UDEB\\$ExportLibrary.lib\"\n", + "\t\@echo from frozen .DEF file, since EXPORTUNFROZEN specified.\n" + ); + } + } + &main::Output( + "\n", + "\n", + "FREEZE :\n" + ); + if ($DefFile and $BasicTrgType!~/^IMPLIB$/io) { + &main::Output( +# call perl on the script here so nmake will die if there are errors - this doesn't happen if calling perl in a batch file + "\tperl -S efreeze.pl \$(EFREEZE_ALLOW_REMOVE) \"$DefFile\" \"\$(EPOCBLD)\\$ExportLibrary.def\" \n" + ); + } + &main::Output( + "\n", + "CLEANLIBRARY :\n" + ); + if ($DefFile and !$NoExportLibrary) { + &main::Output( + "\t-\$(ERASE) \"\$(EPOCLIB)\\UDEB\\$ExportLibrary.lib\"\n" + ); + } + &main::Output( + "\n" + ); + &Generic_MakeWorkDir('MAKEWORKLIBRARY',"${LibPath}UDEB"); + + &Generic_Releaseables; + + if($PlatName eq "VS6") { + VS6StartBldList(); + } + elsif($PlatName eq "VS2003") + { + VS2003StartBldList(); + } + +} + +sub VS6StartBldList(){ + my $BaseTrg=&main::BaseTrg; + my @BldList=&main::BldList; + my $Plat=&main::Plat; + + # set up global IDE builds variable + %IdeBlds= ( + UREL=> "$BaseTrg - Win32 Release", + UDEB=> "$BaseTrg - Win32 Debug", + ); + if (&main::Plat eq 'TOOLS') { + %IdeBlds= ( + REL=> "$BaseTrg - Win32 Release", + DEB=> "$BaseTrg - Win32 Debug", + ); + } + + + $DspText=join('', + "# Microsoft Developer Studio Project File - Name=\"$BaseTrg\" - Package Owner=<4>\n", + "# Microsoft Developer Studio Generated Build File, Format Version 6.00\n", + "# ** DO NOT EDIT **\n", + "\n" + ); + + $DspText.=join('', + "# TARGTYPE \"Win32 (x86) External Target\" 0x0106\n", + "\n", + "CFG=",$IdeBlds{$BldList[0]},"\n", + "!MESSAGE This is not a valid makefile. To build this project using NMAKE,\n", + "!MESSAGE use the Export Makefile command and run\n", + "!MESSAGE \n", + "!MESSAGE NMAKE /f \"",$BaseTrg,".mak\".\n", + "!MESSAGE \n", + "!MESSAGE You can specify a configuration when running NMAKE\n", + "!MESSAGE by defining the macro CFG on the command line. For example:\n", + "!MESSAGE \n", + "!MESSAGE NMAKE /f \"",$BaseTrg,".mak\" CFG=\"".$IdeBlds{$BldList[0]}."\"\n", + "!MESSAGE \n", + "!MESSAGE Possible choices for configuration are:\n", + "!MESSAGE \n" + ); + + foreach (reverse @BldList) { + $DspText.=join('', + "!MESSAGE \"",$IdeBlds{$_},"\" (based on \"Win32 (x86) External Target\")" + ); + $DspText.="\n"; + } + + $DspText.=join('', + "!MESSAGE \n", + "\n" + ); + + # BEGIN THE PROJECT + #------------------ + $DspText.=join('', + "# Begin Project\n", + "# PROP AllowPerConfigDependencies 0\n", + "# PROP Scc_ProjName \"\"\n", + "# PROP Scc_LocalPath \"\"\n", + "\n" + ); + +} + +sub VS2003StartBldList(){ + my $BaseTrg=&main::BaseTrg; + my @BldList=&main::BldList; + my $Plat=&main::Plat; + + $guid = `uuidgen.exe`; + $guid =~ s/\n//g; + $guid = uc $guid; +# set up global IDE builds variable + %IdeBlds= ( + UREL=> "Release|Win32", + UDEB=> "Debug|Win32", + ); + if ($Plat eq 'TOOLS') { + %IdeBlds= ( + REL=> "Release|Win32", + DEB=> "Debug|Win32", + ); + } + + + $VcprojText=join('', + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\n" + ); + +} + +my $uidfile; +sub PMBld { + + my $AifStructRef=&main::AifStructRef; + my @SrcList=&main::SrcList; + my $BaseTrg=&main::BaseTrg; + my $BitMapStructRef=&main::BitMapStructRef; + my $Bld=&main::Bld; + my $ChopBldPath=&main::Path_Chop(&main::BldPath); + my $ExportLibrary=&main::ExportLibrary; + my $NoExportLibrary=&main::NoExportLibrary; + my $DefFile=&main::DefFile; + my $EPOCIncPath=&main::EPOCIncPath; + my $FirstLib=&main::FirstLib; + my $BasicTrgType=&main::BasicTrgType; + my @LibList; + my $RelPath=&main::RelPath; + my $ResourceStructRef=&main::ResourceStructRef; + my @StatLibList=&main::StatLibList; + my $Trg=&main::Trg; + my $TrgPath=&main::TrgPath; + my $TrgType=&main::TrgType; + + $uidfile = "$BaseTrg.UID"; + + if ($Bld =~ /DEB/) { + @LibList=&main::DebugLibList; + } else { + @LibList=&main::LibList; + } + +# Handle migration of binaries to secure location + + my $BLDTRGPATH = ""; + my $AIFBLDTRGPATH = ""; + if ($TrgPath) { + $BLDTRGPATH = "\$(TRGDIR)\\"; # handles TARGETPATH + $AIFBLDTRGPATH = $BLDTRGPATH; + &Winutl_AdjustTargetPath(\$BLDTRGPATH); + } + $BLDTRGPATH = "\$(EPOCTRG$Bld)\\".$BLDTRGPATH; + $AIFBLDTRGPATH = "\$(EPOCTRG$Bld)\\".$AIFBLDTRGPATH; + + # REAL TARGETS + #------------- + &main::Output( + "# REAL TARGET - BUILD VARIANT $Bld\n", + "\n" + ); + +# releasables + my @releaseables; + + unless (&main::Plat() eq 'TOOLS') { + if ($BasicTrgType !~ /^IMPLIB$/io) { + push @releaseables, "$BLDTRGPATH$Trg"; + if ($Bld=~/REL$/o && $BasicTrgType!~/^LIB$/o) { + push @releaseables,"$BLDTRGPATH$Trg.map"; + } + if (&Winutl_CopyForStaticLinkage) { + push @releaseables, "\$(EPOCTRG$Bld)\\$Trg"; + } + my $BitMapRef; + foreach $BitMapRef (@$BitMapStructRef) { + push @releaseables, "\$(EPOCTRG$Bld)\\$$BitMapRef{TrgPath}$$BitMapRef{Trg}"; + } + my $ResourceRef; + foreach $ResourceRef (@$ResourceStructRef) { + push @releaseables,"\$(EPOCTRG$Bld)\\$$ResourceRef{Trg}"; + } + my $AifRef; + foreach $AifRef (@$AifStructRef) { + push @releaseables, "$AIFBLDTRGPATH$$AifRef{Trg}"; + } + } + if (-e $DefFile and !$NoExportLibrary) { # effectively "if project frozen ..." + push @releaseables, "\$(EPOCLIB$Bld)\\$ExportLibrary.lib"; + } + if ($Bld=~/DEB$/o) { + # debugging support files? + } + } + else { + if ($BasicTrgType !~ /^IMPLIB$/io) { + my $toolspath=&main::EPOCToolsPath(); + push @releaseables, "$toolspath$Trg"; + } + } + + &main::Output( + "WHAT$Bld : WHATGENERIC\n", + "\n", + "CLEAN$Bld : CLEANBUILD$Bld CLEANRELEASE$Bld\n", + "\n", + "CLEANBUILD$Bld : \n", + "\t\@perl -S ermdir.pl \"\$(EPOCBLD$Bld)\"\n", + "\n", + "CLEANRELEASE$Bld : CLEANGENERIC\n", + "\n" + ); + &Generic_WhatCleanTargets($Bld, "WHAT$Bld", "CLEANRELEASE$Bld", @releaseables); + + my $adjustedTargetPath=$TrgPath; + &Winutl_AdjustTargetPath(\$adjustedTargetPath); + &Generic_MakeWorkDir("MAKEWORK$Bld", &main::BldPath); + &Generic_MakeWorkDir("MAKEWORK$Bld", "$RelPath$adjustedTargetPath"); + + &main::Output( + "\n", + "\n" + ); + + return if ($BasicTrgType=~/^IMPLIB$/io); + + &main::Output( + "LISTING$Bld : MAKEWORK$Bld" + ); + foreach (@SrcList) { + my $BaseSrc = &main::Path_Split('Base', $_); + my $Ext = &main::Path_Split('Ext', $_); + $BaseSrc.='_' if (lc($Ext) eq '.cia'); + $BaseSrc =~ s/\.UID/_UID_/i if ($BaseSrc eq $uidfile); + + &main::Output( + " \\\n\tLISTING$Bld$BaseSrc" + ); + } + &main::Output( + "\n", + "\n" + ); + + &main::Output( + "LIBS$Bld=" + ); + foreach (@StatLibList) { + &main::Output( + " \\\n\t", &Generic_Quote("\$(EPOCSTATLINK$Bld)\\$_") + ); + } + foreach (@LibList) { + &main::Output( + " \\\n\t", &Generic_Quote("\$(EPOCLINK$Bld)\\$_") + ); + } + &main::Output( + "\n", + "\n" + ); + + &main::Output( + "LINK_OBJS$Bld=" + ); + my $have_uidfile = 0; + foreach (@SrcList) { + my $BaseSrc = &main::Path_Split('Base', $_); + my $Ext = &main::Path_Split('Ext', $_); + if ($BaseSrc eq $uidfile) { + $have_uidfile = 1; + next; + } + $BaseSrc.='_' if (lc($Ext) eq '.cia'); + &main::Output( + " \\\n", + "\t", &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc.o") + ); + } + if ($Win32Resrc) { + my $resbase=&main::Path_Split('Base',$Win32Resrc); + &main::Output( + " \\\n", + "\t", &Generic_Quote("\$(EPOCBLD$Bld)\\$resbase.res") + ); + } + if ($have_uidfile) { + # ensure that the uid file is at the end of the list, as it's implicit in + # CodeWarrior IDE projects. + &main::Output( + " \\\n", + "\t", &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseTrg"."_UID_.o") + ); + } + &main::Output( + "\n", + "\n" + ); + + &main::OutFormat( + "COMMON_LINK_FLAGS$Bld=", + ' -stdlib' # use default runtime library for compiler help functions + ); + if ($MWLD eq "mwcc.exe") { + &main::OutFormat( + ' -warnings on' # on by default in mwccsym2.exe + ); + } + if ($BasicTrgType=~/^(EXE|DLL)$/o) { + unless (&main::Plat eq 'TOOLS') { + &main::OutFormat( + " \"\$(EPOCSTATLINK$Bld)\\$FirstLib\"" + ); + } + } + foreach my $lib (@Win32LibList) { + my $win32lib = $lib; # take a copy, to avoid updating contents of Win32LibList! + $win32lib = "-l$win32lib" unless ($win32lib =~ /\\/); + &main::OutFormat( + " ",lc $win32lib + ); + } + if ($BasicTrgType=~/^DLL$/o) { + &main::OutFormat( + "$BaseAddressFlag", + ' -noentry', + ' -shared' + ); + } + elsif ($TrgType=~/^EXEXP$/o) { + &main::OutFormat( + "$BaseAddressFlag", + ' -noentry', + ' -shared' + ); + } + elsif ($BasicTrgType=~/^EXE$/o) { + unless (&main::Plat eq 'TOOLS') { + &main::OutFormat( + ' -m "?_E32Bootstrap@@YGXXZ"' + ); + } + } + if (&main::Plat=~/^(WINC|TOOLS)$/o && $BasicTrgType=~/^EXE$/o) { + &main::OutFormat( + ' -subsystem console' + ); + } + else { + &main::OutFormat( + ' -subsystem windows' + ); + } + if (&main::HeapSize) { + my %HeapSize=&main::HeapSize; + &main::OutFormat( + ' -heapreserve=',RoundUp1k($HeapSize{Max}),' -heapcommit=',RoundUp1k($HeapSize{Min}) + ); + } + if ($BasicTrgType=~/^(DLL|EXE)$/o) { + if ($Bld=~/DEB$/o) { + if($PlatName eq "VS6") + { + &main::OutFormat( + ' -sym codeview' + ); + } + else + { + &main::OutFormat( + ' -sym codeview_new' + ); + } + #mention the debug version of the runtime library + &main::OutFormat( + ' -lMSL_All_MSE_Symbian_D.lib' + ); + } + else + { + #mention the release version of the runtime library + &main::OutFormat( + ' -lMSL_All_MSE_Symbian.lib' + ); + } + } + &main::Output( + "\n", + "\n" + ); + + my $EntrySymbol=''; + if ($BasicTrgType=~/^DLL$/o || $TrgType=~/^EXEXP$/o) { + my $Include=""; + if ($BasicTrgType=~/^DLL$/o) { + $Include="-m __E32Dll"; + $EntrySymbol='__E32Dll'; + } + else { + $Include="-m __E32Startup"; + $EntrySymbol='__E32Startup'; + } + &main::Output( + "STAGE1_LINK_FLAGS$Bld= \$(COMMON_LINK_FLAGS$Bld) \$(LIBS$Bld) \\\n\t", + " -o \"\$(EPOCBLD$Bld)\\$Trg\"", + ' -export dllexport', + " $Include", + ' -nocompactimportlib', + " -implib \"\$(EPOCBLD$Bld)\\$ExportLibrary.lib\"", + " -addcommand \"out:$Trg\" -warnings off", + "\n", + ); + } + my $AbsentSubst = ''; + if ($EntrySymbol) { + $AbsentSubst = " -absent $EntrySymbol"; + } + + &main::Output( + "LINK_FLAGS$Bld= \$(COMMON_LINK_FLAGS$Bld) \$(LIBS$Bld) \\\n\t", + " -o \"$BLDTRGPATH$Trg\"" + ); + if ($Bld=~/REL$/o && $BasicTrgType!~/^LIB$/o) { + # Generate map file for release build executables + &main::Output( + " -map \"$BLDTRGPATH$Trg.map\"", + ); + } + if ($BasicTrgType=~/^DLL$/o || $TrgType=~/^EXEXP$/o) { + &main::Output( + " -f \"\$(EPOCBLD)\\$ExportLibrary.def\"", # use generated .DEF file + ); + if (&main::ExportUnfrozen) { + &main::Output( + " -implib \"\$(EPOCLIB)\\UDEB\\$ExportLibrary.lib\"", + " -addcommand \"out:$Trg\" -warnings off" + ); + } + else { + &main::Output( + ' -noimplib' + ); + } + } + else { + &main::Output( + ' -noimplib' + ); + } + &main::Output( + "\n", + "\n" + ); + + &main::Output( + &Generic_Quote("$BLDTRGPATH$Trg"), " : \$(LINK_OBJS$Bld) " + ); + if (-e $DefFile) { # effectively "if project frozen ..." + &main::Output( + &Generic_Quote($DefFile) + ); + } + if ($BasicTrgType=~/^(DLL|EXE)$/o) { + unless (&main::Plat eq 'TOOLS') { + &main::Output( + " ", &Generic_Quote("\$(EPOCSTATLINK$Bld)\\$FirstLib") + ); + } + } + &main::Output( + " \$(LIBS$Bld)\n" + ); + + +# Link by name first time round for dlls + if ($BasicTrgType=~/^DLL$/o || $TrgType=~/^EXEXP$/o) { + &main::Output( + "\t\$(COMPILER_PATH)$MWLD -msgstyle gcc \$(STAGE1_LINK_FLAGS$Bld) -l \$(EPOCBLD$Bld) -search \$(notdir \$(LINK_OBJS$Bld))\n", + "\t\$(ERASE) \"\$(EPOCBLD$Bld)\\$Trg\"\n", + ); + +# Generate an export info file + my $show_options = "names,verbose"; + $show_options = "names,unmangled,verbose" if ($MWLD eq "mwldsym2.exe"); + &main::Output( + "\t\$(COMPILER_PATH)$MWLD -msgstyle gcc -S -show only,$show_options -o \"\$(EPOCBLD$Bld)\\$ExportLibrary.inf\" \"\$(EPOCBLD$Bld)\\$ExportLibrary.lib\"\n" + ); + +# call makedef to reorder the export information + &main::Output( +# call perl on the script here so nmake will die if there are errors - this doesn't happen if calling perl in a batch file + "\tperl -S makedef.pl $AbsentSubst -Inffile \"\$(EPOCBLD$Bld)\\$ExportLibrary.inf\"" + ); + if (SysTrg()) { + &main::Output( "\t\t-SystemTargetType \\\n" ); + } + if (-e $DefFile) { # effectively "if project frozen ..." + &main::Output( + " -Frzfile \"$DefFile\"" + ); + } + my $Export; + my $Ordinal=1; + foreach $Export (&main::Exports) { +# replace "$" with "$$" so that NMAKE doesn't think there's a macro in the function name + $Export=~s-\$-\$\$-go; + &main::Output( + " -$Ordinal $Export" + ); + $Ordinal++; + } + &main::Output( + " \"\$(EPOCBLD)\\$ExportLibrary.def\" \n", + "\t\$(ERASE) \"\$(EPOCBLD$Bld)\\$ExportLibrary.inf\"\n", + "\t\$(ERASE) \"\$(EPOCBLD$Bld)\\$ExportLibrary.lib\"\n" + ); + } + +# Perform the final link step + &main::Output( + "\t\$(COMPILER_PATH)$MWLD -msgstyle gcc " + ); + if ($BasicTrgType=~/^LIB$/o) { + &main::Output( + "-library " + ); + } + &main::Output( + "\$(LINK_FLAGS$Bld) -l \$(EPOCBLD$Bld) -search \$(notdir \$(LINK_OBJS$Bld))\n", + ); + + if (&main::Plat eq 'TOOLS') { + &main::Output( + "\tcopy \"BLDTRGPATH$Trg\" \"",&main::EPOCToolsPath,"$Trg\"\n" + ); + } + if (&Winutl_CopyForStaticLinkage) { + &Generic_MakeWorkDir("MAKEWORK$Bld", "\$(EPOCTRG$Bld)"); + &main::Output( + "\n", + &Generic_Quote("\$(EPOCTRG$Bld)\\$Trg"), " : ", + &Generic_Quote("$BLDTRGPATH$Trg"), "\n", + "\t", &Generic_CopyAction(), + ); + } + + &main::Output( + "\n", + "\n" + ); + + if($PlatName eq "VS6") { + VS6Bld(); + } + else + { + VS2003Bld(); + } +} + +sub VS6Bld(){ + + my $BaseTrg=&main::BaseTrg; + my $Bld=&main::Bld; + my @BldList=&main::BldList; + my $ChopBldPath=&main::Path_Chop(&main::BldPath); + my $ChopRelPath=&main::Path_Chop(&main::RelPath); + my $Trg=&main::Trg; + + + if ($Bld eq $BldList[0]) { + $DspText.=join('', + "!IF \"\$(CFG)\" == \"$IdeBlds{$Bld}\"\n", + "\n" + ); + } + else { + $DspText.=join('', + "!ELSEIF \"\$(CFG)\" == \"$IdeBlds{$Bld}\"\n", + "\n" + ); + } + $DspText.=join('', + "# PROP BASE Use_MFC 0\n" + ); + if ($Bld=~/REL$/o) { + $DspText.=join('', + "# PROP BASE Use_Debug_Libraries 0\n", + "# PROP BASE Output_Dir \".\\Release\"\n", + "# PROP BASE Intermediate_Dir \".\\Release\"\n" + ); + } + elsif ($Bld=~/DEB$/o) { + $DspText.=join('', + "# PROP BASE Use_Debug_Libraries 1\n", + "# PROP BASE Output_Dir \".\\Debug\"\n", + "# PROP BASE Intermediate_Dir \".\\Debug\"\n" + ); + } + + $DspText.=join('', + "# PROP BASE Cmd_Line \"NMAKE /f ",$BaseTrg,".mak \"\n", + "# PROP BASE Rebuild_Opt \"/a\"\n", + "# PROP BASE Target_File \"",$Trg,"\"\n", + "# PROP BASE Bsc_Name \"",$BaseTrg,".bsc\"\n", + "# PROP BASE Target_Dir \"\"\n" + ); + + $DspText.=join('', + "# PROP Use_MFC\n" + ); + if ($Bld=~/REL$/o) { + $DspText.=join('', + "# PROP Use_Debug_Libraries 0\n" + ); + } + elsif ($Bld=~/DEB$/o) { + $DspText.=join('', + "# PROP Use_Debug_Libraries 1\n" + ); + } + + $DspText.=join('', + "# PROP Output_Dir \"$ChopRelPath\"\n", + "# PROP Intermediate_Dir \"$ChopBldPath\"\n", + "# PROP Cmd_Line \"\"$ENV{EPOCROOT}epoc32\\tools\\MAKE.exe\" -r -f ",&main::BaseMak,"_$Bld.mak \"\n", + "# PROP Rebuild_Opt \"REBUILD\"\n", + "# PROP Target_File \"",$Trg,"\"\n" + ); + + if ($Bld=~/REL$/o) { + $DspText.=join('', + "# PROP Bsc_Name \"",$BaseTrg,".bsc\"\n" + ); + } + elsif ($Bld=~/DEB$/o) { + $DspText.=join('', + "# PROP Bsc_Name \"\"\n" + ); + } + + $DspText.=join('', + "# PROP Target_Dir \"\"\n" + ); + + $DspText.=join('', + "\n" + ); + +} + +sub VS2003Bld(){ + my $BaseTrg=&main::BaseTrg; + my $Bld=&main::Bld; + my @BldList=&main::BldList; + my $ChopBldPath=&main::Path_Chop(&main::BldPath); + my $ChopRelPath=&main::Path_Chop(&main::Path_MakeRltToBase(&main::MakeFilePath, &main::RelPath)); + my $Trg=&main::Trg; + + $VcprojText.=join('', + "\t\t\n", + "\t\t\t\n", + "\t\t\n" + ); + +} + +sub PMStartSrcList { + + &main::Output( + "# SOURCES\n", + "\n" + ); + + if($PlatName eq "VS6") { + VS6StartSrcList(); + } + else + { + VS2003StartSrcList(); + } +} + +sub VS6StartSrcList(){ + my @BldList=&main::BldList; + + + $DspText.=join('', + "\n!ENDIF\n\n", + "# Begin Target\n", + "\n" + ); + foreach (@BldList) { + $DspText.=join('', + "# Name \"".$IdeBlds{$_}."\"\n" + ); + } + $DspText.=join('', + "# Begin Group \"Source Files\"\n", + "\n", + "# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90\"\n" + ); + +} + +sub VS2003StartSrcList(){ + + $VcprojText.=join('', + "\t\n", + "\t\n", + "\t\n" + ); + + $VcprojText.=join('', + "\t\n", + "\t\t\n" + ); + +} + + +sub PMBitMapBld { + + &Generic_BitMapBld; + + # Need to copy generic resource into emulated Z drive + + my $BitMapRef=&main::BitMapRef; + + my $ChopTrgPath=""; + if ($$BitMapRef{TrgPath}) { + $ChopTrgPath.="\\$$BitMapRef{TrgPath}"; + chop $ChopTrgPath; + } + + my @BldList=&main::BldList; + my $Bld; + foreach $Bld (@BldList) { + my $path="\$(EPOCTRG$Bld)$ChopTrgPath"; + &main::Output( + &Generic_Quote("$path\\$$BitMapRef{Trg}"), " : ", + &Generic_Quote("$$BitMapRef{GenericTrg}"), "\n", + "\t", &Generic_CopyAction(), + "\n" + ); + } +} + +sub PMResrcBld { + + &Generic_ResrcBld; + + # Need to copy generic resource into emulated Z drive + + my $ResourceRef=&main::ResourceRef; + my @BldList=&main::BldList; + + foreach my $Bld (@BldList) { + &main::Output( + &Generic_Quote("\$(EPOCTRG$Bld)\\$$ResourceRef{Trg}"), " : ", + &Generic_Quote("$$ResourceRef{GenericTrg}"), "\n", + "\t", &Generic_CopyAction(), + "\n" + ); + } + + if($PlatName eq "VS6") { + VS6ResrcBld(); + } + else + { + VS2003ResrcBld(); + } + +} + +sub VS6ResrcBld() { + + my $ResourceRef=&main::ResourceRef; + my @BldList=&main::BldList; + + my $Resrc=ucfirst lc &main::Path_Split('File', $$ResourceRef{Source}); + my $BaseResrc=&main::Path_Split('Base', $$ResourceRef{Source}); + my $SrcPath=&main::Path_Split('Path', $$ResourceRef{Source}); + my $TrgPath=&main::Path_Split('Path', $$ResourceRef{Trg}); + my @LangList=($$ResourceRef{Lang}); + + my $inputpath="$SrcPath$Resrc"; + + $DspText.=join('', + "# Begin Source File\n", + "\n", + "SOURCE=$inputpath\n" + ); + + my $ChopBldPath=&main::Path_Chop(&main::BldPath); + my @DepList=&main::DepList; + my $PathBaseDsp=&main::MakeFilePath.&main::BaseMak; + my $RelPath=&main::RelPath; + + $DspText.=join('', + "USERDEP__$BaseResrc=" + ); + my $Dep; + foreach $Dep (@DepList) { + $DspText.=join('', + "\"$Dep\"\t" + ); + } + $DspText.=join('', + "\n" + ); + + my $Bld; + foreach $Bld (@BldList) { + my $ResrcTrgFullName="$RelPath$Bld\\$TrgPath$BaseResrc.r"; + if ($Bld eq $BldList[0]) { + $DspText.=join('', + '!IF' + ); + } + else { + $DspText.=join('', + '!ELSEIF' + ); + } + $DspText.=join('', + " \"\$(CFG)\" == \"$IdeBlds{$Bld}\"\n", + "\n" + ); + $DspText.=join('', + "# PROP Intermediate_Dir \"$ChopBldPath\"\n", + "# Begin Custom Build - Building resources from $Resrc\n", + "InputPath=$inputpath\n", + "\n", + "BuildCmds= \\\n", + "\tnmake -nologo -f \"${PathBaseDsp}.SUP.MAKE\"\\\n", + " \"$ResrcTrgFullName\"\n" + ); + my $Lang; + foreach $Lang (@LangList) { +# change again to avoid VC5 linking the resource + my $TmpLang=$Lang; + if ($TmpLang eq 'SC') { + $TmpLang.='.dummy'; + } + $DspText.=join('', + "\n", + "\"$ResrcTrgFullName$TmpLang\" : \$(SOURCE) \"\$(INTDIR)\"\\\n", + " \"\$(OUTDIR)\"\n", + " \$(BuildCmds)\n", + ); + } + $DspText.=join('', + "# End Custom Build\n", + "\n" + ); + } + $DspText.=join('', + "!ENDIF \n", + "\n", + "# End Source File\n" + ); + +} + +sub VS2003ResrcBld() { + +} + +sub PMDoc { + +###### from PMDoc of VC6 + + if($PlatName eq "VS6") { + VS6Doc(); + } + else + { + VS2003Doc(); + } + +} + +sub VS6Doc() { + + my $SrcPath=&main::SrcPath; + + $DspText.=join('', + "# Begin Source File\n", + "\n", + "SOURCE=",$SrcPath,ucfirst lc &main::Doc,"\n", + "# PROP Exclude_From_Build 1\n", + "# End Source File\n" + ); + +} +sub VS2003Doc() { + + +} + +sub PMAifBld { + + &Generic_AifBld; + + # Need to copy generic resource into emulated Z drive + + my $AifRef=&main::AifRef; + my $TrgDir=""; + if (&Generic_Definition("TRGDIR") ne "") { + $TrgDir="\\\$(TRGDIR)"; + } + + my @BldList=&main::BldList; + my $Bld; + foreach $Bld (@BldList) { + my $path="\$(EPOCTRG$Bld)$TrgDir"; + &main::Output( + &Generic_Quote("$path\\$$AifRef{Trg}"), " : ", + &Generic_Quote("$$AifRef{GenericTrg}"), "\n", + "\t", &Generic_CopyAction(), + "\n" + ); + } +} + + +sub PMStartSrc { + my $Src=&main::Src; + + &main::Output( + "# Source $Src\n", + "\n" + ); + + if($PlatName eq "VS6") { + VS6StartSrc(); + } + else + { + VS2003StartSrc(); + } + +} + +sub VS6StartSrc() { + + $DspText.=join('', + "# Begin Source File\n", + "\n", + "SOURCE=",&main::SrcPath,ucfirst lc &main::Src,"\n", + "# End Source File\n" + ); + +} + +sub VS2003StartSrc(){ + $VcprojText.=join('', + "\t\t\t\n", + "\t\t\t\n" + ); + +} + +sub PMSrcDepend { + my @BldList=&main::BldList; + my @DepList=&main::DepList; + my $BaseSrc=&main::BaseSrc; + $BaseSrc =~ s/\.UID/_UID_/i if ($BaseSrc eq $uidfile); + + return if (@DepList == 0); + + foreach (@BldList) { + &main::Output( + &Generic_Quote("\$(EPOCBLD$_)\\$BaseSrc.o"), " \\\n", + ); + } + &main::Output( + ":" + ); + foreach (@DepList) { + &main::Output( + " \\\n\t", &Generic_Quote($_) + ); + } + &main::Output( + "\n", + "\n" + ); + + # Generate user header list for this src, merge with list for all sources + foreach (&main::DepList) { + $PrjHdrs{$_}='unusedval'; + } + +} + +sub PMSrcBldDepend { + my $Bld=&main::Bld; + my @DepList=&main::DepList; + my $BaseSrc=&main::BaseSrc; + $BaseSrc =~ s/\.UID/_UID_/i if ($BaseSrc eq $uidfile); + + return if (@DepList == 0); + + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc.o"), " :", + ); + foreach (@DepList) { + &main::Output( + " \\\n\t", &Generic_Quote($_) + ); + } + &main::Output( + "\n", + "\n" + ); +} + +sub PMEndSrcBld { + my $BaseSrc=&main::BaseSrc; + $BaseSrc =~ s/\.UID/_UID_/i if ($BaseSrc eq $uidfile); + my $Bld=&main::Bld; + my $Plat=&main::Plat; + my $Src=&main::Src; + my $SrcPath=&main::SrcPath; + my $Ext=&main::ExtSrc; + my $Cia = (lc($Ext) eq '.cia') ? 1 : 0; + + if ($Cia) { + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc\_.o"), " : ", + &Generic_Quote("$SrcPath$Src"), "\n", + "\techo $Src\n", + "\t\$(CW$Bld) -lang c++ -o \"\$\@\" -c \"$SrcPath$Src\"\n", + "\n", +# assembler listing target - uses implicit rule to do disassembly + "LISTING$Bld$BaseSrc\_ : ", &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc\_.lis"), "\n", + "\t", &Generic_CopyAction("$SrcPath$BaseSrc\_.$Plat.lst"), + "\n" + ); + } else { + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc.o"), " : ", + &Generic_Quote("$SrcPath$Src"), "\n", + "\techo $Src\n", + "\t\$(CW$Bld) -o \"\$\@\" -c \"$SrcPath$Src\"\n", + "\n", +# assembler listing target - uses implicit rule to do disassembly + "LISTING$Bld$BaseSrc : ", &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc.lis"), "\n", + "\t", &Generic_CopyAction("$SrcPath$BaseSrc.$Plat.lst"), + "\n" + ); + } + + + +} + +sub PMEndSrc { + + &main::Output( + "\n", + "\n" + ); +} + +sub PMEndSrcList { + + my $show_options = "source"; + $show_options = "source,unmangled,comments" if ($MWLD eq "mwldsym2.exe"); + + &main::Output( + "\n", + "# Implicit rule for generating .lis files\n", + "\n", + ".SUFFIXES : .lis .o\n", + "\n", + ".o.lis:\n", + "\t\$(COMPILER_PATH)$MWLD -msgstyle gcc -S -show $show_options \$< -o \$\@\n", + "\n", + "\n" + ); + + if ($Win32Resrc) { + my @BldList=&main::BldList; + my @DepList=&main::Deps_GenDependsL($Win32Resrc); + + &main::Output( + "# Win32 Resource $Win32Resrc\n", + "\n", + "DEPEND=" + ); + foreach (@DepList) { + &main::Output( + " \\\n\t", &Generic_Quote($_) + ); + } + &main::Output( + "\n", + "\n" + ); + + my $Bld; + my $resbase=&main::Path_Split('Base',$Win32Resrc); + my $respath=&main::Path_Chop(&main::Path_Split('Path',$Win32Resrc)); + foreach $Bld (@BldList) { + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$resbase.res"), " : ", + &Generic_Quote($Win32Resrc), " \$(DEPEND)\n", + "\tmwwinrc -o \$\@ \"$Win32Resrc\"\n", + "\n" + ); + } + &main::Output( + "\n", + "\n" + ); + } + + # Deal with accumulated MAKEDIRS etc. + + &Generic_End; + + my $BaseDsp=&main::BaseMak; + my $PathBaseDsp=&main::MakeFilePath.$BaseDsp; + + &main::Path_DelFiles("$PathBaseDsp.MAK","$PathBaseDsp.MDP","$PathBaseDsp.NCB","$PathBaseDsp.OPT","$PathBaseDsp.PLG","$PathBaseDsp.SLN","$PathBaseDsp.VCPROJ","$PathBaseDsp.DSW","$PathBaseDsp.DSP","${PathBaseDsp}_UREL.MAK","${PathBaseDsp}_UDEB.MAK"); + + if($PlatName eq "VS6") + { + VS6EndSrcList(); + } + elsif($PlatName eq "VS2003") + { + VS2003EndSrcList(); + } +} + +sub VS6EndSrcList() { + + my $BaseDsp=&main::BaseMak; + my $PathBaseDsp=&main::MakeFilePath.$BaseDsp; + my $BaseTrg=&main::BaseTrg; + + $DspText.=join('', + "# End Group\n", + "# Begin Group \"Resource Files\"\n", + "\n", + "# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe\"\n" + ); + if ($Win32Resrc) { + $DspText.=join('', + "# Begin Source File\n", + "\n", + "SOURCE=",ucfirst lc $Win32Resrc,"\n", + "# End Source File\n" + ); + # Generate user header list for this src, merge with list for all sources + foreach (&main::Deps_GenDependsL($Win32Resrc)) { + $PrjHdrs{$_}='unusedval'; + } + } + $DspText.=join('', + "# End Group\n" + ); + + # Use the global %PrjHdrs Hash to produce user header listing + $DspText.=join('', + "# Begin Group \"Header Files\"\n", + "\n", + "# PROP Default_Filter \"h;hpp;hxx;hm;inl;fi;fd\"\n" + ); + foreach (keys %PrjHdrs) { + $DspText.=join('', + "# Begin Source File\n", + "\n", + "SOURCE=",&main::Path_Split('Path',$_),ucfirst lc &main::Path_Split('File',$_),"\n", + "# End Source File\n" + ); + } + + + $DspText.=join('', + "# End Group\n", + "# Begin Group \"Make Files\"\n", + "\n", + "# PROP Default_Filter \"mak;mk\"\n" + ); + $DspText.=join('', + "# Begin Source File\n", + "\n", + "SOURCE=",ucfirst lc $PathBaseDsp,".mak\n", + "# End Source File\n" + ); + + $DspText.=join('', + "# End Group\n", + "# End Target\n", + "# End Project\n", + ); + + + &main::CreateExtraFile("$PathBaseDsp.dsp",$DspText); + + my $RelMakText=join('', + "\n", + "BLD: UREL\n", + "REBUILD : CLEANUREL UREL\n", + "\n", + "include ",&main::BaseMak,".mak\n", + "\n" + ); + + &main::CreateExtraFile("${PathBaseDsp}_UREL.mak",$RelMakText); + + + my $DebMakText=join('', + "\n", + "BLD: UDEB\n", + "REBUILD : CLEANUDEB UDEB\n", + "\n", + "include ",&main::BaseMak,".mak\n", + "\n" + ); + + &main::CreateExtraFile("${PathBaseDsp}_UDEB.mak",$DebMakText); + + my $DswText=join( + "\n", + "Microsoft Developer Studio Workspace File, Format Version 6.00", + '# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!', + '', + '#'x79, + '', + "Project: \"$BaseDsp\"=.\\$BaseDsp.dsp - Package Owner=<4>", + '', + 'Package=<5>', + '{{{', + '}}}', + '', + 'Package=<4>', + '{{{', + '}}}', + '', + '#'x79, + '', + 'Global:', + '', + 'Package=<5>', + '{{{', + '}}}', + '', + 'Package=<3>', + '{{{', + '}}}', + '', + '#'x79, + '' + ); + + &main::CreateExtraFile("$PathBaseDsp.DSW",$DswText); + + +} + +sub VS2003EndSrcList() { + + my $BaseDsp=&main::BaseMak; + my $PathBaseDsp=&main::MakeFilePath.$BaseDsp; + +# Use the global %PrjHdrs Hash to produce user header listing + $VcprojText.=join('', + "\t\t\n", + "\t\t\n" + ); + + foreach (keys %PrjHdrs) { + $VcprojText.=join('', + "\t\t\t","\n", + "\t\t\t\n" + ); + } + $VcprojText.=join('', + "\t\t\n" + ); + + $VcprojText.=join('', + "\t\t\n" + ); + + if ($Win32Resrc) { + $VcprojText.=join('', + "\t\t\t\n", + "\t\t\t\n" + ); + # Generate user header list for this src, merge with list for all sources + foreach (&main::Deps_GenDependsL($Win32Resrc)) { + $PrjHdrs{$_}='unusedval'; + } + } + + $VcprojText.=join('', + "\t\t\n", + "\t\t\n" + ); + + $VcprojText.=join('', + "\t\t\t\n", + "\t\t\t\n" + ); + + $VcprojText.=join('', + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n" + ); + + &main::CreateExtraFile("$PathBaseDsp.vcproj",$VcprojText); + + + my $SlnText=join( + "\n", + "Microsoft Visual Studio Solution File, Format Version 8.00", + "Project\(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\"\) = \"$BaseDsp\", \"$BaseDsp.vcproj\", \"{$guid}\"", + "\tProjectSection(ProjectDependencies) = postProject", + "\tEndProjectSection", + 'EndProject', + 'Global', + "\tGlobalSection(SolutionConfiguration) = preSolution", + "\t\tDebug = Debug", + "\t\tRelease = Release", + "\tEndGlobalSection", + "\tGlobalSection(ProjectConfiguration) = postSolution", + "\t\t{$guid}.Debug.ActiveCfg = Debug|Win32", + "\t\t{$guid}.Debug.Build.0 = Debug|Win32", + "\t\t{$guid}.Release.ActiveCfg = Release|Win32", + "\t\t{$guid}.Release.Build.0 = Release|Win32", + "\tEndGlobalSection", + "\tGlobalSection(ExtensibilityGlobals) = postSolution", + "\tEndGlobalSection", + "\tGlobalSection(ExtensibilityAddIns) = postSolution", + "\tEndGlobalSection", + 'EndGlobal', + '' + ); + + &main::CreateExtraFile("$PathBaseDsp.Sln",$SlnText); + +} + +1;