# # Copyright (c) 2021, Hiroo Hayashi # # This source code is released for free distribution under the terms of the # GNU General Public License version 2 or (at your option) any later version. # # Makefile to generate ctags_vs2013.vcxproj and ctags_vs2013.vcxproj.filters # # usage: make [-B] # # Restrictions: # - Input Files: ctags_vs2013.vcxproj.in and ctags_vs2013.vcxproj.filters.in # - The last charactor of the files must be '>'. # cf. check_eof_chars_in_vcxproj() in misc/src-check. # - Other lines must be end with LF. # - GNU make is required. VCXPROJ = ctags_vs2013.vcxproj VCXPROJ_FILTERS = ctags_vs2013.vcxproj.filters SOURCE_MAK = ../source.mak all: $(VCXPROJ) $(VCXPROJ_FILTERS) include $(SOURCE_MAK) # exclude some files for Win32 and replace a slash (/) to a backslash (\) MVC_SRCS = $(MVC_GNULIB_SRCS) $(CMDLINE_SRCS) $(LIB_SRCS) $(OPTLIB2C_SRCS) $(PARSER_SRCS) $(OPTSCRIPT_DSL_SRCS) $(DEBUG_SRCS) $(WIN32_SRCS) MVC_SRCS_EXCLUDE = main/mbcs.c main/seccomp.c main/trace.c MVC_SRCS_CONV = $(sort $(subst /,\\,$(filter-out $(MVC_SRCS_EXCLUDE),$(MVC_SRCS)))) MVC_HEADS = $(MVC_GNULIB_HEADS) $(CMDLINE_HEADS) $(LIB_HEADS) $(OPTLIB2C_HEADS) $(PARSER_HEADS) $(OPTSCRIPT_DSL_HEADS) $(DEBUG_HEADS) $(WIN32_HEADS) MVC_HEADS_EXCLUDE = main/interactive_p.h main/mbcs.h main/mbcs_p.h main/trace.h MVC_HEADS_CONV = $(sort $(subst /,\\,$(filter-out $(MVC_HEADS_EXCLUDE),$(MVC_HEADS)))) MVC_INC_DIRS1 = ..;../main;../gnulib;../parsers;../parsers/cxx;../dsl; MVC_INC_DIRS2 = ..;../main;../gnulib;../parsers;../parsers/cxx; # a portable 'echo' which disables the interpretation of escape characters like 'echo -E' on bash # see https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.70/autoconf.html#Limitations-of-Builtins ECHO = printf '%s\n' # escape backslashes and newlines in the replacement pattern for sed ESCAPE_BACKSLASH = sed -e 's|\\|\\\\|g' -e 's/$$/\\/' | sed -e '$$s/\\$$//' # insert CR before LF except for the last line LF2CRLF = sed -e '$$!s/$$/\r/' $(VCXPROJ): $(VCXPROJ).in $(SOURCE_MAK) @echo generating $@ ... @# C source files \ SRCS=$$(for i in $(MVC_SRCS_CONV); do \ $(ECHO) " "; \ done); \ SRCS=$$($(ECHO) "$$SRCS" | $(ESCAPE_BACKSLASH)); \ # header files \ HEADS=$$(for i in $(MVC_HEADS_CONV); do \ $(ECHO) " "; \ done; \ $(ECHO) " "); \ HEADS=$$($(ECHO) "$$HEADS" | $(ESCAPE_BACKSLASH)); \ # replace @foo@ in $(VCXPROJ).in \ sed -e "s![@]SRCS[@]!$$SRCS!" \ -e "s![@]HEADS[@]!$$HEADS!" \ -e "s|[@]INC_DIRS1[@]|${MVC_INC_DIRS1}|" \ -e "s|[@]INC_DIRS2[@]|${MVC_INC_DIRS2}|" $< | $(LF2CRLF) > $@ $(VCXPROJ_FILTERS): $(VCXPROJ_FILTERS).in $(SOURCE_MAK) @echo generating $@ ... @# C source files \ SRCS=$$(for i in $(MVC_SRCS_CONV); do \ dirname=$$($(ECHO) $$i | sed -e 's/\\[a-zA-Z_0-9.-]*$$//'); \ $(ECHO) " "; \ $(ECHO) " Source Files\\$$dirname"; \ $(ECHO) " "; \ done); \ SRCS=$$($(ECHO) "$$SRCS" | $(ESCAPE_BACKSLASH)); \ # header files \ HEADS=$$(for i in $(MVC_HEADS_CONV); do \ $(ECHO) " "; \ $(ECHO) " Header Files"; \ $(ECHO) " "; \ done; \ $(ECHO) " "; \ $(ECHO) " Header Files"; \ $(ECHO) " "); \ HEADS=$$($(ECHO) "$$HEADS" | $(ESCAPE_BACKSLASH)); \ # replace @foo@ in $(VCXPROJ_FILTERS).in \ sed -e "s![@]SRCS[@]!$$SRCS!" \ -e "s![@]HEADS[@]!$$HEADS!" $< | $(LF2CRLF) > $@