# Makefile
# 
# is part of:
# 
# MinGWEditLine
# Copyright 2010-2012 Paolo Tosco <paolo.tosco@unito.it>
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 
#     * Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#     * Neither the name of MinGWEditLine nor the names of its contributors
#     may be used to endorse or promote products derived from this software
#     without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


BINARY_PATH  = $(PWD)/../bin
INCLUDE_PATH = $(PWD)/../include
LIBRARY_PATH = $(PWD)/../lib

STATICLIB = libedit.a
SHAREDLIB = edit.dll
IMPLIB    = edit.dll.a

PREFIX =
CC = $(PREFIX)gcc
CFLAGS = -Wall -O2 -I.

LD = $(CC)
LDFLAGS =

AR = $(PREFIX)ar
ARFLAGS = rcs

STRIP = $(PREFIX)strip

CP = cp -fp
INSTALL = $(CP)
RM = rm -f

prefix =

OBJS = editline.o fn_complete.o history.o

all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB)

test: libedit_test.exe libedit_test_dll.exe

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

$(STATICLIB): $(OBJS)
	$(AR) $(ARFLAGS) $@ $(OBJS)

$(IMPLIB): $(SHAREDLIB)

$(SHAREDLIB): libedit.def $(OBJS)
	$(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \
	-o $@ libedit.def $(OBJS)
	$(STRIP) $@

libedit_test.exe: libedit_test.o $(STATICLIB)
	$(LD) $(LDFLAGS) -o $@ libedit_test.o $(STATICLIB)
	$(STRIP) $@

libedit_test_dll.exe: libedit_test_dll.o
	$(LD) $(LDFLAGS) -o $@ libedit_test_dll.o
	$(STRIP) $@

libedit_test.o: libedit_test.c editline/readline.h
	$(CC) $(CFLAGS) -c -o $@ libedit_test.c

libedit_test_dll.o: libedit_test_dll.c editline/readline.h
	$(CC) $(CFLAGS) -c -o $@ libedit_test_dll.c

# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set.

.PHONY: install uninstall clean

install: editline/readline.h $(STATICLIB) $(IMPLIB)
	@if test -z "$(INCLUDE_PATH)" -o -z "$(LIBRARY_PATH)" -o -z "$(BINARY_PATH)"; then \
		echo INCLUDE_PATH, LIBRARY_PATH, and BINARY_PATH must be specified; \
		exit 1; \
	fi
	-@mkdir -p $(INCLUDE_PATH)/editline
	-@mkdir -p $(LIBRARY_PATH) $(LIBRARY_PATH)/pkgconfig
	-@mkdir -p $(BINARY_PATH)
	-$(INSTALL) $(SHAREDLIB) $(BINARY_PATH)
	-$(INSTALL) $(IMPLIB) $(LIBRARY_PATH)
	-$(INSTALL) editline/readline.h $(INCLUDE_PATH)/editline
	-$(INSTALL) $(STATICLIB) $(LIBRARY_PATH)
	sed \
		-e 's|@prefix@|${prefix}|g' \
		-e 's|@exec_prefix@|${exec_prefix}|g' \
		-e 's|@libdir@|$(LIBRARY_PATH)|g' \
		-e 's|@sharedlibdir@|$(BINARY_PATH)|g' \
		-e 's|@includedir@|$(INCLUDE_PATH)|g' \
		-e 's|@VERSION@|'`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' editline/readline.h`'|g' \
		libedit.pc.in > $(LIBRARY_PATH)/pkgconfig/libedit.pc

uninstall:
	-if [ -d "$(INCLUDE_PATH)/editline" ]; then \
		rmdir $(INCLUDE_PATH)/editline; \
	fi
	-$(RM) $(BINARY_PATH)/$(SHAREDLIB)
	-$(RM) $(LIBRARY_PATH)/$(IMPLIB)
	-$(RM) $(INCLUDE_PATH)/editline/readline.h
	-$(RM) $(LIBRARY_PATH)/$(STATICLIB)
	-$(RM) $(LIBRARY_PATH)/pkgconfig/libedit.pc

clean:
	-$(RM) $(STATICLIB)
	-$(RM) $(SHAREDLIB)
	-$(RM) $(IMPLIB)
	-$(RM) *.o
	-$(RM) *.exe

editline.o: editline/readline.h el_globals.h
fn_complete.o: editline/readline.h el_globals.h
history.o: editline/readline.h el_globals.h
libedit_test.o: editline/readline.h
