#
# Linberto
#
#
#----------------------------------------------------------------------------
# Modify this, if you need to and if you know what you are doing.
#----------------------------------------------------------------------------
#

#----------------------------------------------------------------------------
# Program version
#----------------------------------------------------------------------------

MAJOR_VER = 1
MINOR_VER = 0.5
VERSION   = $(MAJOR_VER).$(MINOR_VER)
RELEASE   = 1
RELEASEDATE = February 2001

#----------------------------------------------------------------------------
# RPM build stuff.
#----------------------------------------------------------------------------

RPMROOT=/usr/src/redhat
RPM = rpm
RPMFLAGS = -ba

# Spec filename.
SPECNAME = linberto-$(VERSION)-$(RELEASE).spec

#----------------------------------------------------------------------------

# Source directory
SRCDIR = .

# Prefix
PREFIX = /usr/local

# Where to install the binary
BINDIR = $(PREFIX)/bin

SRCDOCDIR = ../doc
INSDOCDIR = $(PREFIX)/doc/linberto-$(VERSION)
SRCMANDIR = ../man
INSMANDIR = $(PREFIX)/man/man6
INSMANDIRIT = $(PREFIX)/man/it/man6
INSMANDIRES = $(PREFIX)/man/es/man6
MKMANDIR = $(INSMANDIR) $(INSMANDIRIT) $(INSMANDIRES)
LIBDIR = $(PREFIX)/lib/linberto

#----------------------------------------------------------------------------

SCOREFILE  = $(LIBDIR)/highscores.dat
CONFIGFILE = $(LIBDIR)/config.dat
SNDDIR     = $(LIBDIR)/sounds
DATADIR    = $(LIBDIR)
WORLDFILE  = default.wld
SOUNDDEV   = /dev/dsp
SCREENSDIR = /tmp/

#----------------------------------------------------------------------------
# NLS Stuff

XGETTEXT = /usr/bin/xgettext
PODIR = $(SRCDIR)/po
PACKAGE = linberto
LOCALEDIR = $(PREFIX)/share/locale
CATALOGS = $(PODIR)/es.gmo $(PODIR)/it.gmo $(PODIR)/de.gmo
POXFILES = $(PODIR)/es.pox $(PODIR)/it.pox $(PODIR)/de.pox
MSGMERGE = /usr/bin/msgmerge
GMSGFMT = /usr/bin/msgfmt

#----------------------------------------------------------------------------
# Makefile strings (checking LANG).
#
# Hey! translating the Makefile strings?? Am I crazy? NO! I'm not,
# it was the idea of the Italian translator, just blame him!
#
NLS_INS_STR="Installing..."
NLS_CRE_STR="Creating directories..."
NLS_FIL_STR="Installing files..."
NLS_MAN_STR="Installing man page..."
NLS_DON_STR="Done."

ifeq ($(LANG),it)
      NLS_INS_STR="Installazione"
      NLS_CRE_STR="Creazione directory in corso..."
      NLS_FIL_STR="Installazione dei file in corso..."
      NLS_MAN_STR="Installazione della pagina di manuale in corso..."
      NLS_DON_STR="Fatto"
else
      ifeq ($(LANG),es)
            NLS_INS_STR="Instalando..."
            NLS_CRE_STR="Creando directorios..."
            NLS_FIL_STR="Instalando archivos de datos..."
            NLS_MAN_STR="Instalando paginas de manual..."
            NLS_DON_STR="Listo."
      endif
endif


#----------------------------------------------------------------------------
# Sound Stuff
#

#
# Set ENABLE_SOUND to 1 if you will use a sound card.
#
# Sound enabled
ENABLE_SOUND = 1
# Sound disabled
# ENABLE_SOUND = 0

SND_WELCO  = welcome.raw
SND_BKGDM  = backgroundmusic.raw
SND_DEATH  = death.raw
SND_JUMP   = jump.raw
SND_SPLAT  = splat.raw
SND_FPJP   = flowerpotjump.raw
SND_BUBJP  = bubblejump.raw
SND_CHANGE = change.raw
SND_FALL   = fall.raw
SND_MENU   = menu.raw
SND_BUBK   = bubblekill.raw
SND_BLKD   = blockdestroy.raw
SND_BLKF   = blockfill.raw
SND_BLKM   = blockmove.raw
SND_BLKN   = blocknext.raw

#----------------------------------------------------------------------------

MKDIR = mkdir -p

# Mode for user binaries
BINMODE=700

# Compiler to use
CC = gcc

# Compiler warnings
WARNINGS= -pedantic -Wall

# Compiler flags
CCOPTS = -O2 -fomit-frame-pointer

SHELL = /bin/sh

# Libraries needed
LIBS = -lvgagl -lvga

# Clear and set suffixes
.SUFFIXES:
.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat

# Install program
INSTALL = install

# sed command
SEDBIN       = sed
SEDCMDS      = "s/@version@/$(VERSION)/g;s/@releasedate@/$(RELEASEDATE)/g;s%@ssdir@%$(SCREENSDIR)%g;s%@libdir@%$(LIBDIR)%g"

