//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#include "CommonDefines.h"

/// For version metadata defined in the source, see:
///     core/bin/lib/Common/CommonDefines.h
///     core/bin/lib/Common/ChakraCoreVersion.h
///
/// Build number is defined in the Chakra.Generated.BuildInfo.props file generated by
///     Build/scripts/pre_build.ps1
///     e.g.:
///         <ChakraVersionBuildNumber>1</ChakraVersionBuildNumber>
///         <ChakraVersionBuildQFENumber>23456</ChakraVersionBuildQFENumber>
///     Which are used to define the C++ macros below, respectively:
///         CHAKRA_VERSION_BUILD_NUMBER
///         CHAKRA_VERSION_BUILD_QFE
///
/// Binary version string is composed from the following values:
///     CHAKRA_CORE_MAJOR_VERSION . CHAKRA_CORE_MINOR_VERSION . CHAKRA_CORE_PATCH_VERSION . CHAKRA_CORE_VERSION_RELEASE_QFE
///     e.g. 1.2.1.0
/// These fields must be explicitly set in the source.
/// Note: VER_PRODUCTBUILD is always set to 0.

#define VER_COMPANYNAME_STR         "Microsoft Corporation"

#define VER_FILEFLAGSMASK           VS_FFI_FILEFLAGSMASK
#define VER_FILEOS                  VOS_NT_WINDOWS32

#define VER_PRODUCTMAJORVERSION     CHAKRA_CORE_MAJOR_VERSION
#define VER_PRODUCTMINORVERSION     CHAKRA_CORE_MINOR_VERSION
#define VER_PRODUCTPATCHVERSION     CHAKRA_CORE_PATCH_VERSION

// File Flags
#if DBG
#define VER_DEBUG                   VS_FF_DEBUG
#else
#define VER_DEBUG                   0
#endif

#if CHAKRA_CORE_VERSION_RELEASE
#define VER_PRIVATE                 0
#else
#define VER_PRIVATE                 VS_FF_PRIVATEBUILD
#endif

#if CHAKRA_CORE_VERSION_RELEASE && CHAKRA_CORE_VERSION_PRERELEASE
#define VER_PRERELEASE              VS_FF_PRERELEASE
#else
#define VER_PRERELEASE              0
#endif

#define VER_FILEFLAGS               (VER_DEBUG|VER_PRIVATE|VER_PRERELEASE)

// File description suffix
#if DBG
#define VER_FILEDESCRIPTION_SUFFIX1_STR L"Debug"
#elif defined(ENABLE_DEBUG_CONFIG_OPTIONS)
#define VER_FILEDESCRIPTION_SUFFIX1_STR L"Test"
// else, we don't display a build configuration suffix for Release builds
#endif

#if !CHAKRA_CORE_VERSION_RELEASE
#define VER_FILEDESCRIPTION_SUFFIX2_STR L"Private"
#elif CHAKRA_CORE_VERSION_PRERELEASE // _RELEASE && _PRERELEASE
#define VER_FILEDESCRIPTION_SUFFIX2_STR L"Pre-release"
// else _RELEASE && !_PRERELEASE
// we don't display a suffix because this binary was built to potentially be released
#endif

#define VER_PRODUCTBUILD            0
#define VER_PRODUCTBUILD_QFE        CHAKRA_CORE_VERSION_RELEASE_QFE

#ifdef CHAKRA_VERSION_BUILD_COMMIT
#define __BUILDMACHINE__            CHAKRA_VERSION_BUILD_COMMIT
#endif

#if defined(CHAKRA_VERSION_BUILD_NUMBER) && defined(CHAKRA_VERSION_BUILD_QFE)

#if     (CHAKRA_VERSION_BUILD_NUMBER < 10)
#define CHAKRA_VERSION_BUILD_NUMBER_PADDING     0000
#elif   (CHAKRA_VERSION_BUILD_NUMBER < 100)
#define CHAKRA_VERSION_BUILD_NUMBER_PADDING     000
#elif   (CHAKRA_VERSION_BUILD_NUMBER < 1000)
#define CHAKRA_VERSION_BUILD_NUMBER_PADDING     00
#elif   (CHAKRA_VERSION_BUILD_NUMBER < 10000)
#define CHAKRA_VERSION_BUILD_NUMBER_PADDING     0
#endif

#if     (CHAKRA_VERSION_BUILD_QFE < 10)
#define CHAKRA_VERSION_BUILD_QFE_PADDING        0000
#elif   (CHAKRA_VERSION_BUILD_QFE < 100)
#define CHAKRA_VERSION_BUILD_QFE_PADDING        000
#elif   (CHAKRA_VERSION_BUILD_QFE < 1000)
#define CHAKRA_VERSION_BUILD_QFE_PADDING        00
#elif   (CHAKRA_VERSION_BUILD_QFE < 10000)
#define CHAKRA_VERSION_BUILD_QFE_PADDING        0
#endif

