# -*- make -*-
MODULES = slsmg-module.so termios-module.so select-module.so fcntl-module.so \
  varray-module.so socket-module.so rand-module.so fork-module.so \
  csv-module.so base64-module.so chksum-module.so histogram-module.so \
  stats-module.so json-module.so \
  @PCRE_MODULE@ @PNG_MODULE@ @ICONV_MODULE@ @ONIG_MODULE@ @ZLIB_MODULE@ @SYSCONF_MODULE@
SLFILES = slsmg termios select fcntl varray socket rand fork csv  \
  base64 chksum histogram stats json \
  pcre png iconv onig zlib sysconf
TEST_SCRIPTS = test_slsmg.sl test_termios.sl test_select.sl test_fcntl.sl \
  test_varray.sl test_socket.sl test_rand.sl test_fork.sl test_csv.sl \
  test_base64.sl test_chksum.sl test_hist.sl test_stats.sl test_json.sl
#
CHKSUM_OBJS = chksum-module.o chksum_md5.o chksum_sha1.o
STATS_OBJS = stats-module.o stats_kendall.o
# ---------------------------------------------------------------------------
CC		= @CC@
CFLAGS		= @CFLAGS@ @SLANG_DLL_CFLAGS@
LDFLAGS		= @LDFLAGS@
CC_SHARED_FLAGS = @CC_SHARED_FLAGS@
CC_SHARED 	= $(CC) $(INCS) $(CC_SHARED_FLAGS) $(CFLAGS)
CONFIG_DIR	= @CONFIG_DIR@
SRCDIR		= $(CONFIG_DIR)/modules
CONFIG_H        = $(SRCDIR)/config.h
SLINT_H         = $(SRCDIR)/slint.h
OBJDIR		= $(ARCH)objs
OBJDIR_TSTAMP	= $(OBJDIR)/tstamp
# ---------------------------------------------------------------------------
# Installation location of the slang library
# ---------------------------------------------------------------------------
prefix 		= @prefix@
exec_prefix 	= @exec_prefix@
SLANG_SRCINC	= -I@SRCDIR@
DLL_IMPLIB_NAME = @DLL_IMPLIB_NAME@
# On some systems, the module must be linked to the slang library,
# but not all do.  If you have such system, point SLANG_LIB to the
# slang library, otherwise leave it blank.
ELFDIR          = @ELFDIR@
SLANG_LIB	= @SLANG_LIB_FOR_MODULES@

# ---------------------------------------------------------------------------
# If building the PCRE module, you may need to set these
# ---------------------------------------------------------------------------
PCRE_INC	= @PCRE_INC@
PCRE_LIB	= @PCRE_LIB@ -lpcre
# ---------------------------------------------------------------------------
# If building the PNG module, you may need to set these
# ---------------------------------------------------------------------------
PNG_INC	= @PNG_INC@
PNG_LIB	= @PNG_LIB@ -lpng
# ---------------------------------------------------------------------------
# If building the ICONV module, you may need to set these
# ---------------------------------------------------------------------------
ICONV_INC	= @ICONV_INC@
ICONV_LIB	= @ICONV_LIB@
# ---------------------------------------------------------------------------
# If building the ONIG module, you may need to set these
# ---------------------------------------------------------------------------
ONIG_INC	= @ONIG_INC@
ONIG_LIB	= @ONIG_LIB@ -lonig
# ---------------------------------------------------------------------------
# If building the ZLIB module, you may need to set these
# ---------------------------------------------------------------------------
ZLIB_INC	= @Z_INC@
ZLIB_LIB	= @Z_LIB@ -lz
# ---------------------------------------------------------------------------
# If building the SOCKET module, you may need to set these
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Installation location of the modules
# ---------------------------------------------------------------------------
MODULE_INSTALL_DIR = @libdir@/slang/v@slang_major_version@/modules
INSTALL		= @INSTALL@
INSTALL_DATA	= @INSTALL_DATA@
INSTALL_MODULE	= @INSTALL_MODULE@
MKINSDIR	= $(CONFIG_DIR)/autoconf/mkinsdir.sh
SLSH_DIR	= $(prefix)/share/slsh
CMAPS_DIR	= $(SLSH_DIR)/cmaps
HELP_DIR	= $(SLSH_DIR)/help
# ---------------------------------------------------------------------------
# DESTDIR is designed to facilitate making packages.  Normally it is empty
# ---------------------------------------------------------------------------
#DESTDIR =
DEST_MODULEDIR	= $(DESTDIR)$(MODULE_INSTALL_DIR)
DEST_SLSH_DIR	= $(DESTDIR)$(SLSH_DIR)
DEST_CMAPSDIR	= $(DESTDIR)$(CMAPS_DIR)
DEST_HELPDIR	= $(DESTDIR)$(HELP_DIR)
# ---------------------------------------------------------------------------
RPATH = @RPATH@

