-
Notifications
You must be signed in to change notification settings - Fork 847
Description
(Using stack-1.3.2 on Arch Linux)
Steps to reproduce
Clone this sample project with two libraries: LibA, and LibB which depends on LibA.
$ ls
lib-a lib-b stack.yamlBuild with stack build, and run with stack exec lib-a-exe and stack exec lib-b-exe.
Next, change a function (named value) in LibA, and rebuild LibA only using stack build lib-a. Now lib-a-exe uses the updated function, but lib-b-exe still uses the old one, as expected.
Now try to rebuild LibB with stack build lib-b or stack build.
Expected
stack should update (relink?) LibB to use the new version of LibA.
Actual
stack never rebuilds LibB, causing it to forever use the old LibA.
This was suprising for me, because I thought stack build lib-a && stack build lib-b was equivalent to stack build. Instead, I found out it can result in a bad state where LibB is never rebuilt, forcing me to use one of these workarounds:
Workaround
After making a change in LibA and running stack build lib-a, either:
- Change a source file in LibB, forcing a rebuild. Or:
- Remove
lib-b/.stack-work.
Alternatively, never build a specific target (e.g. stack build lib-a) in the first place. Always run stack build to build all targets.