#----------------------------------------------------------------------------

OBJ = draw.o game.o help.o init.o joy.o key.o llist.o main.o misc.o\
	nls.o palette.o score.o screen.o setup.o signals.o sound.o\
	soundIt.o sprites.o world.o

PROGRAM = linberto

all: $(PROGRAM) $(CATALOGS)

$(PROGRAM): $(OBJ)
	$(CC) $(CCOPTS) $(OBJ) $(LIBS) -o $@

clean:
	rm -f $(OBJ) core $(PROGRAM) defines.h $(SPECNAME) \
		../../linberto-$(VERSION).tar.gz \
		linberto-$(VERSION)*.rpm \
		$(PODIR)/POTFILES.in \
		$(CATALOGS) $(POXFILES)

strip:
	strip $(PROGRAM)

install:
	@echo $(NLS_INS_STR)
	@echo $(NLS_CRE_STR)
	@$(MKDIR) $(INSDOCDIR)
	@$(MKDIR) $(LIBDIR)
	@$(MKDIR) $(SNDDIR)
	@echo $(NLS_FIL_STR)
	@$(INSTALL) -g root -m $(BINMODE) -o \
		root -s $(SRCDIR)/$(PROGRAM) $(BINDIR)
	@$(INSTALL) -g root -m 600 -o root $(SRCDIR)/data/$(WORLDFILE) $(LIBDIR)
	@$(INSTALL) -g root -m 600 -o root $(SRCDIR)/data/sounds/*.raw $(SNDDIR)
	@cp -rp $(SRCDOCDIR)/. $(INSDOCDIR)
	@echo $(NLS_MAN_STR)
	@$(MKDIR) $(MKMANDIR)
	@$(SEDBIN) $(SEDCMDS) $(SRCMANDIR)/linberto.6.in \
		> $(INSMANDIR)/linberto.6
	@$(SEDBIN) $(SEDCMDS) $(SRCMANDIR)/linberto.6.in.it \
		> $(INSMANDIRIT)/linberto.6
	@$(SEDBIN) $(SEDCMDS) $(SRCMANDIR)/linberto.6.in.es \
		> $(INSMANDIRES)/linberto.6
	@chown 0.0 $(INSMANDIR)/linberto.6
	@chown 0.0 $(INSMANDIRIT)/linberto.6
	@chown 0.0 $(INSMANDIRES)/linberto.6
	@$(MKDIR) $(LOCALEDIR)
	@catalogs='$(CATALOGS)'; \
	for cat in $$catalogs; do \
		lang=`echo $$cat | sed 's%.gmo%%'| sed 's%^.*/%%'`; \
		dir=$(LOCALEDIR)/$$lang/LC_MESSAGES; \
		$(MKDIR) $$dir; \
		$(INSTALL) -m 644 $$cat $$dir/$(PACKAGE).mo; \
	done
	@echo $(NLS_DON_STR)

uninstall:
	rm -f $(BINDIR)/$(PROGRAM)
	rm -f $(SCOREFILE)
	rm -f $(CONFIGFILE)
	rm -fr $(INSDOCDIR)
	rm -f $(LIBDIR)/$(WORLDFILE)
	rm -f $(SNDDIR)/*.raw
	rm -f $(INSMANDIR)/linberto.6
	rm -f $(INSMANDIRIT)/linberto.6
	rm -f $(INSMANDIRES)/linberto.6
	@catalogs='$(CATALOGS)'; \
	for cat in $$catalogs; do \
		lang=`echo $$cat | sed 's%.gmo%%'| sed 's%^.*/%%'`; \
		dir=$(LOCALEDIR)/$$lang/LC_MESSAGES; \
		rm -f $$dir/$(PACKAGE).mo; \
	done
	rmdir $(SNDDIR)
	rmdir $(LIBDIR)

dist: clean
	(cd ../../ ; tar -cvf linberto-$(VERSION).tar linberto-$(VERSION))
	gzip -9 ../../linberto-$(VERSION).tar
	gzip -vt ../../linberto-$(VERSION).tar.gz

rpm: dist $(SPECNAME)
	cp ../../linberto-$(VERSION).tar.gz $(RPMROOT)/SOURCES
	cp $(SPECNAME) $(RPMROOT)/SPECS
	cd $(RPMROOT)/SPECS; $(RPM) $(RPMFLAGS) $(SPECNAME)
	cp $(RPMROOT)/RPMS/`arch|sed 's/i[4-9]86/i386/'`/linberto-$(VERSION)*.rpm $(SRCDIR)
	cp $(RPMROOT)/SRPMS/linberto-$(VERSION)*.src.rpm $(SRCDIR)
	@echo "linberto RPM cooked."

.c.o:
	$(CC) $(CCOPTS) $(WARNINGS) -c $<

