Description: Remove unused LLVM and Rust build dependencies
 Since the Javascript engine is normally part of Firefox, its build
 system has dependencies on the LLVM and Rust toolchains. This limits
 the number of architectures which mozjs68 can be built on.
 .
 It turns out, however, that neither LLVM nor Rust are used when mozjs68
 is being built and these build dependencies are therefore not necessary.
 .
 This patch removes them and allows mozjs68 to be built on any architecture.
 .
Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=959144
Forwarded: no
Last-Update: 2020-04-30

Index: mozjs68-68.6.0/js/moz.configure
===================================================================
--- mozjs68-68.6.0.orig/js/moz.configure
+++ mozjs68-68.6.0/js/moz.configure
@@ -18,11 +18,6 @@ def building_js(build_project):
 option(env='JS_STANDALONE', default=building_js,
        help='Reserved for internal use')

-include('../build/moz.configure/rust.configure',
-        when='--enable-compile-environment')
-include('../build/moz.configure/bindgen.configure',
-        when='--enable-compile-environment')
-
 @depends('JS_STANDALONE')
 def js_standalone(value):
     if value:
Index: mozjs68-68.6.0/moz.configure
===================================================================
--- mozjs68-68.6.0.orig/moz.configure
+++ mozjs68-68.6.0/moz.configure
@@ -598,36 +598,6 @@ set_config('MAKENSISU_FLAGS', nsis_flags

 check_prog('7Z', ('7z', '7za'), allow_missing=True, when=target_is_windows)

-
-@depends(host_c_compiler, c_compiler, bindgen_config_paths)
-def llvm_objdump(host_c_compiler, c_compiler, bindgen_config_paths):
-    clang = None
-    for compiler in (host_c_compiler, c_compiler):
-        if compiler and compiler.type == 'clang':
-            clang = compiler.compiler
-            break
-        elif compiler and compiler.type == 'clang-cl':
-            clang = os.path.join(os.path.dirname(compiler.compiler), 'clang')
-            break
-
-    if not clang and bindgen_config_paths:
-        clang = bindgen_config_paths.clang_path
-    llvm_objdump = 'llvm-objdump'
-    if clang:
-        out = check_cmd_output(clang, '--print-prog-name=llvm-objdump',
-                               onerror=lambda: None)
-        if out:
-            llvm_objdump = out.rstrip()
-    return (llvm_objdump,)
-
-
-llvm_objdump = check_prog('LLVM_OBJDUMP', llvm_objdump, what='llvm-objdump',
-                          when='--enable-compile-environment',
-                          paths=toolchain_search_path)
-
-add_old_configure_assignment('LLVM_OBJDUMP', llvm_objdump)
-
-
 # Please do not add configure checks from here on.

 # Fallthrough to autoconf-based configure
