diff --git a/Cargo.lock b/Cargo.lock index f5df5fad0..9f63bb527 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -918,7 +918,7 @@ dependencies = [ [[package]] name = "redoxer" version = "0.2.63" -source = "git+https://gitlab.redox-os.org/redox-os/redoxer.git#f50e0d7f490b60110ee6494a06d9b2f9981f8a5a" +source = "git+https://gitlab.redox-os.org/redox-os/redoxer.git#9281d1d591adf2db028e06a7d75767ad9b55d54f" dependencies = [ "anyhow", "dirs", diff --git a/config/acid.toml b/config/acid.toml index 139e0326f..bdaa141d5 100644 --- a/config/acid.toml +++ b/config/acid.toml @@ -25,7 +25,7 @@ path = "/usr/lib/run_acid.ion" data = """ #!/usr/bin/env ion export RUST_BACKTRACE=full -cd /home/user/acid -cargo test +export HOME=/home/root +acid-runner shutdown """ diff --git a/config/auto-test.toml b/config/auto-test.toml index e6f3032a5..7350c4786 100644 --- a/config/auto-test.toml +++ b/config/auto-test.toml @@ -24,9 +24,9 @@ path = "/usr/lib/run_tests.ion" data = """ #!/usr/bin/env ion export RUST_BACKTRACE=full -cd /home/user/acid -cargo test -bash /root/relibc-tests/run.sh +export HOME=/home/root +acid-runner +bash /usr/share/relibc-tests/run.sh os-test-runner shutdown """ diff --git a/recipes/archives/bzip2/recipe.toml b/recipes/archives/bzip2/recipe.toml index 61d789a68..8cdb07763 100644 --- a/recipes/archives/bzip2/recipe.toml +++ b/recipes/archives/bzip2/recipe.toml @@ -20,6 +20,7 @@ rsync -av --delete "${COOKBOOK_SOURCE}/" ./ PREFIX="${COOKBOOK_STAGE}/usr" \ install +if [ "${COOKBOOK_DYNAMIC}" = "1" ]; then # However, distros distribute libbz2 as well so we'll support it too # Linking the lib fails if we don't rebuild the objects from earlier "${COOKBOOK_MAKE}" clean @@ -35,6 +36,7 @@ rsync -av --delete "${COOKBOOK_SOURCE}/" ./ cp -av libbz2.so* "${COOKBOOK_STAGE}/usr/lib" ln -s "libbz2.so.1.0" "${COOKBOOK_STAGE}/usr/lib/libbz2.so.1" ln -s "libbz2.so.1.0" "${COOKBOOK_STAGE}/usr/lib/libbz2.so" +fi mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig" cp "${COOKBOOK_RECIPE}/pkgconfig" "${COOKBOOK_STAGE}/usr/lib/pkgconfig/bzip2.pc" diff --git a/recipes/cosmic/cosmic-edit/manifest b/recipes/cosmic/cosmic-edit/manifest index 7be2c9e7b..0682999c3 100644 --- a/recipes/cosmic/cosmic-edit/manifest +++ b/recipes/cosmic/cosmic-edit/manifest @@ -1,6 +1,6 @@ name=COSMIC Text Editor binary=/bin/cosmic-edit -icon=/ui/icons/apps/accessories-text-editor.png +icon=/usr/share/ui/icons/apps/accessories-text-editor.png accept=*.asm accept=*.c accept=*.conf diff --git a/recipes/cosmic/cosmic-files/manifest b/recipes/cosmic/cosmic-files/manifest index df778a48e..62b4a9668 100644 --- a/recipes/cosmic/cosmic-files/manifest +++ b/recipes/cosmic/cosmic-files/manifest @@ -1,5 +1,5 @@ name=COSMIC File Manager binary=/bin/cosmic-files -icon=/ui/icons/apps/system-file-manager.png +icon=/usr/share/ui/icons/apps/system-file-manager.png author=Jeremy Soller description=COSMIC File Manager diff --git a/recipes/cosmic/cosmic-monitor/recipe.toml b/recipes/cosmic/cosmic-monitor/recipe.toml index c2ebc7117..4e98222fa 100644 --- a/recipes/cosmic/cosmic-monitor/recipe.toml +++ b/recipes/cosmic/cosmic-monitor/recipe.toml @@ -1,6 +1,6 @@ [source] git = "https://github.com/pop-os/cosmic-monitor.git" -rev = "epoch-1.2.0" +branch = "master" [build] template = "custom" diff --git a/recipes/cosmic/cosmic-reader/manifest b/recipes/cosmic/cosmic-reader/manifest index 46524dde4..c99e835d2 100644 --- a/recipes/cosmic/cosmic-reader/manifest +++ b/recipes/cosmic/cosmic-reader/manifest @@ -1,6 +1,6 @@ name=COSMIC Reader binary=/bin/cosmic-reader -icon=/ui/icons/apps/accessories-text-editor.png +icon=/usr/share/ui/icons/apps/accessories-text-editor.png accept=*.pdf accept=*.epub accept=*.cbz diff --git a/recipes/cosmic/cosmic-term/manifest b/recipes/cosmic/cosmic-term/manifest index 2b6f00d14..9342f3c4f 100644 --- a/recipes/cosmic/cosmic-term/manifest +++ b/recipes/cosmic/cosmic-term/manifest @@ -1,5 +1,5 @@ name=COSMIC Terminal binary=/bin/cosmic-term -icon=/ui/icons/apps/utilities-terminal.png +icon=/usr/share/ui/icons/apps/utilities-terminal.png author=Jeremy Soller description=COSMIC Terminal diff --git a/recipes/dev/crates-io-index/recipe.toml b/recipes/dev/crates-io-index/recipe.toml deleted file mode 100644 index ffd2817db..000000000 --- a/recipes/dev/crates-io-index/recipe.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -description = "Metadata for Rust cargo, to download crates and resolve their dependencies" - -[source] -git = "https://github.com/rust-lang/crates.io-index.git" -shallow_clone = true - -[build] -template = "custom" -script = """ -dir="${COOKBOOK_STAGE}/home/user/.cargo/registry/index/github.com-1ecc6299db9ec823" -mkdir -pv "${dir}" -cp -rv "${COOKBOOK_SOURCE}/.git" "${dir}" -""" diff --git a/recipes/dev/hello-world-examples/recipe.toml b/recipes/dev/hello-world-examples/recipe.toml index bb3354c43..d813ffef8 100644 --- a/recipes/dev/hello-world-examples/recipe.toml +++ b/recipes/dev/hello-world-examples/recipe.toml @@ -7,6 +7,6 @@ shallow_clone = true [build] template = "custom" script = """ -mkdir -pv "${COOKBOOK_STAGE}"/home/user/hello-world-examples -cp -rv "${COOKBOOK_SOURCE}"/[#,a-z] "${COOKBOOK_STAGE}"/home/user/hello-world-examples +mkdir -pv "${COOKBOOK_STAGE}"/usr/share/hello-world-examples +cp -rv "${COOKBOOK_SOURCE}"/[#,a-z] "${COOKBOOK_STAGE}"/usr/share/hello-world-examples """ diff --git a/recipes/dev/llvm21/recipe.toml b/recipes/dev/llvm21/recipe.toml index 14579bbc9..68f9a7573 100644 --- a/recipes/dev/llvm21/recipe.toml +++ b/recipes/dev/llvm21/recipe.toml @@ -63,6 +63,7 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_BUILD_EXAMPLES=Off -DLLVM_BUILD_TESTS=Off -DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET}" + -DLLVM_HOST_TRIPLE="${TARGET}" -DLLVM_ENABLE_LTO=Off -DLLVM_ENABLE_RTTI=On -DLLVM_ENABLE_THREADS=On diff --git a/recipes/emulators/dosbox/manifest b/recipes/emulators/dosbox/manifest index 3403b71b2..0381a22fc 100644 --- a/recipes/emulators/dosbox/manifest +++ b/recipes/emulators/dosbox/manifest @@ -1,4 +1,4 @@ name=DOSBox category=Games binary=/bin/dosbox -icon=/ui/icons/apps/dosbox.png +icon=/usr/share/ui/icons/apps/dosbox.png diff --git a/recipes/emulators/flycast/recipe.toml b/recipes/emulators/flycast/recipe.toml index 88eaab57d..e33f7da3a 100644 --- a/recipes/emulators/flycast/recipe.toml +++ b/recipes/emulators/flycast/recipe.toml @@ -21,8 +21,7 @@ dev-dependencies = [ script = """ DYNAMIC_INIT COOKBOOK_NOSTRIP=1 -# TODO: remove DTARGET_NO_REC to enable JIT -export CPPFLAGS+=" -D_GNU_SOURCE=1 -DTARGET_NO_REC" +export CPPFLAGS+=" -D_GNU_SOURCE=1" COOKBOOK_CMAKE_FLAGS+=( -DREDOX=1 -DUNIX=1 @@ -35,8 +34,4 @@ COOKBOOK_CMAKE_FLAGS+=( -DWITH_SYSTEM_ZSTD=ON ) cookbook_cmake - -# for some reason flycast require local dir already set up -mkdir -p ${COOKBOOK_STAGE}/home/user/.local/share/flycast -touch ${COOKBOOK_STAGE}/home/user/.local/share/flycast/.tmp """ diff --git a/recipes/emulators/flycast/redox.patch b/recipes/emulators/flycast/redox.patch index 6dda50347..5259daead 100644 --- a/recipes/emulators/flycast/redox.patch +++ b/recipes/emulators/flycast/redox.patch @@ -77,6 +77,18 @@ index 61ee752..4b140b9 100644 // POSIX threads. #if !defined(ASIO_HAS_PTHREADS) # if defined(ASIO_HAS_THREADS) +diff --git a/core/deps/picotcp/modules/pico_dev_ppp.c b/core/deps/picotcp/modules/pico_dev_ppp.c +index dcffacee..121ac27f 100644 +--- a/core/deps/picotcp/modules/pico_dev_ppp.c ++++ b/core/deps/picotcp/modules/pico_dev_ppp.c +@@ -7,6 +7,7 @@ + *********************************************************************/ + + ++#include + #include + #include + #include diff --git a/core/hw/sh4/modules/mmu.cpp b/core/hw/sh4/modules/mmu.cpp index af9de30e..6f839fc7 100644 --- a/core/hw/sh4/modules/mmu.cpp diff --git a/recipes/games/classicube/manifest b/recipes/games/classicube/manifest index 681eca1be..58ebf05a3 100644 --- a/recipes/games/classicube/manifest +++ b/recipes/games/classicube/manifest @@ -1,4 +1,4 @@ name=ClassiCube category=Games binary=/usr/games/classicube/ClassiCube -icon=/ui/icons/apps/classicube.png +icon=/usr/share/ui/icons/apps/classicube.png diff --git a/recipes/games/eduke32/manifest b/recipes/games/eduke32/manifest index 27dfe096c..c9fd63f26 100644 --- a/recipes/games/eduke32/manifest +++ b/recipes/games/eduke32/manifest @@ -1,4 +1,4 @@ name=EDuke32 category=Games binary=/usr/games/eduke32 -icon=/ui/icons/apps/eduke32.png +icon=/usr/share/ui/icons/apps/eduke32.png diff --git a/recipes/games/gigalomania/manifest b/recipes/games/gigalomania/manifest index 94fb93b69..8f45b54a2 100644 --- a/recipes/games/gigalomania/manifest +++ b/recipes/games/gigalomania/manifest @@ -1,4 +1,4 @@ name=Gigalomania category=Games binary=/usr/games/gigalomania/gigalomania -icon=/ui/icons/apps/gigalomania.png +icon=/usr/share/ui/icons/apps/gigalomania.png diff --git a/recipes/games/neverball/manifest-neverball b/recipes/games/neverball/manifest-neverball index 431aadb30..89510ee08 100644 --- a/recipes/games/neverball/manifest-neverball +++ b/recipes/games/neverball/manifest-neverball @@ -1,4 +1,4 @@ name=Neverball category=Games binary=/usr/games/neverball/neverball -icon=/ui/icons/apps/neverball.png +icon=/usr/share/ui/icons/apps/neverball.png diff --git a/recipes/games/neverball/manifest-neverputt b/recipes/games/neverball/manifest-neverputt index debe4f673..7eb4a2e3f 100644 --- a/recipes/games/neverball/manifest-neverputt +++ b/recipes/games/neverball/manifest-neverputt @@ -1,4 +1,4 @@ name=Neverputt category=Games binary=/usr/games/neverball/neverputt -icon=/ui/icons/apps/neverputt.png +icon=/usr/share/ui/icons/apps/neverputt.png diff --git a/recipes/games/quakespasm/manifest b/recipes/games/quakespasm/manifest index 814d6b06e..3813ede74 100644 --- a/recipes/games/quakespasm/manifest +++ b/recipes/games/quakespasm/manifest @@ -1,4 +1,4 @@ name=QuakeSpasm category=Games binary=/usr/games/quakespasm -icon=/ui/icons/apps/quakespasm.png +icon=/usr/share/ui/icons/apps/quakespasm.png diff --git a/recipes/games/sm64ex/manifest b/recipes/games/sm64ex/manifest index 38f7a22b7..321fbfc4a 100644 --- a/recipes/games/sm64ex/manifest +++ b/recipes/games/sm64ex/manifest @@ -1,4 +1,4 @@ name=Super Mario 64 EX category=Games binary=/bin/sm64 -icon=/ui/icons/apps/sm64ex.png +icon=/usr/share/ui/icons/apps/sm64ex.png diff --git a/recipes/libs/gstreamer/redox.patch b/recipes/libs/gstreamer/redox.patch index 4dc880968..b5a440c39 100644 --- a/recipes/libs/gstreamer/redox.patch +++ b/recipes/libs/gstreamer/redox.patch @@ -1,6 +1,6 @@ -diff -ruw gstreamer-1.24.12/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c source/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c ---- gstreamer-1.24.12/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c 2025-01-29 13:12:29.000000000 -0700 -+++ source/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c 2026-02-10 19:13:12.530288659 -0700 +diff -ruwN source/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c source-new/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c +--- source/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c 2025-01-29 20:12:29.000000000 +0000 ++++ source-new/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnection.c 2026-09-13 01:22:57.407426034 +0000 @@ -49,6 +49,10 @@ #include #endif @@ -12,9 +12,9 @@ diff -ruw gstreamer-1.24.12/subprojects/gst-plugins-bad/ext/dtls/gstdtlsconnecti GST_DEBUG_CATEGORY_STATIC (gst_dtls_connection_debug); #define GST_CAT_DEFAULT gst_dtls_connection_debug -diff -ruw gstreamer-1.24.12/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build source/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build ---- gstreamer-1.24.12/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build 2025-01-29 13:12:29.000000000 -0700 -+++ source/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build 2026-02-10 19:09:53.259120404 -0700 +diff -ruwN source/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build source-new/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build +--- source/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build 2025-01-29 20:12:29.000000000 +0000 ++++ source-new/subprojects/gst-plugins-base/gst-libs/gst/tag/meson.build 2026-09-13 01:22:57.408426091 +0000 @@ -136,10 +136,10 @@ install: false) endif @@ -31,4 +31,16 @@ diff -ruw gstreamer-1.24.12/subprojects/gst-plugins-base/gst-libs/gst/tag/meson. +# install : false) gst_tag_dir = meson.current_source_dir() -Only in source/subprojects/gst-plugins-base/gst-libs/gst/tag: meson.build.orig +diff -ruwN source/subprojects/gstreamer/gst/gstregistry.c source-new/subprojects/gstreamer/gst/gstregistry.c +--- source/subprojects/gstreamer/gst/gstregistry.c 2025-01-29 20:12:29.000000000 +0000 ++++ source-new/subprojects/gstreamer/gst/gstregistry.c 2026-09-29 02:59:06.518249721 +0000 +@@ -174,7 +174,8 @@ + static GstRegistry *_gst_registry_default = NULL; + + /* defaults */ +-#define DEFAULT_FORK TRUE ++/* redox: forking result in hang */ ++#define DEFAULT_FORK FALSE + + /* control the behaviour of registry rebuild */ + static gboolean _gst_enable_registry_fork = DEFAULT_FORK; diff --git a/recipes/libs/libonig/recipe.toml b/recipes/libs/libonig/recipe.toml index 143dc30c6..d079d8d31 100644 --- a/recipes/libs/libonig/recipe.toml +++ b/recipes/libs/libonig/recipe.toml @@ -13,6 +13,4 @@ template = "custom" script = """ DYNAMIC_INIT cookbook_configure -# TODO: fini arrays causes hang in uutils -${OBJCOPY} --remove-section=.fini_array --remove-section=.fini ${COOKBOOK_STAGE}/usr/lib/libonig.so.5 """ diff --git a/recipes/libs/mesa/recipe.toml b/recipes/libs/mesa/recipe.toml index 3019de920..d6c58515e 100644 --- a/recipes/libs/mesa/recipe.toml +++ b/recipes/libs/mesa/recipe.toml @@ -15,7 +15,7 @@ dependencies = [ "llvm21", "zlib", # disabled, see https://gitlab.redox-os.org/redox-os/redox/-/work_items/1883 - # "libglvnd", + # "libglvnd", ] dev-dependencies = [ "llvm21.dev", @@ -41,7 +41,6 @@ cookbook_meson \ -Dglx=disabled \ -Dllvm=enabled \ -Dosmesa=true \ - -Dglvnd=true \ -Dshader-cache=disabled \ -Dgallium-drivers=swrast diff --git a/recipes/libs/termcap/recipe.toml b/recipes/libs/termcap/recipe.toml index 930181ad5..37fb31b10 100644 --- a/recipes/libs/termcap/recipe.toml +++ b/recipes/libs/termcap/recipe.toml @@ -4,10 +4,14 @@ description = "GNU library for rich terminal interfaces" [source] tar = "https://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz" blake3 = "57c095e0bb6e60e7b4a0597f51f7ac15b501ca0f95d37424d8d13978d28b8da3" +patches = [ + "redox.patch" +] [build] template = "custom" script = """ DYNAMIC_STATIC_INIT +export ac_cv_header_stdc=yes COOKBOOK_CONFIGURE_FLAGS+=( --prefix="${COOKBOOK_STAGE}/usr" ) diff --git a/recipes/libs/termcap/redox.patch b/recipes/libs/termcap/redox.patch new file mode 100644 index 000000000..cc3ce40b4 --- /dev/null +++ b/recipes/libs/termcap/redox.patch @@ -0,0 +1,14 @@ +diff -ruwN source/tparam.c source-new/tparam.c +--- source/tparam.c 2002-02-25 17:37:24.000000000 +0000 ++++ source-new/tparam.c 2026-09-22 15:11:03.072524045 +0000 +@@ -38,6 +38,10 @@ + #define bcopy(s, d, n) memcpy ((d), (s), (n)) + #endif + ++#ifdef HAVE_UNISTD_H ++#include ++#endif ++ + #endif /* not emacs */ + + #ifndef NULL diff --git a/recipes/other/cookbook/recipe.toml b/recipes/other/cookbook/recipe.toml index 0dec290ad..8fc925ff0 100644 --- a/recipes/other/cookbook/recipe.toml +++ b/recipes/other/cookbook/recipe.toml @@ -7,8 +7,8 @@ script = """ DYNAMIC_INIT cookbook_cargo -mkdir -pv "${COOKBOOK_STAGE}/home/user/cookbook" -cp -rv "${COOKBOOK_SOURCE}"/* "${COOKBOOK_STAGE}/home/user/cookbook" +mkdir -pv "${COOKBOOK_STAGE}/usr/share/cookbook" +cp -rv "${COOKBOOK_SOURCE}"/* "${COOKBOOK_STAGE}/usr/share/cookbook" """ [package] diff --git a/recipes/other/rustconf2025/recipe.toml b/recipes/other/rustconf2025/recipe.toml index d12d2109b..81d6ff8ef 100644 --- a/recipes/other/rustconf2025/recipe.toml +++ b/recipes/other/rustconf2025/recipe.toml @@ -7,6 +7,6 @@ git = "https://github.com/jackpot51/rustconf2025.git" [build] template = "custom" script = """ -mkdir -p "${COOKBOOK_STAGE}/home/user" -cp -v "${COOKBOOK_SOURCE}/"*.pdf "${COOKBOOK_STAGE}/home/user" +mkdir -p "${COOKBOOK_STAGE}/usr/share" +cp -v "${COOKBOOK_SOURCE}/"*.pdf "${COOKBOOK_STAGE}/usr/share" """ diff --git a/recipes/tests/acid/recipe.toml b/recipes/tests/acid/recipe.toml index fc64579ee..2be916f3b 100644 --- a/recipes/tests/acid/recipe.toml +++ b/recipes/tests/acid/recipe.toml @@ -1,21 +1,19 @@ -# Due to necessary write permission for compilation the filesystem path of source code installation is an exception -# where the package manager can't switch between system-wide and user paths [source] git = "https://gitlab.redox-os.org/redox-os/acid.git" shallow_clone = true [build] template = "custom" script = """ -mkdir -pv "${COOKBOOK_STAGE}/home/user/acid" -cp -rv "${COOKBOOK_SOURCE}"/* "${COOKBOOK_STAGE}/home/user/acid" +mkdir -pv "${COOKBOOK_STAGE}/usr/share/acid" +cp -rv "${COOKBOOK_SOURCE}"/* "${COOKBOOK_STAGE}/usr/share/acid" # Create runner script mkdir -p "${COOKBOOK_STAGE}/usr/bin" cat > "${COOKBOOK_STAGE}/usr/bin/acid-runner" < "${COOKBOOK_STAGE}/usr/bin/relibc-tests-runner" < mode; + static std::once_flag onceFlag; + std::call_once(onceFlag, [] { +- const char* disableDMABuf = getenv("WEBKIT_DISABLE_DMABUF_RENDERER"); ++ // redox: the mesa implementation for dma-buf renderer is incomplete ++ // https://blogs.igalia.com/carlosgc/2023/04/03/webkitgtk-accelerated-compositing-rendering/ ++ const char* disableDMABuf = "1";// getenv("WEBKIT_DISABLE_DMABUF_RENDERER"); + if (disableDMABuf && strcmp(disableDMABuf, "0")) + return; + diff --git a/recipes/wip/web/webkitgtk3/webkit.desktop b/recipes/wip/web/webkitgtk3/webkit.desktop new file mode 100644 index 000000000..b3c4fd074 --- /dev/null +++ b/recipes/wip/web/webkitgtk3/webkit.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=WebKit +Comment=WebKit GTK Browser +Exec=MiniBrowser +Icon=/usr/share/ui/icons/apps/internet-web-browser.png +Terminal=false +Type=Application +StartupNotify=true +Categories=Network +NoDisplay=true diff --git a/recipes/wip/x11/x11proto/recipe.toml b/recipes/wip/x11/x11proto/recipe.toml index fc5be2a28..9e9441f90 100644 --- a/recipes/wip/x11/x11proto/recipe.toml +++ b/recipes/wip/x11/x11proto/recipe.toml @@ -4,4 +4,4 @@ blake3 = "fad667bb04e16dca5e816969f2641bb075929cd73564114cc1aabd87d1975dd3" patches = ["redox.patch"] [build] -template = "configure" +template = "meson" diff --git a/src/bin/repo/main.rs b/src/bin/repo/main.rs index 8b95e1065..777a13078 100644 --- a/src/bin/repo/main.rs +++ b/src/bin/repo/main.rs @@ -12,6 +12,7 @@ use cookbook::cook::tui::join_logs; use cookbook::cook::{fetch_repo, ident}; use cookbook::recipe::{ CookRecipe, SourceRecipe, recipes_flatten_package_names, recipes_mark_as_deps, + validate_filesystem_rules, }; use cookbook::{Error, Result, staged_pkg}; use pkg::{PackageName, PackageState}; @@ -685,7 +686,7 @@ fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec) -> Result<(CliConfig, CliCommand, Vec&2 return ;; @@ -35,7 +35,8 @@ function DYNAMIC_INIT { # TODO: check paths for spaces export LDFLAGS="${USER_LDFLAGS}-Wl,-rpath-link,${COOKBOOK_SYSROOT}/lib -L${COOKBOOK_SYSROOT}/lib -Wl,--export-dynamic" - export RUSTFLAGS="-C target-feature=-crt-static -L native=${COOKBOOK_SYSROOT}/lib -C link-arg=-Wl,-rpath-link,${COOKBOOK_SYSROOT}/lib" + rustflags="-C target-feature=-crt-static -L native=${COOKBOOK_SYSROOT}/lib -C link-arg=-Wl,-rpath-link,${COOKBOOK_SYSROOT}/lib" + export "${REDOXER_RUSTFLAGS_KEY}=${!REDOXER_RUSTFLAGS_KEY} ${rustflags}" export COOKBOOK_DYNAMIC=1 if [ "function" = "$(type -t reexport_flags)" ]; then @@ -234,12 +235,12 @@ function generate_cookbook_cmake_file { gcc_prefix=$2 sysroot=$3 file=$4 - ARCH=$(echo "$target" | cut -d - -f1) + arch=$(echo "$target" | cut -d - -f1) if [[ "$target" == *"-linux-"* ]]; then - SYSTEM_NAME="Linux" + system_name="Linux" else - SYSTEM_NAME="UnixPaths" + system_name="UnixPaths" fi if [[ "$REDOXER_USE_CLANG" != "1" && "$REDOXER_USE_CLANG" != "true" ]]; then @@ -278,8 +279,8 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1) set(CMAKE_PREFIX_PATH, ${sysroot}) set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") -set(CMAKE_SYSTEM_NAME ${SYSTEM_NAME}) -set(CMAKE_SYSTEM_PROCESSOR ${ARCH}) +set(CMAKE_SYSTEM_NAME ${system_name}) +set(CMAKE_SYSTEM_PROCESSOR ${arch}) EOF if [ "$target" = "$GNU_TARGET" ] diff --git a/src/recipe.rs b/src/recipe.rs index da56d0ebb..a66e45249 100644 --- a/src/recipe.rs +++ b/src/recipe.rs @@ -636,6 +636,51 @@ pub fn recipes_flatten_package_names(packages: Vec) -> Vec crate::Result<()> { + let ignored: BTreeSet = recipes + .iter() + .filter(|r| r.rule == "ignore") + .map(|r| r.canon_recipe_name().without_prefix().to_string()) + .collect(); + if ignored.is_empty() { + return Ok(()); + } + for recipe in recipes { + if recipe.rule == "ignore" { + continue; + } + if recipe.recipe.build.kind == BuildKind::None + || recipe.recipe.build.kind == BuildKind::Remote + { + // Not built from source, so build dependencies are irrelevant. + continue; + } + let mut ignored_dependencies: Vec<&str> = Vec::new(); + for dep in recipe + .recipe + .build + .dependencies + .iter() + .chain(recipe.recipe.build.dev_dependencies.iter()) + { + let dep = dep.without_prefix(); + + if ignored.contains(dep) { + ignored_dependencies.push(dep); + } + } + if !ignored_dependencies.is_empty() { + bail_other_err!( + "Invalid filesystem config: the following packages are configured as \"ignore\" but are required as build dependencies by {:?}: {:?}", + ignored_dependencies, + recipe.name.as_str(), + ); + } + } + Ok(()) +} #[derive(Serialize, Deserialize)] pub struct AutoDeps { @@ -799,4 +844,86 @@ mod tests { } ); } + + #[test] + fn ignore_required_by_build_dep_is_rejected() { + use crate::recipe::{BuildKind, BuildRecipe, CookRecipe, validate_filesystem_rules}; + + let mut ignored = CookRecipe::dummy(&PackageName::new("libogg").unwrap()); + ignored.rule = "ignore".into(); + + let mut dependent = CookRecipe::dummy(&PackageName::new("libvorbis").unwrap()); + dependent.recipe.build = BuildRecipe::new(BuildKind::Custom { + script: "make".to_string(), + }); + dependent.recipe.build.dependencies = vec![PackageName::new("libogg").unwrap()]; + + let err = validate_filesystem_rules(&[ignored, dependent]).unwrap_err(); + let msg = format!("{}", err); + assert!( + msg.contains("libogg") && msg.contains("libvorbis"), + "unexpected error: {msg}" + ); + } + #[test] + fn ignore_multiple_required_by_build_dep_are_rejected() { + use crate::recipe::{BuildKind, BuildRecipe, CookRecipe, validate_filesystem_rules}; + + let mut ignored_ogg = CookRecipe::dummy(&PackageName::new("libogg").unwrap()); + ignored_ogg.rule = "ignore".into(); + + let mut ignored_foo = CookRecipe::dummy(&PackageName::new("libfoo").unwrap()); + ignored_foo.rule = "ignore".into(); + + let mut dependent = CookRecipe::dummy(&PackageName::new("libvorbis").unwrap()); + + dependent.recipe.build = BuildRecipe::new(BuildKind::Custom { + script: "make".to_string(), + }); + + dependent.recipe.build.dependencies = vec![ + PackageName::new("libogg").unwrap(), + PackageName::new("libfoo").unwrap(), + ]; + + let err = validate_filesystem_rules(&[ignored_ogg, ignored_foo, dependent]).unwrap_err(); + + let msg = format!("{err}"); + + assert!(msg.contains("libogg"), "unexpected error: {msg}"); + assert!(msg.contains("libfoo"), "unexpected error: {msg}"); + assert!(msg.contains("libvorbis"), "unexpected error: {msg}"); + } + #[test] + fn ignore_required_by_dev_dep_is_rejected() { + use crate::recipe::{BuildKind, BuildRecipe, CookRecipe, validate_filesystem_rules}; + + let mut ignored = CookRecipe::dummy(&PackageName::new("libogg").unwrap()); + ignored.rule = "ignore".into(); + + let mut dependent = CookRecipe::dummy(&PackageName::new("libvorbis").unwrap()); + dependent.recipe.build = BuildRecipe::new(BuildKind::Custom { + script: "make".to_string(), + }); + dependent.recipe.build.dev_dependencies = vec![PackageName::new("libogg").unwrap()]; + + let err = validate_filesystem_rules(&[ignored, dependent]).unwrap_err(); + assert!(format!("{}", err).contains("libogg")); + } + + #[test] + fn ignore_leaf_is_allowed() { + use crate::recipe::{BuildKind, BuildRecipe, CookRecipe, validate_filesystem_rules}; + + // e.g. pruning `orbterm` from a metapackage: nothing references it. + let mut ignored = CookRecipe::dummy(&PackageName::new("orbterm").unwrap()); + ignored.rule = "ignore".into(); + + let mut meta = CookRecipe::dummy(&PackageName::new("desktop-minimal").unwrap()); + meta.recipe.build = BuildRecipe::new(BuildKind::None); + meta.recipe.package.dependencies = vec![PackageName::new("orbital").unwrap()]; + + assert!(validate_filesystem_rules(&[ignored, meta]).is_ok()); + assert!(validate_filesystem_rules(&[]).is_ok()); + } }