T-int fix
[neverball] / Makefile
index 1eb09c1..de2a853 100644 (file)
--- a/Makefile
+++ b/Makefile
 
 #------------------------------------------------------------------------------
 
-# Maybe you need one of these.  Maybe you don't.
+VERSION := $(shell sh scripts/version.sh)
+ifeq ($(VERSION),unknown)
+    $(warning Failed to obtain sane version for this build.)
+endif
 
-#X11_PATH= -L/usr/X11/lib
-#X11_PATH= -L/usr/X11R6/lib
+# Provide a target system hint for the Makefile.
 
-OGL_LIBS= -lGL -lm
-#OGL_LIBS= -lm                                                # Think Different
+ifeq ($(shell uname), Darwin)
+    DARWIN := 1
+endif
 
 #------------------------------------------------------------------------------
+# Optional flags (CFLAGS, CPPFLAGS, ...)
 
-CFLAGS= -Wall -O3 -ansi -pedantic $(shell sdl-config --cflags)
-#CFLAGS= -Wall -g -ansi $(shell sdl-config --cflags)
-#CFLAGS= -Wall -pg -ansi $(shell sdl-config --cflags)
+ifeq ($(ENABLE_WII),1)
+    # libwiimote is NOT ANSI compliant
+    CFLAGS := -O2
+else
+    #CFLAGS := -Wall -g -ansi -pedantic
+    CFLAGS := -Wall -O2 -ansi -pedantic
+endif
 
-SDL_LIBS= $(shell sdl-config --libs)
-FT2_LIBS= $(shell freetype-config --libs)
+#------------------------------------------------------------------------------
+# Mandatory flags
 
-MAPC_TARG= mapc
-BALL_TARG= neverball
-PUTT_TARG= neverputt
+# Compiler...
 
-MAPC_OBJS= \
-       share/vec3.o   \
-       share/image.o  \
-       share/solid.o  \
-       share/binary.o \
-       share/config.o \
-       share/mapc.o
-BALL_OBJS= \
-       share/vec3.o    \
-       share/image.o   \
-       share/solid.o   \
-       share/part.o    \
-       share/back.o    \
-       share/geom.o    \
-       share/gui.o     \
-       share/config.o  \
-       share/binary.o  \
-       share/state.o   \
-       share/audio.o   \
-       ball/hud.o      \
-       ball/game.o     \
-       ball/level.o    \
-       ball/set.o      \
-       ball/demo.o     \
-       ball/util.o     \
-       ball/st_conf.o  \
-       ball/st_demo.o  \
-       ball/st_save.o  \
-       ball/st_fail.o  \
-       ball/st_goal.o  \
-       ball/st_done.o  \
-       ball/st_level.o \
-       ball/st_over.o  \
-       ball/st_play.o  \
-       ball/st_set.o   \
-       ball/st_start.o \
-       ball/st_title.o \
-       ball/main.o
-PUTT_OBJS= \
-       share/vec3.o   \
-       share/image.o  \
-       share/solid.o  \
-       share/part.o   \
-       share/geom.o   \
-       share/back.o   \
-       share/config.o \
-       share/binary.o \
-       share/audio.o  \
-       share/state.o  \
-       share/gui.o    \
-       putt/hud.o     \
-       putt/game.o    \
-       putt/hole.o    \
-       putt/course.o  \
-       putt/st_all.o  \
-       putt/st_conf.o \
-       putt/main.o
+ALL_CFLAGS := $(CFLAGS)
+
+# Preprocessor...
+
+SDL_CPPFLAGS := $(shell sdl-config --cflags)
+PNG_CPPFLAGS := $(shell libpng-config --cflags)
+
+ALL_CPPFLAGS := $(SDL_CPPFLAGS) $(PNG_CPPFLAGS) -Ishare \
+    -DVERSION=\"$(VERSION)\"
+
+ifeq ($(ENABLE_NLS),0)
+    ALL_CPPFLAGS += -DENABLE_NLS=0
+else
+    ALL_CPPFLAGS += -DENABLE_NLS=1
+endif
+
+ifeq ($(ENABLE_WII),1)
+    ALL_CPPFLAGS += -DENABLE_WII=1
+endif
+
+ifdef DARWIN
+    ALL_CPPFLAGS += -I/opt/local/include
+endif
 
