From 5011839455292f2eadc0b172006544214d0a9ba9 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Fri, 23 Nov 2018 18:30:43 -0500 Subject: Allow providing extra c modules during link. --- c2haskell.hs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/c2haskell.hs b/c2haskell.hs index ed287cf..ce33666 100644 --- a/c2haskell.hs +++ b/c2haskell.hs @@ -787,15 +787,15 @@ sanitizeArgs ("-o":args) = sanitizeArgs $ drop 1 args sanitizeArgs (arg:args) = arg : sanitizeArgs args sanitizeArgs [] = [] -usage :: [String] -> Maybe (C2HaskellOptions, [String], FilePath) -usage args = do - let fname = last args +usage :: [String] -> Maybe (C2HaskellOptions, [String], [FilePath]) +usage args = case break (=="--") args of (targs,_:cargs0) -> do - let opts = init cargs0 + let (rfs,ropts) = span (".c" `isSuffixOf`) cargs0 + opts = reverse ropts cargs = (sanitizeArgs opts) hopts = parseOptions targs defopts - return (hopts,cargs,fname) + return (hopts,cargs,rfs) _ -> Nothing (<&>) :: Functor f => f a -> (a -> b) -> f b @@ -821,6 +821,7 @@ missingSymbols s = uniq $ do linker :: [String] -> String -> IO [String] linker cargs fname = do + print (cargs,fname) (hin,hout,Just herr,hproc) <- createProcess (proc "gcc" $ cargs ++ [fname]) { std_err = CreatePipe } linkerrs <- hGetContents herr @@ -866,9 +867,9 @@ main :: IO () main = do self <- getProgName args <- getArgs - let usageString = self ++ " [-v] [-p] [-f ] -- [gcc options] " + let usageString = self ++ " [--cpp | -p | -t ] [-v] [-f ] -- [gcc options] [modules] " let m = usage args - fromMaybe (putStrLn usageString) $ m <&> \(hopts,cargs,fname) -> do + fromMaybe (putStrLn usageString) $ m <&> \(hopts,cargs,fname:fs) -> do prer <- runPreprocessor (newGCC "gcc") (rawCppArgs cargs fname) let r = do pre <- left Left $ prer @@ -888,5 +889,5 @@ main = do -> do putStrLn $ ppShow $ everywhere (mkT eraseNodeInfo) . snd <$> r _ -> do - syms <- linker cargs fname + syms <- linker (cargs ++ reverse fs) fname either print (uncurry $ c2haskell hopts cs syms) r -- cgit v1.2.3