
# 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
  endif
endif

ifeq ($(SYSTEM),)
  ifdef MINGDIR
    SYSTEM=windows
  endif
endif

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



ifeq ($(SYSTEM),unix)
  RM=rm -f
  RMTREE=rm -rf
  INSTALL_DIR=install -d
  INSTALL_FILE=install
  PATHSEP=/
  SUFFIX=
  ifeq ($(PREFIX),)
    PREFIX=/usr/local
  endif
else
ifeq ($(SYSTEM),dos)
  SUFFIX=.exe
  ifdef UNIX_TOOLS
    RM=rm -f
    RMTREE=rm -rf
    INSTALL_DIR=mkdir
    INSTALL_FILE=cp
    PATHSEP=/
    ifeq ($(PREFIX),)
      PREFIX=$(subst \,/,$(DJDIR))
    endif
  else
    RM=del
    RMTREE=deltree /y
    INSTALL_DIR=mkdir
    INSTALL_FILE=copy
    PATHSEP=\\
    ifeq ($(PREFIX),)
      PREFIX=$(subst /,\,$(DJDIR))
    endif
  endif
else
ifeq ($(SYSTEM),windows)
  SUFFIX=.exe
  ifdef UNIX_TOOLS
    RM=rm -f
    RMTREE=rm -rf
    INSTALL_DIR=mkdir
    INSTALL_FILE=cp
    PATHSEP=/
    ifeq ($(PREFIX),)
      PREFIX=$(subst \,/,$(MINGDIR))
    endif
  else
    RM=del
    RMTREE=deltree /y
    INSTALL_DIR=mkdir
    INSTALL_FILE=copy
    PATHSEP=\\
    ifeq ($(PREFIX),)
      PREFIX=$(subst /,\,$(MINGDIR))
    endif
  endif
else
  autodetect_failed: autodetect_message
endif
endif
endif

PREFIXD=$(PREFIX)$(PATHSEP)

CC=gcc
CFLAGS=-Wall -W -O2
LDFLAGS=-L.

ifneq ($(DEBUG),)
CFLAGS+=-DDEBUG
endif

VERSION=1.0.1
TARBALLNAME=alrand-$(VERSION)
ZIPNAME=alran101

.PHONY: autodetect_failed autodetect_message clean dist typetest typeclean
.PHONY: install install_lib install_header uninstall

all: libalrand.a

libalrand.a: alrand.o mersenne.o lcg.o
	ar cr libalrand.a alrand.o mersenne.o lcg.o

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

alrandt: alrandt.o libalrand.a
	gcc -o alrandt alrandt.o libalrand.a -lm

alrand.o: alrand.h alrand.c config.h

config.h:
	-$(MAKE) typetest
	-$(MAKE) typeclean

clean: typeclean
	-$(RM) libalrand.a
	-$(RM) config.h
	-$(RM) alrand.o
	-$(RM) mersenne.o
	-$(RM) lcg.o
	-$(RM) alrandt.o
	-$(RM) alrandt

install: install_lib install_header

install_lib:
	-$(INSTALL_DIR) $(PREFIXD)lib
	$(INSTALL_FILE) libalrand.a $(PREFIXD)lib

install_header:
	-$(INSTALL_DIR) $(PREFIXD)include
	-$(INSTALL_DIR) $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) alrand.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) config.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) mersenne.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) lcg.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) lsalleg.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) lsfd.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) lsstdio.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) lszlib.h $(PREFIXD)include$(PATHSEP)alrand
	$(INSTALL_FILE) lsbzlib.h $(PREFIXD)include$(PATHSEP)alrand

uninstall:
	-$(RM) $(PREFIXD)lib$(PATHSEP)libalrand.a
	-$(RM) $(PREFIXD)include$(PATHSEP)alrand.h
	-$(RMTREE) $(PREFIXD)include$(PATHSEP)alrand

dist: docs
	-rm -f $(TARBALLNAME).tar.gz
	-rm -f $(ZIPNAME).zip
	-mkdir $(TARBALLNAME)
	cp alrand.h alrand.c \
           mersenne.h mersenne.c mt19937i.out \
           lcg.h lcg.c \
           _alrtt.c \
           lsalleg.h lsstdio.h lsfd.h lszlib.h lsbzlib.h \
           Makefile alrandt.c mkprimes.c \
           alrand.html 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)

docs:
	makedoc -html alrand.html alrand._tx

test: alrandt
	@.$(PATHSEP)alrandt > alrandt.out
	@diff mt19937i.out alrandt.out
	@echo Mersenne Twister test passed
	-@$(RM) alrandt.out

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

typetest:
	-$(RM) config.h
	-touch config.h
	$(CC) $(CFLAGS) -o _alrtt.o -c _alrtt.c
	$(CC) $(LDFLAGS) -o _alrtt$(SUFFIX) _alrtt.o $(LIBS)
	.$(PATHSEP)_alrtt

typeclean:
	$(RM) _alrtt$(SUFFIX)
	$(RM) _alrtt.o

