From 6503f12eb4f145ccb17625f0c0d6fb538458fdf0 Mon Sep 17 00:00:00 2001 From: Rejean Loyer Date: Sat, 5 Oct 2013 23:35:58 -0400 Subject: [PATCH] buildsystem,epj2make,ide: (#996-related) fix remaining issues with .ec modules containing ampersands or projects in paths that have ampersands in it or other special characters. - fix crossplatform.mk's echo shell command to all echoing empty line. - add cat/type shell commands to crossplatform.mk - fix crossplatform.mk's shell commands (cp, mkdir, rmdir?) to properly handle file lists with file name with spaces in them --- crossplatform.mk | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/crossplatform.mk b/crossplatform.mk index 34132dd..ed63fae 100644 --- a/crossplatform.mk +++ b/crossplatform.mk @@ -167,12 +167,18 @@ empty := esc := $(empty)$(empty) space := $(empty) $(empty) comma := , +openpar := ( +clospar := ) slash := $(empty)/$(empty) backslash := $(empty)\$(empty) escspace = $(subst $(space),$(backslash)$(space),$(subst $(backslash)$(space),$(space),$(1))) hidspace = $(subst $(space),$(esc),$(subst $(backslash)$(space),$(esc),$(1))) +hidescspace = $(subst $(backslash)$(space),$(esc),$(1)) shwspace = $(subst $(esc),$(backslash)$(space),$(1)) +shwspacequoted = $(subst $(esc),"$(space)",$(subst \$(space),$(esc),$(1))) unescp_all = $(subst $(esc),$(backslash),$(subst $(backslash),,$(subst $(backslash)$(backslash),$(esc),$(1)))) +for_list = $(call sys_path,$(call unescp_all,$(call shwspacequoted,$(subst $(space),$(comma),$(subst $(space)$(space),$(space),$(call hidescspace,$(1))))))) +lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1)))))))))))))))))))))))))) # PATH SEPARATOR STRING TOOLS ifdef WINDOWS_HOST @@ -183,9 +189,13 @@ endif ifdef WIN_PS_TOOLS psep := $(backslash) slash_path = $(subst $(backslash),$(slash),$(1)) - sys_path = $(subst $(backslash)$(backslash),$(slash),$(subst $(slash),$(backslash),$(1))) + esc_ampersand = $(subst &,^&,$(subst ^&,&,$(1))) + sys_path = $(call esc_ampersand,$(subst $(backslash)$(backslash),$(slash),$(subst $(slash),$(backslash),$(1)))) + each_quote_path = $(call quote_path,$(path)) quote_path = "$(call sys_path,$(call unescp_all,$(1)))" +# each_path_quote = $(if $(findstring $(esc),$(path)),"$(call sys_path,$(call unescp_all,$(call shwspace,$(path))))",$(call sys_path,$(call unescp_all,$(path)))) each_path_quote = $(if $(findstring $(esc),$(path)),"$(call unescp_all,$(call shwspace,$(path)))",$(call unescp_all,$(path))) +# sys_path_list sys_path_list = $(foreach path,$(1),$(each_path_quote)) else psep := $(slash) @@ -239,17 +249,24 @@ endif endif ifdef WIN_SHELL_COMMANDS nullerror = 2>NUL - echo = $(if $(1),echo $(1)) + echo = $(if $(1),echo $(1),echo.) + cat = $(if $(1),type $(1)) touch = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do @(cd %%~pI && type nul >> %%~nxI && copy /by %%~nxI+,, > nul 2>&1 && cd %%cd%%)") - cpq = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do copy /by %%I $(call sys_path,$(2))" > nul 2>&1) - cpv = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do copy /by %%I $(call sys_path,$(2))") +# cpq = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do copy /by %%I $(call sys_path,$(2))" > nul 2>&1) + cpq = $(if $(1),@cmd /c "for %%I in ($(call for_list,$(1))) do copy /by %%I $(call sys_path,$(2))" > nul 2>&1) +# cpv = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do copy /by %%I $(call sys_path,$(2))") + cpv = $(if $(1),@cmd /c "for %%I in ($(call for_list,$(1))) do copy /by %%I $(call sys_path,$(2))") +# rmq = $(if $(1),-del /f /q $(1) > nul 2>&1) +# rmq = $(if $(1),-del /f /q $(call sys_path,$(1)) > nul 2>&1) rmq = $(if $(1),-del /f /q $(call sys_path,$(call sys_path_list,$(1))) > nul 2>&1) +# rmq = $(if $(1),-del /f /q $(foreach path,$(1),$(each_quote_path)) $(call sys_path,$(1)) > nul 2>&1) rmrq = $(if $(1),-rmdir /q /s $(call sys_path,$(1)) > nul 2>&1) mkdirq = $(if $(1),-mkdir $(call sys_path,$(1)) > nul 2>&1) rmdirq = $(if $(1),-rmdir /q $(call sys_path,$(1)) > nul 2>&1) else nullerror = 2>/dev/null - echo = $(if $(1),echo "$(1)") + echo = $(if $(1),echo "$(1)",echo) + cat = $(if $(1),cat $(1)) touch = $(if $(1),touch $(1)) cpq = $(if $(1),cp $(1) $(2)) cpv = cp $(1) $(2) -- 1.8.3.1