include .config

T=lcurl

UNAME            ?= $(shell uname)
DESTDIR          ?= /
PKG_CONFIG       ?= pkg-config
INSTALL          ?= install
RM               ?= rm
LUA_IMPL         ?= lua
CC               ?= $(MAC_ENV) gcc

LUA_VERSION       = $(shell $(PKG_CONFIG) --print-provides --silence-errors $(LUA_IMPL))
ifeq ($(LUA_VERSION),)
LUA_CMOD         ?= /usr/lib/lua/5.1
LUA_LMOD         ?= /usr/share/lua/5.1
LIBDIR           ?= /usr/lib
LUA_INC          ?= /usr/include
CURL_LIBS         = -L/usr/lib -lcurl
else
LUA_CMOD         ?= $(shell $(PKG_CONFIG) --variable INSTALL_CMOD $(LUA_IMPL))
LUA_LMOD         ?= $(shell $(PKG_CONFIG) --variable INSTALL_LMOD $(LUA_IMPL))
LIBDIR           ?= $(shell $(PKG_CONFIG) --variable libdir $(LUA_IMPL))
LUA_INC          ?= $(shell $(PKG_CONFIG) --variable includedir $(LUA_IMPL))
LUA_LIBS          = $(shell $(PKG_CONFIG) --libs $(LUA_IMPL))
CURL_LIBS         = $(shell $(PKG_CONFIG) --libs libcurl)
endif

ifeq ($(UNAME), Linux)
OS_FLAGS         ?= -shared
endif
ifeq ($(UNAME), Darwin)
OS_FLAGS         ?= -bundle -undefined dynamic_lookup
MAC_ENV          ?= env MACOSX_DEPLOYMENT_TARGET='10.3'
endif

ifneq ($(DEBUG),)
DBG               = -ggdb
endif

ifeq ($(DEV),)
WARN              = -Wall -Wno-unused-value
else
WARN              = -Wall -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic
endif

INCLUDES          = -I$(LUA_INC)
DEFINES           =
LIBS              = $(CURL_LIBS)

COMMONFLAGS       = -O2 -g -pipe -fPIC $(OS_FLAGS) $(DBG)
LF                = $(LIBS) $(LDFLAGS)
CF                = $(INCLUDES) $(DEFINES) $(COMMONFLAGS) $(WARN) -DPTHREADS $(CFLAGS)

SCR               = src/lua/*.lua src/lua/cURL/*.lua src/lua/cURL/impl/*.lua
SRCS              = src/*.c
OBJS              = $(subst src/,,$(subst .c,.o,$(SRCS)))

BIN               = $(T).so
STATIC_LIB        = $(T).a

all: $(BIN)

$(BIN): $(SRCS)
	$(CC) $(CF) -o $@ $^ $(LF)

$(OBJS): $(SRCS)
	$(CC) $(CF) -c $^ $(LF)

$(STATIC_LIB): $(OBJS)
	ar rcs $@ $^

install: all
	$(INSTALL) -d $(DESTDIR)$(LUA_CMOD) $(DESTDIR)$(LUA_LMOD)/cURL/impl
	$(INSTALL) $(BIN) $(DESTDIR)$(LUA_CMOD)
	$(INSTALL) src/lua/cURL.lua $(DESTDIR)$(LUA_LMOD)
	$(INSTALL) src/lua/cURL/safe.lua $(DESTDIR)$(LUA_LMOD)/cURL
	$(INSTALL) src/lua/cURL/utils.lua $(DESTDIR)$(LUA_LMOD)/cURL
	$(INSTALL) src/lua/cURL/impl/cURL.lua $(DESTDIR)$(LUA_LMOD)/cURL/impl

clean:
	$(RM) -f $(BIN) $(OBJS) $(STATIC_LIB)
