Newer
Older
dub_jkp / CHANGELOG.md
@Sönke Ludwig Sönke Ludwig on 10 Jan 2014 23 KB Update change log.
  1. Changelog
  2. =========
  3.  
  4. v0.9.21 - 2013-
  5. --------------------
  6.  
  7. ### Features and improvements ###
  8.  
  9. - Implemented building dependencies as separate libraries (use `--combined` to use - almost - the old behavior)
  10. - The preferred package description file name is now "dub.json", instead of "package.json", which is still supported
  11. - Revamped command line help now shows detailed help for each command
  12. - Added `dub test` to run the unit tests of a package using a custom main() function
  13. - `--annotate` now works for all commands
  14. - Added a `"mainSourceFile"` field to better control how `--rdmd` and `dub test` work
  15. - The target binary (if any) is now automatically deleted after a linker error to avoid partially linked binaries
  16. - Added `--force` to `dub build` and `dub run` to force recompilation even if already up to date
  17. - Renamed the "debug_" and "release" build options to "debugMode" and "releaseMode" to avoid the D keyword clash
  18. - Renamed the "noBoundsChecks" build option to "noBoundsCheck" to be consistent with the corresponding build requirement
  19. - "dub init xxx vibe.d" now emits a "-version=VibeDefaultMain" as required by the latest versions
  20. - Reimplemented the VisualD project generator to use the new compile target logic
  21. - Instead of "dub generate visuald-combined" use "dub generate visuald --combined"
  22. - Properly handles the explicit library target types (those other than `"targetType": "library"`)
  23. - Added support for "dub add-local" without an explicit version argument (will be inferred using GIT) (by p0nce) - [pull #194][issue194]
  24. - Added a new "release-nobounds" build type
  25. - Improved the error message when "dub remove" fails because of a missing installation journal
  26. - Removed the Mono-D project generator - use Mono-D's built in DUB support instead
  27. - Added support for public sub packages in sub folders - this is the preferred way to use sub packages, see <http://code.dlang.org/package-format#sub-packages>
  28. - Only "main.d" or "packname/main.d" are now automatically treated as `"mainSourceFile"` for library targets
  29.  
  30. ### Bug fixes ###
  31.  
  32. - Fixed a malformed log message for files with modification times in the future
  33. - Fixed handling of absolute working directories
  34. - Fixed a segmentation fault on OS X when doing "dub upgrade" - [issue #179][issue179]
  35. - Fixed extraction of prerelease SemVer versions from the "git describe" output
  36. - Fixed handling of paths with spaces in generated VisualD projects
  37. - Fixed DUB binaries compiled with GDC/LDC to work around a crash issue in `std.net.curl` - [issue #109][issue109], [issue #135][issue135]
  38. - Fixed iterating over directories containing invalid symbols links (e.g. when searching a directory for packages)
  39. - Fixed the path separators used for `$DUBPATH` (':' on Posix and ';' on Windows)
  40. - Fixed using custom registries in the global DUB configuration file - [issue #186][issue186]
  41. - Fixed assertions triggering when `$HOME` is a relative path (by Ognjen Ivkovic) - [pull #192][issue192]
  42. - Fixed the VisualD project generator to enforce build requirements
  43. - Fixed build requirements to also affect comipler options of the selected build
  44. - Fixed configuration resolution for complex dependency graphs (it could happen that configurations were picked that can't work on the selected platform)
  45. - Fixed "dub build -b ddox" to only copy resource files from DDOX if they are newer than existing files on Posix
  46.  
  47. [issue109]: https://github.com/rejectedsoftware/dub/issues/109
  48. [issue135]: https://github.com/rejectedsoftware/dub/issues/135
  49. [issue179]: https://github.com/rejectedsoftware/dub/issues/179
  50. [issue186]: https://github.com/rejectedsoftware/dub/issues/186
  51. [issue192]: https://github.com/rejectedsoftware/dub/issues/192
  52. [issue194]: https://github.com/rejectedsoftware/dub/issues/194
  53.  
  54.  
  55. v0.9.20 - 2013-11-29
  56. --------------------
  57.  
  58. ### Features and improvements ###
  59.  
  60. - Compiles on DMD 2.064 without warnings - [issue #116][issue116]
  61. - Builds are cached now by default in the ".dub/" sub folder of each package
  62. - An explicit "dub upgrade --prerelease" is now necessary to upgrade to pre-release versions of dependencies
  63. - "dub describe" and generated VisualD projects now also contain pure import and string import files
  64. - "dub run" now only builds in "/tmp" or "%TEMP%" if the package folder is write protected - [issue #82][issue82]
  65. - "dub init" can not take an optional project template name (currently "minimal" or "vibe.d")
  66. - Renamed "dub install" to "dub fetch" to avoid giving the impression of actual system installation (by Михаил Страшун aka Dicebot) - [pull #150][issue150]
  67. - Added support for "dub describe (package name)" and "dub describe --root=(path to package)" to describe packages outside of the CWD
  68. - `"excludedSourceFiles"` now supports [glob expressions](http://dlang.org/phobos/std_path.html#.globMatch) (by Jacob Carlborg) - [pull #155][issue155]
  69. - "dub --build=ddox" now starts a local HTTP server and automatically opens the browser to display the documentation
  70. - Environment variables can now be used inside path based fields in package.json (by Alexei Bykov) - [pull #158][issue158]
  71. - "dub describe" now contains a `"targetFileName"` field that includes the file extension (e.g. ".exe" or ".so")
  72. - Removed the compatibility version of the new `std.process` as it lacks support for `browse()`
  73. - Support using .obj/.lib/.res/.o/.a/.so/.dylib files to be specified as "sourceFiles", they will be bassed to the compiler at the linking stage
  74. - Added a "library-nonet" configuration to the package description file to compile without a CURL dependency
  75. - Added support for the "http_proxy" environment variable
  76.  
  77. ### Bug fixes ###
  78.  
  79. - Fixed building of explicitly selected packages with custom configurations (using "dub build (package name)")
  80. - Fixed running DUB from outside of a valid package directory when an explicit package name is given
  81. - Fixed dependency calculation for dependencies referenced in configuration blocks - [issue #137][issue137]
  82. - Fixed warnings to be enabled as errors by default again
  83. - Fixed resolution of dependencies when sub packages are involved - [issue #140][issue140]
  84. - Fixed handling of build options for GDC/LDC (by finalpatch) - [pull #143][issue143]
  85. - Fixed emitting "-shared -fPIC" for DMD when building shared libraries - [issue #138][issue138]
  86. - Fixed "dub --build=ddox" for target types other than "executable" - [issue #142][issue142]
  87. - Fixed a crash when loading the main package failed - [issue #145][issue145]
  88. - Fixed the error message for empty path strings in the `"sourcePaths"` field - see [issue #149][issue149]
  89. - Fixed representing empty relative paths by "." instead of an empty string - [issue #153][issue153]
  90. - Fixed running executables for projects outside of the CWD
  91. - Fixed copying of DDOX resources on Posix for "--build=ddox" (by Martin Nowak) - [pull #162][issue162]
  92. - Fixed ARM floating-point platform/version identifiers
  93. - Fixed generating VisualD projects for shared library packages (by p0nce) - [pull #173][issue173]
  94. - Fixed erroneous upgrading of packages that are not managed by DUB (for "dub upgrade") - [issue #171][issue171]
  95. - Fixed erroneously fetching the same package multiple times when sub packages are used
  96. - Fixed string representation of empty paths (fixes the target file name for generated VisualD projects)
  97.  
  98. [issue82]: https://github.com/rejectedsoftware/dub/issues/82
  99. [issue116]: https://github.com/rejectedsoftware/dub/issues/116
  100. [issue137]: https://github.com/rejectedsoftware/dub/issues/137
  101. [issue140]: https://github.com/rejectedsoftware/dub/issues/140
  102. [issue142]: https://github.com/rejectedsoftware/dub/issues/142
  103. [issue143]: https://github.com/rejectedsoftware/dub/issues/143
  104. [issue145]: https://github.com/rejectedsoftware/dub/issues/145
  105. [issue149]: https://github.com/rejectedsoftware/dub/issues/149
  106. [issue150]: https://github.com/rejectedsoftware/dub/issues/150
  107. [issue153]: https://github.com/rejectedsoftware/dub/issues/153
  108. [issue155]: https://github.com/rejectedsoftware/dub/issues/155
  109. [issue158]: https://github.com/rejectedsoftware/dub/issues/158
  110. [issue162]: https://github.com/rejectedsoftware/dub/issues/162
  111. [issue171]: https://github.com/rejectedsoftware/dub/issues/171
  112. [issue173]: https://github.com/rejectedsoftware/dub/issues/173
  113.  
  114.  
  115. v0.9.19 - 2013-10-18
  116. --------------------
  117.  
  118. ### Features and improvements ###
  119.  
  120. - Added the possibility to build or run a specific package, inculding sub packages
  121. - Implemented a new "--root=PATH" switch to let dub operate from a different directory than the current working directory
  122. - "dub init" now always emits lower case DUB package names
  123. - Improved diagnostic output for "dub add-local" and "dub remove-local"
  124. - Using the static version of Phobos fro building DUB to improve platform independence on Linux
  125.  
  126. ### Bug fixes ###
  127.  
  128. - Fixed erroneos "-debug" switches in non-debug builds
  129. - Enabled again a warning when using "-debug=" flags in "dflags" instead of using "debugVersions"
  130. - Fixed handling of paths with spaces for "--build=ddox"
  131. - Fixed inclusion of multiple instances of the same package.json files in the "visuald-combined" generator (by p0nce) - [pull #124][issue124]
  132. - Fixed response file output for LDC - [issue #86][issue86]
  133. - Fixed response file output for GDC - [issue #125][issue125]
  134. - Partially fixed working in paths with unicode characters by avoiding `std.stdio.File` - [issue #130][issue130]
  135.  
  136. [issue86]: https://github.com/rejectedsoftware/dub/issues/86
  137. [issue124]: https://github.com/rejectedsoftware/dub/issues/124
  138. [issue125]: https://github.com/rejectedsoftware/dub/issues/125
  139. [issue130]: https://github.com/rejectedsoftware/dub/issues/130
  140.  
  141.  
  142. v0.9.18 - 2013-09-11
  143. --------------------
  144.  
  145. ### Features and improvements ###
  146.  
  147. - Added support for a "buildOptions" field to be able to specify compiler options in an abstract way
  148. - Implemented a new configuration resolution algorithm that is able to handle complex dependency graphs
  149. - Added support for a "debugVersions" field ("-debug=xyz")
  150. - Added support for a "-debug=xyz" command line option to specify additional debug version specifiers
  151. - The VisualD project generator doesn't specify redundant compiler flags for features that have dedicated checkboxes anymore
  152. - Improved folder structure in generated "visuald-combined" projects (by p0nce) - [pull #110][issue110]
  153.  
  154. ### Bug fixes ###
  155.  
  156. - Fixed handling of packages with no configurations (a global `null` configuration is now assumed in this case)
  157. - Fixed building of shared libraries (was missing the "-shared" flag)
  158. - Fixed upgrading in conjunction with sub packages (was causing an infinite loop) - [issue #100][issue100]
  159. - Fixed build of complex generated VisualD projects by avoiding redundant link dependencies
  160. - Fixed upgrading of branch based dependencies
  161. - Fixed inheriting of global build settings in configurations - [issue #113][issue113]
  162. - Fixed inclusion of entry point files (e.g. "source/app.d") in pure library packages - [issue #105][issue105]
  163.  
  164. [issue100]: https://github.com/rejectedsoftware/dub/issues/100
  165. [issue105]: https://github.com/rejectedsoftware/dub/issues/105
  166. [issue110]: https://github.com/rejectedsoftware/dub/issues/110
  167. [issue113]: https://github.com/rejectedsoftware/dub/issues/113
  168.  
  169.  
  170. v0.9.17 - 2013-07-24
  171. --------------------
  172.  
  173. ### Features and improvements ###
  174.  
  175. - Added support for custom build types using the "buildTypes" field - [issue #78][issue78]
  176. - Added support for multiple and custom package registry URLs on the command line and as a configuration field - [issue #22][issue22]
  177. - Added support for a "workingDirectory" field to control from which directory the generated executable is run - [issue #84][issue84]
  178. - Added a new generator "visuald-combined", which combines the whole dependency tree into a single project
  179. - Updated default package registry URL to http://code.dlang.org
  180. - The default "unittest" and "unittest-cov" build types now issue the "-debug" flag
  181. - Building packages without any "importPaths" entry now issue a warning message
  182.  
  183. ### Bug fixes ###
  184.  
  185. - PARTIAL Fixed building with LDC - [issue #86][issue86]
  186. - The version string in the HTTP "User-Agent" field is now formatted according to SemVer
  187. - Fixed bogus warnings about "dflags" that are confised with flags that are a prefix of those
  188. - Fixed the VisualD generator to use the build settings and dependencies of the selected build configuration
  189. - Fixed the VisualD generator to enable the proper command line flags for each build type
  190. - Generated VisualD projects don't clean up JSON files on clean/rebuild anymore
  191. - Fixed building of packages with sub-packages when the main package is registered to DUB - [issue #87][issue87]
  192. - Fixed adhering to the specified global target type for library packages that have no explicit build configurations - [issue #92][issue92]
  193. - Fixed building of static libraries which have external library dependencies ("libs") - [issue #91][issue91]
  194. - Fixed error message for references to unknown sub-packages
  195. - Fixed handling of packages that are referenced multiple times using an explicit path - [issue #98][issue98]
  196.  
  197. [issue22]: https://github.com/rejectedsoftware/dub/issues/22
  198. [issue78]: https://github.com/rejectedsoftware/dub/issues/78
  199. [issue84]: https://github.com/rejectedsoftware/dub/issues/84
  200. [issue86]: https://github.com/rejectedsoftware/dub/issues/86
  201. [issue87]: https://github.com/rejectedsoftware/dub/issues/87
  202. [issue91]: https://github.com/rejectedsoftware/dub/issues/91
  203. [issue92]: https://github.com/rejectedsoftware/dub/issues/92
  204. [issue98]: https://github.com/rejectedsoftware/dub/issues/98
  205.  
  206.  
  207. v0.9.16 - 2013-06-29
  208. --------------------
  209.  
  210. ### Bug fixes ###
  211.  
  212. - Fixed fetching of all recursive dependencies in one go
  213. - Fixed handling of paths with spaces when using "dub build"
  214. - Fixed upwards inheritance of version identifiers in generated VisualD projects
  215.  
  216.  
  217. v0.9.15 - 2013-06-19
  218. --------------------
  219.  
  220. ### Features and improvements ###
  221.  
  222. - Added `"targetType": "none"` for packages which don't contain sources and don't generate a binary output
  223. - Added build settings to the "dub describe" output
  224.  
  225. ### Bug fixes ###
  226.  
  227. - Fixed fetching of "main:sub" style dependencies from the registry
  228. - Remove half-broken support for sub-packages defined in sub-directories (needs to be determined if this feature is worth the trade-offs)
  229. - Fixed bogus re-installations of packages referenced by a sub-package
  230. - Fixed handling of dependencies of header-only (or target type "none") dependencies in the VisualD generator
  231. - Fixed the reported version of sub-packages in the output of "dub describe"
  232.  
  233.  
  234. v0.9.14 - 2013-06-18
  235. --------------------
  236.  
  237. ### Features and improvements ###
  238.  
  239. - Implemented support for multiple packages per directory and accessing sub-packages as dependencies - [issue #67][issue67]
  240. - Dependencies can now be specified per-configuration in addition to globally
  241. - Version numbers are now handled according to [SemVer](http://semver.org/) ("~master" style branch specifiers are independent of this and work as before)
  242. - Library packages are now only built when running "dub" instead of trying to execute them - partially [pull #66][issue66] by Vadim Lopatin and [issue #53][issue53]
  243. - Add support for optional dependencies (picked up only if already installed) - [issue #5][issue5]
  244. - Compiles on DMD 2.063
  245. - The build script now directly calls the compiler instead of relying an rdmd and supports ldmd and gdmd in addition to dmd (automatically detected)
  246. - Outputs a warning for package names with upper-case letters and treats package names case insensitive
  247. - Added `"buildRequirements": ["noDefaultFlags"]` for testing manual sets of command line flags - [issue #68][issue68]
  248. - Errors and diagnostic messages are now written to `stderr` instead of `stdout`
  249. - Added "dub describe" to output a build description of the whole dependency tree for external tools given a configuration/compiler/platform combination
  250. - Removed the -property switch and deprecated `"buildRequirements": ["relaxProperties"]`
  251. - Added support for a `DUBPATH` environment variable and support for adding a directory with multiple packages using "dub add-local" to search for dependencies in local directories other than the predefined ones
  252. - Replaced --list-locals/--list-user/--list-system with a single --list-installed switch
  253. - The version of DUB is now inferred using "git describe" and output on the help screen and in the user agent string of HTTP requests
  254. - Added some minimal example projects for several use cases
  255. - Temporarily disabled automatic package upgrading (was only working for the now removed project locally installed packages)
  256.  
  257. ### Bug fixes ###
  258.  
  259. - Fixed recursive inferring of configurations
  260. - Fixed including debug information for separate compile/link builds
  261. - Fixed VisualD generator for x64 builds and avoid building header-only dependencies
  262. - Fixed handling of "-Wl" flags returned by pkg-config
  263. - Fixed LDC builds for projects with multiple modules of the same name (but in different packages) using the -oq switch
  264. - Fixed the linker workaround in the build script to work on non-Ubuntu systems - [issue #71][issue71]
  265. - Fixed handling of Windows UNC paths (by Lutger Blijdestijn) - [pull #75][issue75]
  266. - Fixed a possible infinite update loop - [issue #72][issue72]
  267. - Fixed handling of multiple compiler/linker arguments with the same content (e.g. "--framework A --framework B" on OS X)
  268.  
  269. [issue5]: https://github.com/rejectedsoftware/dub/issues/5
  270. [issue53]: https://github.com/rejectedsoftware/dub/issues/53
  271. [issue66]: https://github.com/rejectedsoftware/dub/issues/66
  272. [issue67]: https://github.com/rejectedsoftware/dub/issues/67
  273. [issue68]: https://github.com/rejectedsoftware/dub/issues/68
  274. [issue71]: https://github.com/rejectedsoftware/dub/issues/71
  275. [issue72]: https://github.com/rejectedsoftware/dub/issues/72
  276. [issue75]: https://github.com/rejectedsoftware/dub/issues/75
  277.  
  278.  
  279. v0.9.13 - 2013-04-16
  280. --------------------
  281.  
  282. ### Features and improvements ###
  283.  
  284. - Implemented `"buildRequirements"` to allow packages to specify certain build requirements (e.g. avoiding function inlining or warnings)
  285. - Experimental support to specify flags to pass to "ddox filter" for --build=ddox
  286. - Configurations inherit the global `"targetType"` by default now
  287. - Import paths in VisualD projects are now relative
  288. - Cleaner console output for -v (no thread/fiber ID is printed anymore)
  289. - Build settings for VisualD projects are tuned to avoid common linker/compiler bugs by default
  290. - Generated VisualD projects put intermediate files to ".dub/obj/&lt;projectname&gt;" now
  291.  
  292. ### Bug fixes ###
  293.  
  294. - Fixed upgrading of branch based dependencies - [issue #55][issue55]
  295. - Fixed wording and repetition of the reserved compiler flag warning message - [issue #54][issue54]
  296. - Fixed erroneous inclusion of .d files in the import libraries field of generated VisualD projects
  297. - Fixed passing "package.json" to the compiler in generated Mono-D projects - [issue #60][issue60]
  298. - Fixed the Mono-D and VisualD generators to properly copy `"copyFiles"` - [issue #58][issue58]
  299. - Fixed removing of temporary files in case of unexpected folder contents - [issue #41][issue41]
  300. - Fixed invocation of the linker on Windows in case of another "link.exe" being in PATH - [issue #57][issue57]
  301. - Fixed computation of build settings for VisualD projects (inheritance works only bottom to top now)
  302.  
  303. [issue41]: https://github.com/rejectedsoftware/dub/issues/41
  304. [issue54]: https://github.com/rejectedsoftware/dub/issues/54
  305. [issue55]: https://github.com/rejectedsoftware/dub/issues/55
  306. [issue57]: https://github.com/rejectedsoftware/dub/issues/57
  307. [issue58]: https://github.com/rejectedsoftware/dub/issues/58
  308. [issue60]: https://github.com/rejectedsoftware/dub/issues/60
  309.  
  310.  
  311. v0.9.12 - 2013-03-21
  312. --------------------
  313.  
  314. ### Features and improvements ###
  315.  
  316. - Implemented separate compile/link building when using DMD
  317. - Optimized platform field matching (by Robert Klotzner) - [pull #47][issue47]
  318. - Added build types for coverage analysis - [issue #45][issue45]
  319. - Wrong use of `"dflags"` now triggers a warning with suggestion for an alternative approach - [issue #37][issue37]
  320. - The "dub" binary is now in "bin/" instead of the root directory
  321.  
  322. ### Bug fixes ###
  323.  
  324. - Fixed an assertion that triggered when appending an absolute path
  325. - Fixed `--build=ddox` when DDOX was not yet installed/built - [issue #42][issue42]
  326. - Fixed the build script to work on Ubuntu
  327. - Fixed building in a project directory that contains no "package.json" file
  328. - Fixed the error message for non-existent dependency versions - [issue #44][issue44]
  329. - Fixed matching of (only) D source files (by Robert Klotzner) - [pull #46][issue46]
  330. - Fixed `"targetName"` and `"targetPath"` fields - [issue #48][issue48]
  331.  
  332. [issue37]: https://github.com/rejectedsoftware/dub/issues/37
  333. [issue42]: https://github.com/rejectedsoftware/dub/issues/42
  334. [issue44]: https://github.com/rejectedsoftware/dub/issues/44
  335. [issue45]: https://github.com/rejectedsoftware/dub/issues/45
  336. [issue46]: https://github.com/rejectedsoftware/dub/issues/46
  337. [issue47]: https://github.com/rejectedsoftware/dub/issues/47
  338. [issue48]: https://github.com/rejectedsoftware/dub/issues/48
  339.  
  340.  
  341. v0.9.11 - 2013-03-05
  342. --------------------
  343.  
  344. ### Features and improvements ###
  345.  
  346. - Configurations are now "shallow", meaning that configurations of dependencies can be selected by a package, but stay invisible to users of the package itself - [issue #33]
  347. - Target type selection is now supported (executable, static lib, dynamic lib etc.) - [issue #26][issue26]
  348. - Target name and path can be configured now
  349. - Added a possibility to exclude certain files from the build
  350. - The package description files is now added to IDE projects - [issue #35][issue35]
  351. - Using a response file to handle large compiler command lines - [issue #19][issue19]
  352.  
  353. ### Bug fixes ###
  354.  
  355. - Fixed spurious loading of the package during `dub install` - [issue #25][issue25]
  356.  
  357. [issue19]: https://github.com/rejectedsoftware/dub/issues/19
  358. [issue25]: https://github.com/rejectedsoftware/dub/issues/25
  359. [issue26]: https://github.com/rejectedsoftware/dub/issues/26
  360. [issue35]: https://github.com/rejectedsoftware/dub/issues/35
  361.  
  362.  
  363. v0.9.10 - 2013-03-04
  364. --------------------
  365.  
  366. ### Features and improvements ###
  367.  
  368. - Added direct support for generating HTML documentation using DDOC or DDOX
  369. - Added support for pre/post generate/build commands
  370. - `dub install` does not add a dependency anymore (reverted to old behavior)
  371.  
  372. ### Bug fixes ###
  373.  
  374. - `dub uninstall` actually works now
  375. - The Windows installer also installs the needed DLLs
  376. - Fixed Windows paths on non-Windows systems emitted by the Mono-D generator - [issue #32][issue32]
  377.  
  378. [issue32]: https://github.com/rejectedsoftware/dub/issues/32
  379.  
  380.  
  381. v0.9.9 - 2013-02-28
  382. -------------------
  383.  
  384. ### Features and improvements ###
  385.  
  386. - Adds a Windows installer (by Brad Anderson aka eco) - [pull #27][issue27]
  387. - Support for branches other than "~master"
  388. - The MonoD generator now generates a pretty source hierarchy for dependencies
  389. - The "sourcePath" field has been changed to "sourcePaths" to support multiple paths (by Nathan M. Swan aka carlor) - [pull #28][issue28]
  390.  
  391. ### Bug fixes ###
  392.  
  393. - "dub init" with no arguments uses the current directory name as the project name - [issue #16][issue16]
  394. - The tilde character is not used for path names anymore - [issue #23][issue23]
  395.  
  396. [issue16]: https://github.com/rejectedsoftware/dub/issues/16
  397. [issue23]: https://github.com/rejectedsoftware/dub/issues/23
  398. [issue27]: https://github.com/rejectedsoftware/dub/issues/27
  399. [issue28]: https://github.com/rejectedsoftware/dub/issues/28