Clean up Makefile and add install target

This commit is contained in:
K. Lange 2021-02-08 17:36:03 +09:00
parent 5b3a7e870b
commit b3b56c8e44
2 changed files with 70 additions and 62 deletions

View File

@ -4,41 +4,44 @@ TARGET = kuroko
OBJS = $(patsubst %.c, %.o, $(filter-out src/module_% src/rline.c src/kuroko.c,$(sort $(wildcard src/*.c))))
MODULES = $(patsubst src/module_%.c, modules/%.so, $(sort $(wildcard src/module_*.c)))
HEADERS = $(wildcard src/*.h)
VERSION = $(shell ./kuroko --version | sed 's/.* //')
SONAME = libkuroko-$(VERSION).so
KRKMODS = $(wildcard modules/*.krk modules/*/*.krk modules/*/*/*.krk)
ifndef KRK_ENABLE_STATIC
CFLAGS += -fPIC
ifeq (,$(findstring mingw,$(CC)))
LDFLAGS += -Wl,-rpath -Wl,'$$ORIGIN' -L.
LDLIBS += -ldl -lkuroko
CFLAGS += -fPIC
ifeq (,$(findstring mingw,$(CC)))
LDFLAGS += -Wl,-rpath -Wl,'$$ORIGIN' -L.
LDLIBS += -ldl -lkuroko
else
CFLAGS += -Wno-format
LDLIBS += libkuroko.so
endif
all: ${TARGET} ${MODULES}
KUROKO_LIBS = libkuroko.so
else
CFLAGS += -Wno-format
LDLIBS += libkuroko.so
endif
all: ${TARGET} ${MODULES}
KUROKO_LIBS = libkuroko.so
else
CFLAGS +=-DSTATIC_ONLY
LDFLAGS += -static
all: ${TARGET}
OBJS += src/kuroko.o
KUROKO_LIBS = ${OBJS}
CFLAGS +=-DSTATIC_ONLY
LDFLAGS += -static
all: ${TARGET}
OBJS += src/kuroko.o
KUROKO_LIBS = ${OBJS}
endif
ifndef KRK_DISABLE_RLINE
KUROKO_LIBS += src/rline.o
KUROKO_LIBS += src/rline.o
else
CFLAGS += -DNO_RLINE
CFLAGS += -DNO_RLINE
endif
ifndef KRK_DISABLE_DEBUG
CFLAGS += -DDEBUG
CFLAGS += -DDEBUG
endif
ifdef KRK_ENABLE_BUNDLE
MODULES =
KUROKO_LIBS += $(patsubst %.c,%.o,$(sort $(wildcard src/module_*.c)))
CFLAGS += -DBUNDLE_LIBS=1
LDLIBS += -lm
MODULES =
KUROKO_LIBS += $(patsubst %.c,%.o,$(sort $(wildcard src/module_*.c)))
CFLAGS += -DBUNDLE_LIBS=1
LDLIBS += -lm
endif
.PHONY: help
@ -81,6 +84,50 @@ stress-test:
@for i in test/*.krk; do echo $$i; KUROKO_TEST_ENV=1 valgrind ./kuroko -g $$i > $$i.expect; done
@git diff --exit-code test/*.expect
LIBCARCH ?= $(shell gcc -print-multiarch)
prefix ?= /usr/local
exec_prefix ?= $(prefix)
includedir ?= $(prefix)/include
bindir ?= $(exec_prefix)/bin
libdir ?= $(exec_prefix)/lib/$(LIBCARCH)
INSTALL = install
INSTALL_PROGRAM=$(INSTALL)
INSTALL_DATA=$(INSTALL) -m 644
.PHONY: install
install: kuroko libkuroko.so ${HEADERS} $(KRKMODS) $(MODULES)
$(INSTALL) -d $(DESTDIR)$(includedir)/kuroko
$(INSTALL) -d $(DESTDIR)$(bindir)
$(INSTALL) -d $(DESTDIR)$(libdir)
$(INSTALL) -d $(DESTDIR)$(bindir)/../lib/kuroko
$(INSTALL) -d $(DESTDIR)$(bindir)/../lib/kuroko/syntax
$(INSTALL) -d $(DESTDIR)$(bindir)/../lib/kuroko/foo/bar
$(INSTALL_DATA) ${HEADERS} $(DESTDIR)$(includedir)/kuroko/
$(INSTALL_PROGRAM) kuroko $(DESTDIR)$(bindir)/kuroko
$(INSTALL_PROGRAM) libkuroko.so $(DESTDIR)$(libdir)/$(SONAME)
ln -s -f $(SONAME) $(DESTDIR)$(libdir)/libkuroko.so
$(INSTALL_DATA) modules/*.krk $(DESTDIR)$(bindir)/../lib/kuroko/
$(INSTALL_DATA) modules/foo/*.krk $(DESTDIR)$(bindir)/../lib/kuroko/foo/
$(INSTALL_DATA) modules/foo/bar/*.krk $(DESTDIR)$(bindir)/../lib/kuroko/foo/bar/
$(INSTALL_DATA) modules/syntax/*.krk $(DESTDIR)$(bindir)/../lib/kuroko/syntax/
$(INSTALL_PROGRAM) $(MODULES) $(DESTDIR)$(bindir)/../lib/kuroko/
install-strip: all
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
.PHONY: deb
deb: kuroko libkuroko.so
$(MAKE) -f Makefile.install
$(eval DESTDIR := $(shell mktemp -d))
$(MAKE) prefix=/usr DESTDIR='$(DESTDIR)' install-strip
fpm -s dir -C $(DESTDIR) -t deb \
-n "kuroko" \
-m "K. Lange <klange@toaruos.org>" \
--description "Bytecode-compiled interpreted dynamic programming language." \
--url "https://kuroko-lang.github.io/" \
--license "ISC" \
--category "devel" \
-d 'libc6 (>= 2.14)' \
--version $(VERSION) \
--iteration 0 \
--directories $(libdir)/kuroko
rm -r $(DESTDIR)

View File

@ -1,39 +0,0 @@
REVISION ?= 0
BASEDIR ?= /tmp/kuroko-pkg-build
LIBCARCH ?= $(shell gcc -print-multiarch)
DEBARCH ?= $(shell dpkg --print-architecture)
VERSION ?= $(shell ./kuroko --version | sed 's/.* //')
TARGET ?= kuroko_$(VERSION)-$(REVISION)_$(DEBARCH).deb
MAINTAINER ?= 'K. Lange <klange@toaruos.org>'
GLIBCDEP ?= 'libc6 (>= 2.14)'
DESC ?= "Bytecode-compiled interpreted dynamic programming language."
URL ?= 'https://kuroko-lang.github.io/'
DESTDIR ?= /tmp/kuroko-pkg-build
prefix ?= /usr
includedir ?= $(prefix)/include
bindir ?= $(prefix)/bin
libdir ?= $(prefix)/lib
$(TARGET):
# Install headers to target path.
-rm -rf $(DESTDIR)
mkdir -p $(DESTDIR)$(includedir)/kuroko
cp src/*.h $(DESTDIR)$(includedir)/kuroko/
# Install interpreter and strip
mkdir -p $(DESTDIR)$(bindir)
cp kuroko $(DESTDIR)$(bindir)/
strip $(DESTDIR)$(bindir)/kuroko
# Install libkuroko.so and strip
mkdir -p $(DESTDIR)$(libdir)/$(LIBCARCH)
cp libkuroko.so $(DESTDIR)$(libdir)/$(LIBCARCH)/libkuroko.so.$(VERSION)
ln -s libkuroko.so.$(VERSION) $(DESTDIR)$(libdir)/$(LIBCARCH)/libkuroko.so
strip $(DESTDIR)$(libdir)/$(LIBCARCH)/libkuroko.so.$(VERSION)
# Install modules and strip
mkdir -p $(DESTDIR)$(libdir)/kuroko
cp -r modules/* $(DESTDIR)$(libdir)/kuroko/
strip $(DESTDIR)$(libdir)/kuroko/*.so
# Build package
echo "Should build $(TARGET)"
fpm -s dir -C $(DESTDIR) -t deb -n kuroko --license ISC --category devel -d $(GLIBCDEP) --version $(VERSION) --iteration $(REVISION) --directories $(libdir)/kuroko -m $(MAINTAINER) --description $(DESC) --url $(URL)