diff --git a/Makefile b/Makefile index c8585e3..eb70560 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,10 @@ BUILD_DIR := ${PWD}/build SRC_DIR := ${PWD}/src FLATPAK_STATE_DIR := ${PWD}/flatpak-state FLATPAK_CACHE_DIR := ${PWD}/flatpak-cache -# Whether to use a clean build each time (set to empty to disable) -# CLEAN_BUILD := --force-clean + +# Get current user and group IDs to avoid permission issues with Docker +USER_ID := $(shell id -u) +GROUP_ID := $(shell id -g) # --- Main Targets --- # Default target @@ -20,7 +22,8 @@ all: build .PHONY: prepare-sources prepare-sources: @echo "--- Preparing sources using prepare_sources.sh ---" - @./prepare_sources.sh + ./prepare_sources.sh + ./prepare_sources.sh --check-integrity # Build the Docker image which runs flatpak-builder inside # Implicitly depends on sources being ready after prepare-sources runs @@ -29,8 +32,7 @@ build-image: @echo "--- Building Aseprite Flatpak builder image (${IMAGE_NAME}) ---" @docker build -t ${IMAGE_NAME} -f ${DOCKERFILE} . -# Run flatpak-builder inside a privileged container -# Create persistent cache directories to improve caching +# Run flatpak-builder inside a privileged container with proper user permissions .PHONY: run-flatpak-builder run-flatpak-builder: @echo "--- Running flatpak-builder inside container ---" @@ -44,9 +46,12 @@ run-flatpak-builder: -v ${FLATPAK_STATE_DIR}:/root/.local/share/flatpak-builder \ -v ${FLATPAK_CACHE_DIR}:/root/.cache/flatpak-builder \ -v ${PWD}/com.aseprite.Aseprite.yaml:/build/com.aseprite.Aseprite.yaml:ro \ + -e FLATPAK_USER_DIR=/build/.flatpak \ + -e USER_ID=${USER_ID} \ + -e GROUP_ID=${GROUP_ID} \ -w /build \ ${IMAGE_NAME} \ - sh -c "flatpak-builder --disable-rofiles-fuse --state-dir=/root/.local/share/flatpak-builder --ccache ${CLEAN_BUILD} build-dir com.aseprite.Aseprite.yaml --repo=repo && if [ -d 'build-dir/files/third_party/externals/emsdk' ]; then rm -rf build-dir/files/third_party/externals/emsdk; fi" + sh -c "flatpak-builder --disable-rofiles-fuse --state-dir=/root/.local/share/flatpak-builder --ccache build-dir com.aseprite.Aseprite.yaml --repo=repo && if [ -d 'build-dir/files/third_party/externals/emsdk' ]; then rm -rf build-dir/files/third_party/externals/emsdk; fi && chown -R ${USER_ID}:${GROUP_ID} /build" # Create the Flatpak bundle from the repo built in the previous step .PHONY: create-bundle @@ -57,9 +62,11 @@ create-bundle: run-flatpak-builder --privileged \ --device /dev/fuse \ -v ${BUILD_DIR}:/build \ + -e USER_ID=${USER_ID} \ + -e GROUP_ID=${GROUP_ID} \ -w /build \ ${IMAGE_NAME} \ - sh -c "flatpak build-bundle repo aseprite.flatpak com.aseprite.Aseprite" + sh -c "flatpak build-bundle repo aseprite.flatpak com.aseprite.Aseprite && chown ${USER_ID}:${GROUP_ID} aseprite.flatpak" # Copy the final bundle from the intermediate directory to the output directory .PHONY: extract-flatpak @@ -79,24 +86,9 @@ prepare: prepare-sources build-image build: run-flatpak-builder create-bundle extract-flatpak @echo "--- Build complete ---" -# --- Utility Targets --- -# Clean up the output and intermediate build directories +# Clean up only the source files and downloaded content .PHONY: clean clean: - @echo "--- Cleaning up ---" - @rm -rf ${TARGET_DIR} - @rm -rf ${BUILD_DIR} - @echo "Cleanup complete." - -# Deep clean - removes all caches as well -.PHONY: deep-clean -deep-clean: clean - @echo "--- Deep cleaning (including caches) ---" - @rm -rf ${FLATPAK_STATE_DIR} - @rm -rf ${FLATPAK_CACHE_DIR} - @echo "Deep cleanup complete." - -# Force clean build by setting CLEAN_BUILD variable -.PHONY: force-clean-build -force-clean-build: - @$(MAKE) CLEAN_BUILD="--force-clean" build + @echo "--- Cleaning source files ---" + @rm -rf ${SRC_DIR} + @echo "Source files cleaned. Run 'prepare-sources' to download them again."