CC		= gcc
CFLAGS		= -fomit-frame-pointer -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fno-strict-aliasing -fstack-protector -Wall -W -pedantic -Winline -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wcast-align -Wshadow -Wstrict-prototypes -Wformat -Wformat-security
LDFLAGS		=  -Wl,-export-dynamic
#---------------------------------------------------------------------------
# Installation location of the slang library
#---------------------------------------------------------------------------
prefix 		= /usr
exec_prefix 	= ${prefix}
INST_LIB_DIR	= /usr/lib
SLANG_INST_INC	= -I${prefix}/include
SLANG_INST_LIB	= -L$(INST_LIB_DIR)
#---------------------------------------------------------------------------
SLANG_SRCINC	= -I/usr/src/packages/BUILD/slang-2.1.1/src
SLANG_SRCLIB	= -L/usr/src/packages/BUILD/slang-2.1.1/src/objs -L/usr/src/packages/BUILD/slang-2.1.1/src/elfobjs
#---------------------------------------------------------------------------
OTHER_LIBS	=  -ldl  -lm
RPATH		= -Wl,-R/usr/lib
#----------------------------------------------------------------------------
INSTALL		= /usr/bin/install -c
INSTALL_DATA	= ${INSTALL} -m 644
MKINSDIR	= ../autoconf/mkinsdir.sh
#----------------------------------------------------------------------------
# Where system-wide slsh.rc, scripts, and library files reside
#----------------------------------------------------------------------------
SLSH_CONF_DIR	= /etc
SLSH_LIB_DIR	= ${prefix}/share/slsh
SLSH_HELP_DIR	= $(SLSH_LIB_DIR)/help
SLSH_LOCALLIB_DIR = $(SLSH_LIB_DIR)/local-packages
SLSH_SCRIPT_DIR	= $(SLSH_LIB_DIR)/scripts
SCRIPTS		= jpegsize lsrpm sldb svnsh slprof
#---------------------------------------------------------------------------
# Hard-coded paths may be configured during run-time via the SLSH_CONF_DIR
# and SLSH_PATH env variables.  The names of those variables may be
# changed here.  The SLSH_LIB_DIR variable has been deprecated.
#
SLSH_CONF_DIR_ENV = "SLSH_CONF_DIR"
SLSH_PATH_ENV	  = "SLSH_PATH"
SLSH_LIB_DIR_ENV  = "SLSH_LIB_DIR"
#---------------------------------------------------------------------------
# If you want GNU readline instead of slang's readline, then enable it here
#---------------------------------------------------------------------------
GNU_READLINE	= 0
READLINE_LIB	= # -lreadline
#---------------------------------------------------------------------------
# DESTDIR is designed to facilitate making packages.  Normally it is empty
#---------------------------------------------------------------------------
DESTDIR		=
BIN_DIR		= ${exec_prefix}/bin
MAN_DIR		= /usr/share/man/man1
DEST_LIB_DIR	= -L$(DESTDIR)/usr/lib
DEST_BIN_DIR	= $(DESTDIR)$(BIN_DIR)
DEST_MAN_DIR	= $(DESTDIR)$(MAN_DIR)
DEST_SLSH_CONF_DIR = $(DESTDIR)$(SLSH_CONF_DIR)
DEST_SLSH_LIB_DIR  = $(DESTDIR)$(SLSH_LIB_DIR)
DEST_SLSH_HELP_DIR = $(DESTDIR)$(SLSH_HELP_DIR)
DEST_SLSH_LOCALLIB_DIR = $(DESTDIR)$(SLSH_LOCALLIB_DIR)
DEST_SLSH_SCRIPT_DIR = $(DESTDIR)$(SLSH_SCRIPT_DIR)

#----------------------------------------------------------------------------
# End of user configuration
#----------------------------------------------------------------------------

SHELL = /bin/sh
INST_LIBS = $(RPATH) $(SLANG_INST_LIB) $(DEST_LIB_DIR) -lslang $(READLINE_LIB) $(OTHER_LIBS)
DEFS = -DSLSH_CONF_DIR='"$(SLSH_CONF_DIR)"' -DSLSH_PATH='"$(SLSH_LIB_DIR)"' \
 -DSLSH_CONF_DIR_ENV='$(SLSH_CONF_DIR_ENV)' -DSLSH_LIB_DIR_ENV='$(SLSH_LIB_DIR_ENV)' \
 -DSLSH_PATH_ENV='$(SLSH_PATH_ENV)' 
