xref: /Universal-ctags/win32/GNUmakefile (revision 6311b5c942b09f5916146de15a6f042c73c1eea8)
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