# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

XPIDL_SOURCES += [
    'gonk/nsIRecoveryService.idl',
]

XPIDL_MODULE = 'hal'

EXPORTS.mozilla += [
    'Hal.h',
    'HalImpl.h',
    'HalSandbox.h',
    'HalScreenConfiguration.h',
    'HalSensor.h',
    'HalTypes.h',
    'HalWakeLock.h',
]

TEST_DIRS += ['tests']
UNIFIED_SOURCES += [
    'HalWakeLock.cpp',
    'sandbox/SandboxHal.cpp',
    'WindowIdentifier.cpp',
]

# Hal.cpp cannot be built in unified mode because it relies on HalImpl.h.
SOURCES += [
    'Hal.cpp',
]

if CONFIG['MOZ_GAMEPAD_BACKEND'] == 'stub':
    UNIFIED_SOURCES += [
        'fallback/FallbackGamepad.cpp'
    ]
elif CONFIG['MOZ_GAMEPAD_BACKEND'] == 'cocoa':
    UNIFIED_SOURCES += [
        'cocoa/CocoaGamepad.cpp'
    ]
elif CONFIG['MOZ_GAMEPAD_BACKEND'] == 'windows':
    UNIFIED_SOURCES += [
        'windows/WindowsGamepad.cpp'
    ]
elif CONFIG['MOZ_GAMEPAD_BACKEND'] == 'linux':
    UNIFIED_SOURCES += [
        'linux/LinuxGamepad.cpp'
    ]
elif CONFIG['MOZ_GAMEPAD_BACKEND'] == 'android':
    UNIFIED_SOURCES += [
        'android/AndroidGamepad.cpp'
    ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
    UNIFIED_SOURCES += [
        'android/AndroidSensor.cpp',
        'fallback/FallbackAlarm.cpp',
        'fallback/FallbackPower.cpp',
        'linux/LinuxMemory.cpp',
    ]
    # AndroidHal.cpp cannot be built in unified mode because it relies on HalImpl.h.
    SOURCES += [
        'android/AndroidHal.cpp',
    ]
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
    UNIFIED_SOURCES += [
        'gonk/GonkDiskSpaceWatcher.cpp',
        'gonk/GonkFMRadio.cpp',
        'gonk/GonkSensor.cpp',
        'gonk/GonkSwitch.cpp',
        'gonk/UeventPoller.cpp',
        'linux/LinuxMemory.cpp',
        'linux/LinuxPower.cpp',
    ]
    # GonkHal.cpp cannot be built in unified mode because it relies on HalImpl.h.
    SOURCES += [
        'gonk/GonkHal.cpp',
    ]
elif CONFIG['OS_TARGET'] == 'Linux':
    UNIFIED_SOURCES += [
        'fallback/FallbackAlarm.cpp',
        'fallback/FallbackScreenConfiguration.cpp',
        'fallback/FallbackSensor.cpp',
        'fallback/FallbackVibration.cpp',
        'linux/LinuxMemory.cpp',
        'linux/LinuxPower.cpp',
    ]
    if CONFIG['MOZ_ENABLE_DBUS']:
        UNIFIED_SOURCES += [
            'linux/UPowerClient.cpp',
        ]
    else:
        UNIFIED_SOURCES += [
            'fallback/FallbackBattery.cpp',
        ]
elif CONFIG['OS_TARGET'] == 'WINNT':
    UNIFIED_SOURCES += [
        'fallback/FallbackAlarm.cpp',
        'fallback/FallbackMemory.cpp',
        'fallback/FallbackPower.cpp',
        'fallback/FallbackScreenConfiguration.cpp',
        'fallback/FallbackVibration.cpp',
        'windows/WindowsSensor.cpp',
    ]
    # WindowsBattery.cpp cannot be built in unified mode because it relies on HalImpl.h.
    SOURCES += [
        'windows/WindowsBattery.cpp',
    ]
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
    UNIFIED_SOURCES += [
        'cocoa/CocoaBattery.cpp',
        'fallback/FallbackAlarm.cpp',
        'fallback/FallbackMemory.cpp',
        'fallback/FallbackPower.cpp',
        'fallback/FallbackScreenConfiguration.cpp',
        'fallback/FallbackVibration.cpp',
    ]
elif CONFIG['OS_TARGET'] in ('OpenBSD', 'NetBSD', 'FreeBSD', 'DragonFly'):
    UNIFIED_SOURCES += [
        'fallback/FallbackAlarm.cpp',
        'fallback/FallbackMemory.cpp',
        'fallback/FallbackPower.cpp',
        'fallback/FallbackScreenConfiguration.cpp',
        'fallback/FallbackSensor.cpp',
        'fallback/FallbackVibration.cpp',
    ]
    if CONFIG['MOZ_ENABLE_DBUS']:
        UNIFIED_SOURCES += [
            'linux/UPowerClient.cpp',
        ]
    else:
        UNIFIED_SOURCES += [
            'fallback/FallbackBattery.cpp',
        ]
else:
    UNIFIED_SOURCES += [
        'fallback/FallbackAlarm.cpp',
        'fallback/FallbackBattery.cpp',
        'fallback/FallbackMemory.cpp',
        'fallback/FallbackPower.cpp',
        'fallback/FallbackScreenConfiguration.cpp',
        'fallback/FallbackSensor.cpp',
        'fallback/FallbackVibration.cpp',
    ]

# Fallbacks for backends implemented on Gonk only.
if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk':
    UNIFIED_SOURCES += [
        'fallback/FallbackDiskSpaceWatcher.cpp',
        'fallback/FallbackFactoryReset.cpp',
        'fallback/FallbackFMRadio.cpp',
        'fallback/FallbackProcessPriority.cpp',
        'fallback/FallbackScreenPower.cpp',
        'fallback/FallbackSwitch.cpp',
        'fallback/FallbackThreadPriority.cpp',
        'fallback/FallbackTime.cpp',
        'fallback/FallbackWakeLocks.cpp',
    ]

# Fallbacks for backends implemented on Android only.
if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android':
    UNIFIED_SOURCES += [
        'fallback/FallbackNetwork.cpp',
    ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
    UNIFIED_SOURCES += [
        'cocoa/CocoaSensor.mm',
        'cocoa/smslib.mm',
    ]

IPDL_SOURCES = [
    'sandbox/PHal.ipdl',
]

FAIL_ON_WARNINGS = True

include('/ipc/chromium/chromium-config.mozbuild')

FINAL_LIBRARY = 'xul'

if CONFIG['MOZ_GAMEPAD']:
    LOCAL_INCLUDES += [
        '/dom/base',
    ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
    # So that we can call nsScreenManagerGonk::GetConfiguration().
    LOCAL_INCLUDES += [
        '/widget/gonk',
        '/widget/xpwidgets'
    ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
    CXXFLAGS += ['-I%s/hardware/libhardware_legacy/include' % CONFIG['ANDROID_SOURCE']]

CFLAGS += CONFIG['GLIB_CFLAGS']
CFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS']
CXXFLAGS += CONFIG['GLIB_CFLAGS']
CXXFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS']
