@@ -19,18 +19,24 @@ import Control.Monad (when)
19import Data.FileEmbed (embedFile)
19import Data.FileEmbed (embedFile)
20import System.Environment (getExecutablePath)
20import System.Environment (getExecutablePath)
21import System.Directory (doesFileExist)
21import System.Directory (doesFileExist)
22+import System.FilePath (takeDirectory)
24+import qualified Data.Text as T
23import qualified Data.ByteString.Char8 as B
25import qualified Data.ByteString.Char8 as B
25generateMakefile :: IO ()
27generateMakefile :: IO ()
26generateMakefile = do
28generateMakefile = do
27− makefileExists <- doesFileExist "Makefile"
29+ makefileExists <- doesFileExist makefilename
28 when (not makefileExists) $ do
30 when (not makefileExists) $ do
29 let makefile = $(embedFile "pcc/Makefile")
31 let makefile = $(embedFile "pcc/Makefile")
30 exePath <- getExecutablePath
32 exePath <- getExecutablePath
31 putStrLn ""
33 putStrLn ""
32− putStrLn $ "Generating Makefile... " ++ "pcc executable location " ++ exePath
34+ putStrLn $ "Generating " ++ makefilename ++ "... " ++ "pcc executable location " ++ exePath
33− writeFile "Makefile" $ replace makefile pccPath exePath
35+ writeFile makefilename . T.unpack $
38+ (T.pack $ takeDirectory exePath)
39+ (T.pack $ B.unpack makefile)
34 putStrLn "Done"
40 putStrLn "Done"
35 putStrLn ""
41 putStrLn ""
36 putStrLn "Run 'make' or 'make release' to build an optimized release build."
42 putStrLn "Run 'make' or 'make release' to build an optimized release build."
@@ -42,23 +48,34 @@ generateMakefile = do
43generatePackagefile :: IO ()
49generatePackagefile :: IO ()
44generatePackagefile = do
50generatePackagefile = do
45− pkgfileExists <- doesFileExist "psc-package.json"
51+ pkgfileExists <- doesFileExist packagefilename
46 when (not pkgfileExists) $ do
52 when (not pkgfileExists) $ do
47 let pkgfile = $(embedFile "pcc/psc-package.json")
53 let pkgfile = $(embedFile "pcc/psc-package.json")
48 putStrLn ""
54 putStrLn ""
49− putStrLn "Generating psc-package.json..."
55+ putStrLn $ "Generating " ++ packagefilename ++ "..."
50− writeFile "psc-package.json" $ B.unpack pkgfile
56+ writeFile packagefilename $ B.unpack pkgfile
51 putStrLn "Done"
57 putStrLn "Done"
52 putStrLn "Use the 'psc-package' utility to install or update packages."
58 putStrLn "Use the 'psc-package' utility to install or update packages."
54−replace :: B.ByteString -> B.ByteString -> String -> String
60+generateXcodefile :: IO ()
55−replace s orig repl = replace'
61+generateXcodefile = do
56− where
62+ xcodefileExists <- doesFileExist xcodefilename
57− replace'
63+ when (not xcodefileExists) $ do
58− | (p1, p2) <- B.breakSubstring orig s,
64+ let xcodefile = $(embedFile "pcc/psc-xcode.sh")
59− not (B.null p2) = B.unpack p1 ++ repl ++ trim (B.unpack p2)
65+ putStrLn ""
60− | otherwise = B.unpack s
66+ putStrLn $ "Generating " ++ xcodefilename ++ "..."
61− trim = drop (B.length orig)
67+ writeFile xcodefilename $ B.unpack xcodefile
69+ putStrLn "Add this file to an Xcode 'Run Script' build phase."
71+makefilename :: String
72+makefilename = "Makefile"
74+packagefilename :: String
75+packagefilename = "psc-package.json"
77+xcodefilename :: String
78+xcodefilename = "psc-xcode.sh"
63−pccPath :: B.ByteString
80+pathPlaceholder :: T.Text
64−pccPath = "{bin/pcc}"
81+pathPlaceholder = "{{path}}"