#define CONCAT_PADDING_(padding,value)      padding ## value
#define CONCAT_PADDING(padding,value)       CONCAT_PADDING_(padding,value)

#ifdef CHAKRA_VERSION_BUILD_NUMBER_PADDING
#define PADDED_CHAKRA_VERSION_BUILD_NUMBER  CONCAT_PADDING(CHAKRA_VERSION_BUILD_NUMBER_PADDING,CHAKRA_VERSION_BUILD_NUMBER)
#else
#define PADDED_CHAKRA_VERSION_BUILD_NUMBER  CHAKRA_VERSION_BUILD_NUMBER
#endif

#ifdef CHAKRA_VERSION_BUILD_QFE_PADDING
#define PADDED_CHAKRA_VERSION_BUILD_QFE     CONCAT_PADDING(CHAKRA_VERSION_BUILD_QFE_PADDING,CHAKRA_VERSION_BUILD_QFE)
#else
#define PADDED_CHAKRA_VERSION_BUILD_QFE     CHAKRA_VERSION_BUILD_QFE
#endif

#ifdef CHAKRA_VERSION_BUILD_DATE
#define __BUILDDATE__ PADDED_CHAKRA_VERSION_BUILD_NUMBER.PADDED_CHAKRA_VERSION_BUILD_QFE.CHAKRA_VERSION_BUILD_DATE
#else
#define __BUILDDATE__ PADDED_CHAKRA_VERSION_BUILD_NUMBER.PADDED_CHAKRA_VERSION_BUILD_QFE
#endif

#else // defined(CHAKRA_VERSION_BUILD_NUMBER) && defined(CHAKRA_VERSION_BUILD_QFE)

#ifdef CHAKRA_VERSION_BUILD_DATE
#define __BUILDDATE__ CHAKRA_VERSION_BUILD_DATE
#endif

#endif // defined(CHAKRA_VERSION_BUILD_NUMBER) && defined(CHAKRA_VERSION_BUILD_QFE)

#define VER_PRODUCTVERSION          VER_PRODUCTMAJORVERSION,VER_PRODUCTMINORVERSION,VER_PRODUCTPATCHVERSION,VER_PRODUCTBUILD_QFE

#define VER_PRODUCTVERSION_MAJORMINOR2(x,y) #x "." #y
#define VER_PRODUCTVERSION_MAJORMINOR1(x,y) VER_PRODUCTVERSION_MAJORMINOR2(x, y)
#define VER_PRODUCTVERSION_STRING   VER_PRODUCTVERSION_MAJORMINOR1(VER_PRODUCTMAJORVERSION, VER_PRODUCTMINORVERSION)

#define VER_PRODUCTVERSION_STR4(x)   VER_PRODUCTVERSION_STRING "." #x
#define VER_PRODUCTVERSION_STR3(x)   VER_PRODUCTVERSION_STR4(x)
#define VER_PRODUCTVERSION_STR2(x,y) VER_PRODUCTVERSION_STRING "." #x "." #y
#define VER_PRODUCTVERSION_STR1(x,y) VER_PRODUCTVERSION_STR2(x, y)
#define VER_PRODUCTVERSION_STR       VER_PRODUCTVERSION_STR1(VER_PRODUCTPATCHVERSION, VER_PRODUCTBUILD_QFE)

#ifdef VER_FILEDESCRIPTION_SUFFIX1_STR
#ifdef VER_FILEDESCRIPTION_SUFFIX2_STR
#define VER_FILEDESCRIPTION_SUFFIX_STR  L" (" VER_FILEDESCRIPTION_SUFFIX1_STR L" " VER_FILEDESCRIPTION_SUFFIX2_STR L")"
#else
#define VER_FILEDESCRIPTION_SUFFIX_STR  L" (" VER_FILEDESCRIPTION_SUFFIX1_STR L")"
#endif
#elif defined(VER_FILEDESCRIPTION_SUFFIX2_STR)
#define VER_FILEDESCRIPTION_SUFFIX_STR  L" (" VER_FILEDESCRIPTION_SUFFIX2_STR L")"
#else
#define VER_FILEDESCRIPTION_SUFFIX_STR
#endif

#define VER_PRODUCTNAME_STR          VER_PRODUCTNAME L"\0"
#define VER_FILEDESCRIPTION_STR      VER_PRODUCTNAME VER_FILEDESCRIPTION_SUFFIX_STR L"\0"
#include "common.ver"
