@@ -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