chore: move directory creation responsibility to Makefile (#946)

This commit adds new rules to create directories and sets order only
pre-requisites to the existing rules as a way to centralise directory
creation, which is currently scattered around all the build scripts.

See: https://github.com/resin-io/etcher/pull/923#discussion_r90881453
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
This commit is contained in:
Juan Cruz Viotti 2016-12-09 10:40:15 -04:00 committed by GitHub
parent b0f94b58ca
commit 446e457b5b
11 changed files with 70 additions and 49 deletions

View File

@ -1,3 +1,19 @@
# ---------------------------------------------------------------------
# Build configuration
# ---------------------------------------------------------------------
# This directory will be completely deleted by the `clean` rule
BUILD_DIRECTORY ?= release
# See http://stackoverflow.com/a/20763842/1641422
BUILD_DIRECTORY_PARENT = $(dir $(BUILD_DIRECTORY))
ifeq ($(wildcard $(BUILD_DIRECTORY_PARENT).),)
$(error $(BUILD_DIRECTORY_PARENT) does not exist)
endif
BUILD_TEMPORARY_DIRECTORY = $(BUILD_DIRECTORY)/.tmp
BUILD_OUTPUT_DIRECTORY = $(BUILD_DIRECTORY)/out
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Application configuration # Application configuration
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
@ -89,7 +105,6 @@ ifeq ($(TARGET_ARCH),x64)
TARGET_ARCH_DEBIAN = amd64 TARGET_ARCH_DEBIAN = amd64
endif endif
TEMPORARY_DIRECTORY = release/.tmp
APPLICATION_NAME_LOWERCASE = $(shell echo $(APPLICATION_NAME) | tr A-Z a-z) APPLICATION_NAME_LOWERCASE = $(shell echo $(APPLICATION_NAME) | tr A-Z a-z)
APPLICATION_VERSION_DEBIAN = $(shell echo $(APPLICATION_VERSION) | tr "-" "~") APPLICATION_VERSION_DEBIAN = $(shell echo $(APPLICATION_VERSION) | tr "-" "~")
@ -104,37 +119,55 @@ define execute-command
endef endef
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules: package.json npm-shrinkwrap.json $(BUILD_DIRECTORY):
mkdir $@
$(BUILD_TEMPORARY_DIRECTORY): | $(BUILD_DIRECTORY)
mkdir $@
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies: | $(BUILD_DIRECTORY)
mkdir $@
$(BUILD_OUTPUT_DIRECTORY): | $(BUILD_DIRECTORY)
mkdir $@
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules: package.json npm-shrinkwrap.json \
| $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies
./scripts/build/dependencies-npm.sh -p \ ./scripts/build/dependencies-npm.sh -p \
-r "$(TARGET_ARCH)" \ -r "$(TARGET_ARCH)" \
-v "$(ELECTRON_VERSION)" \ -v "$(ELECTRON_VERSION)" \
-x $(dir $@) \ -x $| \
-t electron \ -t electron \
-s "$(TARGET_PLATFORM)" -s "$(TARGET_PLATFORM)"
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components: bower.json $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components: bower.json \
./scripts/build/dependencies-bower.sh -p -x $(dir $@) | $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies
./scripts/build/dependencies-bower.sh -p -x $|
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app: \ $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app: \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \ $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-resources-app.sh -s . -f "$(APPLICATION_FILES)" -o $@ ./scripts/build/electron-create-resources-app.sh -s . -f "$(APPLICATION_FILES)" -o $@
$(foreach prerequisite,$^,$(call execute-command,cp -rf $(prerequisite) $@)) $(foreach prerequisite,$^,$(call execute-command,cp -rf $(prerequisite) $@))
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar: \ $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar: \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-asar.sh -d $< -o $@ ./scripts/build/electron-create-asar.sh -d $< -o $@
release/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip: $(BUILD_DIRECTORY)/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip: \
| $(BUILD_DIRECTORY)
./scripts/build/electron-download-package.sh \ ./scripts/build/electron-download-package.sh \
-r "$(TARGET_ARCH)" \ -r "$(TARGET_ARCH)" \
-v "$(ELECTRON_VERSION)" \ -v "$(ELECTRON_VERSION)" \
-s "$(TARGET_PLATFORM)" \ -s "$(TARGET_PLATFORM)" \
-o $@ -o $@
release/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \ $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar \ $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar \
release/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip $(BUILD_DIRECTORY)/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip \
| $(BUILD_DIRECTORY)
ifeq ($(TARGET_PLATFORM),darwin) ifeq ($(TARGET_PLATFORM),darwin)
./scripts/build/electron-configure-package-darwin.sh -p $(word 2,$^) -a $< \ ./scripts/build/electron-configure-package-darwin.sh -p $(word 2,$^) -a $< \
-n "$(APPLICATION_NAME)" \ -n "$(APPLICATION_NAME)" \
@ -153,22 +186,25 @@ ifeq ($(TARGET_PLATFORM),linux)
-o $@ -o $@
endif endif
release/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg: \ $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg: \
release/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-readwrite-dmg-darwin.sh -p $< -o $@ \ ./scripts/build/electron-create-readwrite-dmg-darwin.sh -p $< -o $@ \
-n "$(APPLICATION_NAME)" \ -n "$(APPLICATION_NAME)" \
-i assets/icon.icns \ -i assets/icon.icns \
-b assets/osx/installer.png -b assets/osx/installer.png
release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).zip: \ $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).zip: \
release/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY)
ifdef CODE_SIGN_IDENTITY ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-app-darwin.sh -a $</$(APPLICATION_NAME).app -i "$(CODE_SIGN_IDENTITY)" ./scripts/build/electron-sign-app-darwin.sh -a $</$(APPLICATION_NAME).app -i "$(CODE_SIGN_IDENTITY)"
endif endif
./scripts/build/electron-installer-app-zip-darwin.sh -a $</$(APPLICATION_NAME).app -o $@ ./scripts/build/electron-installer-app-zip-darwin.sh -a $</$(APPLICATION_NAME).app -o $@
release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).dmg: \ $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).dmg: \
release/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg \
| $(BUILD_OUTPUT_DIRECTORY)
ifdef CODE_SIGN_IDENTITY ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-dmg-darwin.sh \ ./scripts/build/electron-sign-dmg-darwin.sh \
-n "$(APPLICATION_NAME)" \ -n "$(APPLICATION_NAME)" \
@ -177,17 +213,19 @@ ifdef CODE_SIGN_IDENTITY
endif endif
./scripts/build/electron-create-readonly-dmg-darwin.sh -d $< -o $@ ./scripts/build/electron-create-readonly-dmg-darwin.sh -d $< -o $@
release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).zip: \ $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).zip: \
release/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) \
TMPDIR=$(TEMPORARY_DIRECTORY) ./scripts/build/electron-installer-appimage-linux.sh -p $< -o $@ \ | $(BUILD_OUTPUT_DIRECTORY) $(BUILD_TEMPORARY_DIRECTORY)
TMPDIR=$(BUILD_TEMPORARY_DIRECTORY) ./scripts/build/electron-installer-appimage-linux.sh -p $< -o $@ \
-n "$(APPLICATION_NAME)" \ -n "$(APPLICATION_NAME)" \
-d "$(APPLICATION_DESCRIPTION)" \ -d "$(APPLICATION_DESCRIPTION)" \
-r "$(TARGET_ARCH)" \ -r "$(TARGET_ARCH)" \
-b "$(APPLICATION_NAME_LOWERCASE)" \ -b "$(APPLICATION_NAME_LOWERCASE)" \
-i assets/icon.png -i assets/icon.png
release/out/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb: \ $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb: \
release/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY)
./scripts/build/electron-installer-debian-linux.sh -p $< -r "$(TARGET_ARCH)" \ ./scripts/build/electron-installer-debian-linux.sh -p $< -r "$(TARGET_ARCH)" \
-c scripts/build/debian/config.json \ -c scripts/build/debian/config.json \
-o $(dir $@) -o $(dir $@)
@ -203,8 +241,8 @@ TARGETS = \
electron-develop electron-develop
ifeq ($(TARGET_PLATFORM),darwin) ifeq ($(TARGET_PLATFORM),darwin)
electron-installer-app-zip: release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip electron-installer-app-zip: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
electron-installer-dmg: release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).dmg electron-installer-dmg: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).dmg
TARGETS += \ TARGETS += \
electron-installer-dmg \ electron-installer-dmg \
electron-installer-app-zip electron-installer-app-zip
@ -214,8 +252,8 @@ PUBLISH_AWS_S3 += \
endif endif
ifeq ($(TARGET_PLATFORM),linux) ifeq ($(TARGET_PLATFORM),linux)
electron-installer-appimage: release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip electron-installer-appimage: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
electron-installer-debian: release/out/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb electron-installer-debian: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb
TARGETS += \ TARGETS += \
electron-installer-appimage \ electron-installer-appimage \
electron-installer-debian electron-installer-debian
@ -265,6 +303,6 @@ info:
@echo "Target arch : $(TARGET_ARCH)" @echo "Target arch : $(TARGET_ARCH)"
clean: clean:
rm -rf release rm -rf $(BUILD_DIRECTORY)
.DEFAULT_GOAL = help .DEFAULT_GOAL = help