LIBS = $(LDFLAGS) $(RPATH) $(SLANG_LIB) $(DL_LIB) @M_LIB@
INCS = $(SLANG_SRCINC)
COMPILE_CMD = $(CC_SHARED) $(INCS)
# ---------------------------------------------------------------------------
all: $(OBJDIR)/Makefile
	cd $(OBJDIR) && $(MAKE) $(MODULES)
$(CONFIG_H): $(CONFIG_DIR)/src/config.h
	cp $(CONFIG_DIR)/src/config.h $(CONFIG_H)
$(SLINT_H): $(CONFIG_DIR)/src/_slint.h
	cp $(CONFIG_DIR)/src/_slint.h $(SLINT_H)
$(OBJDIR_TSTAMP):
	-$(MKINSDIR) $(OBJDIR)
	touch $(OBJDIR_TSTAMP)
$(OBJDIR)/Makefile: $(OBJDIR_TSTAMP) Makefile
	cp Makefile $(OBJDIR)

#
# These (and only these) targets are supposed to be built only in $(OBJDIR):
#
slsmg-module.so: $(SRCDIR)/slsmg-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/slsmg-module.c -o slsmg-module.so $(LIBS)
rand-module.so: $(SRCDIR)/rand-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/rand-module.c -o rand-module.so $(LIBS)
newt-module.so: $(SRCDIR)/newt-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/newt-module.c -o newt-module.so -lnewt $(LIBS)
termios-module.so: $(SRCDIR)/termios-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/termios-module.c -o termios-module.so $(LIBS)
select-module.so: $(SRCDIR)/select-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/select-module.c -o select-module.so $(LIBS)
fcntl-module.so: $(SRCDIR)/fcntl-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/fcntl-module.c -o fcntl-module.so $(LIBS)
varray-module.so: $(SRCDIR)/varray-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/varray-module.c -o varray-module.so $(LIBS)
pcre-module.so: $(SRCDIR)/pcre-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(PCRE_INC) $(SRCDIR)/pcre-module.c -o pcre-module.so $(PCRE_LIB) $(LIBS)
onig-module.so: $(SRCDIR)/onig-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(ONIG_INC) $(SRCDIR)/onig-module.c -o onig-module.so $(ONIG_LIB) $(LIBS)
png-module.so: $(SRCDIR)/png-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(PNG_INC) $(SRCDIR)/png-module.c -o png-module.so $(PNG_LIB) $(LIBS)
socket-module.so: $(SRCDIR)/socket-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/socket-module.c -o socket-module.so $(SOCKET_LIBS) $(LIBS)
iconv-module.so: $(SRCDIR)/iconv-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(ICONV_INC) $(SRCDIR)/iconv-module.c -o iconv-module.so $(ICONV_LIB) $(LIBS)
zlib-module.so: $(SRCDIR)/zlib-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(ZLIB_INC) $(SRCDIR)/zlib-module.c -o zlib-module.so $(ZLIB_LIB) $(LIBS)
fork-module.so: $(SRCDIR)/fork-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/fork-module.c -o fork-module.so $(LIBS)
sysconf-module.so: $(SRCDIR)/sysconf-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/sysconf-module.c -o sysconf-module.so $(LIBS)
csv-module.so: $(SRCDIR)/csv-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/csv-module.c -o csv-module.so $(LIBS)
base64-module.so: $(SRCDIR)/base64-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/base64-module.c -o base64-module.so $(LIBS)
json-module.so: $(SRCDIR)/json-module.c $(CONFIG_H)
	$(COMPILE_CMD) $(SRCDIR)/json-module.c -o json-module.so $(LIBS)
#
chksum-module.so: $(CHKSUM_OBJS)
	$(COMPILE_CMD) $(CHKSUM_OBJS) -o chksum-module.so $(LIBS)
