From 0b3d18658aa1a5236b0c6ecfb5939eaaa14376a2 Mon Sep 17 00:00:00 2001 From: Emil Renner Berthing Date: Thu, 10 Mar 2011 00:37:19 +0100 Subject: Makefile: support linking with shared Lua or LuaJIT library ..and install pkg-config file for libraries to use --- .gitignore | 1 + Makefile | 138 ++++++++++++++++++++++++++++++++------------------ PKGBUILD.jit | 28 ++++++++++ PKGBUILD.shared | 28 ++++++++++ README.markdown | 10 +++- config.FreeBSD | 3 -- config.Linux | 3 -- include/lem/lauxlib.h | 1 - include/lem/lua.h | 1 - include/lem/luaconf.h | 1 - lem.h | 4 +- lem.pc.in | 8 +++ repl.lua | 2 +- 13 files changed, 165 insertions(+), 63 deletions(-) create mode 100644 PKGBUILD.jit create mode 100644 PKGBUILD.shared delete mode 120000 include/lem/lauxlib.h delete mode 120000 include/lem/lua.h delete mode 120000 include/lem/luaconf.h create mode 100644 lem.pc.in diff --git a/.gitignore b/.gitignore index f7e0e4f..66a4897 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ src/ pkg/ config.h +lem.pc lem diff --git a/Makefile b/Makefile index 6084179..573fb18 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,63 @@ -CC = gcc -CFLAGS ?= -O2 -pipe -Wall -Wextra -Wno-variadic-macros -Wno-strict-aliasing -STRIP = strip -INSTALL = install -SED = sed - -LUA_VERSION = 5.1 -DESTDIR = -PREFIX = /usr/local -BINDIR = $(PREFIX)/bin -LIBDIR = $(PREFIX)/lib/lua/$(LUA_VERSION) -INCDIR = $(PREFIX)/include - -OS = $(shell uname) +CC = gcc +CFLAGS ?= -O2 -pipe -Wall -Wextra -Wno-variadic-macros -Wno-strict-aliasing +PKGCONFIG = pkg-config +STRIP = strip +INSTALL = install +SED = sed +UNAME = uname + +headers = lem.h config.h macros.h libev/ev.h +programs = lem utils.so +scripts = repl.lua lem-repl + +objects = event.o lem.o + +OS = $(shell $(UNAME)) +LUA = embedded +LUA_VERSION = 5.1 +DESTDIR = +PREFIX = /usr/local +BINDIR = $(PREFIX)/bin +INCDIR = $(PREFIX)/include +PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig + +ifeq ($(LUA),embedded) +CFLAGS += -Ilua -DLUA_USE_LINUX -DLUA_ROOT='"$(PREFIX)/"' +LIBRARIES = -lm ifeq ($(OS), Linux) -DL = -ldl +LIBRARIES += -ldl endif -headers = lem.h config.h macros.h lua/luaconf.h lua/lua.h lua/lauxlib.h libev/ev.h -programs = lem utils.so -scripts = repl.lua lem-repl +headers += lua/luaconf.h lua/lua.h lua/lauxlib.h +# From lua/Makefile +CORE_O = lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \ + lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ + lundump.o lvm.o lzio.o +LIB_O = lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o \ + lstrlib.o loadlib.o linit.o +objects += $(CORE_O:%=lua/%) $(LIB_O:%=lua/%) + +LUA_PATH = $(PREFIX)/share/lua/$(LUA_VERSION) +LUA_CPATH = $(PREFIX)/lib/lua/$(LUA_VERSION) +LIB_INCLUDES = -I$(INCDIR) -I$(INCDIR)/lem +else +LUA_PATH = $(shell $(LUA) -e 'print(package.path:match("([^;]*/lua/$(LUA_VERSION))"))') +LUA_CPATH = $(shell $(LUA) -e 'print(package.cpath:match("([^;]*/lua/$(LUA_VERSION))"))') + +ifeq ($(findstring LuaJIT, $(shell $(LUA) -v 2>&1)),) +LIBRARIES = -llua +LUA_INCDIR = $(INCDIR) +LIB_INCLUDES = -I$(LUA_INCDIR) +else +CFLAGS += $(shell $(PKGCONFIG) --cflags luajit) +LIBRARIES = $(shell $(PKGCONFIG) --libs luajit) +LIB_INCLUDES = -I$(INCDIR) $(shell $(PKGCONFIG) --cflags-only-I luajit) +endif +endif ifdef NDEBUG -DEFINES += -DNDEBUG +CFLAGS += -DNDEBUG endif ifdef V @@ -33,41 +68,32 @@ M=@ O=@ endif -# From lua/Makefile -CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \ - lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ - lundump.o lvm.o lzio.o -LIB_O= lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o \ - lstrlib.o loadlib.o linit.o - -.PHONY: all lua strip install clean +.PHONY: all strip install clean .PRECIOUS: %.pic.o all: $(programs) config.h: config.$(OS) - $Mecho ' SED $@' - $O$(SED) -e 's|@PREFIX@|$(PREFIX)/|' $< > $@ + $Mecho ' CP $@' + $Ocp $< $@ -event.o: event.c config.h - $Mecho ' CC $@' - $O$(CC) $(CFLAGS) -Iinclude -w $(DEFINES) -c $< +lem.pc: lem.pc.in + $Mecho ' SED $@' + $O$(SED) -e 's|@PATH@|$(LUA_PATH)|;s|@CPATH@|$(LUA_CPATH)|;s|@LIB_INCLUDES@|$(LIB_INCLUDES)|' $< > $@ %.pic.o: %.c config.h $Mecho ' CC $@' - $O$(CC) $(CFLAGS) -Iinclude -fPIC -nostartfiles $(DEFINES) -c $< -o $@ + $O$(CC) $(CFLAGS) -Iinclude -fPIC -nostartfiles -c $< -o $@ -%.o: %.c %.h config.h - $Mecho ' CC $@' - $O$(CC) $(CFLAGS) -Iinclude $(DEFINES) -c $< -o $@ +event.o: CFLAGS += -w %.o: %.c config.h $Mecho ' CC $@' - $O$(CC) $(CFLAGS) -Iinclude $(DEFINES) -c $< -o $@ + $O$(CC) $(CFLAGS) -Iinclude -c $< -o $@ -lem: $(CORE_O:%=lua/%) $(LIB_O:%=lua/%) event.o lem.o +lem: $(objects) $Mecho ' LD $@' - $O$(CC) -rdynamic -lm $(DL) $(LDFLAGS) $^ -o $@ + $O$(CC) -rdynamic $(LIBRARIES) $(LDFLAGS) $^ -o $@ utils.so: utils.pic.o $Mecho ' LD $@' @@ -97,25 +123,37 @@ incdir-install: lem.h-install: lem.h incdir-install $Mecho " INSTALL $<" - $O$(INSTALL) $< $(DESTDIR)$(INCDIR)/$< + $O$(INSTALL) -m644 $< $(DESTDIR)$(INCDIR)/$< %.h-install: %.h incdir-install $Mecho " INSTALL $(notdir $<)" - $O$(INSTALL) $< $(DESTDIR)$(INCDIR)/lem/$(notdir $<) + $O$(INSTALL) -m644 $< $(DESTDIR)$(INCDIR)/lem/$(notdir $<) -libdir-install: - $Mecho " INSTALL -d $(LIBDIR)" - $O$(INSTALL) -d $(DESTDIR)$(LIBDIR)/lem +path-install: + $Mecho " INSTALL -d $(LUA_PATH)" + $O$(INSTALL) -d $(DESTDIR)$(LUA_PATH)/lem -%.so-install: %.so libdir-install +%.lua-install: %.lua path-install $Mecho " INSTALL $<" - $O$(INSTALL) $< $(DESTDIR)$(LIBDIR)/lem/$< + $O$(INSTALL) -m644 $< $(DESTDIR)$(LUA_PATH)/lem/$< + +cpath-install: + $Mecho " INSTALL -d $(LUA_CPATH)" + $O$(INSTALL) -d $(DESTDIR)$(LUA_CPATH)/lem + +%.so-install: %.so cpath-install + $Mecho " INSTALL $<" + $O$(INSTALL) $< $(DESTDIR)$(LUA_CPATH)/lem/$< + +pkgdir-install: + $Mecho " INSTALL -d $(PKG_CONFIG_PATH)" + $O$(INSTALL) -d $(DESTDIR)$(PKG_CONFIG_PATH) -%.lua-install: %.lua libdir-install +%.pc-install: %.pc pkgdir-install $Mecho " INSTALL $<" - $O$(INSTALL) $< $(DESTDIR)$(LIBDIR)/lem/$< + $O$(INSTALL) -m644 $< $(DESTDIR)$(PKG_CONFIG_PATH)/$< -install: $(headers:%=%-install) $(programs:%=%-install) $(scripts:%=%-install) +install: lem.pc-install $(headers:%=%-install) $(programs:%=%-install) $(scripts:%=%-install) clean: - rm -f config.h $(programs) *.o lua/*.o *.c~ *.h~ + rm -f config.h lem.pc $(programs) *.o lua/*.o *.c~ *.h~ diff --git a/PKGBUILD.jit b/PKGBUILD.jit new file mode 100644 index 0000000..79c5f45 --- /dev/null +++ b/PKGBUILD.jit @@ -0,0 +1,28 @@ +# Maintainer: Emil Renner Berthing + +pkgname=lem +pkgver=0.1 +pkgrel=1 +pkgdesc="A Lua Event Machine" +arch=('i686' 'x86_64') +url="https://github.com/esmil/lem" +license=('GPL') +depends=('luajit2') +optdepends=('lem-streams: for lem-repl') +source=() + +_lua='/usr/bin/luajit2' + +build() { + cd "$startdir" + + make NDEBUG=1 LUA="$_lua" +} + +package() { + cd "$startdir" + + make DESTDIR="$pkgdir/" PREFIX='/usr' LUA="$_lua" install +} + +# vim:set ts=2 sw=2 et: diff --git a/PKGBUILD.shared b/PKGBUILD.shared new file mode 100644 index 0000000..ed0a1f2 --- /dev/null +++ b/PKGBUILD.shared @@ -0,0 +1,28 @@ +# Maintainer: Emil Renner Berthing + +pkgname=lem +pkgver=0.1 +pkgrel=1 +pkgdesc="A Lua Event Machine" +arch=('i686' 'x86_64' 'armv5tel' 'armv7l') +url="https://github.com/esmil/lem" +license=('GPL') +depends=('lua>=5.1') +optdepends=('lem-streams: for lem-repl') +source=() + +_lua='/usr/bin/lua' + +build() { + cd "$startdir" + + make NDEBUG=1 LUA="$_lua" +} + +package() { + cd "$startdir" + + make DESTDIR="$pkgdir/" PREFIX='/usr' LUA="$_lua" install +} + +# vim:set ts=2 sw=2 et: diff --git a/README.markdown b/README.markdown index 56851b9..f01fa6e 100644 --- a/README.markdown +++ b/README.markdown @@ -38,13 +38,21 @@ to `/usr/local/include/`. Use $ make clean - $ make PREFIX= install + $ make PREFIX=/install/path install to change the install path. Both the Lua 5.1.4 and libev 4.03 sources are included so having Lua or libev installed on your system is not required to build the Lua Event Machine. +You can, however, link against a shared Lua or [LuaJIT][] library by +setting the LUA variable to point to the installed interpreter. E.g: + + $ make clean + $ make PREFIX=/install/path LUA=/path/to/lua/or/luajit2 install + +[luajit]: http://luajit.org/luajit.html + Usage ----- diff --git a/config.FreeBSD b/config.FreeBSD index 6ccaf05..d1203ad 100644 --- a/config.FreeBSD +++ b/config.FreeBSD @@ -16,9 +16,6 @@ * along with LEM. If not, see . */ -#define LUA_USE_LINUX -#define LUA_ROOT "@PREFIX@" - #define EV_STANDALONE 1 #define EV_USE_MONOTONIC 1 #define EV_USE_CLOCK_SYSCALL 0 diff --git a/config.Linux b/config.Linux index eae65f3..0889478 100644 --- a/config.Linux +++ b/config.Linux @@ -16,9 +16,6 @@ * along with LEM. If not, see . */ -#define LUA_USE_LINUX -#define LUA_ROOT "@PREFIX@" - #define EV_STANDALONE 1 #define EV_USE_MONOTONIC 1 #define EV_USE_CLOCK_SYSCALL 1 diff --git a/include/lem/lauxlib.h b/include/lem/lauxlib.h deleted file mode 120000 index 5b71e16..0000000 --- a/include/lem/lauxlib.h +++ /dev/null @@ -1 +0,0 @@ -../../lua/lauxlib.h \ No newline at end of file diff --git a/include/lem/lua.h b/include/lem/lua.h deleted file mode 120000 index e97f648..0000000 --- a/include/lem/lua.h +++ /dev/null @@ -1 +0,0 @@ -../../lua/lua.h \ No newline at end of file diff --git a/include/lem/luaconf.h b/include/lem/luaconf.h deleted file mode 120000 index 2e851b6..0000000 --- a/include/lem/luaconf.h +++ /dev/null @@ -1 +0,0 @@ -../../lua/luaconf.h \ No newline at end of file diff --git a/lem.h b/lem.h index 44f6934..a3de0f9 100644 --- a/lem.h +++ b/lem.h @@ -20,9 +20,9 @@ #define _LEM_H #include -#include -#include #include +#include +#include #include #if EV_MULTIPLICITY diff --git a/lem.pc.in b/lem.pc.in new file mode 100644 index 0000000..f11ebc2 --- /dev/null +++ b/lem.pc.in @@ -0,0 +1,8 @@ +path=@PATH@ +cpath=@CPATH@ + +Name: lem +Description: A Lua Event Machine +Version: 0.1 +URL: https://github.com/esmil/lem +Cflags: @LIB_INCLUDES@ diff --git a/repl.lua b/repl.lua index 4673322..11dcb80 100644 --- a/repl.lua +++ b/repl.lua @@ -114,4 +114,4 @@ return { end, } --- vim: syntax=lua ts=2 sw=2 noet: +-- vim: ts=2 sw=2 noet: -- cgit v1.2.1