
# Select your system if not autodetected by uncommenting the appropriate line:

#SYSTEM=unix
#SYSTEM=dos
#SYSTEM=windows

ifeq ($(SYSTEM),)
  ifneq (,$(findstring linux,$(OSTYPE)))
    SYSTEM=unix
  endif
endif

ifeq ($(SYSTEM),)
  ifdef DJDIR
    SYSTEM=dos
    ifneq (,$(findstring bash,$(SHELL)))
      UNIX_TOOLS = 1
    endif
  endif
endif

ifeq ($(SYSTEM),)
  ifdef MINGDIR
    SYSTEM=windows
    ifneq (,$(findstring /sh.exe,$(SHELL)))
      UNIX_TOOLS = 1
    endif
  endif
endif

ifeq ($(SYSTEM),)
  autodetect_failed: autodetect_message
endif



ifeq ($(SYSTEM),unix)
  ALLEGRO=`allegro-config --libs`
  RM=rm -f
  RMTREE=rm -rf
  INSTALL_DIR=install -d -m 755
  INSTALL_BIN=install -m 755
  INSTALL_HDR=install -m 644
  INSTALL_LIB=install -m 644
  INSTALL_MAN=install -m 644
  PATHSEP=/
  SUFFIX=
  ifeq ($(PREFIX),)
    PREFIX=/usr/local
  endif
else
ifeq ($(SYSTEM),dos)
  ALLEGRO=-lalleg
  SUFFIX=.exe
  ifdef UNIX_TOOLS
    RM=rm -f
    RMTREE=rm -rf
    INSTALL_DIR=mkdir
    INSTALL_BIN=cp
    INSTALL_HDR=cp
    INSTALL_LIB=cp
    INSTALL_MAN=cp
    PATHSEP=/
    ifeq ($(PREFIX),)
      PREFIX=$(subst \,/,$(DJDIR))
    endif
  else
    RM=del
    RMTREE=deltree /y
    INSTALL_DIR=mkdir
    INSTALL_HDR=copy
    INSTALL_BIN=copy
    INSTALL_LIB=copy
    INSTALL_MAN=copy
    PATHSEP=\\
    ifeq ($(PREFIX),)
      PREFIX=$(subst /,\,$(DJDIR))
    endif
    ECHO_DISLIKES_QUOTES=1
  endif
else
ifeq ($(SYSTEM),windows)
  ALLEGRO=-lalleg
  SUFFIX=.exe
  ifdef UNIX_TOOLS
    RM=rm -f
    RMTREE=rm -rf
    INSTALL_DIR=mkdir
    INSTALL_HDR=cp
    INSTALL_BIN=cp
    INSTALL_LIB=cp
    INSTALL_MAN=cp
    PATHSEP=/
    ifeq ($(PREFIX),)
      PREFIX=$(subst \,/,$(MINGDIR))
    endif
  else
    RM=del
    RMTREE=deltree /y
    INSTALL_DIR=mkdir
    INSTALL_HDR=copy
    INSTALL_BIN=copy
    INSTALL_LIB=copy
    INSTALL_MAN=copy
    PATHSEP=\\
    ifeq ($(PREFIX),)
      PREFIX=$(subst /,\,$(MINGDIR))
    endif
    ECHO_DISLIKES_QUOTES=1
  endif
else
  autodetect_failed: autodetect_message
endif
endif
endif

PREFIXD=$(PREFIX)$(PATHSEP)

VERSION=1.3.3
TARBALLNAME=alogg-$(VERSION)
ZIPNAME=alogg133

ifneq ($(TREMOR),)
CFLAGS+=-DALOGG_USE_TREMOR
LDFLAGS+=-Wl,--rpath -Wl,$(TREMOR)
LIBS=-lvorbisidec
else
LIBS=-lvorbisfile -lvorbisenc -lvorbis -logg -lm
endif