-BALL_DEPS= $(BALL_OBJS:.o=.d)
-PUTT_DEPS= $(PUTT_OBJS:.o=.d)
-MAPC_DEPS= $(MAPC_OBJS:.o=.d)
-
-LIBS= $(X11_PATH) $(SDL_LIBS) -lSDL_image -lSDL_ttf -lSDL_mixer $(FT2_LIBS) $(OGL_LIBS)
-
-SOLS= \
-       data/map-rlk/easy.sol     \
-       data/map-rlk/peasy.sol    \
-       data/map-rlk/coins.sol    \
-       data/map-rlk/goslow.sol   \
-       data/map-rlk/fence.sol    \
-       data/map-rlk/bumper.sol   \
-       data/map-rlk/maze.sol     \
-       data/map-rlk/goals.sol    \
-       data/map-rlk/hole.sol     \
-       data/map-rlk/bumps.sol    \
-       data/map-rlk/corners.sol  \
-       data/map-rlk/easytele.sol \
-       data/map-rlk/zigzag.sol   \
-       data/map-rlk/greed.sol    \
-       data/map-rlk/mover.sol    \
-       data/map-rlk/wakka.sol    \
-       data/map-rlk/curbs.sol    \
-       data/map-rlk/curved.sol   \
-       data/map-rlk/stairs.sol   \
-       data/map-rlk/rampdn.sol   \
-       data/map-rlk/sync.sol     \
-       data/map-rlk/spiralin.sol \
-       data/map-rlk/plinko.sol   \
-       data/map-rlk/drops.sol    \
-       data/map-rlk/locks.sol    \
-       data/map-rlk/grid.sol     \
-       data/map-rlk/four.sol     \
-       data/map-rlk/telemaze.sol \
-       data/map-rlk/spiraldn.sol \
-       data/map-rlk/islands.sol  \
-       data/map-rlk/angle.sol    \
-       data/map-rlk/spiralup.sol \
-       data/map-rlk/rampup.sol   \
-       data/map-rlk/check.sol    \
-       data/map-rlk/risers.sol   \
-       data/map-rlk/tilt.sol     \
-       data/map-rlk/gaps.sol     \
-       data/map-rlk/pyramid.sol  \
-       data/map-rlk/quads.sol    \
-       data/map-rlk/frogger.sol  \
-       data/map-rlk/timer.sol    \
-       data/map-rlk/spread.sol   \
-       data/map-rlk/hump.sol     \
-       data/map-rlk/movers.sol   \
-       data/map-rlk/teleport.sol \
-       data/map-rlk/poker.sol    \
-       data/map-rlk/invis.sol    \
-       data/map-rlk/ring.sol     \
-       data/map-rlk/pipe.sol     \
-       data/map-rlk/title.sol    \
-       data/map-mym/assault.sol    \
-       data/map-mym/bombman.sol    \
-       data/map-mym/circuit1.sol   \
-       data/map-mym/circuit2.sol   \
-       data/map-mym/climb.sol      \
-       data/map-mym/comeback.sol   \
-       data/map-mym/dance2.sol     \
-       data/map-mym/dance1.sol     \
-       data/map-mym/descent.sol    \
-       data/map-mym/drive1.sol     \
-       data/map-mym/drive2.sol     \
-       data/map-mym/earthquake.sol \
-       data/map-mym/glasstower.sol \
-       data/map-mym/hard.sol       \
-       data/map-mym/loop1.sol      \
-       data/map-mym/loop2.sol      \
-       data/map-mym/maze1.sol      \
-       data/map-mym/maze2.sol      \
-       data/map-mym/narrow.sol     \
-       data/map-mym/running.sol    \
-       data/map-mym/scrambling.sol \
-       data/map-mym/snow.sol       \
-       data/map-mym/trust.sol      \
-       data/map-mym/turn.sol       \
-       data/map-mym/up.sol         \
-       data/map-putt/01_easy.sol    \
-       data/map-putt/02_uturn.sol   \
-       data/map-putt/03_kink.sol    \
-       data/map-putt/04_aych.sol    \
-       data/map-putt/05_ramp.sol    \
-       data/map-putt/06_cone.sol    \
-       data/map-putt/07_tele.sol    \
-       data/map-putt/08_zig.sol     \
-       data/map-putt/09_vturn.sol   \
-       data/map-putt/10_diamond.sol \
-       data/map-putt/11_mover.sol   \
-       data/map-putt/12_bumpy.sol   \
-       data/map-putt/13_choose.sol  \
-       data/map-putt/14_walls.sol   \
-       data/map-putt/15_hole.sol    \
-       data/map-putt/16_pipe.sol    \
-       data/map-putt/17_timing.sol  \
-       data/map-putt/18_hill.sol    \
-       data/map-back/alien.sol   \
-       data/map-back/blank.sol   \
-       data/map-back/city.sol    \
-       data/map-back/clouds.sol  \
-       data/map-back/ocean.sol   \
-       data/map-back/jupiter.sol \
-       data/map-paxed/01_fastpenta.sol  \
-       data/map-paxed/02_bumpy_road.sol \
-       data/map-paxed/03_zigzag.sol     \
-       data/map-paxed/04_u_twist.sol    \
-       data/map-paxed/05_hookey.sol     \
-       data/map-paxed/06_partitions.sol \
-       data/map-paxed/07_a_danger.sol   \
-       data/map-paxed/08_f.sol          \
-       data/map-paxed/09_rampedge.sol   \
-       data/map-paxed/10_pentomino.sol  \
-       data/map-paxed/11_stapler.sol    \
-       data/map-paxed/12_helixramp.sol  \
-       data/map-paxed/13_loch_ness.sol  \
-       data/map-paxed/14_figur8.sol     \
-       data/map-paxed/15_upNdown.sol    \
-       data/map-paxed/16_pyramidian.sol \
-       data/map-paxed/17_oopsydaisy.sol \
-       data/map-paxed/18_3rd_floor.sol  \
-       data/map-paxed/a.sol \
-       data/map-paxed/b.sol \
-       data/map-paxed/c.sol \
-       data/map-paxed/d.sol \
-       data/map-paxed/e.sol \
-       data/map-paxed/f.sol \
-       data/map-paxed/g.sol \
-       data/map-paxed/h.sol \
-       data/map-paxed/i.sol \
-       data/map-paxed/j.sol \
-       data/map-paxed/k.sol \
-       data/map-paxed/l.sol \
-       data/map-paxed/m.sol \
-       data/map-paxed/n.sol \
-       data/map-paxed/o.sol \
-       data/map-paxed/p.sol \
-       data/map-paxed/q.sol \
-       data/map-paxed/r.sol \
-       data/map-paxed/s.sol \
-       data/map-paxed/t.sol \
-       data/map-paxed/u.sol \
-       data/map-paxed/v.sol \
-       data/map-paxed/w.sol \
-       data/map-paxed/x.sol \
-       data/map-paxed/y.sol \
-       data/map-paxed/z.sol
+ALL_CPPFLAGS += $(CPPFLAGS)
 
 #------------------------------------------------------------------------------
