import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo

This commit is contained in:
Roy Tam 2018-01-19 03:59:58 +08:00
commit dcd9973243
150858 changed files with 23884658 additions and 0 deletions

View file

@ -0,0 +1,17 @@
# 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/.
include $(topsrcdir)/toolkit/library/libxul.mk
include $(topsrcdir)/config/config.mk
# Wrap linker to print linking status periodically to prevent the linking
# process from getting killed
EXPAND_LIBS_EXEC := $(PYTHON) $(topsrcdir)/config/link.py
include $(topsrcdir)/config/rules.mk
.PHONY: gtestxul
gtestxul:
$(MAKE) -C $(DEPTH) toolkit/library/gtest/target LINK_GTEST=1

View file

@ -0,0 +1,5 @@
SECTIONS {
.data.rel.ro : {
*(.kPStaticModules)
}
}

View file

@ -0,0 +1,13 @@
#include "mozilla/Module.h"
/* Ensure end_kPStaticModules is at the end of the .kPStaticModules section
* on Windows. Somehow, placing the object last is not enough with PGO/LTCG. */
#ifdef _MSC_VER
/* Sections on Windows are in two parts, separated with $. When linking,
* sections with the same first part are all grouped, and ordered
* alphabetically with the second part as sort key. */
# pragma section(".kPStaticModules$Z", read)
# undef NSMODULE_SECTION
# define NSMODULE_SECTION __declspec(allocate(".kPStaticModules$Z"), dllexport)
#endif
NSMODULE_DEFN(end_kPStaticModules) = nullptr;

View file

@ -0,0 +1,15 @@
# 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/.
SOURCES += [
'StaticXULComponentsEnd.cpp',
]
# Don't let LTO reorder StaticXULComponentsStart.o.
if '-flto' in CONFIG['OS_CXXFLAGS']:
SOURCES['StaticXULComponentsEnd.cpp'].flags += ['-fno-lto']
Library('StaticXULComponentsEnd')
DEFINES['MOZILLA_INTERNAL_API'] = True

View file

@ -0,0 +1,3 @@
#include "mozilla/Module.h"
NSMODULE_DEFN(start_kPStaticModules) = nullptr;

View file

