shake-0.9: Examples/Test/Resources.hs
module Examples.Test.Resources(main) where
import Development.Shake
import Examples.Util
import Control.Monad
import Data.IORef
main extra = do
let cap = 2
ref <- newIORef 0
flip (shaken test) extra $ \args obj -> do
want $ map obj ["file1.txt","file2.txt","file3.txt","file4.txt"]
res <- newResource "test" cap
obj "*.txt" *> \out ->
withResource res 1 $ do
old <- liftIO $ atomicModifyIORef ref $ \i -> (i+1,i)
when (old >= cap) $ error "Too many resources in use at one time"
liftIO $ sleep 0.1
liftIO $ atomicModifyIORef ref $ \i -> (i-1,i)
writeFile' out ""
test build obj = do
build ["clean"]
build ["-j2"]
build ["clean"]
build ["-j4"]
build ["clean"]
build ["-j10"]