# makefile for Lrexlib libraries

include ./config

NAM_POSIX= libluarex_posix
NAM_PCRE=  libluarex_pcre

INC_POSIX += $(INC_LUA)
INC_PCRE  += $(INC_LUA)
LIB_POSIX += $(LIB_LUA)
LIB_PCRE  += $(LIB_LUA)

SRC_POSIX_AR= $(NAM_POSIX).c
OBJ_POSIX_AR= $(NAM_POSIX).o
TRG_POSIX_AR= $(NAM_POSIX).a
$(OBJ_POSIX_AR): CFLAGS += $(INC_POSIX) -DLREXLIB_POSIX

SRC_POSIX_SO= $(NAM_POSIX)_so.c
OBJ_POSIX_SO= $(NAM_POSIX)_so.o
TRG_POSIX_SO= $(NAM_POSIX).so
$(OBJ_POSIX_SO): CFLAGS += $(INC_POSIX) -DLREXLIB_POSIX -fPIC

SRC_PCRE_AR= $(NAM_PCRE).c
OBJ_PCRE_AR= $(NAM_PCRE).o
TRG_PCRE_AR= $(NAM_PCRE).a
$(OBJ_PCRE_AR): CFLAGS += $(INC_PCRE) -DLREXLIB_PCRE

SRC_PCRE_SO= $(NAM_PCRE)_so.c
OBJ_PCRE_SO= $(NAM_PCRE)_so.o
TRG_PCRE_SO= $(NAM_PCRE).so
$(OBJ_PCRE_SO): CFLAGS += $(INC_PCRE) -DLREXLIB_PCRE -fPIC

SRC_INTERM_ALL= $(SRC_POSIX_AR) $(SRC_POSIX_SO) $(SRC_PCRE_AR) $(SRC_PCRE_SO)

NoTarget:
	@echo This Makefile requires its targets to be explicitly specified.
	@echo Example: make ar_posix so_posix ar_pcre so_pcre

# static POSIX regexp library binding
ar_posix: $(TRG_POSIX_AR)

# dynamic POSIX regexp library binding
so_posix: $(TRG_POSIX_SO)

# static PCRE regexp library binding
ar_pcre: $(TRG_PCRE_AR)

# dynamic PCRE regexp library binding
so_pcre: $(TRG_PCRE_SO)

all: $(TRG_POSIX_AR) $(TRG_POSIX_SO) $(TRG_PCRE_AR) $(TRG_PCRE_SO)

$(TRG_POSIX_AR): $(OBJ_POSIX_AR)
	$(AR) $@ $<

$(TRG_PCRE_AR): $(OBJ_PCRE_AR)
	$(AR) $@ $<

$(TRG_POSIX_SO): $(OBJ_POSIX_SO)
	ld -o $@.$V -shared $< $(LIB_POSIX)
	ln -fs $@.$V $@

$(TRG_PCRE_SO): $(OBJ_PCRE_SO)
	ld -o $@.$V -shared $< $(LIB_PCRE)
	ln -fs $@.$V $@

.INTERMEDIATE: $(SRC_INTERM_ALL)

$(SRC_INTERM_ALL): lrexlib.c
	echo \#include \"lrexlib.c\" > $@

clean:
	rm -f $(OBJ_POSIX_AR) $(OBJ_PCRE_AR) $(OBJ_POSIX_SO) $(OBJ_PCRE_SO)
	rm -f $(TRG_POSIX_AR) $(TRG_PCRE_AR) $(TRG_POSIX_SO)* $(TRG_PCRE_SO)*
