From 60bf37dd0c989ee3cff000c427cf272556fa2aab Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Thu, 18 May 2023 12:49:23 -0600
Subject: [PATCH] Convert some recipes to toml

---
 recipes/autoconf/recipe.sh      | 25 -------------------------
 recipes/autoconf/recipe.toml    |  6 ++++++
 recipes/automake/recipe.sh      | 28 ----------------------------
 recipes/automake/recipe.toml    |  6 ++++++
 recipes/cosmic-text/recipe.sh   | 17 -----------------
 recipes/cosmic-text/recipe.toml |  9 +++++++++
 recipes/cpal/recipe.sh          | 11 -----------
 recipes/cpal/recipe.toml        | 10 ++++++++++
 recipes/orbclient/recipe.sh     | 10 ----------
 recipes/orbclient/recipe.toml   |  8 ++++++++
 recipes/orbterm/recipe.toml     |  1 +
 recipes/winit/recipe.sh         | 11 -----------
 recipes/winit/recipe.toml       | 10 ++++++++++
 src/bin/cook.rs                 | 32 ++++++++++++++++++++++++++++++++
 14 files changed, 82 insertions(+), 102 deletions(-)
 delete mode 100644 recipes/autoconf/recipe.sh
 create mode 100644 recipes/autoconf/recipe.toml
 delete mode 100644 recipes/automake/recipe.sh
 create mode 100644 recipes/automake/recipe.toml
 delete mode 100644 recipes/cosmic-text/recipe.sh
 create mode 100644 recipes/cosmic-text/recipe.toml
 delete mode 100644 recipes/cpal/recipe.sh
 create mode 100644 recipes/cpal/recipe.toml
 delete mode 100644 recipes/orbclient/recipe.sh
 create mode 100644 recipes/orbclient/recipe.toml
 delete mode 100644 recipes/winit/recipe.sh
 create mode 100644 recipes/winit/recipe.toml

