aboutsummaryrefslogtreecommitdiff
path: root/compiler/app/Main.hs
diff options
context:
space:
mode:
authorpacien2021-06-29 13:14:14 +0200
committerpacien2021-06-29 13:14:14 +0200
commit671a372d87ff8311956f9158e8885ffc254fe1bc (patch)
tree67283cf21bc4e1264587633199d523ff372cbe4f /compiler/app/Main.hs
parent622af23bb3ce8d6dc8dc1d658cb7f01bc905ef2c (diff)
downloadldgallery-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.hs29
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 @@
19module Main where 19module Main where
20 20
21import GHC.Generics (Generic) 21import GHC.Generics (Generic)
22import Paths_ldgallery_compiler (version, getDataFileName) 22import Paths_ldgallery_compiler (version)
23import Control.Monad (when) 23import Control.Monad (when)
24import Data.Functor ((<&>)) 24import Data.Functor ((<&>))
25import Data.Maybe (isJust) 25import Data.Maybe (isJust)
@@ -31,7 +31,7 @@ import System.Console.CmdArgs
31 31
32import Compiler 32import Compiler
33import Files (readDirectory, copyTo, remove) 33import Files (readDirectory, copyTo, remove)
34 34import ViewerDist (viewerDistPath)
35 35
36newtype ViewerConfig = ViewerConfig 36newtype 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