1# Makefile for Universal Ctags under Win32 with MinGW compiler 2 3OBJEXT = o 4include source.mak 5 6GNULIB_OBJS = $(MINGW_GNULIB_SRCS:.c=.$(OBJEXT)) 7 8CFLAGS = -Wall -std=gnu99 9COMMON_DEFINES = 10DEFINES = -DWIN32 $(COMMON_DEFINES) -DHAVE_CONFIG_H -DHAVE_PACKCC 11INCLUDES = -I. -Ignulib -Ilibreadtags -iquote parsers -iquote main -iquote dsl 12CC = gcc 13WINDRES = windres 14OPTLIB2C = ./misc/optlib2c 15PACKCC = ./packcc.exe 16RES_OBJ = win32/ctags.res.o 17EXTRA_OBJS = 18EXTRA_OBJS += $(GNULIB_OBJS) 19EXTRA_OBJS += $(WIN32_OBJS) 20EXTRA_OBJS += $(PEG_OBJS) 21EXTRA_OBJS += $(RES_OBJ) 22ALL_OBJS += $(EXTRA_OBJS) 23ALL_LIB_OBJS += $(EXTRA_OBJS) 24VPATH = . ./gnulib ./main ./parsers ./optlib ./extra-cmds ./libreadtags ./win32 25 26ifeq (yes, $(WITH_ICONV)) 27DEFINES += -DHAVE_ICONV 28LIBS += -liconv 29endif 30ifeq (yes, $(WITH_PCRE2)) 31CFLAGS += -DHAVE_LIBPCRE2=1 $(shell pkg-config --cflags libpcre2-8) 32LIBS += $(shell pkg-config --libs libpcre2-8) 33PARSER_SRCS += $(PCRE2_SRCS) 34PARSER_HEADS += $(PCRE2_HEADS) 35endif 36ifeq (yes, $(WITH_YAML)) 37CFLAGS += -DHAVE_LIBYAML=1 $(shell pkg-config --cflags yaml-0.1) 38LIBS += $(shell pkg-config --libs yaml-0.1) 39PARSER_SRCS += $(YAML_SRCS) 40PARSER_HEADS += $(YAML_HEADS) 41endif 42ifeq (yes, $(WITH_XML)) 43CFLAGS += -DHAVE_LIBXML=1 $(shell pkg-config --cflags libxml-2.0) 44LIBS += $(shell pkg-config --libs libxml-2.0) 45PARSER_SRCS += $(XML_SRCS) 46PARSER_HEADS += $(XML_HEADS) 47endif 48ifeq (yes, $(WITH_JSON)) 49CFLAGS += -DHAVE_JANSSON=1 $(shell pkg-config --cflags jansson) 50LIBS += $(shell pkg-config --libs jansson) 51endif 52 53ifdef DEBUG 54DEFINES += -DDEBUG 55OPT = -g 56else 57OPT = -O4 -Os -fexpensive-optimizations 58LDFLAGS = -s 59endif 60 61.SUFFIXES: .c .o .ctags .peg 62 63# 64# Silent/verbose commands 65# 66# when V is not set the output of commands is omitted or simplified 67# 68V ?= 0 69CC_FOR_PACKCC ?= $(CC) 70 71SILENT = $(SILENT_$(V)) 72SILENT_0 = @ 73SILENT_1 = 74 75V_CC = $(V_CC_$(V)) 76V_CC_0 = @echo [CC] $@; 77V_CC_1 = 78 79V_OPTLIB2C = $(V_OPTLIB2C_$(V)) 80V_OPTLIB2C_0 = @echo [OPTLIB2C] $@; 81V_OPTLIB2C_1 = 82 83V_PACKCC = $(V_PACKCC_$(V)) 84V_PACKCC_0 = @echo [PACKCC] $@; 85V_PACKCC_1 = 86 87V_WINDRES = $(V_WINDRES_$(V)) 88V_WINDRES_0 = @echo [WINDRES] $@; 89V_WINDRES_1 = 90 91 92.c.o: 93 $(V_CC) $(CC) -c $(OPT) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $< 94 95%.c: %.ctags $(OPTLIB2C) 96 $(V_OPTLIB2C) $(OPTLIB2C) $< > $@ 97 98peg/%.c peg/%.h: peg/%.peg $(PACKCC) 99 $(V_PACKCC) $(PACKCC) $< 100 101all: copy_gnulib_heads $(PACKCC) ctags.exe readtags.exe optscript.exe 102 103ctags: ctags.exe 104 105$(PACKCC_OBJ): $(PACKCC_SRC) 106 $(V_CC) $(CC_FOR_PACKCC) -c $(OPT) $(CFLAGS) $(COMMON_DEFINES) -o $@ $< 107 108$(PACKCC): $(PACKCC_OBJ) 109 $(V_CC) $(CC_FOR_PACKCC) $(OPT) -o $@ $^ 110 111ctags.exe: $(ALL_OBJS) $(ALL_HEADS) $(PEG_HEADS) $(PEG_EXTRA_HEADS) $(MINGW_GNULIB_HEADS) $(WIN32_HEADS) 112 $(V_CC) $(CC) $(OPT) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -o $@ $(ALL_OBJS) $(LIBS) 113 114$(RES_OBJ): win32/ctags.rc win32/ctags.exe.manifest win32/resource.h 115 $(V_WINDRES) $(WINDRES) -o $@ -O coff $< 116 117extra-cmds/%.o: extra-cmds/%.c 118 $(V_CC) $(CC) -c $(OPT) $(CFLAGS) -DWIN32 $(INCLUDES) -o $@ $< 119libreadtags/%.o: libreadtags/%.c 120 $(V_CC) $(CC) -c $(OPT) $(CFLAGS) -DWIN32 -Ilibreadtags -o $@ $< 121 122readtags.exe: $(READTAGS_OBJS) $(READTAGS_HEADS) $(UTIL_OBJS) $(UTIL_HEADS) $(READTAGS_DSL_OBJS) $(READTAGS_DSL_HEADS) $(GNULIB_OBJS) $(MINGW_GNULIB_HEADS) 123 $(V_CC) $(CC) $(OPT) -o $@ $(READTAGS_OBJS) $(UTIL_OBJS) $(READTAGS_DSL_OBJS) $(GNULIB_OBJS) $(LIBS) 124 125optscript.exe: $(ALL_LIB_OBJS) $(OPTSCRIPT_OBJS) $(ALL_LIB_HEADS) $(OPTSCRIPT_DSL_HEADS) $(WIN32_HEADS) 126 $(V_CC) $(CC) $(OPT) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -o $@ $(ALL_LIB_OBJS) $(OPTSCRIPT_OBJS) $(LIBS) 127 128copy_gnulib_heads: 129 cp win32/config_mingw.h config.h 130 cp win32/gnulib_h/langinfo.h win32/gnulib_h/locale.h win32/gnulib_h/unistd.h win32/gnulib_h/fnmatch.h win32/gnulib_h/string.h win32/gnulib_h/wchar.h gnulib 131 132clean: 133 $(SILENT) echo Cleaning 134 $(SILENT) rm -f ctags.exe readtags.exe optscript.exe $(PACKCC) 135 $(SILENT) rm -f tags 136 $(SILENT) rm -f main/*.o optlib/*.o parsers/*.o parsers/cxx/*.o gnulib/*.o misc/packcc/*.o peg/*.o extra-cmds/*.o libreadtags/*.o dsl/*.o win32/*.o win32/mkstemp/*.o 137 $(SILENT) rm -f config.h gnulib/langinfo.h gnulib/locale.h gnulib/unistd.h gnulib/fnmatch.h gnulib/string.h gnulib/wchar.h 138