diff --git a/recipes/autoconf/recipe.sh b/recipes/autoconf/recipe.sh
deleted file mode 100644
index 750349aa4..000000000
--- a/recipes/autoconf/recipe.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-VERSION=2.71
-TAR=https://ftp.gnu.org/gnu/autoconf/autoconf-$VERSION.tar.xz
-
-function recipe_version {
-    echo "$VERSION"
-    skip=1
-}
-
-function recipe_build {
-    wget -O build-aux/config.sub "https://gitlab.redox-os.org/redox-os/gnu-config/-/raw/master/config.sub?inline=false"
-    ./configure --build=${BUILD} --host=${HOST} --prefix=''
-    "$REDOX_MAKE" -j"$($NPROC)"
-    skip=1
-}
-
-function recipe_clean {
-    "$REDOX_MAKE" clean
-    skip=1
-}
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    "$REDOX_MAKE" DESTDIR="$dest" install
-    skip=1
-}
diff --git a/recipes/autoconf/recipe.toml b/recipes/autoconf/recipe.toml
new file mode 100644
index 000000000..a4f8df2f8
--- /dev/null
+++ b/recipes/autoconf/recipe.toml
@@ -0,0 +1,6 @@
+[source]
+tar = "https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.xz"
+blake3 = "da1cc8af8551c343de9f42af0ae53fd7dff3623487157623892b6cd7e3bb5692"
+
+[build]
+template = "configure"
diff --git a/recipes/automake/recipe.sh b/recipes/automake/recipe.sh
deleted file mode 100644
index 22776f81a..000000000
--- a/recipes/automake/recipe.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-VERSION=1.16.5
-TAR=https://ftp.gnu.org/gnu/automake/automake-$VERSION.tar.xz
-
-function recipe_version {
-    echo "$VERSION"
-    skip=1
-}
-
-function recipe_build {
-    wget -O lib/config.sub "https://gitlab.redox-os.org/redox-os/gnu-config/-/raw/master/config.sub?inline=false"
-    sed -i 's|.*/doc/help2man.*|\&\& true|' Makefile.in
-    sed -i 's|install-info-am install-man|install-info-am|' Makefile.in
-
-    ./configure --build=${BUILD} --host=${HOST} --prefix=''
-    "$REDOX_MAKE" -j"$($NPROC)"
-    skip=1
-}
-
-function recipe_clean {
-    "$REDOX_MAKE" clean
-    skip=1
-}
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    "$REDOX_MAKE" DESTDIR="$dest" install
-    skip=1
-}
diff --git a/recipes/automake/recipe.toml b/recipes/automake/recipe.toml
new file mode 100644
index 000000000..c733beb95
--- /dev/null
+++ b/recipes/automake/recipe.toml
@@ -0,0 +1,6 @@
+[source]
+tar = "https://ftp.gnu.org/gnu/automake/automake-1.16.5.tar.xz"
+blake3 = "f42cfc333aaaa11f2bcb05b5b0273b8706c820c22f9ba4367f7eb920551695cd"
+
+[build]
+template = "configure"
diff --git a/recipes/cosmic-text/recipe.sh b/recipes/cosmic-text/recipe.sh
deleted file mode 100644
index 8d7d37ea5..000000000
--- a/recipes/cosmic-text/recipe.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-GIT=https://github.com/pop-os/cosmic-text.git
-BRANCH=main
-
-function recipe_build {
-    sysroot="$(realpath ../sysroot)"
-    set -x
-    cargo build --target "$TARGET" --release --package editor-orbclient --features vi
-    set +x
-    skip=1
-}
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    mkdir -pv "$dest/bin"
-    cp -v "target/${TARGET}/release/editor-orbclient" "$dest/bin/cosmic-text"
-    skip=1
-}
diff --git a/recipes/cosmic-text/recipe.toml b/recipes/cosmic-text/recipe.toml
new file mode 100644
index 000000000..32f0525b9
--- /dev/null
+++ b/recipes/cosmic-text/recipe.toml
@@ -0,0 +1,9 @@
+[source]
+git = "https://github.com/pop-os/cosmic-text.git"
+branch = "main"
+
+[build]
+template = "custom"
+script = """
+cookbook_cargo_packages editor-orbclient
+"""
diff --git a/recipes/cpal/recipe.sh b/recipes/cpal/recipe.sh
deleted file mode 100644
index 2ffe7617c..000000000
--- a/recipes/cpal/recipe.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-GIT=https://gitlab.redox-os.org/redox-os/cpal.git
-GIT_UPSTREAM=https://github.com/tomaka/cpal.git
-BRANCH=redox
-CARGOFLAGS="--example beep"
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    mkdir -pv "$dest/bin"
-    cp -v "target/${TARGET}/release/examples/beep" "$dest/bin/cpal"
-    skip=1
-}
diff --git a/recipes/cpal/recipe.toml b/recipes/cpal/recipe.toml
new file mode 100644
index 000000000..4ff3861b2
--- /dev/null
+++ b/recipes/cpal/recipe.toml
@@ -0,0 +1,10 @@
+[source]
+git = "https://gitlab.redox-os.org/redox-os/cpal.git"
+branch = "redox"
+upstream = "https://github.com/tomaka/cpal.git"
+
+[build]
+template = "custom"
+script = """
+cookbook_cargo_examples beep
+"""
diff --git a/recipes/orbclient/recipe.sh b/recipes/orbclient/recipe.sh
deleted file mode 100644
index cdd0c9787..000000000
--- a/recipes/orbclient/recipe.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-
-GIT=https://gitlab.redox-os.org/redox-os/orbclient.git
-CARGOFLAGS="--example simple"
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    mkdir -pv "$dest/bin"
-    cp -v "target/${TARGET}/release/examples/simple" "$dest/bin/orbclient"
-    skip=1
-}
diff --git a/recipes/orbclient/recipe.toml b/recipes/orbclient/recipe.toml
new file mode 100644
index 000000000..27f07e47b
--- /dev/null
+++ b/recipes/orbclient/recipe.toml
@@ -0,0 +1,8 @@
+[source]
+git = "https://gitlab.redox-os.org/redox-os/orbclient.git"
+
+[build]
+template = "custom"
+script = """
+cookbook_cargo_examples simple
+"""
diff --git a/recipes/orbterm/recipe.toml b/recipes/orbterm/recipe.toml
index e6e23e155..869254582 100644
--- a/recipes/orbterm/recipe.toml
+++ b/recipes/orbterm/recipe.toml
@@ -8,6 +8,7 @@ COOKBOOK_CARGO_FLAGS=(
     --path "${COOKBOOK_SOURCE}"
     --root "${COOKBOOK_STAGE}/ui"
     --locked
+    --no-track
 )
 cookbook_cargo
 """
diff --git a/recipes/winit/recipe.sh b/recipes/winit/recipe.sh
deleted file mode 100644
index 4ac8f27c6..000000000
--- a/recipes/winit/recipe.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-GIT=https://gitlab.redox-os.org/redox-os/winit.git
-GIT_UPSTREAM=https://github.com/rust-windowing/winit.git
-BRANCH=redox-0.27
-CARGOFLAGS="--example window"
-
-function recipe_stage {
-    dest="$(realpath $1)"
-    mkdir -pv "$dest/bin"
-    cp -v "target/${TARGET}/release/examples/window" "$dest/bin/winit"
-    skip=1
-}
diff --git a/recipes/winit/recipe.toml b/recipes/winit/recipe.toml
new file mode 100644
index 000000000..818e6e835
--- /dev/null
+++ b/recipes/winit/recipe.toml
@@ -0,0 +1,10 @@
+[source]
+git = "https://gitlab.redox-os.org/redox-os/winit.git"
+branch = "redox-0.27"
+upstream = "https://github.com/rust-windowing/winit.git"
+
+[build]
+template = "custom"
+script = """
+cookbook_cargo_examples window
+"""
diff --git a/src/bin/cook.rs b/src/bin/cook.rs
index 5d36682da..b055920b6 100644
--- a/src/bin/cook.rs
+++ b/src/bin/cook.rs
@@ -471,6 +471,38 @@ function cookbook_cargo {
     "${COOKBOOK_CARGO}" install "${COOKBOOK_CARGO_FLAGS[@]}"
 }
 
+# helper for installing binaries that are cargo examples
+function cookbook_cargo_examples {
+    recipe="$(basename "${COOKBOOK_RECIPE}")"
+    for example in "$@"
+    do
+        "${COOKBOOK_CARGO}" build \
+            --manifest-path "${COOKBOOK_SOURCE}/Cargo.toml" \
+            --example "${example}" \
+            --release
+        mkdir -pv "${COOKBOOK_STAGE}/bin"
+        cp -v \
+            "target/${TARGET}/release/examples/${example}" \
+            "${COOKBOOK_STAGE}/bin/${recipe}_${example}"
+    done
+}
+
+# helper for installing binaries that are cargo packages
+function cookbook_cargo_packages {
+    recipe="$(basename "${COOKBOOK_RECIPE}")"
+    for package in "$@"
+    do
+        "${COOKBOOK_CARGO}" build \
+            --manifest-path "${COOKBOOK_SOURCE}/Cargo.toml" \
+            --package "${package}" \
+            --release
+        mkdir -pv "${COOKBOOK_STAGE}/bin"
+        cp -v \
+            "target/${TARGET}/release/${package}" \
+            "${COOKBOOK_STAGE}/bin/${recipe}_${package}"
+    done
+}
+
 # configure template
 COOKBOOK_CONFIGURE="${COOKBOOK_SOURCE}/configure"
 COOKBOOK_CONFIGURE_FLAGS=(
-- 
GitLab