$(SPECNAME): $(CATALOGS)
	@echo "Creating the spec file..."
	catalogs='$(CATALOGS)'; \
	for cat in $$catalogs; do \
		lang=`echo $$cat | sed 's%.gmo%%'| sed 's%^.*/%%'`; \
		files=$$files" "$(LOCALEDIR)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
	done; \
	$(SRCDIR)/specgen.sh $(VERSION) $(RELEASE) \
		$(INSDOCDIR) $(INSMANDIR)/linberto.6 \
		$(INSMANDIRIT)/linberto.6 $(INSMANDIRES)/linberto.6 \
		$(LIBDIR) $(BINDIR)/$(PROGRAM) $$files \
		> $(SRCDIR)/$(SPECNAME)

$(OBJ): $(SRCDIR)/common.h $(SRCDIR)/sprites.h \
	$(SRCDIR)/game.h \
	$(SRCDIR)/fonts.h $(SRCDIR)/soundIt.h \
	$(SRCDIR)/draw.h $(SRCDIR)/defines.h

#
# Remember to do a 'make po/es.pox po/it.pox po/de.pox', if you made a 
# 'make linberto.pot' to add or delete string entries.
#
# Then make all changes manually inside those files (and rename
# them to ??.po).
#

.po.pox: $(PACKAGE).pot
	$(MSGMERGE) $< $(PODIR)/$(PACKAGE).pot -o $*.pox

.po.gmo:
	$(GMSGFMT) -o $@ $<

$(PACKAGE).pot: $(PODIR)/POTFILES.in
	$(XGETTEXT) --default-domain=$(PACKAGE) \
		--directory=$(PODIR) \
		--add-comments --keyword=_ \
		--output-dir=$(PODIR) \
		--files-from=$(PODIR)/POTFILES.in
	mv $(PODIR)/$(PACKAGE).po $(PODIR)/$(PACKAGE).pot

$(PODIR)/POTFILES.in:
	@echo
	@echo "Remember to delete the first ',fuzzy' entry in the"
	@echo "translated *.po file."
	@echo
	@echo "# List of files which contain translatable strings." > $(PODIR)/POTFILES.in
	@echo "# Copyright (C) 1996 Free Software Foundation, Inc." >> $(PODIR)/POTFILES.in
	@echo >> $(PODIR)/POTFILES.in
	@echo "# Package source files" >> $(PODIR)/POTFILES.in
	@/bin/ls *.c | sed s%"^"%"\.\./"%g >> $(PODIR)/POTFILES.in

defines.h:
	@echo "Creating file \"defines.h\""
	@echo "/*"                                                           > $(SRCDIR)/defines.h
	@echo "   Global #defines for Linberto"                              >> $(SRCDIR)/defines.h
	@echo "   Copyright (C) 1999-2001 Diego Javier Grigna <diego@grigna.com>" >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "   File automatically created by the Makefile."               >> $(SRCDIR)/defines.h
	@echo "   Do not edit by hand, modify the Makefile instead."         >> $(SRCDIR)/defines.h
	@echo "*/"                                                           >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_VERSION     \"$(VERSION)\""                  >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_CONFIGFILE  \"$(CONFIGFILE)\""               >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_SCOREFILE   \"$(SCOREFILE)\""                >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_WORLDFILE   \"$(WORLDFILE)\""                >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_DATADIR     \"$(DATADIR)\""                  >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_SOUNDDEV    \"$(SOUNDDEV)\""                 >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_SNDDIR      \"$(SNDDIR)\""                   >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define LINBERTO_SCREENSDIR  \"$(SCREENSDIR)\""               >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "/* If ENABLE_SOUND == 1 then the game will use sounds */"     >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define ENABLE_SOUND         $(ENABLE_SOUND)"                 >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "/* Sound files */"                                            >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define SND_WELCOME_FILE     \"$(SND_WELCO)\""                >> $(SRCDIR)/defines.h
	@echo "#define SND_BKGDM_FILE       \"$(SND_BKGDM)\""                >> $(SRCDIR)/defines.h
	@echo "#define SND_DEATH_FILE       \"$(SND_DEATH)\""                >> $(SRCDIR)/defines.h
	@echo "#define SND_JUMP_FILE        \"$(SND_JUMP)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_SPLAT_FILE       \"$(SND_SPLAT)\""                >> $(SRCDIR)/defines.h
	@echo "#define SND_FPJP_FILE        \"$(SND_FPJP)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_BUBJP_FILE       \"$(SND_BUBJP)\""                >> $(SRCDIR)/defines.h
	@echo "#define SND_CHANGE_FILE      \"$(SND_CHANGE)\""               >> $(SRCDIR)/defines.h
	@echo "#define SND_FALL_FILE        \"$(SND_FALL)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_MENU_FILE        \"$(SND_MENU)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_BUBK_FILE        \"$(SND_BUBK)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_BLKD_FILE        \"$(SND_BLKD)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_BLKF_FILE        \"$(SND_BLKF)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_BLKM_FILE        \"$(SND_BLKM)\""                 >> $(SRCDIR)/defines.h
	@echo "#define SND_BLKN_FILE        \"$(SND_BLKN)\""                 >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo "#define PACKAGE              \"$(PACKAGE)\""                  >> $(SRCDIR)/defines.h
	@echo "#define LOCALEDIR            \"$(LOCALEDIR)\""                >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h
	@echo ""                                                             >> $(SRCDIR)/defines.h

