Skip to content

Commit c5a0e3d

Browse files
authored
Merge pull request #2355 from tweag/kb/empty-lib
cabal: Add support for empty libraries
2 parents c5a35a6 + 8f4d948 commit c5a0e3d

File tree

10 files changed

+288
-62
lines changed

10 files changed

+288
-62
lines changed

extensions/stack_snapshot.bzl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,19 @@ _package_tag = tag_class(
129129
default = False,
130130
doc = "Configuring a package makes it visible by default, unless `hidden` is set to True",
131131
),
132+
# TODO: change to attr.string_keyed_label_dict(providers = [HaskellCabalLibraryArgs])
133+
# when minimum bazel version supports it.
134+
"components_args": attr.string_dict(
135+
doc = """ components_args: Defines map from component to cabal settings for that package.
136+
The cabal settings are a target of type `haskell_cabal_args`. Currently handles empty
137+
libraries and telling the build system to ignore `Setup.hs`.
138+
Use `lib` for the main library component, `exe:<exe-name>` for an executable component,
139+
and `lib:<sublib-name>` for a sublibrary.
140+
`exe` is a short-cut for `exe:<package-name>`.
141+
Either use the builtin "@rules_haskell//haskell/cabal:empty_library", or create your own
142+
if necessary.
143+
""",
144+
),
132145
},
133146
)
134147

@@ -180,6 +193,8 @@ def _add_packages(conf, module, root_or_rules_haskell):
180193
if package_tag.components != ["DETECT_DEFAULT"]:
181194
# Some packages have default components set
182195
conf.components[package_name] = package_tag.components
196+
if package_tag.components_args:
197+
conf.components[package_name] = package_tag.components_args
183198
if package_tag.components_dependencies:
184199
conf.components_dependencies[package_name] = json.encode(package_tag.components_dependencies)
185200
if package_tag.extra_deps:
@@ -295,6 +310,7 @@ def _stack_snapshot_impl(mctx):
295310
extra_deps = {},
296311
components = {},
297312
components_dependencies = {},
313+
components_args = {},
298314
vendored_packages = {},
299315
)
300316

@@ -318,6 +334,7 @@ def _stack_snapshot_impl(mctx):
318334
kwargs["flags"] = packages_conf.flags
319335
kwargs["components"] = packages_conf.components
320336
kwargs["components_dependencies"] = packages_conf.components_dependencies
337+
kwargs["components_args"] = packages_conf.components_args
321338
kwargs["extra_deps"] = packages_conf.extra_deps
322339
kwargs["vendored_packages"] = packages_conf.vendored_packages
323340
kwargs["name"] = "stackage"

0 commit comments

Comments
 (0)