mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 17:28:46 +03:00
91f5dd573f
* Remove manual stack update * Update rules_haskell * rules_haskell_worker_dependencies after bazel-haskell-deps * Update rules_haskell Windows patch * make cabal haddock optional * Don't generate Haddocks on stack_snapshot Fails with ghc-lib and takes more time to build. Co-authored-by: Andreas Herrmann <andreash87@gmx.ch>
261 lines
10 KiB
Diff
261 lines
10 KiB
Diff
From 0d20e37429257b97d2f5387a32f2062b90426a13 Mon Sep 17 00:00:00 2001
|
|
From: Andreas Herrmann <andreas.herrmann@tweag.io>
|
|
Date: Tue, 31 Dec 2019 15:10:50 +0100
|
|
Subject: [PATCH 1/3] Cabal optional haddock outputs
|
|
|
|
---
|
|
haskell/cabal.bzl | 69 ++++++++++++++++++----------
|
|
haskell/private/cabal_wrapper.py.tpl | 7 ++-
|
|
2 files changed, 49 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/haskell/cabal.bzl b/haskell/cabal.bzl
|
|
index 8663eb09..3b9c5691 100644
|
|
--- a/haskell/cabal.bzl
|
|
+++ b/haskell/cabal.bzl
|
|
@@ -97,7 +97,7 @@ def _cabal_tool_flag(tool):
|
|
def _binary_paths(binaries):
|
|
return [binary.dirname for binary in binaries.to_list()]
|
|
|
|
-def _prepare_cabal_inputs(hs, cc, posix, dep_info, cc_info, direct_cc_info, component, package_id, tool_inputs, tool_input_manifests, cabal, setup, srcs, compiler_flags, flags, cabal_wrapper, package_database):
|
|
+def _prepare_cabal_inputs(hs, cc, posix, dep_info, cc_info, direct_cc_info, component, package_id, tool_inputs, tool_input_manifests, cabal, setup, srcs, compiler_flags, flags, generate_haddock, cabal_wrapper, package_database):
|
|
"""Compute Cabal wrapper, arguments, inputs."""
|
|
with_profiling = is_profiling_enabled(hs)
|
|
|
|
@@ -121,7 +121,7 @@ def _prepare_cabal_inputs(hs, cc, posix, dep_info, cc_info, direct_cc_info, comp
|
|
direct_cc_info.compilation_context.system_includes,
|
|
])
|
|
direct_lib_dirs = [file.dirname for file in direct_libs.to_list()]
|
|
- args.add_all([component, package_id, setup, cabal.dirname, package_database.dirname])
|
|
+ args.add_all([component, package_id, generate_haddock, setup, cabal.dirname, package_database.dirname])
|
|
args.add("--flags=" + " ".join(flags))
|
|
args.add_all(compiler_flags, format_each = "--ghc-option=%s")
|
|
args.add("--")
|
|
@@ -198,14 +198,18 @@ def _haskell_cabal_library_impl(ctx):
|
|
"_install/{}_data".format(package_id),
|
|
sibling = cabal,
|
|
)
|
|
- haddock_file = hs.actions.declare_file(
|
|
- "_install/{}_haddock/{}.haddock".format(package_id, ctx.attr.name),
|
|
- sibling = cabal,
|
|
- )
|
|
- haddock_html_dir = hs.actions.declare_directory(
|
|
- "_install/{}_haddock_html".format(package_id),
|
|
- sibling = cabal,
|
|
- )
|
|
+ if ctx.attr.haddock:
|
|
+ haddock_file = hs.actions.declare_file(
|
|
+ "_install/{}_haddock/{}.haddock".format(package_id, ctx.attr.name),
|
|
+ sibling = cabal,
|
|
+ )
|
|
+ haddock_html_dir = hs.actions.declare_directory(
|
|
+ "_install/{}_haddock_html".format(package_id),
|
|
+ sibling = cabal,
|
|
+ )
|
|
+ else:
|
|
+ haddock_file = None
|
|
+ haddock_html_dir = None
|
|
static_library_filename = "_install/lib/libHS{}.a".format(package_id)
|
|
if with_profiling:
|
|
static_library_filename = "_install/lib/libHS{}_p.a".format(package_id)
|
|
@@ -243,23 +247,27 @@ def _haskell_cabal_library_impl(ctx):
|
|
srcs = ctx.files.srcs,
|
|
compiler_flags = user_compile_flags,
|
|
flags = ctx.attr.flags,
|
|
+ generate_haddock = ctx.attr.haddock,
|
|
cabal_wrapper = ctx.executable._cabal_wrapper,
|
|
package_database = package_database,
|
|
)
|
|
+ outputs = [
|
|
+ package_database,
|
|
+ interfaces_dir,
|
|
+ static_library,
|
|
+ data_dir,
|
|
+ ]
|
|
+ if ctx.attr.haddock:
|
|
+ outputs.extend([haddock_file, haddock_html_dir])
|
|
+ if dynamic_library != None:
|
|
+ outputs.append(dynamic_library)
|
|
ctx.actions.run(
|
|
executable = c.cabal_wrapper,
|
|
arguments = [c.args],
|
|
inputs = c.inputs,
|
|
input_manifests = c.input_manifests,
|
|
tools = [c.cabal_wrapper],
|
|
- outputs = [
|
|
- package_database,
|
|
- interfaces_dir,
|
|
- static_library,
|
|
- data_dir,
|
|
- haddock_file,
|
|
- haddock_html_dir,
|
|
- ] + ([dynamic_library] if dynamic_library != None else []),
|
|
+ outputs = outputs,
|
|
env = c.env,
|
|
mnemonic = "HaskellCabalLibrary",
|
|
progress_message = "HaskellCabalLibrary {}".format(hs.label),
|
|
@@ -291,12 +299,15 @@ def _haskell_cabal_library_impl(ctx):
|
|
compile_flags = [],
|
|
)
|
|
lib_info = HaskellLibraryInfo(package_id = package_id, version = None, exports = [])
|
|
- doc_info = generate_unified_haddock_info(
|
|
- this_package_id = package_id,
|
|
- this_package_html = haddock_html_dir,
|
|
- this_package_haddock = haddock_file,
|
|
- deps = ctx.attr.deps,
|
|
- )
|
|
+ if ctx.attr.haddock:
|
|
+ doc_info = generate_unified_haddock_info(
|
|
+ this_package_id = package_id,
|
|
+ this_package_html = haddock_html_dir,
|
|
+ this_package_haddock = haddock_file,
|
|
+ deps = ctx.attr.deps,
|
|
+ )
|
|
+ else:
|
|
+ doc_info = None
|
|
cc_toolchain = find_cpp_toolchain(ctx)
|
|
feature_configuration = cc_common.configure_features(
|
|
ctx = ctx,
|
|
@@ -324,7 +335,10 @@ def _haskell_cabal_library_impl(ctx):
|
|
cc_info,
|
|
],
|
|
)
|
|
- return [default_info, hs_info, cc_info, lib_info, doc_info]
|
|
+ result = [default_info, hs_info, cc_info, lib_info]
|
|
+ if ctx.attr.haddock:
|
|
+ result.append(doc_info)
|
|
+ return result
|
|
|
|
haskell_cabal_library = rule(
|
|
_haskell_cabal_library_impl,
|
|
@@ -336,6 +350,10 @@ haskell_cabal_library = rule(
|
|
doc = "Version of the Cabal package.",
|
|
mandatory = True,
|
|
),
|
|
+ "haddock": attr.bool(
|
|
+ default = True,
|
|
+ doc = "Whether to generate haddock documentation.",
|
|
+ ),
|
|
"srcs": attr.label_list(allow_files = True),
|
|
"deps": attr.label_list(),
|
|
"compiler_flags": attr.string_list(
|
|
@@ -451,6 +469,7 @@ def _haskell_cabal_binary_impl(ctx):
|
|
srcs = ctx.files.srcs,
|
|
compiler_flags = user_compile_flags,
|
|
flags = ctx.attr.flags,
|
|
+ generate_haddock = False,
|
|
cabal_wrapper = ctx.executable._cabal_wrapper,
|
|
package_database = package_database,
|
|
)
|
|
diff --git a/haskell/private/cabal_wrapper.py.tpl b/haskell/private/cabal_wrapper.py.tpl
|
|
index d7b0f618..d066f64a 100755
|
|
--- a/haskell/private/cabal_wrapper.py.tpl
|
|
+++ b/haskell/private/cabal_wrapper.py.tpl
|
|
@@ -1,6 +1,6 @@
|
|
#!/usr/bin/env python3
|
|
|
|
-# cabal_wrapper.py <COMPONENT> <PKG_NAME> <SETUP_PATH> <PKG_DIR> <PACKAGE_DB_PATH> [EXTRA_ARGS...] -- [PATH_ARGS...]
|
|
+# cabal_wrapper.py <COMPONENT> <PKG_NAME> <HADDOCK> <SETUP_PATH> <PKG_DIR> <PACKAGE_DB_PATH> [EXTRA_ARGS...] -- [PATH_ARGS...]
|
|
#
|
|
# This wrapper calls Cabal's configure/build/install steps one big
|
|
# action so that we don't have to track all inputs explicitly between
|
|
@@ -8,6 +8,7 @@
|
|
#
|
|
# COMPONENT: Cabal component to build.
|
|
# PKG_NAME: Package ID of the resulting package.
|
|
+# HADDOCK: Whether to generate haddock documentation.
|
|
# SETUP_PATH: Path to Setup.hs
|
|
# PKG_DIR: Directory containing the Cabal file
|
|
# PACKAGE_DB_PATH: Output package DB path.
|
|
@@ -63,6 +64,7 @@ os.environ["PATH"] = canonicalize_path(os.getenv("PATH", ""))
|
|
|
|
component = sys.argv.pop(1)
|
|
name = sys.argv.pop(1)
|
|
+haddock = sys.argv.pop(1) == "true"
|
|
execroot = os.getcwd()
|
|
setup = os.path.join(execroot, sys.argv.pop(1))
|
|
srcdir = os.path.join(execroot, sys.argv.pop(1))
|
|
@@ -155,7 +157,8 @@ with tmpdir() as distdir:
|
|
[ "--package-db=" + package_database ], # This arg must come last.
|
|
)
|
|
run([runghc, setup, "build", "--verbose=0", "--builddir=" + distdir])
|
|
- run([runghc, setup, "haddock", "--verbose=0", "--builddir=" + distdir])
|
|
+ if haddock:
|
|
+ run([runghc, setup, "haddock", "--verbose=0", "--builddir=" + distdir])
|
|
run([runghc, setup, "install", "--verbose=0", "--builddir=" + distdir])
|
|
# Bazel builds are not sandboxed on Windows and can be non-sandboxed on
|
|
# other OSs. Operations like executing `configure` scripts can modify the
|
|
|
|
From 61c0d3307815d9022df95066f2f68238de9bf5bd Mon Sep 17 00:00:00 2001
|
|
From: Andreas Herrmann <andreas.herrmann@tweag.io>
|
|
Date: Tue, 31 Dec 2019 16:18:25 +0100
|
|
Subject: [PATCH 2/3] Add test-case for `haddock = False`
|
|
|
|
---
|
|
tests/haskell_cabal_library/BUILD.bazel | 1 +
|
|
tests/haskell_cabal_library/SecondLib.hs | 2 +-
|
|
2 files changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/tests/haskell_cabal_library/BUILD.bazel b/tests/haskell_cabal_library/BUILD.bazel
|
|
index 80ccb066..784a8d86 100644
|
|
--- a/tests/haskell_cabal_library/BUILD.bazel
|
|
+++ b/tests/haskell_cabal_library/BUILD.bazel
|
|
@@ -34,6 +34,7 @@ haskell_cabal_library(
|
|
"SecondLib.hs",
|
|
"second-lib.cabal",
|
|
],
|
|
+ haddock = False,
|
|
version = "0.1.0.0",
|
|
)
|
|
|
|
diff --git a/tests/haskell_cabal_library/SecondLib.hs b/tests/haskell_cabal_library/SecondLib.hs
|
|
index 44844bbf..2f2e6797 100644
|
|
--- a/tests/haskell_cabal_library/SecondLib.hs
|
|
+++ b/tests/haskell_cabal_library/SecondLib.hs
|
|
@@ -1,4 +1,4 @@
|
|
module SecondLib where
|
|
|
|
y :: Int
|
|
-y = 3
|
|
+y = 3 -- ^ Intentionally broken haddock comment to test @haddock = False@.
|
|
|
|
From 338815be67925a3fffe33375e133986eae80dc27 Mon Sep 17 00:00:00 2001
|
|
From: Andreas Herrmann <andreas.herrmann@tweag.io>
|
|
Date: Tue, 31 Dec 2019 16:23:46 +0100
|
|
Subject: [PATCH 3/3] stack_snapshot: Expose haddock attribute
|
|
|
|
---
|
|
haskell/cabal.bzl | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
diff --git a/haskell/cabal.bzl b/haskell/cabal.bzl
|
|
index 3b9c5691..280007eb 100644
|
|
--- a/haskell/cabal.bzl
|
|
+++ b/haskell/cabal.bzl
|
|
@@ -912,6 +912,7 @@ haskell_library(
|
|
haskell_cabal_library(
|
|
name = "{name}",
|
|
version = "{version}",
|
|
+ haddock = {haddock},
|
|
flags = {flags},
|
|
srcs = glob(["{dir}/**"]),
|
|
deps = {deps},
|
|
@@ -922,6 +923,7 @@ haskell_cabal_library(
|
|
""".format(
|
|
name = package.name,
|
|
version = package.version,
|
|
+ haddock = repr(repository_ctx.attr.haddock),
|
|
flags = package.flags,
|
|
dir = package.sdist,
|
|
deps = package.deps + [
|
|
@@ -951,6 +953,10 @@ _stack_snapshot = repository_rule(
|
|
"packages": attr.string_list(),
|
|
"vendored_packages": attr.label_keyed_string_dict(),
|
|
"flags": attr.string_list_dict(),
|
|
+ "haddock": attr.bool(
|
|
+ default = True,
|
|
+ doc = "Whether to generate haddock documentation",
|
|
+ ),
|
|
"extra_deps": attr.label_keyed_string_dict(),
|
|
"tools": attr.label_list(),
|
|
"stack": attr.label(),
|