ifneq ($(CURL),)
CFLAGS+=-DALOGG_USE_CURL
LIBS+=`curl-config --libs`
endif

ifneq ($(PTHREAD),)
CFLAGS+=-DALOGG_USE_PTHREAD
LIBS+=-lpthread
endif

SHAREDLIBNAME=libalogg.so.$(VERSION)
ifneq ($(SHARED),)
CFLAGS+=-fPIC
LIBNAME=$(SHAREDLIBNAME)
else
LIBNAME=libalogg.a
endif

CC=gcc
CFLAGS+=-Wall
LDFLAGS+=-L.
LIBS+=$(ALLEGRO)

ifeq ($(TYPE),)
TYPE=html
endif
TYPEEXT=$(TYPE)
ifeq ($(TYPE),man)
TYPEEXT=3
endif

ifeq ($(DEBUG),1)
CFLAGS+=-g -DDEBUGMODE -DDEBUG -DFORTIFY -I/home/lyrian/valkin2/src/fortify
LIBS+=/home/lyrian/valkin2/lib/fortify.a
ALLEGRO=`allegro-config --libs debug --static`
else
CFLAGS+=-O2
endif

.PHONY: autodetect_failed autodetect_message clean dist docs
.PHONY: install install_lib install_header install_examples install_man
.PHONY: uninstall
.PHONY: patchtest patchclean

EXAMPLES= alogg_play$(SUFFIX) \
          alogg_stream$(SUFFIX) \
          alogg_encode$(SUFFIX) \
          alogg_dat$(SUFFIX)

ifneq ($(PTHREAD),)
EXAMPLES+=alogg_thread$(SUFFIX)
endif

all: $(LIBNAME) $(EXAMPLES) alogg.html

ifeq ($(SYSTEM),unix)
all: alogg-config
endif

LIBALLOG_OBJS = alogg.o
ifneq ($(CURL),)
LIBALLOG_OBJS += aloggurl.o
endif
ifneq ($(PTHREAD),)
LIBALLOG_OBJS += aloggpth.o
endif

libalogg.a: $(LIBALLOG_OBJS)
	ar cr libalogg.a $(LIBALLOG_OBJS)

$(SHAREDLIBNAME): $(LIBALLOG_OBJS)
	$(CC) $(LDFLAGS) -shared -Wl,-soname,libalogg.so.1 -o $@ \
              $(LIBALLOG_OBJS) $(LIBS)

alogg.o: aloggcfg.h alogg.h aloggint.h

aloggurl.o: alogg.h aloggurl.h

aloggpth.o: alogg.h aloggpth.h

aloggcfg.h:
	-$(MAKE) patchtest
	-$(MAKE) patchclean

%.o: %.c alogg.h aloggint.h
	$(CC) $(CFLAGS) -o $@ -c $<

alogg_play$(SUFFIX): alogg_play.o $(LIBNAME)
	$(CC) $(LDFLAGS) -o $@ alogg_play.o $(LIBNAME) $(LIBS)

alogg_stream$(SUFFIX): alogg_stream.o $(LIBNAME)
	$(CC) $(LDFLAGS) -o $@ alogg_stream.o $(LIBNAME) $(LIBS)

alogg_encode$(SUFFIX): alogg_encode.o $(LIBNAME)
	$(CC) $(LDFLAGS) -o $@ alogg_encode.o $(LIBNAME) $(LIBS)

alogg_dat$(SUFFIX): alogg_dat.o $(LIBNAME)
	$(CC) $(LDFLAGS) -o $@ alogg_dat.o $(LIBNAME) $(LIBS)

alogg_thread$(SUFFIX): alogg_thread.o $(LIBNAME)
	$(CC) $(LDFLAGS) -o $@ alogg_thread.o $(LIBNAME) $(LIBS)

