diff options
author | Daniel Gröber <dxld@darkboxed.org> | 2017-09-28 21:33:24 +0200 |
---|---|---|
committer | Daniel Gröber <dxld@darkboxed.org> | 2017-09-28 21:33:24 +0200 |
commit | 4b7b646c4fddb1c368aead0315a1f6ce0784b230 (patch) | |
tree | 4726bfeba0074d3db6899466d276aadef5c2ed37 /CabalHelper/Compiletime/Data.hs | |
parent | 7e79dacef6fbeb1ae7805072f6a04b36d99eab7b (diff) |
Move split source into src/ and lib/
Diffstat (limited to 'CabalHelper/Compiletime/Data.hs')
-rw-r--r-- | CabalHelper/Compiletime/Data.hs | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/CabalHelper/Compiletime/Data.hs b/CabalHelper/Compiletime/Data.hs deleted file mode 100644 index 2842cfc..0000000 --- a/CabalHelper/Compiletime/Data.hs +++ /dev/null @@ -1,86 +0,0 @@ --- Copyright (C) 2015,2017 Daniel Gröber <dxld ÄT darkboxed DOT org> --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU Affero General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Affero General Public License for more details. --- --- You should have received a copy of the GNU Affero General Public License --- along with this program. If not, see <http://www.gnu.org/licenses/>. - -{-# LANGUAGE TemplateHaskell, ScopedTypeVariables #-} -{-# OPTIONS_GHC -fforce-recomp #-} - -{-| -Module : CabalHelper.Compiletime.Data -Description : Embeds source code for runtime component using TH -License : AGPL-3 --} - -module CabalHelper.Compiletime.Data where - -import Control.Monad -import Control.Monad.IO.Class -import Data.Functor -import qualified Data.ByteString as BS -import qualified Data.ByteString.UTF8 as UTF8 -import Language.Haskell.TH -import System.Directory -import System.FilePath -import System.IO.Temp -import System.Posix.Files -import System.Posix.Time -import System.Posix.Types -import Prelude - -import CabalHelper.Compiletime.Compat.Environment - -withSystemTempDirectoryEnv :: String -> (FilePath -> IO b) -> IO b -withSystemTempDirectoryEnv tpl f = do - m <- liftIO $ lookupEnv "CABAL_HELPER_KEEP_SOURCEDIR" - case m of - Nothing -> withSystemTempDirectory tpl f - Just _ -> do - tmpdir <- getCanonicalTemporaryDirectory - f =<< createTempDirectory tmpdir tpl - -withHelperSources :: Maybe FilePath -> (FilePath -> IO a) -> IO a -withHelperSources mdir action = withDir mdir $ \dir -> do - let chdir = dir </> "CabalHelper" - liftIO $ do - createDirectoryIfMissing True $ chdir </> "Runtime" - createDirectoryIfMissing True $ chdir </> "Shared" - - let modtime :: EpochTime - modtime = fromIntegral $ (read :: String -> Integer) - -- See https://reproducible-builds.org/specs/source-date-epoch/ - $(runIO $ do - msde :: Maybe Integer - <- fmap read <$> lookupEnv "SOURCE_DATE_EPOCH" - (current_time :: Integer) <- round . toRational <$> epochTime - return $ LitE . StringL $ show $ maybe current_time id msde) - - liftIO $ forM_ sourceFiles $ \(fn, src) -> do - let path = chdir </> fn - BS.writeFile path $ UTF8.fromString src - setFileTimes path modtime modtime - - action dir - where - withDir (Just dir) = \f -> f dir - withDir Nothing = withSystemTempDirectoryEnv "cabal-helper-source" - - -sourceFiles :: [(FilePath, String)] -sourceFiles = - [ ("Runtime/Main.hs", $(LitE . StringL <$> runIO (UTF8.toString <$> BS.readFile "CabalHelper/Runtime/Main.hs"))) - , ("Runtime/Licenses.hs", $(LitE . StringL <$> runIO (UTF8.toString <$> BS.readFile "CabalHelper/Runtime/Licenses.hs"))) - , ("Shared/Common.hs", $(LitE . StringL <$> runIO (UTF8.toString <$> BS.readFile "CabalHelper/Shared/Common.hs"))) - , ("Shared/Sandbox.hs", $(LitE . StringL <$> runIO (UTF8.toString <$> BS.readFile "CabalHelper/Shared/Sandbox.hs"))) - , ("Shared/InterfaceTypes.hs", $(LitE . StringL <$> runIO (UTF8.toString <$> BS.readFile "CabalHelper/Shared/InterfaceTypes.hs"))) - ] |