@ -0,0 +1,139 @@
# 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/.
'''Given a library, dependentlibs.py prints the list of libraries it depends
upon that are in the same directory, followed by the library itself.
'''
import os
import re
import subprocess
import sys
import mozpack.path as mozpath
from collections import OrderedDict
from mozpack.executables import (
get_type,
ELF,
MACHO,
)
from buildconfig import substs
def dependentlibs_dumpbin(lib):
'''Returns the list of dependencies declared in the given DLL'''
try:
proc = subprocess.Popen(['dumpbin', '-dependents', lib], stdout = subprocess.PIPE)
except OSError:
# dumpbin is missing, probably mingw compilation. Try using objdump.
return dependentlibs_mingw_objdump(lib)
deps = []
for line in proc.stdout:
# Each line containing an imported library name starts with 4 spaces
match = re.match(' (\S+)', line)
if match:
deps.append(match.group(1))
elif len(deps):
# There may be several groups of library names, but only the
# first one is interesting. The second one is for delayload-ed
# libraries.
break
proc.wait()
return deps
def dependentlibs_mingw_objdump(lib):
proc = subprocess.Popen(['objdump', '-x', lib], stdout = subprocess.PIPE)
deps = []
for line in proc.stdout:
match = re.match('\tDLL Name: (\S+)', line)
if match:
deps.append(match.group(1))
proc.wait()
return deps
def dependentlibs_readelf(lib):
'''Returns the list of dependencies declared in the given ELF .so'''
proc = subprocess.Popen([substs.get('TOOLCHAIN_PREFIX', '') + 'readelf', '-d', lib], stdout = subprocess.PIPE)
deps = []
for line in proc.stdout:
# Each line has the following format:
# tag (TYPE) value
# or with BSD readelf:
# tag TYPE value
# Looking for NEEDED type entries
tmp = line.split(' ', 3)
if len(tmp) > 3 and 'NEEDED' in tmp[2]:
# NEEDED lines look like:
# 0x00000001 (NEEDED) Shared library: [libname]
# or with BSD readelf:
# 0x00000001 NEEDED Shared library: [libname]
match = re.search('\[(.*)\]', tmp[3])
if match:
deps.append(match.group(1))
proc.wait()
return deps
def dependentlibs_otool(lib):
'''Returns the list of dependencies declared in the given MACH-O dylib'''
proc = subprocess.Popen([substs['OTOOL'], '-l', lib], stdout = subprocess.PIPE)
deps= []
cmd = None
for line in proc.stdout:
# otool -l output contains many different things. The interesting data
# is under "Load command n" sections, with the content:
# cmd LC_LOAD_DYLIB
# cmdsize 56
# name libname (offset 24)
tmp = line.split()
if len(tmp) < 2:
continue
if tmp[0] == 'cmd':
cmd = tmp[1]
elif cmd == 'LC_LOAD_DYLIB' and tmp[0] == 'name':
deps.append(re.sub('^@executable_path/','',tmp[1]))
proc.wait()
return deps
def dependentlibs(lib, libpaths, func):
'''For a given library, returns the list of recursive dependencies that can
be found in the given list of paths, followed by the library itself.'''
assert(libpaths)
assert(isinstance(libpaths, list))
deps = OrderedDict()
for dep in func(lib):
if dep in deps or os.path.isabs(dep):
continue
for dir in libpaths:
deppath = os.path.join(dir, dep)
if os.path.exists(deppath):
deps.update(dependentlibs(deppath, libpaths, func))
# Black list the ICU data DLL because preloading it at startup
# leads to startup performance problems because of its excessive
# size (around 10MB).
if not dep.startswith("icu"):
deps[dep] = deppath
break
return deps
def gen_list(output, lib):
libpaths = [os.path.join(substs['DIST'], 'bin')]
binary_type = get_type(lib)
if binary_type == ELF:
func = dependentlibs_readelf
elif binary_type == MACHO:
func = dependentlibs_otool
else:
ext = os.path.splitext(lib)[1]
assert(ext == '.dll')
func = dependentlibs_dumpbin
deps = dependentlibs(lib, libpaths, func)
deps[lib] = mozpath.join(libpaths[0], lib)
output.write('\n'.join(deps.keys()) + '\n')
return set(deps.values())
def main():
gen_list(sys.stdout, sys.argv[1])
if __name__ == '__main__':
main()

View file

@ -0,0 +1,17 @@
/* 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/. */
#include <windows.h>
BOOL WINAPI DllMain(
HANDLE hModule,
DWORD dwReason,
LPVOID lpvReserved
)
{
if (dwReason == DLL_PROCESS_ATTACH) {
::DisableThreadLibraryCalls((HMODULE)hModule);
}
return TRUE;
}

View file

@ -0,0 +1,19 @@
# -*- 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/.
# Bug 1294650 - populate our install with a shim dll to work around a
# 3rd party code injection crash.
SOURCES += [
'dummydll.cpp',
]
if CONFIG['CPU_ARCH'] == 'x86_64':
GeckoSharedLibrary('qipcap64')
else:
GeckoSharedLibrary('qipcap')
NO_VISIBILITY_FLAGS = True

View file

