summaryrefslogtreecommitdiff
path: root/lib/SlackBuilder
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2023-10-04 22:36:19 +0200
committerEugen Wissner <belka@caraus.de>2023-10-04 22:36:19 +0200
commit7b5598a02e0faff590d94391a8b323e6fe74a4fe (patch)
tree2eb5184ba098603a9f23accab57994eacf5342d2 /lib/SlackBuilder
parentd5df676df7a9bea716fdbdaff455fa1ab57073ac (diff)
downloadslackbuilder-7b5598a02e0faff590d94391a8b323e6fe74a4fe.tar.gz
Validate the .info file
Diffstat (limited to 'lib/SlackBuilder')
-rw-r--r--lib/SlackBuilder/Info.hs43
1 files changed, 36 insertions, 7 deletions
diff --git a/lib/SlackBuilder/Info.hs b/lib/SlackBuilder/Info.hs
index bedbc48..ed5957c 100644
--- a/lib/SlackBuilder/Info.hs
+++ b/lib/SlackBuilder/Info.hs
@@ -6,6 +6,7 @@ module SlackBuilder.Info
, updateDownloadVersion
) where
+import Control.Applicative (Alternative(..))
import Control.Monad.Combinators (sepBy)
import qualified Data.ByteArray as ByteArray
import Data.ByteString (ByteString)
@@ -33,6 +34,7 @@ import Text.URI
, render
, unRText
)
+import qualified Data.Word8 as Word8
type GenParser = Parsec Void ByteString
@@ -42,6 +44,11 @@ data PackageInfo = PackageInfo
, homepage :: Text
, downloads :: [URI]
, checksums :: [Digest MD5]
+ , downloadX64 :: [URI]
+ , checksumX64 :: [Digest MD5]
+ , requires :: [ByteString]
+ , maintainer :: Text
+ , email :: Text
} deriving (Eq, Show)
variableEntry :: ByteString -> GenParser ByteString
@@ -52,8 +59,8 @@ variableEntry variable = string (Char8.append variable "=\"")
variableSeparator :: GenParser ()
variableSeparator = string " \\" *> space
-packageDownloads :: GenParser [URI]
-packageDownloads = string "DOWNLOAD=\""
+packageDownloads :: ByteString -> GenParser [URI]
+packageDownloads variableName = string (variableName <> "=\"")
*> sepBy parserBs variableSeparator
<* string "\"\n"
@@ -65,19 +72,41 @@ hexDigit =
packageChecksum :: GenParser ByteString
packageChecksum = ByteString.pack <$> count 16 hexDigit
-packageChecksums :: GenParser [ByteString]
-packageChecksums = string "MD5SUM=\""
+packageChecksums :: ByteString -> GenParser [ByteString]
+packageChecksums variableName = string (variableName <> "=\"")
*> sepBy packageChecksum variableSeparator
<* string "\"\n"
+packageRequires :: GenParser [ByteString]
+packageRequires = string "REQUIRES=\""
+ *> sepBy packageName space
+ <* string "\"\n"
+
+packageName :: GenParser ByteString
+packageName = takeWhile1P Nothing isNameToken
+ where
+ isNameToken x = Word8.isAlphaNum x
+ || x == Word8._hyphen
+ || x == Word8._underscore
+
parseInfoFile :: GenParser PackageInfo
parseInfoFile = PackageInfo
- <$> (Char8.unpack <$> variableEntry "PKGNAM")
+ <$> (Char8.unpack <$> packagePrgnam)
<*> (Text.decodeUtf8 <$> variableEntry "VERSION")
<*> (Text.decodeUtf8 <$> variableEntry "HOMEPAGE")
- <*> packageDownloads
- <*> (mapMaybe digestFromByteString <$> packageChecksums)
+ <*> packageDownloads "DOWNLOAD"
+ <*> (mapMaybe digestFromByteString <$> packageChecksums "MD5SUM")
+ <*> packageDownloads "DOWNLOAD_x86_64"
+ <*> (mapMaybe digestFromByteString <$> packageChecksums "MD5SUM_x86_64")
+ <*> packageRequires
+ <*> (Text.decodeUtf8 <$> variableEntry "MAINTAINER")
+ <*> (Text.decodeUtf8 <$> variableEntry "EMAIL")
<* eof
+ where
+ packagePrgnam = (string "PKGNAM" <|> string "PRGNAM")
+ >> string "=\""
+ *> packageName
+ <* "\"\n"
updateDownloadVersion :: PackageInfo -> Text -> Maybe String -> [URI]
updateDownloadVersion package toVersion gnomeVersion