#
#  Example of how to build and install locally as a shared library
#
#  Usage:
#
#    $ make -f Makefile.sharedlibrary
#    $ sudo make -f Makefile.sharedlibrary install
#    $ make -f Makefile.sharedlibrary duk  # --> example 'duk' linked to shared libduktape
#
#    $ ls -l duk
#    -rwxrwxr-x 1 duktape duktape 19407 Nov 30 15:48 duk
#
#    $ ldd ./duk
#            linux-vdso.so.1 =>  (0x00007ffd5ed3c000)
#            libduktape.so.104 => /usr/local/lib/libduktape.so.104 (0x00007fb2f9753000)
#            libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb2f944d000)
#            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb2f9088000)
#            /lib64/ld-linux-x86-64.so.2 (0x00007fb2f9991000)
#
#  Based on: http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

# Soname version must be bumped whenever a binary compatibility change occurs
# (and should not be bumped when the library is compatible).  A simple Duktape
# convention is to set soname version to (100*MAJOR + MINOR), e.g. 104 for
# Duktape 1.4.x, so that it gets automatically bumped for major and minor
# releases (potentially binary incompatible), but not for patch releases.
DUK_VERSION=10502
SONAME_VERSION=105
REAL_VERSION=$(SONAME_VERSION).$(DUK_VERSION)

# Change to actual path for actual distribution packaging.
INSTALL_PREFIX=/usr/local

# The 'noline' variant may be more appropriate for some distributions; it
# doesn't have #line directives in the combined source.
DUKTAPE_SRCDIR=./src
#DUKTAPE_SRCDIR=./src-noline

.PHONY: all
all: libduktape.so.$(REAL_VERSION) libduktaped.so.$(REAL_VERSION)

# If the default duk_config.h is not suitable for the distribution, modify it
# before compiling the shared library and copy the same, edited duk_config.h
# to $INSTALL_PREFIX/include on installation.

libduktape.so.$(REAL_VERSION):
	gcc -shared -fPIC -Wall -Wextra -Os -Wl,-soname,libduktape.so.$(SONAME_VERSION) \
		-o $@ $(DUKTAPE_SRCDIR)/duktape.c

libduktaped.so.$(REAL_VERSION):
	gcc -shared -fPIC -g -Wall -Wextra -Os -Wl,-soname,libduktaped.so.$(SONAME_VERSION) \
		-o $@ $(DUKTAPE_SRCDIR)/duktape.c

# Symlinks depend on platform conventions.
.PHONY: install
install: libduktape.so.$(REAL_VERSION) libduktaped.so.$(REAL_VERSION)
	cp $+ $(INSTALL_PREFIX)/lib/
	rm -f $(INSTALL_PREFIX)/lib/libduktape.so $(INSTALL_PREFIX)/lib/libduktape.so.$(SONAME_VERSION)
	ln -s libduktape.so.$(REAL_VERSION) $(INSTALL_PREFIX)/lib/libduktape.so
	ln -s libduktape.so.$(REAL_VERSION) $(INSTALL_PREFIX)/lib/libduktape.so.$(SONAME_VERSION)
	rm -f $(INSTALL_PREFIX)/lib/libduktaped.so $(INSTALL_PREFIX)/lib/libduktaped.so.$(SONAME_VERSION)
	ln -s libduktaped.so.$(REAL_VERSION) $(INSTALL_PREFIX)/lib/libduktaped.so
	ln -s libduktaped.so.$(REAL_VERSION) $(INSTALL_PREFIX)/lib/libduktaped.so.$(SONAME_VERSION)
	cp $(DUKTAPE_SRCDIR)/duktape.h $(DUKTAPE_SRCDIR)/duk_config.h $(INSTALL_PREFIX)/include/

# Note: assumes /usr/local/include/ and /usr/local/lib/ are in include/link
# path which may not be the case for all distributions.
#CCOPTS=-I/usr/local/include -L/usr/local/lib
CCOPTS=
duk:
	gcc $(CCOPTS) -Wall -Wextra -Os -o $@ ./examples/cmdline/duk_cmdline.c -lduktape -lm