View File

@ -106,7 +106,6 @@ if [ "$ARGV_PRODUCTION" == "true" ]; then
fi fi
if [ -n "$ARGV_PREFIX" ]; then if [ -n "$ARGV_PREFIX" ]; then
mkdir -p "$ARGV_PREFIX"
ln -s "$PWD/package.json" "$ARGV_PREFIX/package.json" ln -s "$PWD/package.json" "$ARGV_PREFIX/package.json"
if [ -f "$PWD/npm-shrinkwrap.json" ]; then if [ -f "$PWD/npm-shrinkwrap.json" ]; then

View File

@ -90,7 +90,6 @@ then
usage usage
fi fi
mkdir -p $(dirname "$ARGV_OUTPUT")
unzip "$ARGV_ELECTRON_PACKAGE" -d "$ARGV_OUTPUT" unzip "$ARGV_ELECTRON_PACKAGE" -d "$ARGV_OUTPUT"
APPLICATION_OUTPUT="$ARGV_OUTPUT/$ARGV_APPLICATION_NAME.app" APPLICATION_OUTPUT="$ARGV_OUTPUT/$ARGV_APPLICATION_NAME.app"

View File

@ -77,7 +77,6 @@ then
usage usage
fi fi
mkdir -p $(dirname "$ARGV_OUTPUT")
unzip "$ARGV_ELECTRON_PACKAGE" -d "$ARGV_OUTPUT" unzip "$ARGV_ELECTRON_PACKAGE" -d "$ARGV_OUTPUT"
mv $ARGV_OUTPUT/electron $ARGV_OUTPUT/$(echo "$ARGV_APPLICATION_NAME" | tr '[:upper:]' '[:lower:]') mv $ARGV_OUTPUT/electron $ARGV_OUTPUT/$(echo "$ARGV_APPLICATION_NAME" | tr '[:upper:]' '[:lower:]')