ifeq ($(SYSTEM),unix)
alogg-config: alogg-config.skel
	(cat alogg-config.skel | \
          sed -e s/=VERSION/=$(VERSION)/ | \
          sed -e s#=PREFIX#=$(PREFIX)# | \
          sed -e s#=TREMOR#=$(TREMOR)# | \
          sed -e s#=CURL#=$(CURL)# | \
          sed -e s#=PTHREAD#=$(PTHREAD)# \
        > alogg-config) || $(RM) alogg-config
	chmod 755 alogg-config
endif

clean:
	-$(RM) libalogg.a
	-$(RM) $(SHAREDLIBNAME)
	-$(RM) alogg.o
	-$(RM) aloggurl.o
	-$(RM) aloggpth.o
	-$(RM) alogg_play.o
	-$(RM) alogg_play$(SUFFIX)
	-$(RM) alogg_stream.o
	-$(RM) alogg_stream$(SUFFIX)
	-$(RM) alogg_encode.o
	-$(RM) alogg_encode$(SUFFIX)
	-$(RM) alogg_dat.o
	-$(RM) alogg_dat$(SUFFIX)
	-$(RM) alogg_thread.o
	-$(RM) alogg_thread$(SUFFIX)
	-$(RM) aloggcfg.h
	-$(RM) alogg*.html
	-$(RM) alogg.texi
	-$(RM) alogg.rtf
	-$(RM) alogg.txt
	-$(RM) alogg.ascii
	-$(RM) *.3
	-$(RM) alogg-config

install: install_alogg_config \
         install_headers \
         install_examples \
         install_lib \
         install_man

install_alogg_config:
ifeq ($(SYSTEM),unix)
	-$(INSTALL_DIR) $(PREFIXD)bin
	$(INSTALL_BIN) alogg-config $(PREFIXD)bin
endif

install_lib: install_alogg_config
	-$(INSTALL_DIR) $(PREFIXD)lib
ifeq ($(SHARED),)
	-$(INSTALL_LIB) libalogg.a $(PREFIXD)lib
else
	-($(INSTALL_LIB) $(SHAREDLIBNAME) $(PREFIXD)lib && \
          /sbin/ldconfig || \
          (echo "ldconfig could not be run" && \
          echo "you will have to tell the linker where $(SHAREDLIBNAME) lives"))
endif

install_headers:
	-$(INSTALL_DIR) $(PREFIXD)include
	-$(INSTALL_DIR) $(PREFIXD)include$(PATHSEP)alogg
	$(INSTALL_HDR) alogg.h $(PREFIXD)include$(PATHSEP)alogg
	$(INSTALL_HDR) aloggint.h $(PREFIXD)include$(PATHSEP)alogg
	$(INSTALL_HDR) aloggurl.h $(PREFIXD)include$(PATHSEP)alogg
	$(INSTALL_HDR) aloggpth.h $(PREFIXD)include$(PATHSEP)alogg

install_examples:
	-$(INSTALL_DIR) $(PREFIXD)bin
	$(INSTALL_BIN) alogg_play$(SUFFIX) $(PREFIXD)bin
	$(INSTALL_BIN) alogg_stream$(SUFFIX) $(PREFIXD)bin
	$(INSTALL_BIN) alogg_encode$(SUFFIX) $(PREFIXD)bin
	$(INSTALL_BIN) alogg_dat$(SUFFIX) $(PREFIXD)bin
ifneq ($(PTHREAD),)
	$(INSTALL_BIN) alogg_thread$(SUFFIX) $(PREFIXD)bin
endif

install_man:
	-$(INSTALL_DIR) $(PREFIXD)man/$(PATHSEP)man1
	$(INSTALL_MAN) alogg-config.1 $(PREFIXD)man$(PATHSEP)man1
	-$(INSTALL_DIR) $(PREFIXD)man/$(PATHSEP)man3
	-$(INSTALL_MAN) *.3 $(PREFIXD)man$(PATHSEP)man3

