{-# LANGUAGE DeriveGeneric #-}
module Distribution.Simple.Build.Macros.Z (render, Z(..), ZPackage (..), ZTool (..)) where
import Distribution.ZinzaPrelude
data Z
= Z {Z -> [ZPackage]
zPackages :: ([ZPackage]),
Z -> [ZTool]
zTools :: ([ZTool]),
Z -> String
zPackageKey :: String,
Z -> String
zComponentId :: String,
Z -> Version
zPackageVersion :: Version,
Z -> String -> Bool
zNotNull :: (String -> Bool),
Z -> PackageName -> String
zManglePkgName :: (PackageName -> String),
Z -> String -> String
zMangleStr :: (String -> String)}
deriving (forall x. Z -> Rep Z x) -> (forall x. Rep Z x -> Z) -> Generic Z
forall x. Rep Z x -> Z
forall x. Z -> Rep Z x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Z -> Rep Z x
from :: forall x. Z -> Rep Z x
$cto :: forall x. Rep Z x -> Z
to :: forall x. Rep Z x -> Z
Generic
data ZPackage
= ZPackage {ZPackage -> PackageName
zpkgName :: PackageName,
ZPackage -> Version
zpkgVersion :: Version,
ZPackage -> String
zpkgX :: String,
ZPackage -> String
zpkgY :: String,
ZPackage -> String
zpkgZ :: String}
deriving (forall x. ZPackage -> Rep ZPackage x)
-> (forall x. Rep ZPackage x -> ZPackage) -> Generic ZPackage
forall x. Rep ZPackage x -> ZPackage
forall x. ZPackage -> Rep ZPackage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ZPackage -> Rep ZPackage x
from :: forall x. ZPackage -> Rep ZPackage x
$cto :: forall x. Rep ZPackage x -> ZPackage
to :: forall x. Rep ZPackage x -> ZPackage
Generic
data ZTool
= ZTool {ZTool -> String
ztoolName :: String,
ZTool -> Version
ztoolVersion :: Version,
ZTool -> String
ztoolX :: String,
ZTool -> String
ztoolY :: String,
ZTool -> String
ztoolZ :: String}
deriving (forall x. ZTool -> Rep ZTool x)
-> (forall x. Rep ZTool x -> ZTool) -> Generic ZTool
forall x. Rep ZTool x -> ZTool
forall x. ZTool -> Rep ZTool x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ZTool -> Rep ZTool x
from :: forall x. ZTool -> Rep ZTool x
$cto :: forall x. Rep ZTool x -> ZTool
to :: forall x. Rep ZTool x -> ZTool
Generic
render :: Z -> String
render :: Z -> String
render Z
z_root = Writer () -> String
forall a. Writer a -> String
execWriter (Writer () -> String) -> Writer () -> String
forall a b. (a -> b) -> a -> b
$ do
String -> Writer ()
tell String
"/* DO NOT EDIT: This file is automatically generated by Cabal */\n"
String -> Writer ()
tell String
"\n"
[ZPackage] -> (ZPackage -> Writer ()) -> Writer ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ (Z -> [ZPackage]
zPackages Z
z_root) ((ZPackage -> Writer ()) -> Writer ())
-> (ZPackage -> Writer ()) -> Writer ()
forall a b. (a -> b) -> a -> b
$ \ZPackage
z_var0_pkg -> do
String -> Writer ()
tell String
"/* package "
String -> Writer ()
tell (PackageName -> String
forall a. Pretty a => a -> String
prettyShow (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
"-"
String -> Writer ()
tell (Version -> String
forall a. Pretty a => a -> String
prettyShow (ZPackage -> Version
zpkgVersion ZPackage
z_var0_pkg))
String -> Writer ()
tell String
" */\n"
String -> Writer ()
tell String
"#ifndef VERSION_"
String -> Writer ()
tell (Z -> PackageName -> String
zManglePkgName Z
z_root (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
"\n"
String -> Writer ()
tell String
"#define VERSION_"
String -> Writer ()
tell (Z -> PackageName -> String
zManglePkgName Z
z_root (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
" \""
String -> Writer ()
tell (Version -> String
forall a. Pretty a => a -> String
prettyShow (ZPackage -> Version
zpkgVersion ZPackage
z_var0_pkg))
String -> Writer ()
tell String
"\"\n"
String -> Writer ()
tell String
"#endif /* VERSION_"
String -> Writer ()
tell (Z -> PackageName -> String
zManglePkgName Z
z_root (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
" */\n"
String -> Writer ()
tell String
"#ifndef MIN_VERSION_"
String -> Writer ()
tell (Z -> PackageName -> String
zManglePkgName Z
z_root (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
"\n"
String -> Writer ()
tell String
"#define MIN_VERSION_"
String -> Writer ()
tell (Z -> PackageName -> String
zManglePkgName Z
z_root (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
"(major1,major2,minor) (\\\n"
String -> Writer ()
tell String
" (major1) < "
String -> Writer ()
tell (ZPackage -> String
zpkgX ZPackage
z_var0_pkg)
String -> Writer ()
tell String
" || \\\n"
String -> Writer ()
tell String
" (major1) == "
String -> Writer ()
tell (ZPackage -> String
zpkgX ZPackage
z_var0_pkg)
String -> Writer ()
tell String
" && (major2) < "
String -> Writer ()
tell (ZPackage -> String
zpkgY ZPackage
z_var0_pkg)
String -> Writer ()
tell String
" || \\\n"
String -> Writer ()
tell String
" (major1) == "
String -> Writer ()
tell (ZPackage -> String
zpkgX ZPackage
z_var0_pkg)
String -> Writer ()
tell String
" && (major2) == "
String -> Writer ()
tell (ZPackage -> String
zpkgY ZPackage
z_var0_pkg)
String -> Writer ()
tell String
" && (minor) <= "
String -> Writer ()
tell (ZPackage -> String
zpkgZ ZPackage
z_var0_pkg)
String -> Writer ()
tell String
")\n"
String -> Writer ()
tell String
"#endif /* MIN_VERSION_"
String -> Writer ()
tell (Z -> PackageName -> String
zManglePkgName Z
z_root (ZPackage -> PackageName
zpkgName ZPackage
z_var0_pkg))
String -> Writer ()
tell String
" */\n"
String -> Writer ()
tell String
"\n"
[ZTool] -> (ZTool -> Writer ()) -> Writer ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ (Z -> [ZTool]
zTools Z
z_root) ((ZTool -> Writer ()) -> Writer ())
-> (ZTool -> Writer ()) -> Writer ()
forall a b. (a -> b) -> a -> b
$ \ZTool
z_var1_tool -> do
String -> Writer ()
tell String
"/* tool "
String -> Writer ()
tell (ZTool -> String
ztoolName ZTool
z_var1_tool)
String -> Writer ()
tell String
"-"
String -> Writer ()
tell (Version -> String
forall a. Pretty a => a -> String
prettyShow (ZTool -> Version
ztoolVersion ZTool
z_var1_tool))
String -> Writer ()
tell String
" */\n"
String -> Writer ()
tell String
"#ifndef TOOL_VERSION_"
String -> Writer ()
tell (Z -> String -> String
zMangleStr Z
z_root (ZTool -> String
ztoolName ZTool
z_var1_tool))
String -> Writer ()
tell String
"\n"
String -> Writer ()
tell String
"#define TOOL_VERSION_"
String -> Writer ()
tell (Z -> String -> String
zMangleStr Z
z_root (ZTool -> String
ztoolName ZTool
z_var1_tool))
String -> Writer ()
tell String
" \""
String -> Writer ()
tell (Version -> String
forall a. Pretty a => a -> String
prettyShow (ZTool -> Version
ztoolVersion ZTool
z_var1_tool))
String -> Writer ()
tell String
"\"\n"
String -> Writer ()
tell String
"#endif /* TOOL_VERSION_"
String -> Writer ()
tell (Z -> String -> String
zMangleStr Z
z_root (ZTool -> String
ztoolName ZTool
z_var1_tool))
String -> Writer ()
tell String
" */\n"
String -> Writer ()
tell String
"#ifndef MIN_TOOL_VERSION_"
String -> Writer ()
tell (Z -> String -> String
zMangleStr Z
z_root (ZTool -> String
ztoolName ZTool
z_var1_tool))
String -> Writer ()
tell String
"\n"
String -> Writer ()
tell String
"#define MIN_TOOL_VERSION_"
String -> Writer ()
tell (Z -> String -> String
zMangleStr Z
z_root (ZTool -> String
ztoolName ZTool
z_var1_tool))
String -> Writer ()
tell String
"(major1,major2,minor) (\\\n"
String -> Writer ()
tell String
" (major1) < "
String -> Writer ()
tell (ZTool -> String
ztoolX ZTool
z_var1_tool)
String -> Writer ()
tell String
" || \\\n"
String -> Writer ()
tell String
" (major1) == "
String -> Writer ()
tell (ZTool -> String
ztoolX ZTool
z_var1_tool)
String -> Writer ()
tell String
" && (major2) < "
String -> Writer ()
tell (ZTool -> String
ztoolY ZTool
z_var1_tool)
String -> Writer ()
tell String
" || \\\n"
String -> Writer ()
tell String
" (major1) == "
String -> Writer ()
tell (ZTool -> String
ztoolX ZTool
z_var1_tool)
String -> Writer ()
tell String
" && (major2) == "
String -> Writer ()
tell (ZTool -> String
ztoolY ZTool
z_var1_tool)
String -> Writer ()
tell String
" && (minor) <= "
String -> Writer ()
tell (ZTool -> String
ztoolZ ZTool
z_var1_tool)
String -> Writer ()
tell String
")\n"
String -> Writer ()
tell String
"#endif /* MIN_TOOL_VERSION_"
String -> Writer ()
tell (Z -> String -> String
zMangleStr Z
z_root (ZTool -> String
ztoolName ZTool
z_var1_tool))
String -> Writer ()
tell String
" */\n"
String -> Writer ()
tell String
"\n"
if (Z -> String -> Bool
zNotNull Z
z_root (Z -> String
zPackageKey Z
z_root))
then do
String -> Writer ()
tell String
"#ifndef CURRENT_PACKAGE_KEY\n"
String -> Writer ()
tell String
"#define CURRENT_PACKAGE_KEY \""
String -> Writer ()
tell (Z -> String
zPackageKey Z
z_root)
String -> Writer ()
tell String
"\"\n"
String -> Writer ()
tell String
"#endif /* CURRENT_packageKey */\n"
() -> Writer ()
forall a. a -> Writer a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else do
() -> Writer ()
forall a. a -> Writer a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
if (Z -> String -> Bool
zNotNull Z
z_root (Z -> String
zComponentId Z
z_root))
then do
String -> Writer ()
tell String
"#ifndef CURRENT_COMPONENT_ID\n"
String -> Writer ()
tell String
"#define CURRENT_COMPONENT_ID \""
String -> Writer ()
tell (Z -> String
zComponentId Z
z_root)
String -> Writer ()
tell String
"\"\n"
String -> Writer ()
tell String
"#endif /* CURRENT_COMPONENT_ID */\n"
() -> Writer ()
forall a. a -> Writer a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else do
() -> Writer ()
forall a. a -> Writer a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
String -> Writer ()
tell String
"#ifndef CURRENT_PACKAGE_VERSION\n"
String -> Writer ()
tell String
"#define CURRENT_PACKAGE_VERSION \""
String -> Writer ()
tell (Version -> String
forall a. Pretty a => a -> String
prettyShow (Z -> Version
zPackageVersion Z
z_root))
String -> Writer ()
tell String
"\"\n"
String -> Writer ()
tell String
"#endif /* CURRENT_PACKAGE_VERSION */\n"