1*72ae6981SMasatake YAMATO# 2*72ae6981SMasatake YAMATO# Copyright (c) 2021, Hiroo Hayashi 3*72ae6981SMasatake YAMATO# 4*72ae6981SMasatake YAMATO# This source code is released for free distribution under the terms of the 5*72ae6981SMasatake YAMATO# GNU General Public License version 2 or (at your option) any later version. 6*72ae6981SMasatake YAMATO# 7*72ae6981SMasatake YAMATO# Makefile to generate ctags_vs2013.vcxproj and ctags_vs2013.vcxproj.filters 8*72ae6981SMasatake YAMATO# 9*72ae6981SMasatake YAMATO# usage: make [-B] 10*72ae6981SMasatake YAMATO# 11*72ae6981SMasatake YAMATO# Restrictions: 12*72ae6981SMasatake YAMATO# - Input Files: ctags_vs2013.vcxproj.in and ctags_vs2013.vcxproj.filters.in 13*72ae6981SMasatake YAMATO# - The last charactor of the files must be '>'. 14*72ae6981SMasatake YAMATO# cf. check_eof_chars_in_vcxproj() in misc/src-check. 15*72ae6981SMasatake YAMATO# - Other lines must be end with LF. 16*72ae6981SMasatake YAMATO# - GNU make is required. 17*72ae6981SMasatake YAMATO 18*72ae6981SMasatake YAMATOVCXPROJ = ctags_vs2013.vcxproj 19*72ae6981SMasatake YAMATOVCXPROJ_FILTERS = ctags_vs2013.vcxproj.filters 20*72ae6981SMasatake YAMATOSOURCE_MAK = ../source.mak 21*72ae6981SMasatake YAMATO 22*72ae6981SMasatake YAMATOall: $(VCXPROJ) $(VCXPROJ_FILTERS) 23*72ae6981SMasatake YAMATO 24*72ae6981SMasatake YAMATOinclude $(SOURCE_MAK) 25*72ae6981SMasatake YAMATO 26*72ae6981SMasatake YAMATO# exclude some files for Win32 and replace a slash (/) to a backslash (\) 27*72ae6981SMasatake YAMATOMVC_SRCS = $(MVC_GNULIB_SRCS) $(CMDLINE_SRCS) $(LIB_SRCS) $(OPTLIB2C_SRCS) $(PARSER_SRCS) $(OPTSCRIPT_DSL_SRCS) $(DEBUG_SRCS) $(WIN32_SRCS) 28*72ae6981SMasatake YAMATOMVC_SRCS_EXCLUDE = main/mbcs.c main/seccomp.c main/trace.c 29*72ae6981SMasatake YAMATOMVC_SRCS_CONV = $(sort $(subst /,\\,$(filter-out $(MVC_SRCS_EXCLUDE),$(MVC_SRCS)))) 30*72ae6981SMasatake YAMATO 31*72ae6981SMasatake YAMATOMVC_HEADS = $(MVC_GNULIB_HEADS) $(CMDLINE_HEADS) $(LIB_HEADS) $(OPTLIB2C_HEADS) $(PARSER_HEADS) $(OPTSCRIPT_DSL_HEADS) $(DEBUG_HEADS) $(WIN32_HEADS) 32*72ae6981SMasatake YAMATOMVC_HEADS_EXCLUDE = main/interactive_p.h main/mbcs.h main/mbcs_p.h main/trace.h 33*72ae6981SMasatake YAMATOMVC_HEADS_CONV = $(sort $(subst /,\\,$(filter-out $(MVC_HEADS_EXCLUDE),$(MVC_HEADS)))) 34*72ae6981SMasatake YAMATO 35*72ae6981SMasatake YAMATOMVC_INC_DIRS1 = ..;../main;../gnulib;../parsers;../parsers/cxx;../dsl; 36*72ae6981SMasatake YAMATOMVC_INC_DIRS2 = ..;../main;../gnulib;../parsers;../parsers/cxx; 37*72ae6981SMasatake YAMATO 38*72ae6981SMasatake YAMATO# a portable 'echo' which disables the interpretation of escape characters like 'echo -E' on bash 39*72ae6981SMasatake YAMATO# see https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.70/autoconf.html#Limitations-of-Builtins 40*72ae6981SMasatake YAMATOECHO = printf '%s\n' 41*72ae6981SMasatake YAMATO# escape backslashes and newlines in the replacement pattern for sed 42*72ae6981SMasatake YAMATOESCAPE_BACKSLASH = sed -e 's|\\|\\\\|g' -e 's/$$/\\/' | sed -e '$$s/\\$$//' 43*72ae6981SMasatake YAMATO# insert CR before LF except for the last line 44*72ae6981SMasatake YAMATOLF2CRLF = sed -e '$$!s/$$/\r/' 45*72ae6981SMasatake YAMATO 46*72ae6981SMasatake YAMATO$(VCXPROJ): $(VCXPROJ).in $(SOURCE_MAK) 47*72ae6981SMasatake YAMATO @echo generating $@ ... 48*72ae6981SMasatake YAMATO @# C source files \ 49*72ae6981SMasatake YAMATO SRCS=$$(for i in $(MVC_SRCS_CONV); do \ 50*72ae6981SMasatake YAMATO $(ECHO) " <ClCompile Include=\"..\\$$i\" />"; \ 51*72ae6981SMasatake YAMATO done); \ 52*72ae6981SMasatake YAMATO SRCS=$$($(ECHO) "$$SRCS" | $(ESCAPE_BACKSLASH)); \ 53*72ae6981SMasatake YAMATO # header files \ 54*72ae6981SMasatake YAMATO HEADS=$$(for i in $(MVC_HEADS_CONV); do \ 55*72ae6981SMasatake YAMATO $(ECHO) " <ClInclude Include=\"..\\$$i\" />"; \ 56*72ae6981SMasatake YAMATO done; \ 57*72ae6981SMasatake YAMATO $(ECHO) " <ClInclude Include=\"resource.h\" />"); \ 58*72ae6981SMasatake YAMATO HEADS=$$($(ECHO) "$$HEADS" | $(ESCAPE_BACKSLASH)); \ 59*72ae6981SMasatake YAMATO # replace @foo@ in $(VCXPROJ).in \ 60*72ae6981SMasatake YAMATO sed -e "s![@]SRCS[@]!$$SRCS!" \ 61*72ae6981SMasatake YAMATO -e "s![@]HEADS[@]!$$HEADS!" \ 62*72ae6981SMasatake YAMATO -e "s|[@]INC_DIRS1[@]|${MVC_INC_DIRS1}|" \ 63*72ae6981SMasatake YAMATO -e "s|[@]INC_DIRS2[@]|${MVC_INC_DIRS2}|" $< | $(LF2CRLF) > $@ 64*72ae6981SMasatake YAMATO 65*72ae6981SMasatake YAMATO$(VCXPROJ_FILTERS): $(VCXPROJ_FILTERS).in $(SOURCE_MAK) 66*72ae6981SMasatake YAMATO @echo generating $@ ... 67*72ae6981SMasatake YAMATO @# C source files \ 68*72ae6981SMasatake YAMATO SRCS=$$(for i in $(MVC_SRCS_CONV); do \ 69*72ae6981SMasatake YAMATO dirname=$$($(ECHO) $$i | sed -e 's/\\[a-zA-Z_0-9.-]*$$//'); \ 70*72ae6981SMasatake YAMATO $(ECHO) " <ClCompile Include=\"..\\$$i\">"; \ 71*72ae6981SMasatake YAMATO $(ECHO) " <Filter>Source Files\\$$dirname</Filter>"; \ 72*72ae6981SMasatake YAMATO $(ECHO) " </ClCompile>"; \ 73*72ae6981SMasatake YAMATO done); \ 74*72ae6981SMasatake YAMATO SRCS=$$($(ECHO) "$$SRCS" | $(ESCAPE_BACKSLASH)); \ 75*72ae6981SMasatake YAMATO # header files \ 76*72ae6981SMasatake YAMATO HEADS=$$(for i in $(MVC_HEADS_CONV); do \ 77*72ae6981SMasatake YAMATO $(ECHO) " <ClInclude Include=\"..\\$$i\">"; \ 78*72ae6981SMasatake YAMATO $(ECHO) " <Filter>Header Files</Filter>"; \ 79*72ae6981SMasatake YAMATO $(ECHO) " </ClInclude>"; \ 80*72ae6981SMasatake YAMATO done; \ 81*72ae6981SMasatake YAMATO $(ECHO) " <ClInclude Include=\"resource.h\">"; \ 82*72ae6981SMasatake YAMATO $(ECHO) " <Filter>Header Files</Filter>"; \ 83*72ae6981SMasatake YAMATO $(ECHO) " </ClInclude>"); \ 84*72ae6981SMasatake YAMATO HEADS=$$($(ECHO) "$$HEADS" | $(ESCAPE_BACKSLASH)); \ 85*72ae6981SMasatake YAMATO # replace @foo@ in $(VCXPROJ_FILTERS).in \ 86*72ae6981SMasatake YAMATO sed -e "s![@]SRCS[@]!$$SRCS!" \ 87*72ae6981SMasatake YAMATO -e "s![@]HEADS[@]!$$HEADS!" $< | $(LF2CRLF) > $@ 88