about summary refs log tree commit diff
path: root/third_party/bazel/rules_haskell/CHANGELOG.md
blob: af0fe7ddc581e030a98e5d28f5d5f72ae488a721 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/).

## [0.9.1] - 2019-06-03

### Fixed

- Bindists were broken on MacOS.
  See [884](https://github.com/tweag/rules_haskell/issues/884).

## [0.9] - 2019-05-07

### Highlights

* The minimum supported Bazel version is now v0.24.

  The version is available from [`nixpkgs
  unstable`](https://github.com/NixOS/nixpkgs/pull/58147) and via
  [`official
  releases`](https://docs.bazel.build/versions/master/install.html).

* Initial Windows support

  A non-trivial subset of `rules_haskell` is now working on Windows.
  See the [`project
  tracker`](https://github.com/tweag/rules_haskell/issues?q=is%3Aopen+is%3Aissue+project%3Atweag%2Frules_haskell%2F2)
  for finished and ongoing work.

* Improved OSX support

  Due to the `mach-o` header size limit, we took extra measures to
  make sure generated library paths are as short as possible, so
  linking haskell binaries works even for large dependency graphs.

* Better Bindist support

  The default [`start` script](http://haskell.build/start) sets up a
  bindist-based project by default.

  `rules_nixpkgs` is no longer a required dependency of
  `rules_haskell` (but can still be used as backend).

* Full Haskell–C–Haskell Sandwich

  A `haskell_library` can be now be used nearly anywhere a
  `cc_library` can.

  The old `cc_haskell_import` and `haskell_cc_import` wrapper rules
  are no longer necessary and have been deprecated.

* Greatly improved REPL support

  A new `haskell_repl` rule allows to load multiple source targets by
  source, or compiled, as needed. Example usage:

  ```
  haskell_repl(
    name = "my-repl",
    # Collect all transitive Haskell dependencies from these targets.
    deps = [
        "//package-a:target-1",
        "//package-b:target-2",
    ],
    # Load targets by source that match these patterns.
    include = [
        "//package-a/...",
        "//packaga-b/...",
        "//common/...",
    ],
    # Don't load targets by source that match these patterns.
    exclude = [
        "//package-a/vendored/...",
    ],
  )
  ```

* Support for GHC plugins

  Each `haskell_*` rule now has a `plugins` attribute. It takes a
  list of bazel targets, which should be `haskell_library`s that
  implement the [GHC plugin
  specification](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/extending_ghc.html#compiler-plugins).

* Initial Code Coverage support

  Measure coverage of your Haskell code. See the [“Checking Code
  Coverage”](https://rules-haskell.readthedocs.io/en/latest/haskell-use-cases.html#checking-code-coverage)
  section in the manual.

### Compatibility Notice

[`hazel`](https://github.com/FormationAI/hazel) was [merged into
`rules_haskell`](https://github.com/tweag/rules_haskell/pull/733), but
we are not yet certain about the exact interface we want to expose.
`hazel` is therefore not included in this release, and we can’t
guarantee the original, unmerged version is compatible with this
release. If you depend on `hazel`, please use a recent `master` commit
of `rules_haskell`.

### Changed

* `haskell_register_ghc_bindists` is no longer re-exported from
  `//haskell/haskell.bzl`.
  You must now load that macro from `//haskell:nixpkgs.bzl`.

* `rules_nixpkgs` is no longer a dependency of `rules_haskell`.

* `haskell_import` has been renamed to `haskell_toolchain_library`.
  This is a substantial breaking change. But adapting to it should be
  as simple as

  ```
  sed -i 's/^haskell_import/haskell_toolchain_library/' **/BUILD{,.bazel}
  sed -i 's/"haskell_import"/"haskell_toolchain_library"/' **/BUILD{,.bazel}
  ```

  See [#843](https://github.com/tweag/rules_haskell/pull/843).

* `haskell_toolchain`’s tools attribute is now a list of labels.
  Earlier entries take precendence. To migrate, add `[]` around your
  argument.
  See [#854](https://github.com/tweag/rules_haskell/pull/854).

* The default outputs of `haskell_library` are now the static and/or
  shared library files, not the package database config and cache
  files.

### Added

* `haskell_repl` rule that constructs a ghci wrapper that loads
  multiple targets by source.
  See [#736](https://github.com/tweag/rules_haskell/pull/736).
* `plugins` attribute to `haskell_*` rules to load GHC plugins.
  See [#799](https://github.com/tweag/rules_haskell/pull/799).
* The `HaskellInfo` and `HaskellLibraryInfo` providers are now
  exported and thus accessible by downstream rules.
  See [#844](https://github.com/tweag/rules_haskell/pull/844).
* Generate version macros for preprocessors (`c2hs`, `hsc2hs`).
  See [#847](https://github.com/tweag/rules_haskell/pull/847).
* `bindist_toolchain` rule gets `haddock_flags` and `repl_ghci_args`
  attributes.
* `@repl` targets write json file with build information, usable by
  IDE tools.
  See [#695](https://github.com/tweag/rules_haskell/pull/695).

### Deprecated

* `haskell_cc_import`; use `cc_library` instead.
  See [#831](https://github.com/tweag/rules_haskell/pull/831).
* `cc_haskell_import`; just use `haskell_library` like a `cc_library`.
  See [#831](https://github.com/tweag/rules_haskell/pull/831).

### Fixed

* Support protobuf roots in `haskell_proto_library`.
  See [#722](https://github.com/tweag/rules_haskell/pull/722).
* Made GHC bindist relocatable on *nix.
  See [#853](https://github.com/tweag/rules_haskell/pull/853).
* Various other fixes

## [0.8] - 2019-01-28

* The minimum supported Bazel version is now v0.21.

### Added

* `haskell_register_toolchains`, `haskell_register_ghc_bindists` and
  `haskell_register_ghc_nixpkgs` to register multiple toolchains for
  multiple platforms at once. Toolchains from binary distributions can
  now coexist with toolchains from Nixpkgs, even on the same platform.
  On nixpkgs you need to provide a toolchain. See
  [the `README`](./README.md#Nixpkgs) for instructions.
  See [#597](https://github.com/tweag/rules_haskell/pull/597)
  and [#610](https://github.com/tweag/rules_haskell/pull/610).
* Instructions on how to reference a local checkout of `rules_haskell`.
* `rules_haskell` is forward-compatible with the next breaking changes
  in `bazel` versions, via the `--all_incompatible_changes` flag.
  See [#613](https://github.com/tweag/rules_haskell/pull/613).

### Removed

* The `generate_so` attribute of `haskell_binary` and `haskell_test`
  has been completely superseded by `linkstatic` in the last release
  and became a no-op, so it is removed.
* The `main_file` attribute of `haskell_binary` and `haskell_test`
  had been deprecated because it was a no-op, so it is removed.
* The `prebuilt_dependencies` attribute of all haskell rules
  had been deprecated two versions ago and is removed.
  Use `haskell_import` instead (see docs for usage).
* The `extra_binaries` field is now no longer supported.

### Changed

* `ghc_bindist` now requires a `target` argument. Use
  `haskell_register_ghc_nixpkgs` to call `ghc_bindist` once per known
  target.
  See [#610](https://github.com/tweag/rules_haskell/pull/610).
* `ghc_bindist` now registers itself as a toolchain. We no longer
  require a separate toolchain definition and registration in addition
  to `ghc_bindist`.
  See [#610](https://github.com/tweag/rules_haskell/pull/610).
* `c2hs` support is now provided in a separate toolchain called
  `c2hs_toolchain`, rather than an optional extra to the
  `haskell_toolchain`.
  See [#590](https://github.com/tweag/rules_haskell/pull/590).
* Rename bindist arch names so they are the same as in
  `rules_go/nodejs`.

### Fixed

* Prevent duplicate installs of bazel_skylib
  See [#536](https://github.com/tweag/rules_haskell/pull/536).
* Test suite now executes all binaries, various runtime errors were
  uncovered.
  See [#551](https://github.com/tweag/rules_haskell/pull/551).
* Repl targets that have indirect cc_library dependencies.
  See [#576](https://github.com/tweag/rules_haskell/pull/576).
* `linkstatic` for haskell binaries that have an indirect dependency
  on a prebuilt haskell package.
  See [#569](https://github.com/tweag/rules_haskell/pull/569).
* … and an indirect dependency on a C library.
  See [#567](https://github.com/tweag/rules_haskell/pull/567).
* Prefer linking agains static C libraries with `linkstatic`.
  See [#587](https://github.com/tweag/rules_haskell/pull/587).
* Haddock flags take precedence over GHC compiler flags.
  See [#572](https://github.com/tweag/rules_haskell/pull/572).
* User-defined GHC flags now override default flags.
  See [#607](https://github.com/tweag/rules_haskell/pull/607).
* Dynamic transitive C(++) libraries work.
  See [#627](https://github.com/tweag/rules_haskell/pull/627).

## [0.7] - 2018-12-24

### Added

* Support for Bazel 0.20.0. This is now also the lower bound for the
  supported version.
* Supported reexported modules, via the
  new
  [`exports` attribute](http://api.haskell.build/haskell/haskell.html#haskell_library.exports).
  See [#357](https://github.com/tweag/rules_haskell/issues/357).
* Support `linkstatic` attribute, for building mostly static binaries.
  This is now the default for binaries, to match the C/C++ rules
  defaults.
  See [#378](https://github.com/tweag/rules_haskell/issues/378).
* It is now possible to set default Haddock flags in the toolchain
  definition.
  See [#425](https://github.com/tweag/rules_haskell/pull/425).
* Support wrapping Haskell libraries as shared objects callable from
  Python.
  See [#370](https://github.com/tweag/rules_haskell/issues/370).

### Changed

* REPL targets have changed name. If you have a library target `foo`,
  then the corresponding REPL target is now called `foo@repl`. It was
  previously called `foo-repl`. The old name is still supported but is
  deprecated.
* Don't set a default version number anymore in libraries and
  binaries. Version numbers, and CPP version macros, are now only used
  for packages imported from Hackage. Don't use them otherwise.
  See
  [#386](https://github.com/tweag/rules_haskell/pull/386),
  [#414](https://github.com/tweag/rules_haskell/pull/414)
  and [#446](https://github.com/tweag/rules_haskell/pull/446).
* On macOS, we use `ar` for linking, not Libtool.
  See [#392](https://github.com/tweag/rules_haskell/pull/392).
* The `runfiles` Haskell library has been broken out into a Cabal
  library and published on Hackage.

### Fixed

* Make REPL force building of dependencies.
  See [#363](https://github.com/tweag/rules_haskell/pull/363).
* Don’t crash on inputs missing `.haddock` interface files. See
  [#362](https://github.com/tweag/rules_haskell/pull/362)
* Fix handling of non-unique package names.
  See [#403](https://github.com/tweag/rules_haskell/pull/403).

## [0.6] - 2018-07-21

### Added

* Protocol buffers integration using `proto-lens`. See
  [#239](https://github.com/tweag/rules_haskell/pull/239).

* `strip_include_prefix` attribute to the `haskell_cc_import` rule. See
  [#241](https://github.com/tweag/rules_haskell/pull/241).

* Support for `c2hs` files. See
  [#351](https://github.com/tweag/rules_haskell/pull/351).

* The `extra_srcs` attribute that allows to list non-Haskell source files
  that should be visible during compilation and linking (usually useful with
  TH). See [#292](https://github.com/tweag/rules_haskell/pull/292).

* The `extra_binaries` attribute to the `haskell_toolchain` rule. See
  [#282](https://github.com/tweag/rules_haskell/issues/282).

* A Haskell library for looking up runfiles. See
  [#302](https://github.com/tweag/rules_haskell/pull/302).

* A separate toolchain for `doctest``haskell_doctest_toolchain`. See
  [#310](https://github.com/tweag/rules_haskell/pull/310).

* The `compiler_flags` attribute to the `haskell_toolchain` rule allowing to
  specify default compiler flags. See
  [#315](https://github.com/tweag/rules_haskell/issues/315).

* The ability to set locale to be used during compilation by adding the
  `locale` and `locale_archive` attributes to `haskell_toolchain`. See
  [#328](https://github.com/tweag/rules_haskell/pull/328).

* Proper support for profiling. See
  [#332](https://github.com/tweag/rules_haskell/pull/332).

* The `repl_ghci_args` attribute to the `haskell_toolchain` rule. See
  [#334](https://github.com/tweag/rules_haskell/pull/334).

* The `haskell_import` rule allowing us to make specifying dependencies more
  uniform and to deprecate the `prebuilt_dependencies` attribute. See
  [#337](https://github.com/tweag/rules_haskell/pull/337).

### Fixed

* Template Haskell linking against `cc_library`. See
  [#218](https://github.com/tweag/rules_haskell/pull/218).

* Linking issues on MacOS. See
  [#221](https://github.com/tweag/rules_haskell/pull/221).

* GHC packages that correspond to targets with the same name but in
  different Bazel packages no longer clash. See
  [#219](https://github.com/tweag/rules_haskell/issues/219).

* Build breakage on MacOS when XCode is not installed. See
  [#223](https://github.com/tweag/rules_haskell/pull/223).

* Bug preventing Haddock generation because of missing dynamic shared
  libraries when targets have TH in them. See
  [#226](https://github.com/tweag/rules_haskell/pull/226).

* Hyperlinks between targets contained in different Bazel packages
  (Haddocks). See [#231](https://github.com/tweag/rules_haskell/issues/231).

* Generated source files do not cause issues now. See
  [#211](https://github.com/tweag/rules_haskell/pull/211).

* `data` attributes now allow files in them. See
  [#236](https://github.com/tweag/rules_haskell/issues/236).

* Bug when headers and hsc2hs-produced files were not visible to Haddock.
  See [#254](https://github.com/tweag/rules_haskell/pull/254).

* Bug preventing using genrule-produced headers via `haskell_cc_import`. See
  [#268](https://github.com/tweag/rules_haskell/pull/268).

* Bug that allowed us avoid specifying certain `prebuilt_dependencies` if
  they were already specified for transitive dependencies. See
  [#286](https://github.com/tweag/rules_haskell/issues/286).

* Bug that was making modules generated from `.hsc` and `.chs` files and
  generated modules in general not available in the REPLs. See
  [#323](https://github.com/tweag/rules_haskell/pull/323).

### Changed

* Added `-Wnoncanonical-monad-instances` to default warnings in
  `haskell_lint`.

* How REPLs work. Now there is an optional output per binary/library. Its
  name is the name of target with `-repl` added. Users can then build and
  run such a REPL for any defined target. See
  [#220](https://github.com/tweag/rules_haskell/issues/220) and
  [#225](https://github.com/tweag/rules_haskell/pull/225).

* The `haskell_doc` rule now produces self-contained documentation bundle
  with unified index. See
  [#249](https://github.com/tweag/rules_haskell/pull/249).

* `haskell_lint` now only lints direct dependencies. See
  [#293](https://github.com/tweag/rules_haskell/pull/293).

* `haskell_doctest` has been re-designed. It's now a normal rule that works
  only on direct dependencies and allows to specify modules which should be
  tested, pass custom flags to `doctest` executable. See
  [#342](https://github.com/tweag/rules_haskell/pull/342).

* The `prebuilt_dependencies` attribute of `haskell_binary` and
  `haskell_library` has been deprecated. See
  [#355](https://github.com/tweag/rules_haskell/pull/355).

## [0.5] - 2018-04-15

### Added

* Support for MacOS, courtesy of Judah Jacobson. See
  [#165](https://github.com/tweag/rules_haskell/issues/165).

* Support for `data` attributes in `haskell_binary` and `haskell_library`
  rules. See [#167](https://github.com/tweag/rules_haskell/issues/167).

* Output on building of GHC bindists so it's clearer what went wrong in case
  of a failure.

* `haskell_repl` rule allowing to interact with GHCi. See
  [#82](https://github.com/tweag/rules_haskell/issues/82).

* Support for GHC 8.4.1 bindist. See
  [#175](https://github.com/tweag/rules_haskell/issues/175).

* `haskell_lint` rule. See
  [#181](https://github.com/tweag/rules_haskell/issues/181).

* `haskell_doctest` rule. See
  [#194](https://github.com/tweag/rules_haskell/issues/194).

### Changed

* Improved hermeticity of builds. See
  [#180](https://github.com/tweag/rules_haskell/pull/180).

* `cc_haskell_import` now works with `haskell_binary` targets as well. See
  [#179](https://github.com/tweag/rules_haskell/issues/179).

## [0.4] - 2018-02-27

### Added

* `hidden_modules` attribute of the `haskell_library` rule. This allows to
  selectively hide modules in a library. See
  [#152](https://github.com/tweag/rules_haskell/issues/152).

### Fixed

* Test executables now find shared libraries correctly at runtime. See
  [#151](https://github.com/tweag/rules_haskell/issues/151).

* Building of certain modules does not fail with the “file name does not
  match module name” message anymore. See
  [#139](https://github.com/tweag/rules_haskell/issues/139).

* Linking issues that resulted in unresolved symbols due to incorrect order
  in which static libraries are passed to linker are not resolved. See
  [#140](https://github.com/tweag/rules_haskell/issues/140).

* The “grep not found” error is fixed. See
  [#141](https://github.com/tweag/rules_haskell/pull/141).

* System-level shared libraries introduced by `haskell_cc_import` are now
  found correctly during compilation. See
  [#142](https://github.com/tweag/rules_haskell/issues/142).

## [0.3] - 2018-02-13

## [0.2] - 2018-01-07

## [0.1] - 2018-01-02