packages feed

updo-1.0.0: alternatives/yaml2stack/Makefile

# When the prerequisites are a function and a list, we echo a dhall expression
# that calls this function with the list. Both function and list are in dhall
# files that must be ./ prefixed to be imported into the expression.
#
# $(^:%=./%) does the ./ prefixing that dhall needs to recognize the imports.
#
# "The import resolution phase replaces all imports with the expression located
# at that import, transitively resolving imports within the imported expression
# if necessary."
# SOURCE:https://github.com/dhall-lang/dhall-lang/blob/master/standard/imports.md#import-resolution-judgment

UPDO_TMP := .updo
Y2S_TMP := $(UPDO_TMP)/dhall2yaml2stack

.PHONY: dhall2yaml2stack-projects
dhall2yaml2stack-projects: \
  ghc-$(GHC_VERSION).dhall2yaml2stack.yaml \
  ghc-$(GHC_VERSION).dhall2yaml2stack.yaml.lock \
  ghc-$(GHC_UPGRADE).dhall2yaml2stack.yaml \
  ghc-$(GHC_UPGRADE).dhall2yaml2stack.yaml.lock

.INTERMEDIATE: $(Y2S_TMP)/ghc-$(GHC_VERSION)/base.yaml
$(Y2S_TMP)/ghc-$(GHC_VERSION)/base.yaml: \
  project-dhall/ghc-$(GHC_VERSION)/text-templates/stacksnippet.dhall
	mkdir -p $(@D) && echo '$(<:%=./%) (Some "$(STACKAGE_VERSION)" : Optional Text)' | dhall text --output $@

.INTERMEDIATE: $(Y2S_TMP)/ghc-$(GHC_UPGRADE)/base.yaml
$(Y2S_TMP)/ghc-$(GHC_UPGRADE)/base.yaml: \
  project-dhall/ghc-$(GHC_UPGRADE)/text-templates/stacksnippet.dhall
	mkdir -p $(@D) && echo '$(<:%=./%) (Some "$(STACKAGE_UPGRADE)" : Optional Text)' | dhall text --output $@

# Mirror pkgs from dhall to yaml.
.INTERMEDIATE: $(Y2S_TMP)/ghc-$(GHC_VERSION)/pkgs.yaml
$(Y2S_TMP)/ghc-$(GHC_VERSION)/pkgs.yaml: \
  updo/text-templates/yaml2stack/pkgs.dhall \
  $(UPDO_TMP)/pkgs-sorted.dhall
	echo "$(^:%=./%)" | dhall text --output $@

.INTERMEDIATE: $(Y2S_TMP)/ghc-$(GHC_UPGRADE)/pkgs.yaml
$(Y2S_TMP)/ghc-$(GHC_UPGRADE)/pkgs.yaml: \
  updo/text-templates/yaml2stack/pkgs.dhall \
  $(UPDO_TMP)/pkgs-upgrade-done.dhall
	echo "$(^:%=./%)" | dhall text --output $@

# Mirror constraints from dhall to yaml.
$(Y2S_TMP)/ghc-%/constraints.yaml: \
  updo/text-templates/yaml2stack/constraints.dhall \
  project-dhall/ghc-%/constraints.dhall
	echo "$(^:%=./%)" | dhall text --output $@

# Mirror source repositories from dhall to yaml.
$(Y2S_TMP)/ghc-%.yaml: \
  updo/text-templates/yaml2stack/repo-items.dhall \
  project-dhall/ghc-%.dhall
	echo "$(^:%=./%)" | dhall text --output $@

# Join the YAML fragments into a single file, the stack project.
ghc-%.dhall2yaml2stack.yaml: \
  $(Y2S_TMP)/ghc-%/base.yaml \
  $(Y2S_TMP)/ghc-%/pkgs.yaml \
  $(Y2S_TMP)/ghc-%/constraints.yaml \
  $(Y2S_TMP)/ghc-%/deps-external.yaml \
  $(Y2S_TMP)/ghc-%/deps-internal.yaml \
  $(Y2S_TMP)/ghc-%/forks-external.yaml \
  $(Y2S_TMP)/ghc-%/forks-internal.yaml \
  updo/alternatives/yaml2stack/join-sort-fragments.sh
	./updo/alternatives/yaml2stack/join-sort-fragments.sh $(<D) >$@

ghc-%.dhall2yaml2stack.yaml.lock: ghc-%.dhall2yaml2stack.yaml
	stack build --test --no-run-tests --bench --no-run-benchmarks --dry-run --stack-yaml $<

# To keep dhall to yaml intermediate files, uncomment the following (no need to
# comment out the .INTERMEDIATE lines above):
# .SECONDARY: $(wildcard $(Y2S_TMP)/*.yaml)