{-# 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"