1111# Please report bugs to francis.pelletier@mila.quebec
1212# #######################################################################################
1313
14+ .DEFAULT_GOAL := help
15+
1416# Basic variables
1517PROJECT_PATH := $(dir $(abspath $(firstword $(MAKEFILE_LIST ) ) ) )
1618MAKEFILE_NAME := $(word $(words $(MAKEFILE_LIST ) ) ,$(MAKEFILE_LIST ) )
1719SHELL := /usr/bin/env bash
1820BUMP_TOOL := bump-my-version
19- MAKEFILE_VERSION := 0.7.1
21+ MAKEFILE_VERSION := 1.2.0
2022DOCKER_COMPOSE ?= docker compose
2123AUTO_INSTALL ?=
2224
@@ -26,24 +28,102 @@ CONDA_TOOL := conda
2628CONDA_ENVIRONMENT ?=
2729CONDA_YES_OPTION ?=
2830
29- # Default environment to install package
30- # Can be overridden in Makefile.private file
31- DEFAULT_INSTALL_ENV ?=
32- DEFAULT_POETRY_INSTALL_ENV ?=
33-
34- # Colors
35- _SECTION := \033[1m\033[34m
36- _TARGET := \033[36m
37- _NORMAL := \033[0m
38-
39- .DEFAULT_GOAL := help
31+ # Default variables (if Makefile.variables is missing)
32+ APP_VERSION := 0.0.0
33+ APPLICATION_NAME := src
34+ PYTHON_VERSION := 3.12
35+ DEFAULT_INSTALL_ENV := uv
36+ DEFAULT_BUILD_TOOL := uv
37+ TARGET_GROUPS := lint,test
38+ CONDA_ENVIRONMENT := src-env
39+
40+ # Targets Colors
41+ _ESC := $(shell printf '\033')
42+ _SECTION := $(_ESC ) [1m\033[34m
43+ _BLUE := $(_ESC ) [1m\033[34m
44+ _TARGET := $(_ESC ) [1m\033[36m
45+ _CYAN := $(_ESC ) [36m
46+ _NORMAL := $(_ESC ) [0m
47+ _WARNING := $(_ESC ) [1;39;41m
48+
49+ WARNING := $(_WARNING ) -- WARNING -- $(_NORMAL )
4050
4151# Project and Private variables and targets import to override variables for local
4252# This is to make sure, sometimes the Makefile includes don't work.
4353-include Makefile.variables
4454-include Makefile.private
55+
56+ contains = $(if $(findstring $(1 ) ,$(2 ) ) ,true)
57+ not_in = $(if $(findstring $(1 ) ,$(2 ) ) ,,true)
58+
59+ INSTALL_ENV_IS_VENV := $(call contains,venv,$(DEFAULT_INSTALL_ENV ) )
60+ INSTALL_ENV_IS_UV := $(call contains,uv,$(DEFAULT_INSTALL_ENV ) )
61+ INSTALL_ENV_IS_POETRY := $(call contains,poetry,$(DEFAULT_INSTALL_ENV ) )
62+ INSTALL_ENV_IS_CONDA := $(call contains,conda,$(DEFAULT_INSTALL_ENV ) )
63+
64+ BUILD_TOOL_IS_UV := $(call contains,uv,$(DEFAULT_BUILD_TOOL ) )
65+ BUILD_TOOL_IS_POETRY := $(call contains,poetry,$(DEFAULT_BUILD_TOOL ) )
66+
67+ CONDA_CONFLICT := $(and $(INSTALL_ENV_IS_CONDA ) ,$(BUILD_TOOL_IS_UV ) )
68+ UV_CONFLICT := $(and $(INSTALL_ENV_IS_POETRY ) ,$(BUILD_TOOL_IS_UV ) )
69+ POETRY_CONFLICT := $(and $(INSTALL_ENV_IS_UV ) ,$(BUILD_TOOL_IS_POETRY ) )
70+ PLEASE_FIX_CONFLICT_MSG := Please fix the conflict in your [Makefile.variables] and/or [Makefile.private] file(s)
71+
72+ IS_MAKEFILE_VARIABLES_MISSING := $(call not_in,Makefile.variables,$(MAKEFILE_LIST ) )
73+ PLEASE_FIX_MISSING_FILE := Please consider adding a [Makefile.variables] file to your project - See lab-advanced-template for more info
74+
75+ TAG_WARN := $(_WARNING ) -- WARNING -- $(_NORMAL )
76+
77+ check_configs = $(if $($(1 ) ) , \
78+ $(info ) \
79+ $(info $(TAG_WARN ) $(2 ) ) \
80+ $(info $(PLEASE_FIX_CONFLICT_MSG ) ) \
81+ $(info ) \
82+ )
83+
84+ check_files = $(if $($(1 ) ) , \
85+ $(info ) \
86+ $(info $(TAG_WARN ) $(2 ) ) \
87+ $(info $(PLEASE_FIX_MISSING_FILE ) ) \
88+ $(info ) \
89+ )
90+
91+ # Config Checks
92+ # These run immediately when you type 'make'
93+ $(call check_configs,CONDA_CONFLICT,'conda' environment is enabled while using 'uv')
94+ $(call check_configs,UV_CONFLICT,'poetry' environment is enabled while using 'uv')
95+ $(call check_configs,POETRY_CONFLICT,'uv' environment is enabled while using 'poetry')
96+ $(call check_files,IS_MAKEFILE_VARIABLES_MISSING,The configuration file 'Makefile.variables' is missing - Using default values)
97+
98+
99+ # # -- Initialization targets ---------------------------------------------------------------------------------------- ##
100+ .PHONY : project-init
101+ project-init : # # Initialize the project from the template - Only run once!
102+ @python3 $(PROJECT_PATH ) .make/scripts/auto_init_script.py
103+
104+ .PHONY : project-init-dry-run
105+ project-init-dry : # # Test run: no changes will be made - Initialize the project from the template
106+ @python3 $(PROJECT_PATH ) .make/scripts/auto_init_script.py --dry
107+
108+
45109# # -- Informative targets ------------------------------------------------------------------------------------------- ##
46110
111+ .PHONY : info
112+ info : # # Get project configuration info
113+ @echo " "
114+ @echo -e " $( _BLUE) --- Configuration Status ---$( _NORMAL) "
115+ @echo " "
116+ @echo -e " $( _CYAN) Application Name$( _NORMAL) : $( APPLICATION_NAME) "
117+ @echo -e " $( _CYAN) Application version$( _NORMAL) : $( APP_VERSION) "
118+ @echo -e " $( _CYAN) Application Root$( _NORMAL) : [$( PROJECT_PATH) ]"
119+ @echo -e " $( _CYAN) Application package$( _NORMAL) : [$( PROJECT_PATH) src/$( APPLICATION_NAME) ]"
120+ @echo -e " $( _CYAN) Environment manager$( _NORMAL) : $( DEFAULT_INSTALL_ENV) "
121+ @echo -e " $( _CYAN) Build tool$( _NORMAL) : $( DEFAULT_BUILD_TOOL) "
122+ @echo -e " $( _CYAN) Python version$( _NORMAL) : $( PYTHON_VERSION) "
123+ @echo -e " $( _CYAN) Active makefile targets$( _NORMAL) : [$( TARGET_GROUPS) ]"
124+ @echo -e " $( _CYAN) Makefile version$( _NORMAL) : $( MAKEFILE_VERSION) "
125+
126+
47127.PHONY : all
48128all : help
49129
@@ -78,7 +158,8 @@ targets: help
78158
79159.PHONY : version
80160version : # # display current version
81- @echo " version: $( APP_VERSION) "
161+ @echo -e " $( _CYAN) Application version$( _NORMAL) : $( APP_VERSION) "
162+ @echo -e " $( _CYAN) Makefile version$( _NORMAL) : $( MAKEFILE_VERSION) "
82163
83164# # -- Virtualenv targets -------------------------------------------------------------------------------------------- ##
84165
@@ -138,15 +219,15 @@ dry: ## Add the dry target for a preview of changes; ex. 'make bump-major dry'
138219
139220.PHONY : bump-major
140221bump-major : # # Bump application major version <X.0.0>
141- $(BUMP_TOOL ) bump $(BUMP_ARGS ) major
222+ @ $( ENV_COMMAND_TOOL ) $(BUMP_TOOL ) bump $(BUMP_ARGS ) major
142223
143224.PHONY : bump-minor
144225bump-minor : # # Bump application minor version <0.X.0>
145- $(BUMP_TOOL ) bump $(BUMP_ARGS ) minor
226+ @ $( ENV_COMMAND_TOOL ) $(BUMP_TOOL ) bump $(BUMP_ARGS ) minor
146227
147228.PHONY : bump-patch
148229bump-patch : # # Bump application patch version <0.0.X>
149- $(BUMP_TOOL ) bump $(BUMP_ARGS ) patch
230+ @ $( ENV_COMMAND_TOOL ) $(BUMP_TOOL ) bump $(BUMP_ARGS ) patch
150231
151232
152233
0 commit comments