BUILD_ARGS?=
JOBS?=$(shell nproc)

.DEFAULT_GOAL := all
ALL_TARGETS:= nginx
cli_image_types:=cli dev-cli dev-cli-xdebug dev-cli-excimer dev-cov dev-n98 
fpm_image_types:=fpm dev-fpm dev-fpm-xdebug dev-fpm-excimer
php_versions:=7.4 8.0 8.1

.PHONY: nginx
nginx: pull-nginx
	docker build $(BUILD_ARGS) "./nginx" \
		--progress plain \
		-t "magento-lts/nginx:latest"

.PHONY: pull-nginx
pull-nginx:
	docker pull nginx:latest

define GEN_CLI_RULE
.PHONY: build-php-$(php_version)-$(cli_image_type)
build-php-$(php_version)-$(cli_image_type) : pull-php-$(php_version)-cli-alpine
	docker build $(BUILD_ARGS) "./php" \
		--progress plain \
		--build-arg BASE_IMAGE="php:$(php_version)-cli-alpine" \
		--build-arg JOBS="$(JOBS)" \
		--target "php-$(cli_image_type)" \
		-t "magento-lts/php:$(php_version)-$(cli_image_type)"
endef

define GEN_FPM_RULE
.PHONY: build-php-$(php_version)-$(fpm_image_type)
build-php-$(php_version)-$(fpm_image_type) : pull-php-$(php_version)-fpm-alpine
	docker build $(BUILD_ARGS) "./php" \
		--progress plain \
		--build-arg BASE_IMAGE="php:$(php_version)-fpm-alpine" \
		--build-arg JOBS="$(JOBS)" \
		--target "php-$(fpm_image_type)" \
		-t "magento-lts/php:$(php_version)-$(fpm_image_type)"
endef

define GEN_ALL
all: $(ALL_TARGETS)
endef

ALL_TARGETS += $(foreach php_version,$(php_versions),\
  $(foreach cli_image_type, $(cli_image_types), \
    $(eval $(GEN_CLI_RULE)) \
    build-php-$(php_version)-$(cli_image_type) \
  ) \
  $(foreach fpm_image_type, $(fpm_image_types), \
    $(eval $(GEN_FPM_RULE)) \
    build-php-$(php_version)-$(fpm_image_type) \
  ) \
)

$(eval $(GEN_ALL))

.PHONY: pull-php-%
pull-php-%:
	docker pull php:$*
