//-----------------------------------------------------------------------------
//	SOURCE_DLL_WIN32_BASE.VPC
//
//	Base Settings for all Source(TM) Projects
//-----------------------------------------------------------------------------

$Include "$SRCDIR\vpc_scripts\version.vpc"

$MacroRequired				"SRCDIR"
$MacroRequired				"OUTBINNAME"	"$PROJECTNAME"
$MacroRequired				"OUTBINDIR"
		
$Macro OUTBINDIR	"$OUTBINDIR$PLATSUBDIR"
$Macro LIBPUBLIC	"$SRCDIR\lib\public$PLATSUBDIR"
$Macro LIBCOMMON	"$SRCDIR\lib\common$PLATSUBDIR" [!$VS2015 && !$VS2019]
$Macro LIBCOMMON	"$SRCDIR\lib\common$PLATSUBDIR\2015\release" [($VS2015 || $VS2019) && !$WIN32]
$Macro LIBCOMMON	"$SRCDIR\lib\common\win32\2015\release" [($VS2015 || $VS2019) && $WIN32]

$Include "$SRCDIR\vpc_scripts\loadaddress.vpc"
$Include "$SRCDIR\vpc_scripts\source_dll_win32_debug.vpc"
$Include "$SRCDIR\vpc_scripts\source_dll_win32_release.vpc"
$Include "$SRCDIR\vpc_scripts\source_win32_base.vpc"

$IgnoreRedundancyWarning	"ON"

// Common Configuration
$Configuration
{
	$General
	{
		$TargetName	"$OUTBINNAME"
	}

	$Compiler
	{
		$PreprocessorDefinitions			"$BASE;PLATFORM_64BITS;WIN64;_WIN64;COMPILER_MSVC64" [$WIN64]
		$PreprocessorDefinitions			"$BASE;COMPILER_MSVC32" [$WIN32]		
		$PreprocessorDefinitions			"$BASE;COMPILER_MSVC;_DLL_EXT=$_DLL_EXT"
		$PreprocessorDefinitions			"$BASE;DLLNAME=$OUTBINNAME"		
	}

	$Compiler [$WIN32]
	{
		$EnableEnhancedInstructionSet	"Streaming SIMD Extensions (/arch:SSE)"
	}
	
	$Linker
	{
		$AdditionalDependencies				"$BASE shell32.lib user32.lib advapi32.lib gdi32.lib comdlg32.lib ole32.lib" [$WIN32||$WIN64]
		$TargetMachine						"MachineX86 (/MACHINE:X86)"	[$WIN32]
		$TargetMachine						"MachineX64 (/MACHINE:X64)"	[$WIN64]
		// Suppress this pointless warning using the undocumented /ignore linker switch
		// schemalib.lib(schemaclassinfo.obj) : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
		$AdditionalOptions					"$BASE /ignore:4221"
		$AdditionalOptions					"$BASE $SRCDIR\lib\public\ftol3.obj" [$VS2013 && $WIN32 && !$DISABLE_FTOL3_OVERRIDE && !$SOURCESDK] // Work around CRT bug https://connect.microsoft.com/VisualStudio/feedback/details/806362/vc12-pollutes-the-floating-point-stack-when-casting-infinity-nan-to-unsigned-long#
	}
	
	$PreBuildEvent
	{
		$CommandLine		"if EXIST $OUTBINDIR\$(TargetFileName) for /f $QUOTEdelims=$QUOTE %%A in ('attrib $QUOTE$OUTBINDIR\$(TargetFileName)$QUOTE') do set valveTmpIsReadOnly=$QUOTE%%A$QUOTE" "\n" \
							"set valveTmpIsReadOnlyLetter=%valveTmpIsReadOnly:~6,1%" "\n" \
							"if $QUOTE%valveTmpIsReadOnlyLetter%$QUOTE==$QUOTER$QUOTE del /q $QUOTE$(TargetDir)$QUOTE$(TargetFileName)" "\n" \
							"$CRCCHECK" "\n"
	}

	$PostBuildEvent [!$ANALYZE]
	{
		$CommandLine		"if not exist $QUOTE$OUTBINDIR$QUOTE mkdir $QUOTE$OUTBINDIR$QUOTE" "\n" 
//		$CommandLine		"$BASE" "call $SRCDIR\vpc_scripts\valve_p4_edit.cmd $QUOTE$OUTBINDIR\$(TargetFileName)$QUOTE $SRCDIR" "\n" [!$SOURCESDK]
		$CommandLine		"$BASE" "copy $QUOTE$(TargetDir)$(TargetFileName)$QUOTE $QUOTE$OUTBINDIR\$(TargetFileName)$QUOTE" "\n" \
							"if ERRORLEVEL 1 goto BuildEventFailed" "\n" \
							"if exist $QUOTE$(TargetDir)$(TargetName).map$QUOTE copy $QUOTE$(TargetDir)$(TargetName).map$QUOTE $OUTBINDIR\$(TargetName).map" "\n" 
//		$CommandLine		"$BASE" "call $SRCDIR\vpc_scripts\valve_p4_edit.cmd $QUOTE$OUTBINDIR\$(TargetName).pdb$QUOTE $SRCDIR" "\n"  [!$SOURCESDK] 
		$CommandLine		"$BASE" "copy $QUOTE$(TargetDir)$(TargetName).pdb$QUOTE $OUTBINDIR\$(TargetName).pdb" "\n" \
							"if ERRORLEVEL 1 goto BuildEventFailed" "\n" \
							"goto BuildEventOK" "\n" \
							":BuildEventFailed" "\n" \
							"echo *** ERROR! PostBuildStep FAILED for $(ProjectName)! EXE or DLL is probably running. ***" "\n" \
							"del /q $QUOTE$(TargetDir)$(TargetFileName)$QUOTE" "\n" \
							"exit 1" "\n" \
							":BuildEventOK" "\n" 

		$Description		"Publishing to $OUTBINDIR"
		$ExcludedFromBuild	"No"
	}
}

