diff options
Diffstat (limited to 'compiler/app')
-rw-r--r-- | compiler/app/Main.hs | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/compiler/app/Main.hs b/compiler/app/Main.hs index 1773073..24d8aad 100644 --- a/compiler/app/Main.hs +++ b/compiler/app/Main.hs | |||
@@ -22,37 +22,73 @@ | |||
22 | 22 | ||
23 | module Main where | 23 | module Main where |
24 | 24 | ||
25 | import Paths_ldgallery_compiler (version) | 25 | import Paths_ldgallery_compiler (version, getDataFileName) |
26 | import Data.Version (showVersion) | 26 | import Data.Version (showVersion) |
27 | import System.FilePath ((</>)) | ||
27 | import System.Console.CmdArgs | 28 | import System.Console.CmdArgs |
29 | |||
28 | import Compiler | 30 | import Compiler |
31 | import Files (readDirectory, copyTo) | ||
29 | 32 | ||
30 | 33 | ||
31 | data Options = Options | 34 | data Options = Options |
32 | { inputDir :: String | 35 | { inputDir :: String |
33 | , outputDir :: String | 36 | , outputDir :: String |
34 | , rebuild :: Bool | 37 | , rebuilAll :: Bool |
38 | , withViewer :: Bool | ||
35 | } deriving (Show, Data, Typeable) | 39 | } deriving (Show, Data, Typeable) |
36 | 40 | ||
37 | options = Options | 41 | options = Options |
38 | { inputDir = "./" | 42 | { inputDir = "./" |
39 | &= typDir | 43 | &= typDir |
44 | &= explicit | ||
45 | &= name "i" | ||
46 | &= name "input-dir" | ||
40 | &= help "Gallery source directory (default=./)" | 47 | &= help "Gallery source directory (default=./)" |
41 | , outputDir = "./out" | 48 | , outputDir = "./out" |
42 | &= typDir | 49 | &= typDir |
50 | &= explicit | ||
51 | &= name "o" | ||
52 | &= name "output-dir" | ||
43 | &= help "Generated gallery output path (default=./out)" | 53 | &= help "Generated gallery output path (default=./out)" |
44 | , rebuild = False | 54 | , rebuilAll = False |
55 | &= explicit | ||
56 | &= name "r" | ||
57 | &= name "rebuild-all" | ||
45 | &= help "Invalidate cache and recompile everything" | 58 | &= help "Invalidate cache and recompile everything" |
59 | , withViewer = False | ||
60 | &= explicit | ||
61 | &= name "w" | ||
62 | &= name "with-viewer" | ||
63 | &= help "Include the static web viewer in the output" | ||
46 | } | 64 | } |
47 | &= summary ("ldgallery v" ++ (showVersion version) ++ " - a static gallery generator with tags") | 65 | |
48 | &= program "ldgallery" | 66 | &= summary ("ldgallery v" ++ (showVersion version) ++ " - a static gallery generator with tags") |
49 | &= help "Compile a gallery" | 67 | &= program "ldgallery" |
50 | &= helpArg [explicit, name "h", name "help"] | 68 | &= help "Compile a gallery" |
51 | &= versionArg [explicit, name "v", name "version"] | 69 | &= helpArg [explicit, name "h", name "help"] |
70 | &= versionArg [explicit, name "version"] | ||
52 | 71 | ||
53 | 72 | ||
54 | main :: IO () | 73 | main :: IO () |
55 | main = | 74 | main = |
56 | do | 75 | do |
57 | opts <- cmdArgs options | 76 | opts <- cmdArgs options |
58 | compileGallery (inputDir opts) (outputDir opts) (rebuild opts) | 77 | compileGallery (inputDir opts) (galleryOutputDir "gallery" opts) (rebuilAll opts) |
78 | if (withViewer opts) then copyViewer (outputDir opts) else noop | ||
79 | |||
80 | where | ||
81 | galleryOutputDir :: FilePath -> Options -> FilePath | ||
82 | galleryOutputDir gallerySubdir opts = | ||
83 | if withViewer opts then outputBase </> gallerySubdir else outputBase | ||
84 | where outputBase = outputDir opts | ||
85 | |||
86 | copyViewer :: FilePath -> IO () | ||
87 | copyViewer target = | ||
88 | putStrLn "Copying viewer webapp" | ||
89 | >> getDataFileName "viewer" | ||
90 | >>= readDirectory | ||
91 | >>= copyTo target | ||
92 | |||
93 | noop :: IO () | ||
94 | noop = return () | ||