SRC_LIBS = $(SLANG_SRCLIB) -lslang $(READLINE_LIB) $(OTHER_LIBS)
#
all: slsh_exe
slsh_exe: slsh.o readline.o
	$(CC) $(CFLAGS) slsh.o readline.o -o slsh_exe $(LDFLAGS) $(SRC_LIBS)
slsh: slsh.o readline.o
	$(CC) $(CFLAGS) slsh.o readline.o -o slsh $(LDFLAGS) $(INST_LIBS)
slsh.o: slsh.c slsh.h config.h Makefile
	$(CC) -c $(CFLAGS) $(SLANG_SRCINC) $(DEFS) slsh.c
readline.o: readline.c slsh.h config.h Makefile
	$(CC) -c $(CFLAGS) $(SLANG_SRCINC) $(DEFS) -DUSE_GNU_READLINE=$(GNU_READLINE) readline.c
config.h: ../src/config.h
	cp ../src/config.h .
install_directories:
	$(MKINSDIR) $(DEST_BIN_DIR)
	$(MKINSDIR) $(DEST_MAN_DIR)
	$(MKINSDIR) $(DEST_SLSH_CONF_DIR)
	$(MKINSDIR) $(DEST_SLSH_LIB_DIR)
	$(MKINSDIR) $(DEST_SLSH_LIB_DIR)/rline
	$(MKINSDIR) $(DEST_SLSH_HELP_DIR)
	$(MKINSDIR) $(DEST_SLSH_LOCALLIB_DIR)
	$(MKINSDIR) $(DEST_SLSH_SCRIPT_DIR)
install_lib_files:
	@for X in lib/*.sl; \
	do \
		echo $(INSTALL_DATA) $$X $(DEST_SLSH_LIB_DIR); \
		$(INSTALL_DATA) $$X $(DEST_SLSH_LIB_DIR); \
		if [ "$$?" != "0" ]; then \
		  exit 1; \
		fi; \
	done
install_rline_files:
	@for X in lib/rline/*.sl lib/rline/slrline.rc; \
	do \
		echo $(INSTALL_DATA) $$X $(DEST_SLSH_LIB_DIR)/rline/; \
		$(INSTALL_DATA) $$X $(DEST_SLSH_LIB_DIR)/rline/; \
		if [ "$$?" != "0" ]; then \
		  exit 1; \
		fi; \
	done
install_scripts:
	@for X in $(SCRIPTS); \
	do \
		echo $(INSTALL) scripts/$$X $(DEST_SLSH_SCRIPT_DIR); \
		$(INSTALL) scripts/$$X $(DEST_SLSH_SCRIPT_DIR); \
		if [ "$$?" != "0" ]; then \
		  exit 1; \
		fi; \
	done
install_help:
	@for X in lib/help/*.hlp; \
	do \
		echo $(INSTALL_DATA) $$X $(DEST_SLSH_HELP_DIR); \
		$(INSTALL_DATA) $$X $(DEST_SLSH_HELP_DIR); \
		if [ "$$?" != "0" ]; then \
		  exit 1; \
		fi; \
	done

install: slsh install_directories install_lib_files install_rline_files install_scripts install_help
	$(INSTALL) slsh $(DEST_BIN_DIR)/
	$(INSTALL_DATA) etc/slsh.rc $(DEST_SLSH_CONF_DIR)/
	echo 'prepend_to_slang_load_path("$(SLSH_LOCALLIB_DIR)");' >> $(DEST_SLSH_CONF_DIR)/slsh.rc
	$(INSTALL_DATA) doc/man/slsh.1 $(DEST_MAN_DIR)/
#---------------------------------------------------------------------------
# Housekeeping
#---------------------------------------------------------------------------
clean:
	-/bin/rm -f *~ slsh.o readline.o slsh slsh_exe scripts/*~ lib/*~
distclean: clean
	-/bin/rm -f Makefile
symlinks:
	-/bin/rm -f $(ARCH)objs
	-mkdir -p $(HOME)/sys/$(ARCH)/objs/jdl/src
	ln -s $(HOME)/sys/$(ARCH)/objs/jdl/src $(ARCH)objs
