summaryrefslogtreecommitdiff
path: root/src/Hadrian/Builder/Tar.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hadrian/Builder/Tar.hs')
-rw-r--r--src/Hadrian/Builder/Tar.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Hadrian/Builder/Tar.hs b/src/Hadrian/Builder/Tar.hs
new file mode 100644
index 0000000000..d51e3c7bee
--- /dev/null
+++ b/src/Hadrian/Builder/Tar.hs
@@ -0,0 +1,40 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : Hadrian.Builder.Tar
+-- Copyright : (c) Andrey Mokhov 2014-2017
+-- License : MIT (see the file LICENSE)
+-- Maintainer : andrey.mokhov@gmail.com
+-- Stability : experimental
+--
+-- Support for invoking the archiving utility @tar@.
+-----------------------------------------------------------------------------
+module Hadrian.Builder.Tar (TarMode (..), args) where
+
+import Development.Shake
+import Development.Shake.Classes
+import GHC.Generics
+import Hadrian.Expression
+
+-- | Tar can be used to 'Create' an archive or 'Extract' from it.
+data TarMode = Create | Extract deriving (Eq, Generic, Show)
+
+instance Binary TarMode
+instance Hashable TarMode
+instance NFData TarMode
+
+-- | Default command line arguments for invoking the archiving utility @tar@.
+args :: (ShakeValue c, ShakeValue b) => TarMode -> Args c b
+args Create = mconcat
+ [ arg "-c"
+ , output "//*.gz" ? arg "--gzip"
+ , output "//*.bz2" ? arg "--bzip2"
+ , output "//*.xz" ? arg "--xz"
+ , arg "-f", arg =<< getOutput
+ , getInputs ]
+args Extract = mconcat
+ [ arg "-x"
+ , input "*.gz" ? arg "--gzip"
+ , input "*.bz2" ? arg "--bzip2"
+ , input "*.xz" ? arg "--xz"
+ , arg "-f", arg =<< getInput
+ , arg "-C", arg =<< getOutput ]