purescript-httpurple/Makefile
2017-07-10 12:06:14 -07:00

125 lines
3.3 KiB
Makefile

# Configuration for Make
MAKEFLAGS += --warn-undefined-variables
.DEFAULT_GOAL := help
.PHONY: clean test repl example help
.SILENT:
# Executables used in this makefile
PULP := pulp
BOWER := bower
NODE := node
NPM := npm
# Package manifest files
BOWERJSON := bower.json
PACKAGEJSON := package.json
# Various input directories
SRCPATH := ./Library
TESTPATH := ./Test
OUTPUT := ./Output
DOCS := ./Documentation
EXAMPLESPATH := $(DOCS)/Examples
EXAMPLEPATH := $(EXAMPLESPATH)/$(EXAMPLE)
# Various output directories
BUILD := $(OUTPUT)/Build
COMPONENTS := $(OUTPUT)/Components
MODULES := $(OUTPUT)/node_modules
OUTPUT_DOCS := $(OUTPUT)/Documentation
OUTPUT_EXAMPLE := $(OUTPUT)/Examples/$(EXAMPLE)
# The entry point for the compiled example, if an EXAMPLE is specified
EXAMPLE_INDEX := $(OUTPUT_EXAMPLE)/index.js
# Globs that match all source files
SOURCES := $(SRCPATH)/**/*
TESTSOURCES := $(TESTPATH)/**/*
EXAMPLESOURCES := $(EXAMPLESPATH)/**/*
# This is the module name for the entry point for the test suite
TESTMAIN := HTTPure.HTTPureSpec
$(MODULES): $(PACKAGEJSON)
$(NPM) install
mv node_modules $(MODULES)
# Install bower components
$(COMPONENTS): $(BOWERJSON)
$(BOWER) install
# Build the source files
$(BUILD): $(COMPONENTS) $(MODULES) $(SOURCES)
$(PULP) build \
--src-path $(SRCPATH) \
--build-path $(BUILD)
touch $(BUILD)
build: $(BUILD)
# Create the example output directory for the example in the environment
# variable EXAMPLE
$(OUTPUT_EXAMPLE):
mkdir -p $(OUTPUT_EXAMPLE)
# Build the example specified by the environment variable EXAMPLE
$(EXAMPLE_INDEX): $(OUTPUT_EXAMPLE) $(BUILD) $(EXAMPLEPATH)/Main.purs
$(PULP) build \
--src-path $(EXAMPLEPATH) \
--include $(SRCPATH) \
--build-path $(BUILD) \
--main $(EXAMPLE) \
--to $(EXAMPLE_INDEX)
# Run the example specified by the environment variable EXAMPLE
ifeq ($(EXAMPLE),)
example:
$(info You must supply a value in the environment variable EXAMPLE)
$(info )
$(info Available examples:)
ls -1 $(EXAMPLESPATH) | sed 's/^/ - /'
else
example: $(BUILD) $(EXAMPLE_INDEX)
$(NODE) $(EXAMPLE_INDEX)
endif
# Run the test suite
test: $(BUILD) $(TESTSOURCES) $(EXAMPLESOURCES)
$(PULP) test \
--src-path $(SRCPATH) \
--test-path $(TESTPATH) \
--include $(EXAMPLESPATH) \
--build-path $(BUILD) \
--main $(TESTMAIN)
# Launch a repl with all modules loaded
repl: $(COMPONENTS) $(MODULES) $(SOURCES) $(TESTSOURCES) $(EXAMPLESOURCES)
$(PULP) repl \
--include $(EXAMPLESPATH) \
--src-path $(SRCPATH) \
--test-path $(TESTPATH)
# Remove all make output from the source tree
clean:
rm -rf $(OUTPUT)
# Print out a description of all the supported tasks
help:
$(info HTTPure make utility)
$(info )
$(info Usage: make [ test | docs | example | repl | clean | help ])
$(info )
$(info - make test Run the test suite)
$(info - make docs Build the documentation into $(OUTPUT_DOCS))
$(info - make example Run the example in environment variable EXAMPLE)
$(info - make repl Launch a repl with all project code loaded)
$(info - make clean Remove all build files)
$(info - make help Print this help)
# Build the documentation
$(OUTPUT_DOCS): $(COMPONENTS) $(MODULES) $(SOURCES)
$(PULP) docs \
--src-path $(SRCPATH)
rm -rf $(OUTPUT_DOCS)
mv generated-docs $(OUTPUT_DOCS)
docs: $(OUTPUT_DOCS)