+# Libraries
 
-%.d : %.c
-       $(CC) $(CFLAGS) -Ishare -MM -MF $@ $<
+SDL_LIBS := $(shell sdl-config --libs)
+PNG_LIBS := $(shell libpng-config --libs)
 
-%.o : %.c
-       $(CC) $(CFLAGS) -Ishare -o $@ -c $<
+# The  non-conditionalised values  below  are specific  to the  native
+# system. The native system of this Makefile is Linux (or GNU+Linux if
+# you prefer). Please be sure to  override ALL of them for each target
+# system in the conditional parts below.
+
+INTL_LIBS :=
+
+ifeq ($(ENABLE_WII),1)
+    TILT_LIBS := -lcwiimote -lbluetooth
+endif
+
+OGL_LIBS := -lGL -lm
+
+ifdef MINGW
+    ifneq ($(ENABLE_NLS),0)
+        INTL_LIBS := -lintl -liconv
+    endif
 
-data/map-rlk/%.sol : data/map-rlk/%.map $(MAPC_TARG)
-       ./$(MAPC_TARG) $< data
+    TILT_LIBS :=
+    OGL_LIBS  := -lopengl32 -lm
+endif
 
-data/map-mym/%.sol : data/map-mym/%.map $(MAPC_TARG)
-       ./$(MAPC_TARG) $< data
+ifdef DARWIN
+    ifneq ($(ENABLE_NLS),0)
+        INTL_LIBS := -lintl -liconv
+    endif
 
-data/map-putt/%.sol : data/map-putt/%.map $(MAPC_TARG)
-       ./$(MAPC_TARG) $< data
+    TILT_LIBS :=
+    OGL_LIBS  := -framework OpenGL
+endif
 
-data/map-back/%.sol : data/map-back/%.map $(MAPC_TARG)
-       ./$(MAPC_TARG) $< data
+BASE_LIBS := -ljpeg $(PNG_LIBS)
 