chksum-module.o: $(SRCDIR)/chksum-module.c $(SRCDIR)/chksum.h
	$(COMPILE_CMD) -c $(SRCDIR)/chksum-module.c
chksum_md5.o: $(SRCDIR)/chksum_md5.c $(SRCDIR)/chksum.h
	$(COMPILE_CMD) -c $(SRCDIR)/chksum_md5.c
chksum_sha1.o: $(SRCDIR)/chksum_sha1.c $(SRCDIR)/chksum.h
	$(COMPILE_CMD) -c $(SRCDIR)/chksum_sha1.c
#
histogram-module.so: $(SRCDIR)/histogram-module.c $(SRCDIR)/histogram-module.inc
	$(COMPILE_CMD) $(SRCDIR)/histogram-module.c -o histogram-module.so $(LIBS)
#
stats-module.so: $(STATS_OBJS)
	$(COMPILE_CMD) $(STATS_OBJS) -o stats-module.so $(LIBS)
stats-module.o: $(SRCDIR)/stats-module.c $(SRCDIR)/stats-module.h
	$(COMPILE_CMD) -c $(SRCDIR)/stats-module.c
stats_kendall.o: $(SRCDIR)/stats_kendall.c $(SRCDIR)/stats-module.h
	$(COMPILE_CMD) -c $(SRCDIR)/stats_kendall.c
#
# </targets to be built in $(OBJDIR)>
#

# Note that Windows/Cygwin modules need execute permissions
install: all
	-$(MKINSDIR) $(DEST_MODULEDIR)
	@for i in $(MODULES); \
	do \
		echo $(INSTALL_MODULE) $(OBJDIR)/$$i $(DEST_MODULEDIR); \
		$(INSTALL_MODULE) $(OBJDIR)/$$i $(DEST_MODULEDIR); \
	done
	-$(MKINSDIR) $(DEST_SLSH_DIR)
	@for i in $(SLFILES); \
	do \
		echo $(INSTALL_DATA) $$i.sl $(DEST_SLSH_DIR); \
		$(INSTALL_DATA) $$i.sl $(DEST_SLSH_DIR); \
	done
	@for d in statslib; \
	do \
	   $(MKINSDIR) $(DEST_SLSH_DIR)/$$d; \
	   for i in $$d/*.sl; \
	   do \
		echo $(INSTALL_DATA) $$i $(DEST_SLSH_DIR)/$$d/; \
		$(INSTALL_DATA) $$i $(DEST_SLSH_DIR)/$$d/; \
	   done; \
        done
	-$(MKINSDIR) $(DEST_CMAPSDIR)
	@for i in cmaps/*.map; \
	do \
		echo $(INSTALL_DATA) $$i $(DEST_CMAPSDIR); \
		$(INSTALL_DATA) $$i $(DEST_CMAPSDIR); \
	done
	-$(MKINSDIR) $(DEST_HELPDIR)
	@for i in help/*.hlp; \
	do \
		echo $(INSTALL_DATA) $$i $(DEST_HELPDIR); \
		$(INSTALL_DATA) $$i $(DEST_HELPDIR); \
	done
runtests: all
	@test_scripts="$(TEST_SCRIPTS)"; \
	test -z "@PNG_MODULE@" || test_scripts="$$test_scripts test_png.sl"; \
	test -z "@ONIG_MODULE@" || test_scripts="$$test_scripts test_onig.sl"; \
	test -z "@ZLIB_MODULE@" || test_scripts="$$test_scripts test_zlib.sl"; \
	test -z "@PCRE_MODULE@" || test_scripts="$$test_scripts test_pcre.sl"; \
	test -z "@ICONV_MODULE@" || test_scripts="$$test_scripts test_iconv.sl"; \
	test -z "@SYSCONF_MODULE@" || test_scripts="$$test_scripts test_sysconf.sl"; \
	cd test; ./runtests.sh $$test_scripts
clean:
	-/bin/rm -f $(OBJDIR_TSTAMP)
	-cd $(OBJDIR) && /bin/rm -f $(MODULES) $(CHKSUM_OBJS)
	-/bin/rm -f *~ */*~
distclean: clean
	-/bin/rm -f Makefile $(OBJDIR)/Makefile $(CONFIG_H)

.PHONY: clean distclean all install runtests
