[MinGW] Place the Scintilla build intermediate files separate from the source files

1. Scintilla and Lexilla intermediate files are created in the same folder as NPP build file (`bin.i686.build` or `bin.x86_64.build`), but in subfolder `_lexilla.build` and `_scintilla.build`. I added `_` char at the beginning so these folders are always at the beginning. If you prefer a different name or location it can be change.
2. Stop build and dispaly error message when someone run "outside build" (use `-f` option) and source path has any spaces. It won't work anyway, so it's worth stopping the process and give a clear message.
3. Add new phony target `sciclean` and `lexclean` for deleting Scintilla or Lexilla intermediate files separately.
4. Change `_` to `|` for temporary replacement of space characters when detect proper shell. Char `_` is allowed in paths and should not be used for that purpose.
5. Add one more condition for `MAKELEVEL` variable to prevent unnecessary second calls to Scintilla and Lexilla makefile.
6. Update also `nppSpecifics_mingw.mak` file to works with above change.

Now we don't have to remember to clean up the previous files when we switch to different compiler (32-bit or 64-bit) or when we generate a debug version.

Fix 10991, close #11450
pull/11478/head^2
ArkadiuszMichalski 3 years ago committed by Don Ho
parent 04e17b7375
commit 44bcf1cff6

@ -108,14 +108,21 @@ INSTALLER_DATA := $(addprefix $(TARGET_DIRECTORY)/,$(INSTALLER_DATA))
SCINTILLA_TARGET := $(BUILD_DIRECTORY)/$(SCINTILLA_TARGET) SCINTILLA_TARGET := $(BUILD_DIRECTORY)/$(SCINTILLA_TARGET)
SCINTILLA_TARGET_PATH := ../../PowerEditor/gcc/$(SCINTILLA_TARGET) SCINTILLA_TARGET_PATH := ../../PowerEditor/gcc/$(SCINTILLA_TARGET)
SCINTILLA_BUILD_DIRECTORY := $(BUILD_DIRECTORY)/_scintilla.build
SCINTILLA_BUILD_PATH := ../../PowerEditor/gcc/$(SCINTILLA_BUILD_DIRECTORY)
LEXILLA_TARGET := $(BUILD_DIRECTORY)/$(LEXILLA_TARGET) LEXILLA_TARGET := $(BUILD_DIRECTORY)/$(LEXILLA_TARGET)
LEXILLA_TARGET_PATH := ../../PowerEditor/gcc/$(LEXILLA_TARGET) LEXILLA_TARGET_PATH := ../../PowerEditor/gcc/$(LEXILLA_TARGET)
LEXILLA_BUILD_DIRECTORY := $(BUILD_DIRECTORY)/_lexilla.build
LEXILLA_BUILD_PATH := ../../PowerEditor/gcc/$(LEXILLA_BUILD_DIRECTORY)
LD_PATH += $(BUILD_DIRECTORY) LD_PATH += $(BUILD_DIRECTORY)
# detect a build outside of PowerEditor/gcc and update dependent variables # detect a build outside of PowerEditor/gcc and update dependent variables
SPACES_ERROR := "For outside build spaces in the project path are not supported! Please move the project files to the correct path."
$(foreach makefile,$(MAKEFILE_LIST),$(if $(wildcard $(makefile)),,$(error $(SPACES_ERROR))))
MAKEFILE_DIRECTORY := $(patsubst %/,%,$(dir $(subst \,/,$(firstword $(MAKEFILE_LIST))))) MAKEFILE_DIRECTORY := $(patsubst %/,%,$(dir $(subst \,/,$(firstword $(MAKEFILE_LIST)))))
ifneq "$(MAKEFILE_DIRECTORY)" "." ifneq "$(MAKEFILE_DIRECTORY)" "."
MAKEFILE_PARENT := $(patsubst %/,%,$(dir $(MAKEFILE_DIRECTORY))) MAKEFILE_PARENT := $(patsubst %/,%,$(dir $(MAKEFILE_DIRECTORY)))
@ -129,9 +136,11 @@ INSTALLER_DIRECTORY := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(INSTALLER_DIRECTOR
SCINTILLA_DIRECTORY := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(SCINTILLA_DIRECTORY)) SCINTILLA_DIRECTORY := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(SCINTILLA_DIRECTORY))
SCINTILLA_TARGET_PATH := $(CURDIR)/$(SCINTILLA_TARGET) SCINTILLA_TARGET_PATH := $(CURDIR)/$(SCINTILLA_TARGET)
SCINTILLA_BUILD_PATH := $(CURDIR)/$(SCINTILLA_BUILD_DIRECTORY)
LEXILLA_DIRECTORY := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(LEXILLA_DIRECTORY)) LEXILLA_DIRECTORY := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(LEXILLA_DIRECTORY))
LEXILLA_TARGET_PATH := $(CURDIR)/$(LEXILLA_TARGET) LEXILLA_TARGET_PATH := $(CURDIR)/$(LEXILLA_TARGET)
LEXILLA_BUILD_PATH := $(CURDIR)/$(LEXILLA_BUILD_DIRECTORY)
CXXFLAGS := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(CXXFLAGS)) CXXFLAGS := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(CXXFLAGS))
CPP_PATH := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(CPP_PATH)) CPP_PATH := $(patsubst ../%,$(MAKEFILE_PARENT)/%,$(CPP_PATH))
@ -155,7 +164,7 @@ else ifneq "$(wildcard $(dir $(SHELL))ls.exe)" ""
# a Windows system with a proper shell # a Windows system with a proper shell
NULL := NULL :=
SPACE := $(NULL) $(NULL) SPACE := $(NULL) $(NULL)
SHELL_DIRECTORY := $(subst _,$(SPACE),$(dir $(subst $(SPACE),_,$(SHELL)))) SHELL_DIRECTORY := $(subst |,$(SPACE),$(dir $(subst $(SPACE),|,$(SHELL))))
MKDIR := $(SHELL_DIRECTORY)mkdir.exe -p MKDIR := $(SHELL_DIRECTORY)mkdir.exe -p
CPDIR := $(SHELL_DIRECTORY)cp.exe -r CPDIR := $(SHELL_DIRECTORY)cp.exe -r
RMDIR := $(SHELL_DIRECTORY)rm.exe -rf RMDIR := $(SHELL_DIRECTORY)rm.exe -rf
@ -191,7 +200,7 @@ RC_TARGETS := $(patsubst %.rc,$(BUILD_DIRECTORY)/%.res,$(sort $(filter %.rc,$(GC
# actions # actions
# #
.PHONY: .force all binary data clean fullclean .PHONY: .force all binary data clean sciclean lexclean fullclean
.force: .force:
SUBMAKEFLAGS += $(if $(NUMBER_OF_PROCESSORS),-j$(NUMBER_OF_PROCESSORS),) SUBMAKEFLAGS += $(if $(NUMBER_OF_PROCESSORS),-j$(NUMBER_OF_PROCESSORS),)
@ -203,11 +212,24 @@ $(BUILD_DIRECTORY):
@echo * creating BUILD_DIRECTORY $@ @echo * creating BUILD_DIRECTORY $@
$(AT)$(MKDIR) $(call normalize-path,$(sort $@ $(patsubst %/,%,$(dir $(CXX_TARGETS) $(RC_TARGETS))))) $(AT)$(MKDIR) $(call normalize-path,$(sort $@ $(patsubst %/,%,$(dir $(CXX_TARGETS) $(RC_TARGETS)))))
$(SCINTILLA_TARGET): .force | $(BUILD_DIRECTORY) $(SCINTILLA_BUILD_DIRECTORY):
$(AT)$(MAKE) $(SUBMAKEFLAGS) -C $(SCINTILLA_DIRECTORY)/win32 LIBSCI=$(SCINTILLA_TARGET_PATH) $(SCINTILLA_TARGET_PATH) @echo * creating SCINTILLA_BUILD_DIRECTORY $@
$(AT)$(MKDIR) $(call normalize-path,$(SCINTILLA_BUILD_DIRECTORY))
$(LEXILLA_BUILD_DIRECTORY):
@echo * creating LEXILLA_BUILD_DIRECTORY $@
$(AT)$(MKDIR) $(call normalize-path,$(LEXILLA_BUILD_DIRECTORY))
ifeq "$(MAKELEVEL)" "0"
$(SCINTILLA_TARGET): .force
$(LEXILLA_TARGET): .force
endif
$(LEXILLA_TARGET): .force | $(BUILD_DIRECTORY) $(SCINTILLA_TARGET): | $(BUILD_DIRECTORY) $(SCINTILLA_BUILD_DIRECTORY)
$(AT)$(MAKE) $(SUBMAKEFLAGS) -C $(LEXILLA_DIRECTORY)/src LIBLEXILLA=$(LEXILLA_TARGET_PATH) $(LEXILLA_TARGET_PATH) $(AT)$(MAKE) $(SUBMAKEFLAGS) -C $(SCINTILLA_DIRECTORY)/win32 DIR_O=$(SCINTILLA_BUILD_PATH) LIBSCI=$(SCINTILLA_TARGET_PATH) $(SCINTILLA_TARGET_PATH)
$(LEXILLA_TARGET): | $(BUILD_DIRECTORY) $(LEXILLA_BUILD_DIRECTORY)
$(AT)$(MAKE) $(SUBMAKEFLAGS) -C $(LEXILLA_DIRECTORY)/src DIR_O=$(LEXILLA_BUILD_PATH) LIBLEXILLA=$(LEXILLA_TARGET_PATH) $(LEXILLA_TARGET_PATH)
binary: $(TARGET_BINARY) data binary: $(TARGET_BINARY) data
@echo *** $(TARGET_CPU) $(BUILD_TYPE) : $(CURDIR)/$(TARGET_BINARY) *** @echo *** $(TARGET_CPU) $(BUILD_TYPE) : $(CURDIR)/$(TARGET_BINARY) ***
@ -266,8 +288,12 @@ $(filter-out %/,$(INSTALLER_DATA)): | $(TARGET_DIRECTORY)
clean: clean:
-$(AT)$(RMDIR) $(call normalize-path,$(BUILD_DIRECTORY)) -$(AT)$(RMDIR) $(call normalize-path,$(BUILD_DIRECTORY))
-$(AT)$(MAKE) $(SUBMAKEFLAGS) -C $(SCINTILLA_DIRECTORY)/win32 $@
-$(AT)$(MAKE) $(SUBMAKEFLAGS) -C $(LEXILLA_DIRECTORY)/src $@ sciclean:
-$(AT)$(RMDIR) $(call normalize-path,$(SCINTILLA_BUILD_DIRECTORY))
lexclean:
-$(AT)$(RMDIR) $(call normalize-path,$(LEXILLA_BUILD_DIRECTORY))
fullclean: clean fullclean: clean
-$(AT)$(RMDIR) $(call normalize-path,$(TARGET_DIRECTORY)) -$(AT)$(RMDIR) $(call normalize-path,$(TARGET_DIRECTORY))

@ -1,6 +1,6 @@
# This makefile should be included in the main scintilla.mak file, # This makefile should be included in the main scintilla.mak file,
# just after where LOBJS is defined (around line # just after where LOBJS is defined (around line
# #
# The following line should be added around line 211 of scintilla.mak # The following line should be added around line 211 of scintilla.mak
# !INCLUDE nppSpecifics.mak # !INCLUDE nppSpecifics.mak
@ -9,17 +9,17 @@
SRC_OBJS+=\ SRC_OBJS+=\
BoostRegexSearch.o \ $(DIR_O)/BoostRegexSearch.o \
UTF8DocumentIterator.o $(DIR_O)/UTF8DocumentIterator.o
INCLUDES+= -I../../boostregex INCLUDES+= -I../../boostregex
CXXFLAGS+= -DSCI_OWNREGEX CXXFLAGS+= -DSCI_OWNREGEX
UTF8DocumentIterator.o:: ../../boostregex/UTF8DocumentIterator.cxx $(DIR_O)/UTF8DocumentIterator.o:: ../../boostregex/UTF8DocumentIterator.cxx
$(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -c ../../boostregex/UTF8DocumentIterator.cxx $(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -c $< -o $@
BoostRegexSearch.o:: ../../boostregex/BoostRegexSearch.cxx ../src/CharClassify.h ../src/RESearch.h $(DIR_O)/BoostRegexSearch.o:: ../../boostregex/BoostRegexSearch.cxx ../src/CharClassify.h ../src/RESearch.h
$(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -c ../../boostregex/BoostRegexSearch.cxx $(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -c $< -o $@

Loading…
Cancel
Save