diff --git a/build-aux/build-ports.sh b/build-aux/build-ports.sh index 3782c355..38d92b02 100755 --- a/build-aux/build-ports.sh +++ b/build-aux/build-ports.sh @@ -242,6 +242,7 @@ download_archive_from_url() {( fi fi if ! echo "$SHA256SUM $SORTIX_MIRROR_DIR/$PACKAGE/$ARCHIVE.untrusted" | sha256sum -c; then + sha256sum "$SORTIX_MIRROR_DIR/$PACKAGE/$ARCHIVE.untrusted" echo "warning: Wrong sha256sum after downloading $ARCHIVE from $URL" >&2 exit 1 fi @@ -288,9 +289,11 @@ download_package() {( )} desired_version() {( - #unset ARCHIVE - #unset ARCHIVE_2 - #. "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.info" + PACKAGE="$1" + unset DEVELOPMENT + unset ARCHIVE + unset ARCHIVE_2 + . "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.info" VERSION_STAMP="$NAME" if [ -n "$ARCHIVE" ]; then VERSION_STAMP="$VERSION_STAMP.$VERSION.$SHA256SUM" @@ -307,44 +310,105 @@ desired_version() {( if [ -f "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalize" ]; then VERSION_STAMP="$VERSION_STAMP.$(cat "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalize" | sha256sum | grep -Eo '^[^ ]*')" fi + if [ "$DEVELOPMENT" = true ]; then + VERSION_STAMP="$VERSION_STAMP.development" + fi echo "$VERSION_STAMP" )} +diff_package() {( + # TODO: Only do this once the port is known to be cleaned. + cd "$SORTIX_PORTS_DIR/$1" + if [ -e "$1.normalized" ]; then + diff --no-dereference -Naur -- "$1.normalized" "$1" > "$1.patch" || true + if [ ! -s "$1.patch" ]; then rm "$1.patch"; fi + tix-execdiff -- "$1.normalized" "$1" > "$1.execpatch" + if [ ! -s "$1.execpatch" ]; then rm "$1.execpatch"; fi + # TODO: tix-rmpatch + fi +)} + extract_package() {( PACKAGE="$1" - VERSION_STAMP="$2" + unset DEVELOPMENT unset ARCHIVE unset ARCHIVE_2 unset NEED_WRITABLE . "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.info" - VERSION_STAMP="$(desired_version)" + VERSION_STAMP="$(desired_version "$PACKAGE")" + OLD_VERSION_STAMP="$(cat "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" || true)" if [ ! -e "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" ] || [ "$(cat "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version")" != "$VERSION_STAMP" ] || [ ! -e "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" ]; then + if [ -e "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" ]; then + OLD_VERSION_STAMP="$(cat "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version")" + case "$OLD_VERSION_STAMP" in + *.development) + if [ "$DEVELOPMENT" = true ]; then + echo "error: $PACKAGE: Refusing to delete port in development" + echo "error: $PACKAGE: .version is currently: $OLD_VERSION_STAMP" + echo "error: $PACKAGE: .version should be: $VERSION_STAMP" + exit 1 + fi + diff_package "$PACKAGE" + esac + fi echo "$VERSION_STAMP" > "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version.new" rm -rf "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" + rm -rf "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalized" mkdir "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" + if [ "$DEVELOPMENT" = true ]; then + mkdir "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalized" + fi if [ -n "$ARCHIVE" ]; then announce "Extracting $1: $ARCHIVE" tar -C "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" -xf "$SORTIX_MIRROR_DIR/$PACKAGE/$ARCHIVE" --strip-components=1 + if [ "$DEVELOPMENT" = true ]; then + tar -C "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalized" -xf "$SORTIX_MIRROR_DIR/$PACKAGE/$ARCHIVE" --strip-components=1 + fi if [ -n "$ARCHIVE_2" ]; then announce "Extracting $1: $ARCHIVE_2" tar -C "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" -xf "$SORTIX_MIRROR_DIR/$PACKAGE/$ARCHIVE_2" --strip-components=1 + if [ "$DEVELOPMENT" = true ]; then + tar -C "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalized" -xf "$SORTIX_MIRROR_DIR/$PACKAGE/$ARCHIVE_2" --strip-components=1 + fi fi fi if [ -f "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.patch" ]; then - patch -d "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" -p1 < "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.patch" + if [ "$DEVELOPMENT" = true ]; then + # TODO: .rej .orig etc. + patch -d "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" -p1 < "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.patch" || true + # .orig files aren't useful unless part of the patch got rejected. + find "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" \ + -name '*.orig' \ + -exec sh -c 'test ! -e "$(echo "$0" | sed -E "s,\\.orig$,.rej,")"' \ + '{}' ';' -delete + else + patch -d "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" -p1 < "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.patch" + fi fi if [ -f "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.execpatch" ]; then tix-execpatch --directory "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.execpatch" fi if [ -f "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalize" ]; then tix-rmpatch --directory "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalize" + if [ "$DEVELOPMENT" = true ]; then + tix-rmpatch --directory "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalized" "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.normalize" + fi fi - if [ "$NEED_WRITABLE" != true ]; then + if [ "$DEVELOPMENT" != true -a "$NEED_WRITABLE" != true ]; then find "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" '!' -type d -exec chmod -w '{}' + fi mv "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version.new" "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" + if [ "$DEVELOPMENT" = true ]; then + REJECTS="$(find "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" \ + -name '*.rej' -o -name '*.orig' | sort)" + if [ -n "$REJECTS" ]; then + echo "$REJECTS" + echo "error: $PACKAGE: The above patch hunks were rejected" + exit 1 + fi + fi fi )} @@ -353,26 +417,29 @@ for PACKAGE in $PACKAGES; do SOURCE_PACKAGE=$( (SOURCE_PACKAGE= && . $SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.info && echo "$SOURCE_PACKAGE") ) + DEVELOPMENT=$( (DEVELOPMENT= && + . $SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.info && + echo "$DEVELOPMENT") ) # TODO: clean support. - if [ ! -f "$SORTIX_REPOSITORY_DIR/$PACKAGE.tix.tar.xz" ] || - [ "$OPERATION" != build ] ; then + # download + if [ -n "$SOURCE_PACKAGE" ]; then + download_package "$SOURCE_PACKAGE" + fi + download_package "$PACKAGE" + if [ "$OPERATION" = download ]; then continue; fi - # download - if [ -n "$SOURCE_PACKAGE" ]; then - download_package "$SOURCE_PACKAGE" - fi - download_package "$PACKAGE" - if [ "$OPERATION" = download ]; then continue; fi + # extract + if [ -n "$SOURCE_PACKAGE" ]; then + extract_package "$SOURCE_PACKAGE" + fi + extract_package "$PACKAGE" + if [ "$OPERATION" = extract ]; then continue; fi - # extract - if [ -n "$SOURCE_PACKAGE" ]; then - extract_package "$SOURCE_PACKAGE" - fi - extract_package "$PACKAGE" - if [ "$OPERATION" = extract ]; then continue; fi - - # build + # build + if [ ! -f "$SORTIX_REPOSITORY_DIR/$PACKAGE.tix.tar.xz" -o \ + "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" -nt \ + "$SORTIX_REPOSITORY_DIR/$PACKAGE.tix.tar.xz" ]; then announce "Building $PACKAGE" tix-build \ --sysroot="$SYSROOT" \ @@ -383,6 +450,10 @@ for PACKAGE in $PACKAGES; do ${SOURCE_PACKAGE:+--source-package "$SORTIX_PORTS_DIR/$SOURCE_PACKAGE/$SOURCE_PACKAGE"} \ "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" strip_tix "$SORTIX_REPOSITORY_DIR/$PACKAGE.tix.tar.xz" + if [ "$DEVELOPMENT" = true ]; then + # TODO: .rej .orig etc. + diff_package "$PACKAGE" + fi fi announce "Installing $PACKAGE" tix-install \ diff --git a/build-aux/clean-ports.sh b/build-aux/clean-ports.sh index 716e3819..f76b9b89 100755 --- a/build-aux/clean-ports.sh +++ b/build-aux/clean-ports.sh @@ -34,6 +34,9 @@ get_all_packages() { # Clean all the packages. for PACKAGE in $(get_all_packages); do + DEVELOPMENT=$( (DEVELOPMENT= && + . $SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.info && + echo "$DEVELOPMENT") ) if [ -e "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" -o \ -e "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version.new" ]; then tix-build \ @@ -44,6 +47,14 @@ for PACKAGE in $(get_all_packages); do --start=clean \ --end=clean \ "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE" + if [ "$DEVELOPMENT" = true ]; then + case "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE.version" in + *.development) + echo "Port is in development: '$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE'" + continue + ;; + esac + fi # TODO: New top-level makefile target for this. echo "Removing '$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE'" rm -rf "$SORTIX_PORTS_DIR/$PACKAGE/$PACKAGE"