// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.build;

#define Q(x) #x
#define QUOTE(x) Q(x)

#if defined(USE_FINAL)
#define MAYBE_FINAL final
#define MAYBE_ZERO = 0
#define MAYBE_FALSE = false
#else
#define MAYBE_FINAL
#define MAYBE_ZERO
#define MAYBE_FALSE
#endif

/**
 *  Build configuration. Generated on a per-target basis.
 */
public class BuildConfig {

#if defined(ENABLE_MULTIDEX)
    public static MAYBE_FINAL boolean IS_MULTIDEX_ENABLED = true;
#else
    public static MAYBE_FINAL boolean IS_MULTIDEX_ENABLED MAYBE_FALSE;
#endif

#if defined(_ENABLE_ASSERTS)
    public static MAYBE_FINAL boolean ENABLE_ASSERTS = true;
#else
    public static MAYBE_FINAL boolean ENABLE_ASSERTS MAYBE_FALSE;
#endif

#if defined(_IS_UBSAN)
    public static MAYBE_FINAL boolean IS_UBSAN = true;
#else
    public static MAYBE_FINAL boolean IS_UBSAN MAYBE_FALSE;
#endif

#if defined(_IS_CHROME_BRANDED)
    public static MAYBE_FINAL boolean IS_CHROME_BRANDED = true;
#else
    public static MAYBE_FINAL boolean IS_CHROME_BRANDED MAYBE_FALSE;
#endif

    // The ID of the android string resource that stores the product version.
    // This layer of indirection is necessary to make the resource dependency
    // optional for android_apk targets/base_java (ex. for cronet).
#if defined(_RESOURCES_VERSION_VARIABLE)
    public static MAYBE_FINAL int R_STRING_PRODUCT_VERSION = _RESOURCES_VERSION_VARIABLE;
#else
    // Default value, do not use.
    public static MAYBE_FINAL int R_STRING_PRODUCT_VERSION MAYBE_ZERO;
#endif

    // Minimum SDK Version supported by this apk.
    // Be cautious when using this value, as it can happen that older apks get
    // installed on newer Android version (e.g. when a device goes through a
    // system upgrade). It is also convenient for developing to have all
    // features available through a single APK.
    // However, it's pretty safe to assument that a feature specific to KitKat
    // will never be needed in an APK with MIN_SDK_VERSION = Oreo.
#if defined(_MIN_SDK_VERSION)
    public static MAYBE_FINAL int MIN_SDK_VERSION = _MIN_SDK_VERSION;
#else
    public static MAYBE_FINAL int MIN_SDK_VERSION = 1;
#endif

#if defined(_BUNDLES_SUPPORTED)
    public static MAYBE_FINAL boolean BUNDLES_SUPPORTED = true;
#else
    public static MAYBE_FINAL boolean BUNDLES_SUPPORTED MAYBE_FALSE;
#endif

#if defined(_IS_INCREMENTAL_INSTALL)
    public static MAYBE_FINAL boolean IS_INCREMENTAL_INSTALL = true;
#else
    public static MAYBE_FINAL boolean IS_INCREMENTAL_INSTALL MAYBE_FALSE;
#endif

#if defined(_IS_CHROMECAST_BRANDING_INTERNAL)
    public static MAYBE_FINAL boolean IS_CHROMECAST_BRANDING_INTERNAL = true;
#else
    public static MAYBE_FINAL boolean IS_CHROMECAST_BRANDING_INTERNAL MAYBE_FALSE;
#endif

#if defined(_ISOLATED_SPLITS_ENABLED)
    public static MAYBE_FINAL boolean ISOLATED_SPLITS_ENABLED = true;
#else
    public static MAYBE_FINAL boolean ISOLATED_SPLITS_ENABLED MAYBE_FALSE;
#endif
}