View File

@ -53,8 +53,6 @@ if [ -z "$ARGV_DIRECTORY" ] || [ -z "$ARGV_OUTPUT" ]; then
usage usage
fi fi
mkdir -p $(dirname "$ARGV_OUTPUT")
# Omit `*.dll` and `*.node` files from the # Omit `*.dll` and `*.node` files from the
# asar package, otherwise `process.dlopen` and # asar package, otherwise `process.dlopen` and
# `module.require` can't load them correctly. # `module.require` can't load them correctly.

View File

@ -61,7 +61,6 @@ fi
# Convert temporary DMG image into a production-ready # Convert temporary DMG image into a production-ready
# compressed and read-only DMG image. # compressed and read-only DMG image.
mkdir -p "$(dirname "$ARGV_OUTPUT")"
hdiutil convert "$ARGV_APPLICATION_DMG" \ hdiutil convert "$ARGV_APPLICATION_DMG" \
-format UDZO \ -format UDZO \
-imagekey zlib-level=9 \ -imagekey zlib-level=9 \

View File

@ -73,7 +73,6 @@ ELECTRON_DOWNLOADS_BASEURL="$ELECTRON_GITHUB_REPOSITORY/releases/download/v$ARGV
ELECTRON_FILENAME="electron-v$ARGV_ELECTRON_VERSION-$ARGV_OPERATING_SYSTEM-$ELECTRON_ARCHITECTURE.zip" ELECTRON_FILENAME="electron-v$ARGV_ELECTRON_VERSION-$ARGV_OPERATING_SYSTEM-$ELECTRON_ARCHITECTURE.zip"
ELECTRON_CHECKSUM=$(wget --no-check-certificate -O - "$ELECTRON_DOWNLOADS_BASEURL/SHASUMS256.txt" | grep "$ELECTRON_FILENAME" | cut -d ' ' -f 1) ELECTRON_CHECKSUM=$(wget --no-check-certificate -O - "$ELECTRON_DOWNLOADS_BASEURL/SHASUMS256.txt" | grep "$ELECTRON_FILENAME" | cut -d ' ' -f 1)
mkdir -p $(dirname $ARGV_OUTPUT)
./scripts/build/download-tool.sh \ ./scripts/build/download-tool.sh \
-u "$ELECTRON_DOWNLOADS_BASEURL/$ELECTRON_FILENAME" \ -u "$ELECTRON_DOWNLOADS_BASEURL/$ELECTRON_FILENAME" \
-c "$ELECTRON_CHECKSUM" \ -c "$ELECTRON_CHECKSUM" \