uninstall:
	-$(RM) $(PREFIXD)bin$(PATHSEP)alogg_play
	-$(RM) $(PREFIXD)bin$(PATHSEP)alogg_stream
	-$(RM) $(PREFIXD)bin$(PATHSEP)alogg_encode
	-$(RM) $(PREFIXD)bin$(PATHSEP)alogg_dat
	-$(RM) $(PREFIXD)bin$(PATHSEP)alogg_thread
ifeq ($(SYSTEM),unix)
	-$(RM) $(PREFIXD)bin$(PATHSEP)alogg-config
endif
	-$(RM) $(PREFIXD)lib$(PATHSEP)libalogg.a
	-$(RM) $(PREFIXD)lib$(PATHSEP)$(SHAREDLIBNAME) && \
          /sbin/ldconfig || \
          (echo "ldconfig could not be run" && \
          echo "there might be some links to $(SHAREDLIBNAME) left")
	-$(RMTREE) $(PREFIXD)include$(PATHSEP)alogg
	-$(RM) $(PREFIXD)man$(PATHSEP)man1$(PATHSEP)alogg-config.1
	-$(RM) $(PREFIXD)man$(PATHSEP)man3$(PATHSEP)datogg_*.3
	-$(RM) $(PREFIXD)man$(PATHSEP)man3$(PATHSEP)alogg_*.3

dist:
	-rm -f $(TARBALLNAME).tar.gz
	-rm -f $(ZIPNAME).zip
	-mkdir $(TARBALLNAME)
	cp alogg.h aloggint.h alogg.c \
           aloggurl.c aloggurl.h \
           aloggpth.c aloggpth.h \
           datogg.c datogg.inc datogg.scu datogg.scr datogg.scm \
           alogg_play.c alogg_stream.c alogg_encode.c alogg_dat.c \
           alogg_thread.c \
           Makefile alogg._tx sample.diff libs.diff tremor.diff _alst.c \
           alogg-config.skel alogg-config.1 \
           README lgpl.txt LICENSE AUTHORS ChangeLog TODO \
           $(TARBALLNAME)
	tar cvfz $(TARBALLNAME).tar.gz $(TARBALLNAME)
	mv $(TARBALLNAME)/README $(TARBALLNAME)/README.txt
	mv $(TARBALLNAME) $(ZIPNAME)
	zip -rl $(ZIPNAME).zip $(ZIPNAME)
	rm -rf $(ZIPNAME)

alogg.html: alogg._tx
	makedoc -html alogg.html alogg._tx
	@echo The docs can be generated in a variety of formats.
	@echo To generate the docs in the FOO format, type:
	@echo \ \ make TYPE=FOO docs
	@echo For example, to generate docs in text format, type:
	@echo \ \ make TYPE=txt docs
	@echo Note: Allegro\'s makedoc must be in your path.

docs:
	makedoc -$(TYPE) alogg.$(TYPEEXT) alogg._tx

autodetect_message:
	@echo Your system type could not be autodetected
	@echo Edit the Makefile and select your system before trying again

patchtest:
	-$(RM) aloggcfg.h
ifeq ($(ECHO_DISLIKES_QUOTES),)
	echo "#undef HAS_REGISTER_SAMPLE_FILE_TYPE" > aloggcfg.h
else
	echo #undef HAS_REGISTER_SAMPLE_FILE_TYPE > aloggcfg.h
endif
	$(CC) $(CFLAGS) -o _alst.o -c _alst.c
	$(CC) $(LDFLAGS) -o _alst$(SUFFIX) _alst.o $(LIBS)
ifeq ($(ECHO_DISLIKES_QUOTES),)
	echo "#define HAS_REGISTER_SAMPLE_FILE_TYPE" > aloggcfg.h
else
	echo #define HAS_REGISTER_SAMPLE_FILE_TYPE > aloggcfg.h
endif

patchclean:
	-$(RM) _alst$(SUFFIX)
	-$(RM) _alst.o