-data/map-paxed/%.sol : data/map-paxed/%.map $(MAPC_TARG)
-       ./$(MAPC_TARG) $< data
+ifdef DARWIN
+    BASE_LIBS += -L/opt/local/lib
+endif
+
+ALL_LIBS := $(SDL_LIBS) $(BASE_LIBS) $(TILT_LIBS) $(INTL_LIBS) -lSDL_ttf \
+    -lvorbisfile $(OGL_LIBS)
 
 #------------------------------------------------------------------------------
 
-all : $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG) $(SOLS)
+ifdef MINGW
+    EXT := .exe
+endif
+
+MAPC_TARG := mapc$(EXT)
+BALL_TARG := neverball$(EXT)
+PUTT_TARG := neverputt$(EXT)
+
+ifdef MINGW
+    MAPC := $(WINE) ./$(MAPC_TARG)
+else
+    MAPC := ./$(MAPC_TARG)
+endif
+
+
+#------------------------------------------------------------------------------
+
+MAPC_OBJS := \
+       share/vec3.o        \
+       share/base_image.o  \
+       share/solid.o       \
+       share/binary.o      \
+       share/base_config.o \
+       share/mapc.o
+BALL_OBJS := \
+       share/lang.o        \
+       share/st_resol.o    \
+       share/vec3.o        \
+       share/base_image.o  \
+       share/image.o       \
+       share/solid.o       \
+       share/solid_gl.o    \
+       share/part.o        \
+       share/back.o        \
+       share/geom.o        \
+       share/ball.o        \
+       share/gui.o         \
+       share/base_config.o \
+       share/config.o      \
+       share/binary.o      \
+       share/state.o       \
+       share/audio.o       \
+       share/text.o        \
+       share/sync.o        \
+       share/tilt.o        \
+       share/common.o      \
+       ball/hud.o          \
+       ball/mode.o         \
+       ball/game.o         \
+       ball/score.o        \
+       ball/level.o        \
+       ball/levels.o       \
+       ball/set.o          \
+       ball/demo.o         \
+       ball/util.o         \
+       ball/st_conf.o      \
+       ball/st_demo.o      \
+       ball/st_save.o      \
+       ball/st_goal.o      \
+       ball/st_fall_out.o  \
+       ball/st_time_out.o  \
+       ball/st_done.o      \
+       ball/st_level.o     \
+       ball/st_over.o      \
+       ball/st_play.o      \
+       ball/st_set.o       \
+       ball/st_start.o     \
+       ball/st_title.o     \
+       ball/st_help.o      \
+       ball/st_name.o      \
+       ball/st_shared.o    \
+       ball/st_pause.o     \
+       ball/main.o
+PUTT_OBJS := \
+       share/lang.o        \
+       share/st_resol.o    \
+       share/vec3.o        \
+       share/base_image.o  \
+       share/image.o       \
+       share/solid.o       \
+       share/solid_gl.o    \
+       share/part.o        \
+       share/geom.o        \
+       share/ball.o        \
+       share/back.o        \
+       share/base_config.o \
+       share/config.o      \
+       share/binary.o      \
+       share/audio.o       \
+       share/state.o       \
+       share/gui.o         \
+       share/text.o        \
+       share/sync.o        \
+       putt/hud.o          \
+       putt/game.o         \
+       putt/hole.o         \
+       putt/course.o       \
+       putt/st_all.o       \
+       putt/st_conf.o      \
+       putt/main.o
+
+BALL_DEPS := $(BALL_OBJS:.o=.d)
+PUTT_DEPS := $(PUTT_OBJS:.o=.d)
+MAPC_DEPS := $(MAPC_OBJS:.o=.d)
+
+MAPS := $(shell find data -name "*.map" \! -name "*.autosave.map")
+SOLS := $(MAPS:%.map=%.sol)
+
+#------------------------------------------------------------------------------
+
+%.o : %.c
+       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -MM -MP -MF $*.d -MT "$@" $<
+       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -o $@ -c $<
+
+%.sol : %.map $(MAPC_TARG)
+       $(MAPC) $< data
+
+#------------------------------------------------------------------------------
+
+all : $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG) sols locales
 
 $(BALL_TARG) : $(BALL_OBJS)
-       $(CC) $(CFLAGS) -o $(BALL_TARG) $(BALL_OBJS) $(LIBS)
+       $(CC) $(ALL_CFLAGS) -o $(BALL_TARG) $(BALL_OBJS) $(LDFLAGS) $(ALL_LIBS)
 
 $(PUTT_TARG) : $(PUTT_OBJS)
