# -*- Mode: python; 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/.

@template
def Libxul_defines():
    LIBRARY_DEFINES['MOZILLA_INTERNAL_API'] = True
    LIBRARY_DEFINES['IMPL_LIBXUL'] = True
    if not CONFIG['JS_SHARED_LIBRARY']:
        LIBRARY_DEFINES['STATIC_EXPORTABLE_JS_API'] = True

@template
def Libxul(name):
    if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'uikit'):
        # This is going to be a framework named "XUL", not an ordinary library named
        # "libxul.dylib"
        GeckoFramework(name, linkage=None)
        SHARED_LIBRARY_NAME = 'XUL'
    else:
        GeckoSharedLibrary(name, linkage=None)
        SHARED_LIBRARY_NAME = 'xul'

    DELAYLOAD_DLLS += [
        'comdlg32.dll',
        'netapi32.dll',
        'secur32.dll',
        'wininet.dll',
        'winspool.drv'
    ]

    if CONFIG['ACCESSIBILITY']:
        DELAYLOAD_DLLS += ['oleacc.dll']

    if CONFIG['MOZ_WEBRTC']:
        DELAYLOAD_DLLS += ['msdmo.dll']

    if CONFIG['OS_ARCH'] == 'WINNT':
        DELAYLOAD_DLLS += [
            'api-ms-win-core-winrt-l1-1-0.dll',
            'api-ms-win-core-winrt-string-l1-1-0.dll',
        ]

    if CONFIG['OS_ARCH'] == 'WINNT' and not CONFIG['GNU_CC']:
        LOCAL_INCLUDES += [
            '/widget/windows',
            '/xpcom/base',
        ]
        # config/version.mk says $(srcdir)/$(RCINCLUDE), and this needs to
        # be valid in both toolkit/library and toolkit/library/gtest.
        # Eventually, the make backend would do its own path canonicalization
        # and config/version.mk would lift the $(srcdir)
        RCINCLUDE = '$(DEPTH)/toolkit/library/xulrunner.rc'

    Libxul_defines()

    if CONFIG['MOZ_NEEDS_LIBATOMIC']:
        OS_LIBS += ['atomic']

Libxul('xul')

SDK_LIBRARY = True

FORCE_STATIC_LIB = True

STATIC_LIBRARY_NAME = 'xul_s'

SOURCES += [
    'StaticXULComponentsStart.cpp',
]

# This, combined with the fact the file is first, makes the start pointer
# it contains first in Windows PGO builds.
SOURCES['StaticXULComponentsStart.cpp'].no_pgo = True

# Don't let LTO reorder StaticXULComponentsStart.o.
if '-flto' in CONFIG['OS_CXXFLAGS']:
    SOURCES['StaticXULComponentsStart.cpp'].flags += ['-fno-lto']

if CONFIG['OS_ARCH'] == 'WINNT':
    SOURCES += [
        'nsDllMain.cpp',
    ]

LOCAL_INCLUDES += [
    '/config',
    # need widget/windows for resource.h (included from widget.rc)
    '/widget/windows',
]

if CONFIG['OS_ARCH'] == 'WINNT' and not CONFIG['GNU_CC']:
    LOCAL_INCLUDES += [
        '/xpcom/base',
    ]

DIRS += ['gtest']

# js needs to come after xul for now, because it is an archive and its content
# is discarded when it comes first.
USE_LIBS += [
    'js',
]

USE_LIBS += [
    'gkmedias',
    'lgpllibs',
    'nspr',
    'nss',
    'psshparser',
    'sqlite',
    'zlib',
]

