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
# ---------------------------------------------------------------------
@ -89,7 +105,6 @@ ifeq ($(TARGET_ARCH),x64)
TARGET_ARCH_DEBIAN = amd64
endif
TEMPORARY_DIRECTORY = release/.tmp
APPLICATION_NAME_LOWERCASE = $(shell echo $(APPLICATION_NAME) | tr A-Z a-z)
APPLICATION_VERSION_DEBIAN = $(shell echo $(APPLICATION_VERSION) | tr "-" "~")
@ -104,37 +119,55 @@ define execute-command
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 \
-r "$(TARGET_ARCH)" \
-v "$(ELECTRON_VERSION)" \
-x $(dir $@) \
-x $| \
-t electron \
-s "$(TARGET_PLATFORM)"
release/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/bower_components: bower.json \
| $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies
./scripts/build/dependencies-bower.sh -p -x $|
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app: \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app: \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-resources-app.sh -s . -f "$(APPLICATION_FILES)" -o $@
$(foreach prerequisite,$^,$(call execute-command,cp -rf $(prerequisite) $@))
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar: \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar: \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app \
| $(BUILD_DIRECTORY)
./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 \
-r "$(TARGET_ARCH)" \
-v "$(ELECTRON_VERSION)" \
-s "$(TARGET_PLATFORM)" \
-o $@
release/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \
release/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar \
release/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar \
$(BUILD_DIRECTORY)/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip \
| $(BUILD_DIRECTORY)
ifeq ($(TARGET_PLATFORM),darwin)
./scripts/build/electron-configure-package-darwin.sh -p $(word 2,$^) -a $< \
-n "$(APPLICATION_NAME)" \
@ -153,22 +186,25 @@ ifeq ($(TARGET_PLATFORM),linux)
-o $@
endif
release/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg: \
release/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH)
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-readwrite-dmg-darwin.sh -p $< -o $@ \
-n "$(APPLICATION_NAME)" \
-i assets/icon.icns \
-b assets/osx/installer.png
release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).zip: \
release/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH)
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).zip: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY)
ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-app-darwin.sh -a $</$(APPLICATION_NAME).app -i "$(CODE_SIGN_IDENTITY)"
endif
./scripts/build/electron-installer-app-zip-darwin.sh -a $</$(APPLICATION_NAME).app -o $@
release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).dmg: \
release/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).dmg: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg \
| $(BUILD_OUTPUT_DIRECTORY)
ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-dmg-darwin.sh \
-n "$(APPLICATION_NAME)" \
@ -177,17 +213,19 @@ ifdef CODE_SIGN_IDENTITY
endif
./scripts/build/electron-create-readonly-dmg-darwin.sh -d $< -o $@
release/out/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).zip: \
release/$(APPLICATION_NAME)-linux-$(TARGET_ARCH)
TMPDIR=$(TEMPORARY_DIRECTORY) ./scripts/build/electron-installer-appimage-linux.sh -p $< -o $@ \
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).zip: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY) $(BUILD_TEMPORARY_DIRECTORY)
TMPDIR=$(BUILD_TEMPORARY_DIRECTORY) ./scripts/build/electron-installer-appimage-linux.sh -p $< -o $@ \
-n "$(APPLICATION_NAME)" \
-d "$(APPLICATION_DESCRIPTION)" \
-r "$(TARGET_ARCH)" \
-b "$(APPLICATION_NAME_LOWERCASE)" \
-i assets/icon.png
release/out/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb: \
release/$(APPLICATION_NAME)-linux-$(TARGET_ARCH)
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY)
./scripts/build/electron-installer-debian-linux.sh -p $< -r "$(TARGET_ARCH)" \
-c scripts/build/debian/config.json \
-o $(dir $@)
@ -203,8 +241,8 @@ TARGETS = \
electron-develop
ifeq ($(TARGET_PLATFORM),darwin)
electron-installer-app-zip: release/out/$(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-app-zip: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
electron-installer-dmg: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).dmg
TARGETS += \
electron-installer-dmg \
electron-installer-app-zip
@ -214,8 +252,8 @@ PUBLISH_AWS_S3 += \
endif
ifeq ($(TARGET_PLATFORM),linux)
electron-installer-appimage: release/out/$(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-appimage: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
electron-installer-debian: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb
TARGETS += \
electron-installer-appimage \
electron-installer-debian
@ -265,6 +303,6 @@ info:
@echo "Target arch : $(TARGET_ARCH)"
clean:
rm -rf release
rm -rf $(BUILD_DIRECTORY)
.DEFAULT_GOAL = help

View File

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

View File

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

View File

@ -77,7 +77,6 @@ then
usage
fi
mkdir -p $(dirname "$ARGV_OUTPUT")
unzip "$ARGV_ELECTRON_PACKAGE" -d "$ARGV_OUTPUT"
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
fi
mkdir -p $(dirname "$ARGV_OUTPUT")
# Omit `*.dll` and `*.node` files from the
# asar package, otherwise `process.dlopen` and
# `module.require` can't load them correctly.

View File

@ -61,7 +61,6 @@ fi
# Convert temporary DMG image into a production-ready
# compressed and read-only DMG image.
mkdir -p "$(dirname "$ARGV_OUTPUT")"
hdiutil convert "$ARGV_APPLICATION_DMG" \
-format UDZO \
-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_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 \
-u "$ELECTRON_DOWNLOADS_BASEURL/$ELECTRON_FILENAME" \
-c "$ELECTRON_CHECKSUM" \

View File

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

View File

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

View File

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

View File

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