View File

@ -59,7 +59,6 @@ if [ -z "$ARGV_APPLICATION" ] || [ -z "$ARGV_OUTPUT" ]; then
usage usage
fi fi
mkdir -p "$(dirname "$ARGV_OUTPUT")"
CWD=$(pwd) CWD=$(pwd)
pushd "$(dirname "$ARGV_APPLICATION")" pushd "$(dirname "$ARGV_APPLICATION")"
zip -r -9 "$CWD/$ARGV_OUTPUT" "$(basename "$ARGV_APPLICATION")" zip -r -9 "$CWD/$ARGV_OUTPUT" "$(basename "$ARGV_APPLICATION")"

View File

@ -83,15 +83,11 @@ then
usage usage
fi fi
if [ -z "$TMPDIR" ]; then TEMPORARY_DIRECTORY=$(mktemp -d)
TMPDIR=$(mktemp -d)
fi
mkdir -p "$TMPDIR"
OUTPUT_FILENAME="$ARGV_APPLICATION_NAME-linux-$ARGV_ARCHITECTURE.AppImage" OUTPUT_FILENAME="$ARGV_APPLICATION_NAME-linux-$ARGV_ARCHITECTURE.AppImage"
# Create AppDir # Create AppDir
APPDIR_PATH=$TMPDIR/${OUTPUT_FILENAME%.*}.AppDir APPDIR_PATH=$TEMPORARY_DIRECTORY/${OUTPUT_FILENAME%.*}.AppDir
APPDIR_ICON_FILENAME=icon APPDIR_ICON_FILENAME=icon
rm -rf "$APPDIR_PATH" rm -rf "$APPDIR_PATH"
mkdir -p "$APPDIR_PATH/usr/bin" mkdir -p "$APPDIR_PATH/usr/bin"
@ -124,7 +120,6 @@ else
fi fi
# Generate AppImage # Generate AppImage
mkdir -p "$(dirname "$ARGV_OUTPUT")"
rm -f "$ARGV_OUTPUT" rm -f "$ARGV_OUTPUT"
APPIMAGES_TAG=6 APPIMAGES_TAG=6

View File

@ -78,7 +78,6 @@ else
exit 1 exit 1
fi fi
mkdir -p "$ARGV_OUTPUT"
cp scripts/build/debian/etcher-electron.sh "$ARGV_DIRECTORY" cp scripts/build/debian/etcher-electron.sh "$ARGV_DIRECTORY"
electron-installer-debian \ electron-installer-debian \
--src "$ARGV_DIRECTORY" \ --src "$ARGV_DIRECTORY" \

View File

@ -98,9 +98,6 @@ else
exit 1 exit 1
fi fi
rm -rf "$ARGV_OUTPUT"
mkdir -p "$ARGV_OUTPUT"
browserify "$ARGV_ENTRY_POINT" --node --outfile "$ARGV_OUTPUT/index.js" browserify "$ARGV_ENTRY_POINT" --node --outfile "$ARGV_OUTPUT/index.js"
BINARY_LOCATION="$ARGV_OUTPUT/$ARGV_APPLICATION_NAME" BINARY_LOCATION="$ARGV_OUTPUT/$ARGV_APPLICATION_NAME"
./scripts/build/download-tool.sh -x \ ./scripts/build/download-tool.sh -x \