if CONFIG['USE_ICU']:
    USE_LIBS += [
        'icu',
    ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
    USE_LIBS += [
        'mozgtk_stub',
    ]

if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT'] or \
        CONFIG['MOZ_TREE_FREETYPE']:
    USE_LIBS += [
        'freetype',
    ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
    CXXFLAGS += CONFIG['TK_CFLAGS']

if CONFIG['MOZ_WEBRTC']:
    if CONFIG['OS_TARGET'] == 'WINNT':
        OS_LIBS += [
            'secur32',
            'iphlpapi',
            'strmiids',
            'dmoguids',
            'wmcodecdspuuid',
            'amstrmid',
            'msdmo',
            'wininet',
        ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
    OS_LIBS += [
        '-framework OpenGL',
        '-framework SystemConfiguration',
        '-framework AVFoundation',
        '-framework CoreMedia',
        '-framework IOKit',
        '-F%s' % CONFIG['MACOS_PRIVATE_FRAMEWORKS_DIR'],
        '-framework CoreUI',
        '-framework CoreSymbolication',
        'cups',
    ]

if CONFIG['MOZ_WMF']:
    OS_LIBS += [
        'mfuuid',
        'wmcodecdspuuid',
        'strmiids',
    ]

if CONFIG['OS_ARCH'] == 'FreeBSD':
    OS_LIBS += [
        'util',
    ]

if CONFIG['OS_ARCH'] == 'WINNT':
    OS_LIBS += [
        'crypt32',
        'shell32',
        'ole32',
        'version',
        'winspool',
    ]

if CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android':
    OS_LIBS += [
        'rt',
    ]

OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS']
OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']

if CONFIG['SERVO_TARGET_DIR']:
    if CONFIG['_MSC_VER']:
        OS_LIBS += ['%s/geckoservo' % CONFIG['SERVO_TARGET_DIR']]
    else:
        OS_LIBS += ['-L%s' % CONFIG['SERVO_TARGET_DIR'], '-lgeckoservo']

if CONFIG['MOZ_SYSTEM_JPEG']:
    OS_LIBS += CONFIG['MOZ_JPEG_LIBS']

if CONFIG['MOZ_SYSTEM_HUNSPELL']:
    OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']

if not CONFIG['MOZ_TREE_PIXMAN']:
    OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS']

if CONFIG['MOZ_ALSA']:
    OS_LIBS += CONFIG['MOZ_ALSA_LIBS']

if CONFIG['HAVE_CLOCK_MONOTONIC']:
    OS_LIBS += CONFIG['REALTIME_LIBS']

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
    OS_LIBS += [
        'GLESv2',
    ]

if 'rtsp' in CONFIG['NECKO_PROTOCOLS']:
    OS_LIBS += [
        'stagefright_foundation',
    ]

OS_LIBS += CONFIG['ICONV_LIBS']

if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'uikit'):
    OS_LIBS += CONFIG['TK_LIBS']

if CONFIG['MOZ_SNDIO']:
    OS_LIBS += [
        'sndio',
    ]

if CONFIG['MOZ_ENABLE_DBUS']:
    OS_LIBS += CONFIG['MOZ_DBUS_GLIB_LIBS']

if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
    if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
        OS_LIBS += [l for l in CONFIG['TK_LIBS']
            if l not in ('-lgtk-3', '-lgdk-3')]
    else:
        OS_LIBS += CONFIG['TK_LIBS']
    OS_LIBS += CONFIG['XLDFLAGS']
    OS_LIBS += CONFIG['XLIBS']
    OS_LIBS += CONFIG['XEXT_LIBS']
    OS_LIBS += CONFIG['MOZ_PANGO_LIBS']
    OS_LIBS += CONFIG['XT_LIBS']
    OS_LIBS += [
        'gthread-2.0',
    ]

if CONFIG['MOZ_ENABLE_STARTUP_NOTIFICATION']:
    OS_LIBS += CONFIG['MOZ_STARTUP_NOTIFICATION_LIBS']

if CONFIG['MOZ_ENABLE_LIBPROXY']:
    OS_LIBS += CONFIG['MOZ_LIBPROXY_LIBS']

if CONFIG['OS_ARCH'] == 'SunOS':
    OS_LIBS += [
        'elf',
        'demangle',
        'sendfile',
    ]

if CONFIG['OS_ARCH'] == 'FreeBSD':
    OS_LIBS += [
        'util',
    ]

if CONFIG['OS_ARCH'] == 'WINNT':
    OS_LIBS += [
        'shell32',
        'ole32',
        'version',
        'winspool',
        'comdlg32',
        'imm32',
        'msimg32',
        'netapi32',
        'shlwapi',
        'psapi',
        'ws2_32',
        'dbghelp',
        'rasapi32',
        'rasdlg',
        'iphlpapi',
        'uxtheme',
        'setupapi',
        'secur32',
        'sensorsapi',
        'portabledeviceguids',
        'windowscodecs',
        'wininet',
        'wbemuuid',
        'wintrust',
        'wtsapi32',
        'locationapi',
        'sapi',
        'dxguid',
    ]
    if CONFIG['ACCESSIBILITY']:
        OS_LIBS += [
            'oleacc',
        ]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
    OS_LIBS += [
        'usp10',
        'oleaut32',
    ]

if CONFIG['COMPILE_ENVIRONMENT']:
    if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'uikit'):
        full_libname = SHARED_LIBRARY_NAME
    else:
        full_libname = '%s%s%s' % (
            CONFIG['DLL_PREFIX'],
            LIBRARY_NAME,
            CONFIG['DLL_SUFFIX']
        )
    GENERATED_FILES += ['dependentlibs.list']
    GENERATED_FILES['dependentlibs.list'].script = 'dependentlibs.py:gen_list'
    GENERATED_FILES['dependentlibs.list'].inputs = [
        '!%s' % full_libname,
    ]
    FINAL_TARGET_FILES += ['!dependentlibs.list']

# This library needs to be last to make XPCOM module registration work.
USE_LIBS += ['StaticXULComponentsEnd']