@@ -0,0 +1,35 @@
1+module Main
2+
3+import System
4+
5+%include C "sys.h"
6+%link C "sys.o"
7+
8+WIFEXITED : (status : Int) -> IO Bool
9+WIFEXITED status = do
10+ r <- foreign FFI_C "WIFEXITED_" (Int -> IO Int) status
11+ pure $ r /= 0
12+
13+WEXITSTATUS : (status : Int) -> IO Int
14+WEXITSTATUS status = foreign FFI_C "WEXITSTATUS_" (Int -> IO Int) status
15+
16+execute : (cmd : String) -> (expectedStatus : Int) -> IO ()
17+execute cmd expectedStatus = do
18+ putStrLn "-------------------------------------------"
19+ putStrLn $ "Executing '" ++ cmd ++ "'"
20+ status1 <- system cmd
21+ putStrLn $ "raw status = " ++ show status1 -- XXX: Probably not portable.
22+ exited <- WIFEXITED status1
23+ if exited
24+ then do
25+ exitStatus <- WEXITSTATUS status1
26+ putStrLn $ "exit status = " ++ show exitStatus
27+ printLn $ exitStatus == expectedStatus
28+ else pure ()
29+ putStrLn ""
30+
31+main : IO ()
32+main = do
33+ execute "exit 1" 1
34+ execute "./exit1" 1
35+ execute "./does-not-exist" 127