# Makefile for VgaGames2, copyright (C) 2000-2007 Kurt Nienhaus
#
# To install:
#   ./config.sh [-local]
#   make
#   make install (as user root)
#
# To clean source directory:
#   make clean
#
# To uninstall VgaGames2:
#   make uninstall


CC = gcc
CPP = gcc -E
CFLAGS = -Wall -O2
SHAREDIR = /usr/share/vgagames
LOCALINST = 0
HAVE_SOUND_ALSA09 = 1
HAVE_SVGALIB = 0
HAVE_VGL = 0
HAVE_X11 = 1
X11_PFAD = /usr

BINDIR = /usr/local/bin
RANLIB=ar


all: vgag2 vgag-bitmap vgag-sound tmidi.d mp3.d compat.d

uninstall:
	cd tmidi && $(MAKE) SHAREDIR="$(SHAREDIR)" uninstall
	cd mp3 && $(MAKE) SHAREDIR="$(SHAREDIR)" uninstall
	test "$(LOCALINST)" != "0" && true || { cd compat && $(MAKE) SHAREDIR="$(SHAREDIR)" LOCALINST="$(LOCALINST)" uninstall; }
	rm -f $(SHAREDIR)/lib/libvgagames2.a
	rm -f $(SHAREDIR)/include/vgagames2.h
	rm -f $(SHAREDIR)/*.clm $(SHAREDIR)/*.font
	rm -f $(SHAREDIR)/*.dat
	rm -f $(SHAREDIR)/bin/vgag-sound
	rm -f $(SHAREDIR)/bin/vgag-bitmap
	rm -f $(SHAREDIR)/bin/vgag2-config
	test ! -d "$(SHAREDIR)/bin" && true || rmdir $(SHAREDIR)/bin
	test ! -d "$(SHAREDIR)/lib" && true || rmdir $(SHAREDIR)/lib
	test ! -d "$(SHAREDIR)/include" && true || rmdir $(SHAREDIR)/include
	test ! -d "$(SHAREDIR)" && true || rmdir $(SHAREDIR)
	test "$(LOCALINST)" = "0" && rm -f /usr/bin/vgag2-config $(BINDIR)/vgag-bitmap || true

clean:
	cd tmidi && $(MAKE) clean
	cd mp3 && $(MAKE) clean
	cd compat && $(MAKE) clean
	rm -f *.o config.h config.log vgag2-config
	rm -f libvgagames2.a
	rm -f vgag-bitmap
	rm -f vgag-sound


install:
	mkdir -p $(BINDIR) || true
	mkdir -p $(SHAREDIR)/bin || true
	mkdir -p $(SHAREDIR)/lib || true
	mkdir -p $(SHAREDIR)/include || true
	cp vgag2-config $(SHAREDIR)/bin/ && chmod 755 $(SHAREDIR)/bin/vgag2-config && \
	test "$(LOCALINST)" = "0" && ln -s $(SHAREDIR)/bin/vgag2-config /usr/bin/vgag2-config || true
	cp vgagames2.h $(SHAREDIR)/include/ && chmod 644 $(SHAREDIR)/include/vgagames2.h
	cp ../share/*.font ../share/*.clm $(SHAREDIR)/
	test ! -f libvgagames2.a && true || { cp libvgagames2.a $(SHAREDIR)/lib && chmod 644 $(SHAREDIR)/lib/libvgagames2.a; }
	test ! -f vgag-bitmap && true || \
	{ cp vgag-bitmap $(SHAREDIR)/bin/; test "$(LOCALINST)" = "0" && ln -s $(SHAREDIR)/bin/vgag-bitmap $(BINDIR)/vgag-bitmap || true; }
	test ! -f vgag-sound && true || { cp vgag-sound $(SHAREDIR)/bin/; chown root $(SHAREDIR)/bin/vgag-sound 2> /dev/null && chmod 4755 $(SHAREDIR)/bin/vgag-sound || true; }
	cd tmidi && $(MAKE) SHAREDIR="$(SHAREDIR)" install
	cd mp3 && $(MAKE) SHAREDIR="$(SHAREDIR)" install
	test "$(LOCALINST)" != "0" && true || { cd compat && $(MAKE) SHAREDIR="$(SHAREDIR)" LOCALINST="$(LOCALINST)" install; }


# *** files ***

OBJ=vgag_support.o vgagames2.o read_link.o cwdir.o sysmenu.o inthash.o \
	utf8.o bitmap.o vga_conv.o draw.o font.o color.o video_x11.o \
	video_svgalib.o video_vgl.o sound.o nw_support.o nw_rdwr.o \
	nw_ifi_get.o nw_mbcast.o nw_server.o nw_client.o sprite.o formel.o \
	film.o textformat.o

vgag2: $(OBJ)
	$(RANLIB) rcs libvgagames2.a $(OBJ)

vgag_support.o: config.h vgag_support.c vgag_support.h
	$(CC) $(CFLAGS) -c vgag_support.c

vgagames2.o: config.h vgagames2.c vgagames2.h
	$(CC) $(CFLAGS) -c vgagames2.c

read_link.o: read_link.c
	$(CC) $(CFLAGS) -c read_link.c

cwdir.o: config.h cwdir.c cwdir.h
	$(CC) $(CFLAGS) -c cwdir.c

sysmenu.o: config.h sysmenu.c sysmenu.h
	$(CC) $(CFLAGS) -c sysmenu.c

inthash.o: config.h inthash.c inthash.h
	$(CC) $(CFLAGS) -c inthash.c

utf8.o: config.h utf8.c utf8.h
	$(CC) $(CFLAGS) -c utf8.c

bitmap.o: config.h bitmap.c bitmap.h
	$(CC) $(CFLAGS) -c bitmap.c

vga_conv.o: config.h vga_conv.c vga_conv.h
	$(CC) $(CFLAGS) -c vga_conv.c

draw.o: config.h draw.c
	$(CC) $(CFLAGS) -c draw.c

font.o: config.h font.c font.h
	$(CC) $(CFLAGS) -c font.c

color.o: config.h color.c color.h
	$(CC) $(CFLAGS) -c color.c

fnpatt.o: config.h fnpatt.c
	$(CC) $(CFLAGS) -c fnpatt.c

video_x11.o: config.h video_x11.c video_x11.h
	if test "$(HAVE_X11)" = "1"; then \
	  $(CC) $(CFLAGS) -I$(X11_PFAD)/include -c video_x11.c; \
	else \
	  rm -f x.c; touch x.c; $(CC) -c x.c; mv -f x.o video_x11.o; rm -f x.c; \
	fi

video_svgalib.o: config.h video_svgalib.c video_svgalib.h
	if test "$(HAVE_SVGALIB)" = "1"; then \
	  $(CC) $(CFLAGS) -I/usr/local/include -c video_svgalib.c; \
	else \
	  rm -f x.c; touch x.c; $(CC) -c x.c; mv -f x.o video_svgalib.o; rm -f x.c; \
	fi

video_vgl.o: config.h video_vgl.c video_vgl.h
	if test "$(HAVE_VGL)" = "1"; then \
	  $(CC) $(CFLAGS) -I/usr/local/include -c video_vgl.c; \
	else \
	  rm -f x.c; touch x.c; $(CC) -c x.c; mv -f x.o video_vgl.o; rm -f x.c; \
	fi

sound.o: config.h sound.c
	$(CC) $(CFLAGS) -c sound.c

nw_support.o: config.h nw_support.c nw_support.h
	$(CC) $(CFLAGS) -c nw_support.c

nw_rdwr.o: config.h nw_rdwr.c nw_rdwr.h
	$(CC) $(CFLAGS) -c nw_rdwr.c

nw_ifi_get.o: config.h nw_ifi_get.c nw_ifi_get.h
	$(CC) $(CFLAGS) -c nw_ifi_get.c

nw_mbcast.o: config.h nw_mbcast.c nw_mbcast.h
	$(CC) $(CFLAGS) -c nw_mbcast.c

nw_server.o: config.h nw_server.c nw_glob.h
	$(CC) $(CFLAGS) -c nw_server.c

nw_client.o: config.h nw_client.c nw_glob.h
	$(CC) $(CFLAGS) -c nw_client.c

sprite.o: config.h sprite.c
	$(CC) $(CFLAGS) -c sprite.c

formel.o: config.h formel.c
	$(CC) $(CFLAGS) -c formel.c

film.o: config.h film.c
	$(CC) $(CFLAGS) -c film.c

textformat.o: config.h textformat.c textformat.h
	$(CC) $(CFLAGS) -c textformat.c


# *** config ***

config.h:
	@echo "You need to execute at first \"./config.sh\""
	@exit 1


# *** programs ***

vgag-bitmap: config.h vgag_support.o vga_conv.o vgag-bitmap.c
	$(CC) $(CFLAGS) -o vgag-bitmap vgag-bitmap.c vgag_support.o vga_conv.o


vgag-sound: config.h vgag_support.o vgag-sound.c vgag-sound.h \
	sounddev_oss.h sounddev_alsa09.h sounddev_saudio.h \
	extsoundserver.h ualaw.h read_link.o cwdir.o inthash.o fnpatt.o
	if test "$(HAVE_SOUND_ALSA09)" = "1"; then \
	  $(CC) $(CFLAGS) -o vgag-sound vgag-sound.c vgag_support.o read_link.o cwdir.o inthash.o fnpatt.o -lasound -lm; \
	else \
	  $(CC) $(CFLAGS) -o vgag-sound vgag-sound.c vgag_support.o read_link.o cwdir.o inthash.o fnpatt.o -lm; \
	fi

tmidi.d: config.h vgag_support.o
	cd tmidi && $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" all

mp3.d: config.h vgag_support.o
	cd mp3 && $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" all

compat.d: config.h
	test "$(LOCALINST)" != "0" && true || { cd compat && $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" all; }

