Merged branch 'no-SDL_mixer'.
[neverball] / Makefile
1 #-------------------------------------------------------------------------------
2
3 VERSION := $(shell sh scripts/version.sh)
4 ifeq ($(VERSION),unknown)
5     $(warning Failed to obtain sane version for this build.)
6 endif
7
8 #------------------------------------------------------------------------------
9
10 # Optional flags
11 #CFLAGS := -Wall -g -ansi -pedantic
12 CFLAGS := -Wall -O2 -ansi -pedantic
13
14 # Mandatory flags
15 SDL_CPPFLAGS := $(shell sdl-config --cflags)
16 PNG_CPPFLAGS := $(shell libpng-config --cflags)
17
18 ALL_CFLAGS   := $(CFLAGS)
19 ALL_CPPFLAGS := $(SDL_CPPFLAGS) $(PNG_CPPFLAGS) -Ishare \
20     -DVERSION=\"$(VERSION)\"
21
22 ifeq ($(ENABLE_NLS),0)
23     ALL_CPPFLAGS += -DENABLE_NLS=0
24 else
25     ALL_CPPFLAGS += -DENABLE_NLS=1
26 endif
27
28 ALL_CPPFLAGS += $(CPPFLAGS)
29
30 #------------------------------------------------------------------------------
31
32 SDL_LIBS := $(shell sdl-config --libs)
33 PNG_LIBS := $(shell libpng-config --libs)
34
35 ifdef MINGW
36 ifneq ($(ENABLE_NLS),0)
37         INTL_LIBS := -lintl -liconv
38 endif
39         OGL_LIBS  := -lopengl32 -lm
40         BASE_LIBS := -lSDL -lSDL_image $(INTL_LIBS)
41         ALL_LIBS  := $(SDL_LIBS) -lSDL_image $(INTL_LIBS) \
42                 $(PNG_LIBS) -lSDL_ttf -lvorbisfile $(OGL_LIBS)
43 else
44         OGL_LIBS  := -lGL -lm
45         BASE_LIBS := $(SDL_LIBS) -lSDL_image
46         ALL_LIBS  := $(BASE_LIBS) $(PNG_LIBS) -lSDL_ttf -lvorbisfile $(OGL_LIBS)
47 endif
48
49 #------------------------------------------------------------------------------
50 # Quick hack by rlk to enable command-line building using macports
51
52 ifeq ($(shell uname), Darwin)
53         ALL_CFLAGS += -I/opt/local/include
54         OGL_LIBS = -framework OpenGL
55         ALL_LIBS  := -lintl -liconv $(BASE_LIBS) $(PNG_LIBS) -lSDL_ttf -lvorbisfile $(OGL_LIBS)
56 endif
57
58 #------------------------------------------------------------------------------
59
60 ifdef MINGW
61     EXT  := .exe
62     WINE := wine
63 endif
64
65 #------------------------------------------------------------------------------
66
67 MAPC_TARG := mapc$(EXT)
68 BALL_TARG := neverball$(EXT)
69 PUTT_TARG := neverputt$(EXT)
70
71 #------------------------------------------------------------------------------
72
73 MAPC_OBJS := \
74         share/vec3.o        \
75         share/base_image.o  \
76         share/solid.o       \
77         share/binary.o      \
78         share/base_config.o \
79         share/mapc.o
80 BALL_OBJS := \
81         share/lang.o        \
82         share/st_resol.o    \
83         share/vec3.o        \
84         share/base_image.o  \
85         share/image.o       \
86         share/solid.o       \
87         share/solid_gl.o    \
88         share/part.o        \
89         share/back.o        \
90         share/geom.o        \
91         share/gui.o         \
92         share/base_config.o \
93         share/config.o      \
94         share/binary.o      \
95         share/state.o       \
96         share/audio.o       \
97         share/text.o        \
98         ball/hud.o          \
99         ball/mode.o         \
100         ball/game.o         \
101         ball/score.o        \
102         ball/level.o        \
103         ball/levels.o       \
104         ball/set.o          \
105         ball/demo.o         \
106         ball/util.o         \
107         ball/st_conf.o      \
108         ball/st_demo.o      \
109         ball/st_save.o      \
110         ball/st_goal.o      \
111         ball/st_fall_out.o  \
112         ball/st_time_out.o  \
113         ball/st_done.o      \
114         ball/st_level.o     \
115         ball/st_over.o      \
116         ball/st_play.o      \
117         ball/st_set.o       \
118         ball/st_start.o     \
119         ball/st_title.o     \
120         ball/st_help.o      \
121         ball/st_name.o      \
122         ball/st_shared.o    \
123         ball/st_pause.o     \
124         ball/main.o
125 PUTT_OBJS := \
126         share/lang.o        \
127         share/st_resol.o    \
128         share/vec3.o        \
129         share/base_image.o  \
130         share/image.o       \
131         share/solid.o       \
132         share/solid_gl.o    \
133         share/part.o        \
134         share/geom.o        \
135         share/back.o        \
136         share/base_config.o \
137         share/config.o      \
138         share/binary.o      \
139         share/audio.o       \
140         share/state.o       \
141         share/gui.o         \
142         share/text.o        \
143         putt/hud.o          \
144         putt/game.o         \
145         putt/hole.o         \
146         putt/course.o       \
147         putt/st_all.o       \
148         putt/st_conf.o      \
149         putt/main.o
150
151 BALL_DEPS := $(BALL_OBJS:.o=.d)
152 PUTT_DEPS := $(PUTT_OBJS:.o=.d)
153 MAPC_DEPS := $(MAPC_OBJS:.o=.d)
154
155 MAPS := $(shell find data -name "*.map" \! -name "*.autosave.map")
156 SOLS := $(MAPS:%.map=%.sol)
157
158 #------------------------------------------------------------------------------
159
160 %.o : %.c
161         $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -MM -MP -MF $*.d -MT "$@" $<
162         $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -o $@ -c $<
163
164 %.sol : %.map $(MAPC_TARG)
165         $(WINE) ./$(MAPC_TARG) $< data
166
167 #------------------------------------------------------------------------------
168
169 all : $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG) sols locales
170
171 $(BALL_TARG) : $(BALL_OBJS)
172         $(CC) $(ALL_CFLAGS) -o $(BALL_TARG) $(BALL_OBJS) $(LDFLAGS) $(ALL_LIBS)
173
174 $(PUTT_TARG) : $(PUTT_OBJS)
175         $(CC) $(ALL_CFLAGS) -o $(PUTT_TARG) $(PUTT_OBJS) $(LDFLAGS) $(ALL_LIBS)
176
177 $(MAPC_TARG) : $(MAPC_OBJS)
178         $(CC) $(ALL_CFLAGS) -o $(MAPC_TARG) $(MAPC_OBJS) $(LDFLAGS) $(BASE_LIBS)
179
180 sols : $(SOLS)
181
182 locales :
183 ifneq ($(ENABLE_NLS),0)
184         $(MAKE) -C po
185 endif
186
187 clean-src :
188         $(RM) $(BALL_TARG) $(BALL_OBJS) $(BALL_DEPS)
189         $(RM) $(PUTT_TARG) $(PUTT_OBJS) $(PUTT_DEPS)
190         $(RM) $(MAPC_TARG) $(MAPC_OBJS) $(MAPC_DEPS)
191
192 clean : clean-src
193         $(RM) $(SOLS)
194         $(MAKE) -C po clean
195
196 test : all
197         ./neverball
198
199 #------------------------------------------------------------------------------
200
201 .PHONY : all sols locales clean-src clean test
202
203 -include $(BALL_DEPS) $(PUTT_DEPS) $(MAPC_DEPS)
204
205 #------------------------------------------------------------------------------
206
207 ifdef MINGW
208
209 #------------------------------------------------------------------------------
210
211 INSTALLER := ../neverball-$(VERSION)-setup.exe
212
213 MAKENSIS := makensis
214 MAKENSIS_FLAGS := -DVERSION=$(VERSION) -DOUTFILE=$(INSTALLER)
215
216 TODOS   := todos
217 FROMDOS := fromdos
218
219 CP := cp
220
221 TEXT_DOCS := \
222         doc/AUTHORS \
223         doc/MANUAL  \
224         CHANGES     \
225         COPYING     \
226         README
227
228 TXT_DOCS := $(TEXT_DOCS:%=%.txt)
229
230 #-----------------------------------------------------------------------------
231
232 .PHONY: setup
233 setup: $(INSTALLER)
234
235 $(INSTALLER): install-dlls convert-text-files all tools
236         $(MAKENSIS) $(MAKENSIS_FLAGS) -nocd scripts/neverball.nsi
237
238 $(INSTALLER): LDFLAGS := -s $(LDFLAGS)
239
240 .PHONY: clean-setup
241 clean-setup: clean
242         $(RM) install-dlls.sh *.dll $(TXT_DOCS)
243         find data -name "*.txt" -exec $(FROMDOS) {} \;
244         $(MAKE) -C tools EXT=$(EXT) clean
245
246 #-----------------------------------------------------------------------------
247
248 .PHONY: install-dlls
249 install-dlls: install-dlls.sh
250         sh $<
251
252 install-dlls.sh:
253         if ! sh scripts/gen-install-dlls.sh > $@; then \
254             $(RM) $@; \
255             exit 1; \
256         fi
257         @echo --------------------------------------------------------
258         @echo You can probably ignore any file-not-found errors above.
259         @echo Now edit $@ to your needs before restarting make.
260         @echo --------------------------------------------------------
261         @exit 1
262
263 #-----------------------------------------------------------------------------
264
265 .PHONY: convert-text-files
266 convert-text-files: $(TXT_DOCS)
267         find data -name "*.txt" -exec $(TODOS) {} \;
268
269 %.txt: %
270         $(CP) $< $@
271         $(TODOS) $@
272
273 #-----------------------------------------------------------------------------
274
275 .PHONY: tools
276 tools:
277         $(MAKE) -C tools EXT=$(EXT)
278
279 #------------------------------------------------------------------------------
280
281 endif
282
283 #------------------------------------------------------------------------------