@ -0,0 +1,35 @@
# 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/.
# Enforce that the clean/distclean rules removes everything that needs
# to be removed from this directory.
ifneq (,$(filter clean distclean,$(MAKECMDGOALS)))
LINK_GTEST = 1
endif
ifndef LINK_GTEST
# Force to not include backend.mk unless LINK_GTEST is defined.
# Not including backend.mk makes traversing this directory do nothing.
STANDALONE_MAKEFILE = 1
else
include $(topsrcdir)/toolkit/library/libxul.mk
include $(topsrcdir)/config/config.mk
# Wrap linker to print linking status periodically to prevent the linking
# process from getting killed
EXPAND_LIBS_EXEC := $(PYTHON) $(topsrcdir)/config/link.py
ifdef COMPILE_ENVIRONMENT
target:: $(DIST)/bin/dependentlibs.list.gtest
endif
$(DIST)/bin/dependentlibs.list.gtest: $(DIST)/bin/dependentlibs.list
sed -e 's|$(SHARED_LIBRARY)|gtest/$(SHARED_LIBRARY)|' $< > $@
LINK_PDBFILE = xul-gtest.pdb
endif

View file

@ -0,0 +1,30 @@
# -*- 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/.
FINAL_TARGET = 'dist/bin/gtest'
USE_LIBS += [
'static:xul',
# xul-gtest is an intermediate static library. It is used as FINAL_TARGET
# for gtest code.
# If the FINAL_TARGET were the library in this directory, then the gtest
# code would end up before static:xul, and before StaticXULComponentStart,
# which needs to stay first.
'xul-gtest',
]
# This needs to come after static:xul to avoid things like libfallible coming
# before StaticXULComponentStart.
Libxul('xul-gtest-real')
if CONFIG['MOZ_RUST']:
USE_LIBS += [
'gkrust-gtest',
]
DIRS += [
'static',
]

110
toolkit/library/gtest/rust/Cargo.lock generated Normal file
View file