-       $(CC) $(CFLAGS) -o $(PUTT_TARG) $(PUTT_OBJS) $(LIBS)
+       $(CC) $(ALL_CFLAGS) -o $(PUTT_TARG) $(PUTT_OBJS) $(LDFLAGS) $(ALL_LIBS)
 
 $(MAPC_TARG) : $(MAPC_OBJS)
-       $(CC) $(CFLAGS) -o $(MAPC_TARG) $(MAPC_OBJS) $(LIBS)
+       $(CC) $(ALL_CFLAGS) -o $(MAPC_TARG) $(MAPC_OBJS) $(LDFLAGS) $(BASE_LIBS)
+
+# Work around some extremely helpful sdl-config scripts.
+
+ifdef MINGW
+$(MAPC_TARG) : ALL_CPPFLAGS := $(ALL_CPPFLAGS) -Umain
+endif
+
+sols : $(SOLS)
+
+locales :
+ifneq ($(ENABLE_NLS),0)
+       $(MAKE) -C po
+endif
 
 clean-src :
-       rm -f $(BALL_TARG) $(BALL_OBJS) $(BALL_DEPS)
-       rm -f $(PUTT_TARG) $(PUTT_OBJS) $(PUTT_DEPS)
-       rm -f $(MAPC_TARG) $(MAPC_OBJS) $(MAPC_DEPS)
+       $(RM) $(BALL_TARG) $(BALL_OBJS) $(BALL_DEPS)
+       $(RM) $(PUTT_TARG) $(PUTT_OBJS) $(PUTT_DEPS)
+       $(RM) $(MAPC_TARG) $(MAPC_OBJS) $(MAPC_DEPS)
 
 clean : clean-src
-       rm -f $(SOLS)
+       $(RM) $(SOLS)
+       $(MAKE) -C po clean
 
 test : all
        ./neverball
 
 #------------------------------------------------------------------------------
+
+.PHONY : all sols locales clean-src clean test
+
+-include $(BALL_DEPS) $(PUTT_DEPS) $(MAPC_DEPS)
+
+#------------------------------------------------------------------------------
+
+ifdef MINGW
+
+#------------------------------------------------------------------------------
+
+INSTALLER := ../neverball-$(VERSION)-setup.exe
+
+MAKENSIS := makensis
+MAKENSIS_FLAGS := -DVERSION=$(VERSION) -DOUTFILE=$(INSTALLER)
+
+TODOS   := todos
+FROMDOS := fromdos
+
+CP := cp
+
+TEXT_DOCS := \
+       doc/AUTHORS \
+       doc/MANUAL  \
+       CHANGES     \
+       COPYING     \
+       README
+
+TXT_DOCS := $(TEXT_DOCS:%=%.txt)
+
+#------------------------------------------------------------------------------
+
+.PHONY: setup
+setup: $(INSTALLER)
+
+$(INSTALLER): install-dlls convert-text-files all tools
+       $(MAKENSIS) $(MAKENSIS_FLAGS) -nocd scripts/neverball.nsi
+
+$(INSTALLER): LDFLAGS := -s $(LDFLAGS)
+
+.PHONY: clean-setup
+clean-setup: clean
+       $(RM) install-dlls.sh *.dll $(TXT_DOCS)
+       find data -name "*.txt" -exec $(FROMDOS) {} \;
+       $(MAKE) -C tools EXT=$(EXT) clean
+
+#------------------------------------------------------------------------------
+
+.PHONY: install-dlls
+install-dlls: install-dlls.sh
+       sh $<
+
+install-dlls.sh:
+       if ! sh scripts/gen-install-dlls.sh > $@; then \
+           $(RM) $@; \
+           exit 1; \
+       fi
+       @echo --------------------------------------------------------
+       @echo You can probably ignore any file-not-found errors above.
+       @echo Now edit $@ to your needs before restarting make.
+       @echo --------------------------------------------------------
+       @exit 1
+
+#------------------------------------------------------------------------------
+
+.PHONY: convert-text-files
+convert-text-files: $(TXT_DOCS)
+       find data -name "*.txt" -exec $(TODOS) {} \;
+
+%.txt: %
+       $(CP) $< $@
+       $(TODOS) $@
+
+#------------------------------------------------------------------------------
+
+.PHONY: tools
+tools:
+       $(MAKE) -C tools EXT=$(EXT)
+
+#------------------------------------------------------------------------------
+
+endif
+
+#------------------------------------------------------------------------------