diff options
author | pacien | 2021-06-29 13:14:14 +0200 |
---|---|---|
committer | pacien | 2021-06-29 13:14:14 +0200 |
commit | 671a372d87ff8311956f9158e8885ffc254fe1bc (patch) | |
tree | 67283cf21bc4e1264587633199d523ff372cbe4f /compiler/app/Main.hs | |
parent | 622af23bb3ce8d6dc8dc1d658cb7f01bc905ef2c (diff) | |
download | ldgallery-671a372d87ff8311956f9158e8885ffc254fe1bc.tar.gz |
compiler: add "portable" target
This adds a build flag for generating a portable version of the compiler
binary which make it look in its own runtime directory for its assets.
This is useful in particular for the portable release tarballs which
contain the web viewer at the same location instead of a pre-defined one
in the FHS.
GitHub: closes #286
Diffstat (limited to 'compiler/app/Main.hs')
-rw-r--r-- | compiler/app/Main.hs | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/compiler/app/Main.hs b/compiler/app/Main.hs index dc97b38..3e6f254 100644 --- a/compiler/app/Main.hs +++ b/compiler/app/Main.hs | |||
@@ -19,7 +19,7 @@ | |||
19 | module Main where | 19 | module Main where |
20 | 20 | ||
21 | import GHC.Generics (Generic) | 21 | import GHC.Generics (Generic) |
22 | import Paths_ldgallery_compiler (version, getDataFileName) | 22 | import Paths_ldgallery_compiler (version) |
23 | import Control.Monad (when) | 23 | import Control.Monad (when) |
24 | import Data.Functor ((<&>)) | 24 | import Data.Functor ((<&>)) |
25 | import Data.Maybe (isJust) | 25 | import Data.Maybe (isJust) |
@@ -31,7 +31,7 @@ import System.Console.CmdArgs | |||
31 | 31 | ||
32 | import Compiler | 32 | import Compiler |
33 | import Files (readDirectory, copyTo, remove) | 33 | import Files (readDirectory, copyTo, remove) |
34 | 34 | import ViewerDist (viewerDistPath) | |
35 | 35 | ||
36 | newtype ViewerConfig = ViewerConfig | 36 | newtype ViewerConfig = ViewerConfig |
37 | { galleryRoot :: String | 37 | { galleryRoot :: String |
@@ -106,10 +106,7 @@ main = | |||
106 | do | 106 | do |
107 | opts <- cmdArgs options | 107 | opts <- cmdArgs options |
108 | buildGallery opts | 108 | buildGallery opts |
109 | 109 | deployViewer opts | |
110 | when (isJust $ withViewer opts) $ do | ||
111 | viewerDist <- viewerDistPath $ withViewer opts | ||
112 | deployViewer viewerDist opts | ||
113 | 110 | ||
114 | where | 111 | where |
115 | gallerySubdir :: String | 112 | gallerySubdir :: String |
@@ -118,11 +115,6 @@ main = | |||
118 | viewerConfig :: ViewerConfig | 115 | viewerConfig :: ViewerConfig |
119 | viewerConfig = ViewerConfig (gallerySubdir ++ "/") | 116 | viewerConfig = ViewerConfig (gallerySubdir ++ "/") |
120 | 117 | ||
121 | viewerDistPath :: Maybe FilePath -> IO FilePath | ||
122 | viewerDistPath (Just "") = getDataFileName "viewer" | ||
123 | viewerDistPath (Just dist) = return dist | ||
124 | viewerDistPath Nothing = fail "No viewer distribution" | ||
125 | |||
126 | buildGallery :: Options -> IO () | 118 | buildGallery :: Options -> IO () |
127 | buildGallery opts = | 119 | buildGallery opts = |
128 | checkDistinctPaths (inputDir opts) (outputDir opts) | 120 | checkDistinctPaths (inputDir opts) (outputDir opts) |
@@ -146,10 +138,11 @@ main = | |||
146 | | isJust withViewer = outputDir </> gallerySubdir | 138 | | isJust withViewer = outputDir </> gallerySubdir |
147 | | otherwise = outputDir | 139 | | otherwise = outputDir |
148 | 140 | ||
149 | deployViewer :: FilePath -> Options -> IO () | 141 | deployViewer :: Options -> IO () |
150 | deployViewer distPath Options{outputDir, cleanOutput} = | 142 | deployViewer Options{withViewer = Nothing} = pure () |
143 | deployViewer Options{withViewer = Just viewerPath, outputDir, cleanOutput} = | ||
151 | when cleanOutput (cleanViewerDir outputDir) | 144 | when cleanOutput (cleanViewerDir outputDir) |
152 | >> copyViewer distPath outputDir | 145 | >> viewerDistOr viewerPath >>= deployTo outputDir |
153 | >> writeJSON (outputDir </> "config.json") viewerConfig | 146 | >> writeJSON (outputDir </> "config.json") viewerConfig |
154 | 147 | ||
155 | where | 148 | where |
@@ -159,8 +152,12 @@ main = | |||
159 | <&> filter (/= gallerySubdir) | 152 | <&> filter (/= gallerySubdir) |
160 | >>= mapM_ (remove . (target </>)) | 153 | >>= mapM_ (remove . (target </>)) |
161 | 154 | ||
162 | copyViewer :: FilePath -> FilePath -> IO () | 155 | viewerDistOr :: FilePath -> IO FilePath |
163 | copyViewer dist target = | 156 | viewerDistOr "" = viewerDistPath |
157 | viewerDistOr custom = pure custom | ||
158 | |||
159 | deployTo :: FilePath -> FilePath -> IO () | ||
160 | deployTo target dist = | ||
164 | putStrLn "Copying viewer webapp" | 161 | putStrLn "Copying viewer webapp" |
165 | >> readDirectory dist | 162 | >> readDirectory dist |
166 | >>= copyTo target | 163 | >>= copyTo target |