// Skeleton Project - All derived projects get this as a starting base
$Project
{
	$Folder	"Source Files"
	{
		$File	"$SRCDIR\public\tier0\memoverride.cpp"
		{
			$Configuration
			{
				$Compiler
				{
					$Create/UsePrecompiledHeader	"Not Using Precompiled Headers"
				}
			}
		}

		// Implement __imp__EncodePointer and __imp__DecodePointer so that we can run on XP SP1
		// when building with VS 2010 and higher.
		$File	"$SRCDIR\public\tier0\pointeroverride.asm" [$WIN32]
		{
			$Configuration
			{	
				$CustomBuildStep
				{
					// General
					$CommandLine				"$QUOTE$(VCInstallDir)bin\ml.exe$QUOTE /safeseh /c /Cp /Zi /Fo$QUOTE$(IntDir)\$(InputName).obj$QUOTE $QUOTE$(InputPath)$QUOTE" [!$VS2019]
					$CommandLine				"$QUOTE$(VC_ExecutablePath_x86_x86)\ml.exe$QUOTE /safeseh /c /Cp /Zi /Fo$QUOTE$(IntDir)\$(InputName).obj$QUOTE $QUOTE$(InputPath)$QUOTE" [$VS2019]
					$Description				"Compiling pointeroverride.asm"
					$Outputs					"$(IntDir)\$(InputName).obj"
				}		
			}
		}

		$File	"$SRCDIR\common\debug_dll_check.cpp"	[!$SOURCESDK]	
		{
			$Configuration
			{
				$Compiler
				{
					$Create/UsePrecompiledHeader	"Not Using Precompiled Headers"
				}
			}
		}
	}

	$Folder	"Link Libraries"
	{
		$Implib	"$LIBPUBLIC\tier0"
		$Lib	"$LIBPUBLIC\tier1"
		$Implib	"$LIBPUBLIC\vstdlib"
	}
}