src/Distribution/Simple/Build/Macros/Z.hs

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