Fixed a problem with Makefile.mingw where make wasn't rebuilding targets
[neverball] / Makefile
1
2 #-------------------------------------------------------------------------------
3
4 #VERSION=1.5.0
5 VERSION= $(shell sh scripts/version.sh)
6
7 ifeq ($(VERSION),)
8     $(error Failed to obtain version for this build.)
9 endif
10
11 #------------------------------------------------------------------------------
12
13 # Maybe you need one of these.  Maybe you don't.
14
15 #X11_PATH= -L/usr/X11/lib
16 #X11_PATH= -L/usr/X11R6/lib
17
18 OGL_LIBS= -lGL -lm
19 #OGL_LIBS= -lm                                                # Think Different
20
21 CFLAGS= -Wall -g -O3 -ansi -pedantic $(shell sdl-config --cflags)
22 #CFLAGS= -Wall -g -O1 -ansi -pedantic $(shell sdl-config --cflags)
23 #CFLAGS= -Wall -pg -ansi $(shell sdl-config --cflags)
24
25 CPPFLAGS := -DVERSION=\"$(VERSION)\" -Ishare $(CPPFLAGS)
26
27 SDL_LIBS= $(shell sdl-config --libs)
28 PNG_LIBS= $(shell libpng-config --libs)
29
30 MAPC_TARG= mapc$(EXT)
31 BALL_TARG= neverball$(EXT)
32 PUTT_TARG= neverputt$(EXT)
33
34 MAPC_EXEC= ./$(MAPC_TARG)
35
36 LOCALEDIR= locale
37 LOCALEDOM= neverball
38
39 POTFILE= po/neverball.pot
40
41 #-------------------------------------------------------------------------------
42
43 MAPC_OBJS= \
44         share/vec3.o   \
45         share/base_image.o  \
46         share/solid.o  \
47         share/binary.o \
48         share/base_config.o \
49         share/mapc.o
50 BALL_OBJS= \
51         share/i18n.o    \
52         share/st_lang.o \
53         share/st_resol.o \
54         share/vec3.o    \
55         share/base_image.o   \
56         share/image.o   \
57         share/solid.o   \
58         share/solid_gl.o\
59         share/part.o    \
60         share/back.o    \
61         share/geom.o    \
62         share/gui.o     \
63         share/base_config.o  \
64         share/config.o  \
65         share/binary.o  \
66         share/state.o   \
67         share/audio.o   \
68         ball/hud.o      \
69         ball/game.o     \
70         ball/level.o    \
71         ball/levels.o   \
72         ball/set.o      \
73         ball/demo.o     \
74         ball/util.o     \
75         ball/st_conf.o  \
76         ball/st_demo.o  \
77         ball/st_save.o  \
78         ball/st_play_end.o  \
79         ball/st_done.o  \
80         ball/st_level.o \
81         ball/st_over.o  \
82         ball/st_play.o  \
83         ball/st_set.o   \
84         ball/st_start.o \
85         ball/st_title.o \
86         ball/st_help.o  \
87         ball/st_name.o  \
88         ball/st_shared.o  \
89         ball/main.o
90 PUTT_OBJS= \
91         share/i18n.o    \
92         share/st_lang.o \
93         share/st_resol.o \
94         share/vec3.o   \
95         share/base_image.o  \
96         share/image.o  \
97         share/solid.o  \
98         share/solid_gl.o  \
99         share/part.o   \
100         share/geom.o   \
101         share/back.o   \
102         share/base_config.o  \
103         share/config.o \
104         share/binary.o \
105         share/audio.o  \
106         share/state.o  \
107         share/gui.o    \
108         putt/hud.o     \
109         putt/game.o    \
110         putt/hole.o    \
111         putt/course.o  \
112         putt/st_all.o  \
113         putt/st_conf.o \
114         putt/main.o
115
116 BALL_DEPS= $(BALL_OBJS:.o=.d)
117 PUTT_DEPS= $(PUTT_OBJS:.o=.d)
118 MAPC_DEPS= $(MAPC_OBJS:.o=.d)
119
120 BASE_LIBS= $(SDL_LIBS) -lSDL_image
121 LIBS= $(X11_PATH) $(BASE_LIBS) $(PNG_LIBS) -lSDL_ttf -lSDL_mixer $(OGL_LIBS)
122
123 MESSAGEPART= /LC_MESSAGES/$(LOCALEDOM).mo
124 MESSAGES= $(LINGUAS:%=$(LOCALEDIR)/%$(MESSAGEPART))
125
126 MAPS= $(shell find data/ -name '*.map')
127 SOLS= $(MAPS:%.map=%.sol)
128
129 POS= $(shell echo po/*.po)
130 LINGUAS= $(POS:po/%.po=%)
131
132 #------------------------------------------------------------------------------
133 # Implicit rules
134 #------------------------------------------------------------------------------
135
136 %.d : %.c
137         $(CC) $(CFLAGS) $(CPPFLAGS) -MM -MF $@ -MT '$*.o $@' $<
138
139 %.o : %.c
140         $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
141
142 %.sol : %.map $(MAPC_TARG)
143         $(MAPC_EXEC) $< data
144
145 $(LOCALEDIR)/%$(MESSAGEPART) : po/%.po
146         mkdir -p `dirname $@`
147         msgfmt -c -v -o $@ $<
148
149 #------------------------------------------------------------------------------
150 # Main rules
151 #------------------------------------------------------------------------------
152
153 all : $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG) sols locales
154
155 $(BALL_TARG) : $(BALL_OBJS)
156         $(CC) $(CFLAGS) -o $(BALL_TARG) $(BALL_OBJS) $(LIBS)
157
158 $(PUTT_TARG) : $(PUTT_OBJS)
159         $(CC) $(CFLAGS) -o $(PUTT_TARG) $(PUTT_OBJS) $(LIBS)
160
161 $(MAPC_TARG) : $(MAPC_OBJS)
162         $(CC) $(CFLAGS) -o $(MAPC_TARG) $(MAPC_OBJS) $(BASE_LIBS)
163
164 sols : $(SOLS)
165
166 locales : $(MESSAGES)
167
168 clean-src :
169         rm -f $(BALL_TARG) $(BALL_OBJS) $(BALL_DEPS)
170         rm -f $(PUTT_TARG) $(PUTT_OBJS) $(PUTT_DEPS)
171         rm -f $(MAPC_TARG) $(MAPC_OBJS) $(MAPC_DEPS)
172
173 clean : clean-src
174         rm -f $(SOLS)
175         rm -rf $(LOCALEDIR)
176
177 test : all
178         ./neverball
179
180 tools :
181         cd tools && $(MAKE)
182
183 mingw-%:
184         $(MAKE) -f Makefile.mingw $*
185
186 #------------------------------------------------------------------------------
187 # PO update rules
188 #------------------------------------------------------------------------------
189
190 po/%.po : $(POTFILE)
191         msgmerge -U $@ $<
192         touch $@
193         
194 po-update-extract :
195         sh scripts/extractpo.sh $(POTFILE) $(LOCALEDOM)
196
197 po-update-merge : $(POS)
198
199 po-update : po-update-extract po-update-merge
200
201 #------------------------------------------------------------------------------
202
203 .PHONY : all sols locales clean-src clean test \
204         po-update-extract po-update-merge po-update \
205         tools
206
207 -include $(BALL_DEPS) $(PUTT_DEPS) $(MAPC_DEPS)