@ -0,0 +1,110 @@
[root]
name = "gkrust-gtest"
version = "0.1.0"
dependencies = [
"gkrust-shared 0.1.0",
"mp4parse-gtest 0.1.0",
"nsstring-gtest 0.1.0",
]
[[package]]
name = "byteorder"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "gkrust-shared"
version = "0.1.0"
dependencies = [
"mp4parse_capi 0.6.0",
"nsstring 0.1.0",
"rust_url_capi 0.0.1",
]
[[package]]
name = "idna"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libc"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "matches"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "mp4parse"
version = "0.6.0"
dependencies = [
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "mp4parse-gtest"
version = "0.1.0"
[[package]]
name = "mp4parse_capi"
version = "0.6.0"
dependencies = [
"mp4parse 0.6.0",
]
[[package]]
name = "nsstring"
version = "0.1.0"
[[package]]
name = "nsstring-gtest"
version = "0.1.0"
dependencies = [
"nsstring 0.1.0",
]
[[package]]
name = "rust_url_capi"
version = "0.0.1"
dependencies = [
"libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-bidi"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-normalization"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "url"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[metadata]
"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"
"checksum idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1053236e00ce4f668aeca4a769a09b3bf5a682d802abd6f3cb39374f6b162c11"
"checksum libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)" = "408014cace30ee0f767b1c4517980646a573ec61a57957aeeabcac8ac0a02e8d"
"checksum matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc3ad8109fa4b522f9b0cd81440422781f564aaf8c195de6b9d6642177ad0dd"
"checksum unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1f7ceb96afdfeedee42bade65a0d585a6a0106f681b6749c8ff4daa8df30b3f"
"checksum unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26643a2f83bac55f1976fb716c10234485f9202dcd65cfbdf9da49867b271172"
"checksum url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8527c62d9869a08325c38272b3f85668df22a65890c61a639d233dc0ed0b23a2"

View file

@ -0,0 +1,44 @@
[package]
name = "gkrust-gtest"
version = "0.1.0"
authors = ["nobody@mozilla.org"]
license = "MPL-2.0"
description = "Testing code for libgkrust"
[dependencies]
mp4parse-gtest = { path = "../../../../dom/media/gtest" }
nsstring-gtest = { path = "../../../../xpcom/rust/nsstring/gtest" }
gkrust-shared = { path = "../../rust/shared" }
[lib]
path = "lib.rs"
crate-type = ["staticlib"]
test = false
doctest = false
bench = false
doc = false
plugin = false
harness = false
# Explicitly specify what our profiles use.
[profile.dev]
opt-level = 1
debug = true
rpath = false
lto = false
debug-assertions = true
codegen-units = 1
panic = "abort"
[profile.release]
opt-level = 2
debug = true
rpath = false
# This would normally be 'true' for release configurations, but using LTO on
# rul-gtest causes link failures due to symbols also being found in libxul's
# librul.a. But LTO'ing things here is not crucial and not LTO'ing things
# enables us to link libxul-gtest, so we leave it turned off.
lto = false
debug-assertions = false
codegen-units = 1
panic = "abort"

View file

@ -0,0 +1,7 @@
// 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/.
extern crate gkrust_shared;
extern crate mp4parse_gtest;
extern crate nsstring_gtest;

View file

@ -0,0 +1,7 @@
# -*- 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/.
RustLibrary('gkrust-gtest')

View file

@ -0,0 +1,9 @@
# -*- 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/.
Library('xul-gtest')
Libxul_defines()

65
toolkit/library/libxul.mk Normal file
View file

@ -0,0 +1,65 @@
# 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/.
EXTRA_DEPS += $(topsrcdir)/toolkit/library/libxul.mk
ifeq (Linux,$(OS_ARCH))
ifneq (Android,$(OS_TARGET))
OS_LDFLAGS += -Wl,-version-script,symverscript
symverscript: $(topsrcdir)/toolkit/library/symverscript.in
$(call py_action,preprocessor, \
-DVERSION='xul$(MOZILLA_SYMBOLVERSION)' $< -o $@)
EXTRA_DEPS += symverscript
endif
endif
ifdef MOZ_WEBRTC
ifeq (WINNT,$(OS_TARGET))
ifndef MOZ_HAS_WINSDK_WITH_D3D
OS_LDFLAGS += \
-LIBPATH:'$(MOZ_DIRECTX_SDK_PATH)/lib/$(MOZ_D3D_CPU_SUFFIX)' \
$(NULL)
endif
endif
endif
# Generate GDB pretty printer-autoload files only on Linux. OSX's GDB is
# too old to support Python pretty-printers; if this changes, we could make
# this 'ifdef GNU_CC'.
ifeq (Linux,$(OS_ARCH))
# Create a GDB Python auto-load file alongside the libxul shared library in
# the build directory.
PP_TARGETS += LIBXUL_AUTOLOAD
LIBXUL_AUTOLOAD = $(topsrcdir)/toolkit/library/libxul.so-gdb.py.in
LIBXUL_AUTOLOAD_FLAGS := -Dtopsrcdir=$(abspath $(topsrcdir))
endif
# BFD ld doesn't create multiple PT_LOADs as usual when an unknown section
# exists. Using an implicit linker script to make it fold that section in
# .data.rel.ro makes it create multiple PT_LOADs. That implicit linker
# script however makes gold misbehave, first because it doesn't like that
# the linker script is given after crtbegin.o, and even past that, replaces
# the default section rules with those from the script instead of
# supplementing them. Which leads to a lib with a huge load of sections.
ifneq (OpenBSD,$(OS_TARGET))
ifneq (WINNT,$(OS_TARGET))
ifdef LD_IS_BFD
OS_LDFLAGS += $(topsrcdir)/toolkit/library/StaticXULComponents.ld
endif
endif
endif
ifdef _MSC_VER
get_first_and_last = dumpbin -exports $1 | grep _NSModule@@ | sort -k 3 | sed -n 's/^.*?\([^@]*\)@@.*$$/\1/;1p;$$p'
else
get_first_and_last = $(TOOLCHAIN_PREFIX)nm -g $1 | grep _NSModule$$ | grep -vw refptr | sort | sed -n 's/^.* _*\([^ ]*\)$$/\1/;1p;$$p'
endif
LOCAL_CHECKS = test "$$($(get_first_and_last) | xargs echo)" != "start_kPStaticModules_NSModule end_kPStaticModules_NSModule" && echo "NSModules are not ordered appropriately" && exit 1 || exit 0
ifeq (Linux,$(OS_ARCH))
LOCAL_CHECKS += ; test "$$($(TOOLCHAIN_PREFIX)readelf -l $1 | awk '$1 == "LOAD" { t += 1 } END { print t }')" -le 1 && echo "Only one PT_LOAD segment" && exit 1 || exit 0
endif

View file

@ -0,0 +1,8 @@
""" GDB Python customization auto-loader for libxul """
#filter substitution
import os.path
sys.path[0:0] = [os.path.join('@topsrcdir@', 'js', 'src', 'gdb')]
import mozilla.autoload
mozilla.autoload.register(gdb.current_objfile())

402
toolkit/library/moz.build Normal file
View file

@ -0,0 +1,402 @@
# -*- 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',
'dbghelp.dll',
'netapi32.dll',
'PowrProf.dll',
'psapi.dll',
'rasapi32.dll',
'rasdlg.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']
# This option should go away in bug 1290972, but we need to wait until
# Rust 1.12 has been released.
if CONFIG['MOZ_RUST'] and CONFIG['OS_ARCH'] == 'Darwin':
LDFLAGS += ['-Wl,-no_compact_unwind']
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']
if CONFIG['OS_ARCH'] == 'WINNT':
DIRS += ['dummydll']
# 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 CONFIG['MOZ_JPROF']:
USE_LIBS += [
'jprof',
]
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['MOZ_DIRECTSHOW']:
OS_LIBS += [
'dmoguids',
'wmcodecdspuuid',
'strmiids',
'msdmo',
]
if CONFIG['OS_ARCH'] == 'FreeBSD':
OS_LIBS += [
'util',
]
if CONFIG['OS_ARCH'] == 'WINNT':
OS_LIBS += [
'crypt32',
'shell32',
'ole32',
'version',
'winspool',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
OS_LIBS += [
'dbus',
]
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_PNG']:
OS_LIBS += CONFIG['MOZ_PNG_LIBS']
if CONFIG['MOZ_SYSTEM_HUNSPELL']:
OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']
if CONFIG['MOZ_SYSTEM_LIBEVENT']:
OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS']
if CONFIG['MOZ_SYSTEM_LIBVPX']:
OS_LIBS += CONFIG['MOZ_LIBVPX_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 CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
OS_LIBS += [
'ui',
'media',
'hardware_legacy',
'hardware',
'utils',
'cutils',
'sysutils',
'camera_client',
'sensorservice',
'stagefright',
'stagefright_foundation',
'stagefright_omx',
'binder',
'gui',
'mtp',
]
if int(CONFIG['ANDROID_VERSION']) >= 17:
OS_LIBS += [
'sync',
]
if CONFIG['ANDROID_VERSION'] >= '16':
OS_LIBS += [
'mdnssd',
]
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['OS_ARCH'] == 'OpenBSD':
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',
]
if CONFIG['GNU_CC']:
OS_LIBS += [
'demangle',
]
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']
# The above library needs to be last for C++ purposes. This library,
# however, is entirely composed of Rust code, and needs to come after
# all the C++ code so any possible C++ -> Rust calls can be resolved.
if CONFIG['MOZ_RUST']:
USE_LIBS += ['gkrust']

View file

@ -0,0 +1,43 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */
#include <windows.h>
#include "nsToolkit.h"
#include "mozilla/Assertions.h"
#include "mozilla/WindowsVersion.h"
#if defined(__GNUC__)
// If DllMain gets name mangled, it won't be seen.
extern "C" {
#endif
BOOL APIENTRY DllMain(
HINSTANCE hModule,
DWORD reason,
LPVOID lpReserved )
{
switch( reason ) {
case DLL_PROCESS_ATTACH:
nsToolkit::Startup((HINSTANCE)hModule);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
nsToolkit::Shutdown();
break;
}
return TRUE;
}
#if defined(__GNUC__)
} // extern "C"
#endif

97
toolkit/library/rust/Cargo.lock generated Normal file
View file

@ -0,0 +1,97 @@
[root]
name = "gkrust"
version = "0.1.0"
dependencies = [
"gkrust-shared 0.1.0",
]
[[package]]
name = "byteorder"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "gkrust-shared"
version = "0.1.0"
dependencies = [
"mp4parse_capi 0.6.0",
"nsstring 0.1.0",
"rust_url_capi 0.0.1",
]
[[package]]
name = "idna"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libc"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "matches"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "mp4parse"
version = "0.6.0"
dependencies = [
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "mp4parse_capi"
version = "0.6.0"
dependencies = [
"mp4parse 0.6.0",
]
[[package]]
name = "nsstring"
version = "0.1.0"
[[package]]
name = "rust_url_capi"
version = "0.0.1"
dependencies = [
"libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
"url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-bidi"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-normalization"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "url"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[metadata]
"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"
"checksum idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1053236e00ce4f668aeca4a769a09b3bf5a682d802abd6f3cb39374f6b162c11"
"checksum libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)" = "408014cace30ee0f767b1c4517980646a573ec61a57957aeeabcac8ac0a02e8d"
"checksum matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc3ad8109fa4b522f9b0cd81440422781f564aaf8c195de6b9d6642177ad0dd"
"checksum unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1f7ceb96afdfeedee42bade65a0d585a6a0106f681b6749c8ff4daa8df30b3f"
"checksum unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26643a2f83bac55f1976fb716c10234485f9202dcd65cfbdf9da49867b271172"
"checksum url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8527c62d9869a08325c38272b3f85668df22a65890c61a639d233dc0ed0b23a2"

View file

@ -0,0 +1,37 @@
[package]
name = "gkrust"
version = "0.1.0"
authors = ["nobody@mozilla.org"]
license = "MPL-2.0"
description = "Rust code for libxul"
[dependencies]
gkrust-shared = { path = "shared" }
[lib]
path = "lib.rs"
crate-type = ["staticlib"]
test = false
doctest = false
bench = false
doc = false
plugin = false
harness = false
# Explicitly specify what our profiles use.
[profile.dev]
opt-level = 1
debug = true
rpath = false
lto = false
debug-assertions = true
codegen-units = 1
panic = "abort"
[profile.release]
opt-level = 2
debug = true
rpath = false
lto = true
debug-assertions = false
panic = "abort"

View file

@ -0,0 +1,9 @@
// 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/.
// You should not be adding code to this crate; you will almost certainly
// get link errors when linking libxul-gtest. Add any |extern crate|
// declarations or similar to the gkrust-shared crate in
// toolkit/library/rust/shared/lib.rs.
extern crate gkrust_shared;

View file

@ -0,0 +1,7 @@
# -*- 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/.
RustLibrary('gkrust')

View file

@ -0,0 +1,20 @@
[package]
name = "gkrust-shared"
version = "0.1.0"
authors = ["nobody@mozilla.org"]
license = "MPL-2.0"
description = "Shared Rust code for libxul"
[dependencies]
mp4parse_capi = { path = "../../../../media/libstagefright/binding/mp4parse_capi" }
nsstring = { path = "../../../../xpcom/rust/nsstring" }
rust_url_capi = { path = "../../../../netwerk/base/rust-url-capi" }
[lib]
path = "lib.rs"
test = false
doctest = false
bench = false
doc = false
plugin = false
harness = false

View file

@ -0,0 +1,7 @@
// 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/.
extern crate mp4parse_capi;
extern crate nsstring;
extern crate rust_url_capi;

View file

@ -0,0 +1,4 @@
#filter substitution
@VERSION@ {
global: *;
};

View file

@ -0,0 +1,5 @@
/* 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/. */
#include "widget.rc"