diff --git a/Makefile b/Makefile index 2cbedaf0b1..a4ff07fb77 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,6 @@ -THIS_DIR = $(shell pwd) +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(dir $(MAKEFILE_PATH)) + filter-false = $(strip $(filter-out 0 off OFF false FALSE,$1)) filter-true = $(strip $(filter-out 1 on ON true TRUE,$1)) @@ -12,6 +14,7 @@ CMAKE_BUILD_TYPE ?= Debug CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) # Extra CMake flags which extend the default set CMAKE_EXTRA_FLAGS ?= +NVIM_PRG := $(MAKEFILE_DIR)/build/bin/nvim # CMAKE_INSTALL_PREFIX # - May be passed directly or as part of CMAKE_EXTRA_FLAGS. @@ -35,7 +38,7 @@ else checkprefix: ; endif -BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \ +CMAKE_GENERATOR ?= $(shell (command -v ninja > /dev/null 2>&1 && echo "Ninja") || \ echo "Unix Makefiles") DEPS_BUILD_DIR ?= .deps ifneq (1,$(words [$(DEPS_BUILD_DIR)])) @@ -43,7 +46,7 @@ ifneq (1,$(words [$(DEPS_BUILD_DIR)])) endif ifeq (,$(BUILD_TOOL)) - ifeq (Ninja,$(BUILD_TYPE)) + ifeq (Ninja,$(CMAKE_GENERATOR)) ifneq ($(shell $(CMAKE_PRG) --help 2>/dev/null | grep Ninja),) BUILD_TOOL := ninja else @@ -56,16 +59,15 @@ ifeq (,$(BUILD_TOOL)) endif endif -BUILD_CMD = $(BUILD_TOOL) # Only need to handle Ninja here. Make will inherit the VERBOSE variable, and the -j and -n flags. -ifeq ($(BUILD_TYPE),Ninja) +ifeq ($(CMAKE_GENERATOR),Ninja) ifneq ($(VERBOSE),) - BUILD_CMD += -v + BUILD_TOOL += -v endif - BUILD_CMD += $(shell printf '%s' '$(MAKEFLAGS)' | grep -o -- '-j[0-9]\+') + BUILD_TOOL += $(shell printf '%s' '$(MAKEFLAGS)' | grep -o -- '-j[0-9]\+') ifeq (n,$(findstring n,$(firstword -$(MAKEFLAGS)))) - BUILD_CMD += -n + BUILD_TOOL += -n endif endif @@ -87,22 +89,22 @@ endif SINGLE_MAKE = export MAKEFLAGS= ; $(MAKE) nvim: build/.ran-cmake deps - +$(BUILD_CMD) -C build + +$(BUILD_TOOL) -C build libnvim: build/.ran-cmake deps - +$(BUILD_CMD) -C build libnvim + +$(BUILD_TOOL) -C build libnvim cmake: touch CMakeLists.txt $(MAKE) build/.ran-cmake build/.ran-cmake: | deps - cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) $(THIS_DIR) + cd build && $(CMAKE_PRG) -G '$(CMAKE_GENERATOR)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) $(MAKEFILE_DIR) touch $@ deps: | build/.ran-third-party-cmake ifeq ($(call filter-true,$(USE_BUNDLED)),) - +$(BUILD_CMD) -C $(DEPS_BUILD_DIR) + +$(BUILD_TOOL) -C $(DEPS_BUILD_DIR) endif ifeq ($(call filter-true,$(USE_BUNDLED)),) @@ -110,8 +112,8 @@ $(DEPS_BUILD_DIR): mkdir -p "$@" build/.ran-third-party-cmake:: $(DEPS_BUILD_DIR) cd $(DEPS_BUILD_DIR) && \ - $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \ - $(DEPS_CMAKE_FLAGS) $(THIS_DIR)/third-party + $(CMAKE_PRG) -G '$(CMAKE_GENERATOR)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \ + $(DEPS_CMAKE_FLAGS) $(MAKEFILE_DIR)/third-party endif build/.ran-third-party-cmake:: mkdir -p build @@ -121,31 +123,31 @@ build/.ran-third-party-cmake:: oldtest: | nvim build/runtime/doc/tags +$(SINGLE_MAKE) -C src/nvim/testdir clean ifeq ($(strip $(TEST_FILE)),) - +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" $(MAKEOVERRIDES) + +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG=$(NVIM_PRG) $(MAKEOVERRIDES) else @# Handle TEST_FILE=test_foo{,.res,.vim}. - +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" SCRIPTS= $(MAKEOVERRIDES) $(patsubst %.vim,%,$(patsubst %.res,%,$(TEST_FILE))) + +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG=$(NVIM_PRG) SCRIPTS= $(MAKEOVERRIDES) $(patsubst %.vim,%,$(patsubst %.res,%,$(TEST_FILE))) endif # Build oldtest by specifying the relative .vim filename. .PHONY: phony_force src/nvim/testdir/%.vim: phony_force - +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" SCRIPTS= $(MAKEOVERRIDES) $(patsubst src/nvim/testdir/%.vim,%,$@) + +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG=$(NVIM_PRG) SCRIPTS= $(MAKEOVERRIDES) $(patsubst src/nvim/testdir/%.vim,%,$@) build/runtime/doc/tags helptags: | nvim - +$(BUILD_CMD) -C build runtime/doc/tags + +$(BUILD_TOOL) -C build runtime/doc/tags # Builds help HTML _and_ checks for invalid help tags. helphtml: | nvim build/runtime/doc/tags - +$(BUILD_CMD) -C build doc_html + +$(BUILD_TOOL) -C build doc_html functionaltest: | nvim - +$(BUILD_CMD) -C build functionaltest + +$(BUILD_TOOL) -C build functionaltest functionaltest-lua: | nvim - +$(BUILD_CMD) -C build functionaltest-lua + +$(BUILD_TOOL) -C build functionaltest-lua lualint: | build/.ran-cmake deps - $(BUILD_CMD) -C build lualint + $(BUILD_TOOL) -C build lualint shlint: @shellcheck --version | head -n 2 @@ -171,15 +173,15 @@ _opt_commitlint: || echo "SKIP: commitlint (build/bin/nvim not found)" unittest: | nvim - +$(BUILD_CMD) -C build unittest + +$(BUILD_TOOL) -C build unittest benchmark: | nvim - +$(BUILD_CMD) -C build benchmark + +$(BUILD_TOOL) -C build benchmark test: functionaltest unittest clean: - +test -d build && $(BUILD_CMD) -C build clean || true + +test -d build && $(BUILD_TOOL) -C build clean || true $(MAKE) -C src/nvim/testdir clean $(MAKE) -C runtime/doc clean $(MAKE) -C runtime/indent clean @@ -189,19 +191,19 @@ distclean: $(MAKE) clean install: checkprefix nvim - +$(BUILD_CMD) -C build install + +$(BUILD_TOOL) -C build install clint: build/.ran-cmake - +$(BUILD_CMD) -C build clint + +$(BUILD_TOOL) -C build clint clint-full: build/.ran-cmake - +$(BUILD_CMD) -C build clint-full + +$(BUILD_TOOL) -C build clint-full check-single-includes: build/.ran-cmake - +$(BUILD_CMD) -C build check-single-includes + +$(BUILD_TOOL) -C build check-single-includes generated-sources: build/.ran-cmake - +$(BUILD_CMD) -C build generated-sources + +$(BUILD_TOOL) -C build generated-sources appimage: bash scripts/genappimage.sh @@ -216,12 +218,12 @@ lint: check-single-includes clint lualint _opt_pylint _opt_shlint _opt_commitlin # Generic pattern rules, allowing for `make build/bin/nvim` etc. # Does not work with "Unix Makefiles". -ifeq ($(BUILD_TYPE),Ninja) +ifeq ($(CMAKE_GENERATOR),Ninja) build/%: phony_force - $(BUILD_CMD) -C build $(patsubst build/%,%,$@) + $(BUILD_TOOL) -C build $(patsubst build/%,%,$@) $(DEPS_BUILD_DIR)/%: phony_force - $(BUILD_CMD) -C $(DEPS_BUILD_DIR) $(patsubst $(DEPS_BUILD_DIR)/%,%,$@) + $(BUILD_TOOL) -C $(DEPS_BUILD_DIR) $(patsubst $(DEPS_BUILD_DIR)/%,%,$@) endif .PHONY: test lualint pylint shlint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install appimage checkprefix commitlint