diff --git a/meta-oe/recipes-extended/duktape/duktape_2.6.0.bb b/meta-oe/recipes-extended/duktape/duktape_2.6.0.bb new file mode 100644 index 00000000000..95df28ef2be --- /dev/null +++ b/meta-oe/recipes-extended/duktape/duktape_2.6.0.bb @@ -0,0 +1,21 @@ +SUMMARY = "Duktape embeddable Javascript engine" +DESCRIPTION = "Duktape is an embeddable Javascript engine, with a focus on portability and compact footprint." +HOMEPAGE = "https://duktape.org" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c83446610de1f63c7ca60cfcc82dec9d" + +SRC_URI = "https://duktape.org/duktape-${PV}.tar.xz \ + file://0001-Support-makefile-variables.patch \ +" +SRC_URI[md5sum] = "01ee8ecf3dd5c6504543c8679661bb20" +SRC_URI[sha256sum] = "96f4a05a6c84590e53b18c59bb776aaba80a205afbbd92b82be609ba7fe75fa7" + +do_compile () { + oe_runmake -f Makefile.sharedlibrary INSTALL_PREFIX="${prefix}" DESTDIR="${D}" +} + +do_install () { + oe_runmake -f Makefile.sharedlibrary INSTALL_PREFIX="${prefix}" DESTDIR="${D}" install + # libduktaped is identical to libduktape but has an hard-coded -g build flags, remove it + rm -f ${D}${libdir}/libduktaped.so* +} diff --git a/meta-oe/recipes-extended/duktape/files/0001-Support-makefile-variables.patch b/meta-oe/recipes-extended/duktape/files/0001-Support-makefile-variables.patch new file mode 100644 index 00000000000..f3fe40bc46f --- /dev/null +++ b/meta-oe/recipes-extended/duktape/files/0001-Support-makefile-variables.patch @@ -0,0 +1,297 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Luca Boccassi +Date: Mon, 17 Jan 2022 18:12:03 +0000 +Subject: [PATCH] Support makefile variables + +Makefile*: use CFLAGS/CPPFLAGS/LDFLAGS +Makefile*: allow compiler and install variables to be overridden +Makefile.sharedlibrary: allow destdir and libdir to be overridden +Makefile.sharedlibrary: generate pkg-config file + +Forwarded: https://github.com/svaarala/duktape/pull/2457 +--- + Makefile.cmdline | 5 ++-- + Makefile.codepage | 5 ++-- + Makefile.dukdebug | 5 ++-- + Makefile.eval | 5 ++-- + Makefile.eventloop | 5 ++-- + Makefile.hello | 5 ++-- + Makefile.jsoncbor | 5 ++-- + Makefile.jxpretty | 5 ++-- + Makefile.sandbox | 5 ++-- + Makefile.sharedlibrary | 48 ++++++++++++++++++++----------- + duktape.pc.in | 10 +++++++ + 11 files changed, 68 insertions(+), 35 deletions(-) + create mode 100644 duktape.pc.in + +diff --git a/Makefile.cmdline b/Makefile.cmdline +index 235566b8..0b020510 100644 +--- a/Makefile.cmdline ++++ b/Makefile.cmdline +@@ -8,7 +8,8 @@ DUKTAPE_SOURCES = src/duktape.c + CMDLINE_SOURCES = \ + examples/cmdline/duk_cmdline.c + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + CCOPTS = -Os -pedantic -std=c99 -Wall -fstrict-aliasing -fomit-frame-pointer + CCOPTS += -I./examples/cmdline -I./src # duktape.h and duk_config.h must be in include path + CCLIBS = -lm +@@ -40,7 +41,7 @@ CMDLINE_SOURCES += extras/module-duktape/duk_module_duktape.c + # http://wiki.duktape.org/Configuring.html + + duk: $(DUKTAPE_SOURCES) $(CMDLINE_SOURCES) +- $(CC) -o $@ $(DEFINES) $(CCOPTS) $(DUKTAPE_SOURCES) $(CMDLINE_SOURCES) $(CCLIBS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(DEFINES) $(CCOPTS) $(DUKTAPE_SOURCES) $(CMDLINE_SOURCES) $(CCLIBS) + + linenoise/linenoise.c: linenoise + linenoise: +diff --git a/Makefile.codepage b/Makefile.codepage +index f6ef1582..29fa6ffc 100644 +--- a/Makefile.codepage ++++ b/Makefile.codepage +@@ -1,6 +1,7 @@ +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + codepage: +- $(CC) -o $@ -std=c99 -O2 -Wall -Wextra -Isrc/ \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -std=c99 -O2 -Wall -Wextra -Isrc/ \ + src/duktape.c examples/codepage-conv/duk_codepage_conv.c \ + examples/codepage-conv/test.c -lm +diff --git a/Makefile.dukdebug b/Makefile.dukdebug +index 9fafcc3f..aa289d2e 100644 +--- a/Makefile.dukdebug ++++ b/Makefile.dukdebug +@@ -10,7 +10,8 @@ CMDLINE_SOURCES = \ + examples/cmdline/duk_cmdline.c \ + examples/debug-trans-socket/duk_trans_socket_unix.c + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + CCOPTS = -Os -pedantic -std=c99 -Wall -fstrict-aliasing -fomit-frame-pointer + CCOPTS += -I./prep -I./examples/cmdline -I./examples/debug-trans-socket + CCOPTS += -DDUK_CMDLINE_DEBUGGER_SUPPORT # enable --debugger in ./duk +@@ -38,4 +39,4 @@ duk: $(CMDLINE_SOURCES) + -DDUK_USE_INTERRUPT_COUNTER \ + -DDUK_USE_DEBUGGER_DUMPHEAP \ + -DDUK_USE_DEBUGGER_INSPECT +- $(CC) -o $@ $(DEFINES) $(CCOPTS) $(DUKTAPE_SOURCES) $(CMDLINE_SOURCES) $(CCLIBS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(DEFINES) $(CCOPTS) $(DUKTAPE_SOURCES) $(CMDLINE_SOURCES) $(CCLIBS) +diff --git a/Makefile.eval b/Makefile.eval +index 530f74a8..ce831a69 100644 +--- a/Makefile.eval ++++ b/Makefile.eval +@@ -2,8 +2,9 @@ + # Example Makefile for building the eval example + # + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + eval: +- $(CC) -o $@ -std=c99 -O2 -Wall -Wextra -Isrc/ \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -std=c99 -O2 -Wall -Wextra -Isrc/ \ + src/duktape.c examples/eval/eval.c -lm +diff --git a/Makefile.eventloop b/Makefile.eventloop +index 1a75587b..ab1b2f72 100644 +--- a/Makefile.eventloop ++++ b/Makefile.eventloop +@@ -2,14 +2,15 @@ + # Example Makefile for building the eventloop example + # + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + evloop: + @echo "NOTE: The eventloop is an example intended to be used on Linux" + @echo " or other common UNIX variants. It is not fully portable." + @echo "" + +- $(CC) -o $@ -std=c99 -Wall -Wextra -O2 -Isrc \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -std=c99 -Wall -Wextra -O2 -Isrc \ + examples/eventloop/main.c \ + examples/eventloop/c_eventloop.c \ + examples/eventloop/poll.c \ +diff --git a/Makefile.hello b/Makefile.hello +index c12b8e09..61269337 100644 +--- a/Makefile.hello ++++ b/Makefile.hello +@@ -13,7 +13,8 @@ DUKTAPE_SOURCES = src/duktape.c + # Compiler options are quite flexible. GCC versions have a significant impact + # on the size of -Os code, e.g. gcc-4.6 is much worse than gcc-4.5. + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + CCOPTS = -Os -pedantic -std=c99 -Wall -fstrict-aliasing -fomit-frame-pointer + CCOPTS += -I./src # for combined sources + CCLIBS = -lm +@@ -29,4 +30,4 @@ DEFINES = + # For debugging, use -O0 -g -ggdb, and don't add -fomit-frame-pointer + + hello: $(DUKTAPE_SOURCES) examples/hello/hello.c +- $(CC) -o $@ $(DEFINES) $(CCOPTS) $(DUKTAPE_SOURCES) examples/hello/hello.c $(CCLIBS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(DEFINES) $(CCOPTS) $(DUKTAPE_SOURCES) examples/hello/hello.c $(CCLIBS) +diff --git a/Makefile.jsoncbor b/Makefile.jsoncbor +index 30387a2f..8f234004 100644 +--- a/Makefile.jsoncbor ++++ b/Makefile.jsoncbor +@@ -2,9 +2,10 @@ + # Example Makefile for building the jsoncbor example + # + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + jsoncbor: +- $(CC) -o $@ -std=c99 -Wall -Wextra -O2 -Isrc -Iextras/cbor \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -std=c99 -Wall -Wextra -O2 -Isrc -Iextras/cbor \ + src/duktape.c extras/cbor/duk_cbor.c extras/cbor/jsoncbor.c \ + -lm +diff --git a/Makefile.jxpretty b/Makefile.jxpretty +index 7ab00cec..aa53aa8b 100644 +--- a/Makefile.jxpretty ++++ b/Makefile.jxpretty +@@ -2,9 +2,10 @@ + # Example Makefile for building the jxpretty example + # + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + jxpretty: +- $(CC) -o $@ -std=c99 -Wall -Wextra -O2 -Isrc \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -std=c99 -Wall -Wextra -O2 -Isrc \ + src/duktape.c examples/jxpretty/jxpretty.c \ + -lm +diff --git a/Makefile.sandbox b/Makefile.sandbox +index 26bb5ffc..d1d69ce4 100644 +--- a/Makefile.sandbox ++++ b/Makefile.sandbox +@@ -2,8 +2,9 @@ + # Example Makefile for building the sandbox example + # + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + sandbox: +- $(CC) -o $@ -std=c99 -O2 -Wall -Wextra -Isrc/ \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -std=c99 -O2 -Wall -Wextra -Isrc/ \ + src/duktape.c examples/sandbox/sandbox.c -lm +diff --git a/Makefile.sharedlibrary b/Makefile.sharedlibrary +index ace206a1..11620aa7 100644 +--- a/Makefile.sharedlibrary ++++ b/Makefile.sharedlibrary +@@ -24,7 +24,9 @@ + # 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. ++# The formatted version is used for the pkg-config file. + DUK_VERSION = 20600 ++DUK_VERSION_FORMATTED = 2.6.0 + SONAME_VERSION = 206 + REAL_VERSION = $(SONAME_VERSION).$(DUK_VERSION) + +@@ -45,44 +45,58 @@ else + endif + + # Change to actual path for actual distribution packaging. +-INSTALL_PREFIX = /usr/local ++INSTALL_PREFIX ?= /usr/local ++INSTALL_PREFIX := $(INSTALL_PREFIX) ++DESTDIR ?= ++DESTDIR := $(DESTDIR) ++LIBDIR ?= /lib ++LIBDIR := $(LIBDIR) + + # 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 + +-CC = gcc ++CC ?= gcc ++CC := $(CC) + + .PHONY: all +-all: libduktape.$(SO_REALNAME_SUFFIX) libduktaped.$(SO_REALNAME_SUFFIX) ++all: libduktape.$(SO_REALNAME_SUFFIX) libduktaped.$(SO_REALNAME_SUFFIX) duktape.pc + + # 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_REALNAME_SUFFIX): +- $(CC) -shared -fPIC -Wall -Wextra -Os -Wl,$(LD_SONAME_ARG),libduktape.$(SO_SONAME_SUFFIX) \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -fPIC -Wall -Wextra -Os -Wl,$(LD_SONAME_ARG),libduktape.$(SO_SONAME_SUFFIX) \ + -o $@ $(DUKTAPE_SRCDIR)/duktape.c + + libduktaped.$(SO_REALNAME_SUFFIX): +- $(CC) -shared -fPIC -g -Wall -Wextra -Os -Wl,$(LD_SONAME_ARG),libduktaped.$(SO_SONAME_SUFFIX) \ ++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -fPIC -g -Wall -Wextra -Os -Wl,$(LD_SONAME_ARG),libduktaped.$(SO_SONAME_SUFFIX) \ + -o $@ $(DUKTAPE_SRCDIR)/duktape.c + ++duktape.pc: ++ sed -e "s|@PREFIX@|$(INSTALL_PREFIX)|" \ ++ -e "s|@LIBDIR@|$(LIBDIR)|" \ ++ -e "s|@VERSION@|$(DUK_VERSION_FORMATTED)|" \ ++ duktape.pc.in \ ++ > duktape.pc ++ + # Symlinks depend on platform conventions. + .PHONY: install +-install: libduktape.$(SO_REALNAME_SUFFIX) libduktaped.$(SO_REALNAME_SUFFIX) +- mkdir -p $(INSTALL_PREFIX)/lib/ +- cp $+ $(INSTALL_PREFIX)/lib/ +- rm -f $(INSTALL_PREFIX)/lib/libduktape.so $(INSTALL_PREFIX)/lib/libduktape.$(SO_SONAME_SUFFIX) +- ln -s libduktape.$(SO_REALNAME_SUFFIX) $(INSTALL_PREFIX)/lib/libduktape.so +- ln -s libduktape.$(SO_REALNAME_SUFFIX) $(INSTALL_PREFIX)/lib/libduktape.$(SO_SONAME_SUFFIX) +- rm -f $(INSTALL_PREFIX)/lib/libduktaped.so $(INSTALL_PREFIX)/lib/libduktaped.$(SO_SONAME_SUFFIX) +- ln -s libduktaped.$(SO_REALNAME_SUFFIX) $(INSTALL_PREFIX)/lib/libduktaped.so +- ln -s libduktaped.$(SO_REALNAME_SUFFIX) $(INSTALL_PREFIX)/lib/libduktaped.$(SO_SONAME_SUFFIX) +- mkdir -p $(INSTALL_PREFIX)/include/ +- cp $(DUKTAPE_SRCDIR)/duktape.h $(DUKTAPE_SRCDIR)/duk_config.h $(INSTALL_PREFIX)/include/ ++install: libduktape.$(SO_REALNAME_SUFFIX) libduktaped.$(SO_REALNAME_SUFFIX) duktape.pc ++ mkdir -p $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/pkgconfig ++ cp $+ $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/ ++ rm -f $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktape.so $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktape.$(SO_SONAME_SUFFIX) ++ ln -s libduktape.$(SO_REALNAME_SUFFIX) $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktape.so ++ ln -s libduktape.$(SO_REALNAME_SUFFIX) $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktape.$(SO_SONAME_SUFFIX) ++ rm -f $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktaped.so $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktaped.$(SO_SONAME_SUFFIX) ++ ln -s libduktaped.$(SO_REALNAME_SUFFIX) $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktaped.so ++ ln -s libduktaped.$(SO_REALNAME_SUFFIX) $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/libduktaped.$(SO_SONAME_SUFFIX) ++ mv $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/duktape.pc $(DESTDIR)$(INSTALL_PREFIX)$(LIBDIR)/pkgconfig/ ++ mkdir -p $(DESTDIR)$(INSTALL_PREFIX)/include/ ++ cp $(DUKTAPE_SRCDIR)/duktape.h $(DUKTAPE_SRCDIR)/duk_config.h $(DESTDIR)$(INSTALL_PREFIX)/include/ + + CCOPTS = -I./examples/cmdline + duk: +- $(CC) $(CCOPTS) -I$(INSTALL_PREFIX)/include -L$(INSTALL_PREFIX)/lib -Wall -Wextra -Os -o $@ ./examples/cmdline/duk_cmdline.c -lduktape -lm ++ $(CC) $(CCOPTS) -I$(INSTALL_PREFIX)/include -L$(INSTALL_PREFIX)$(LIBDIR) -Wall -Wextra -Os -o $@ ./examples/cmdline/duk_cmdline.c -lduktape -lm +diff --git a/duktape.pc.in b/duktape.pc.in +new file mode 100644 +index 00000000..0985c67e +--- /dev/null ++++ b/duktape.pc.in +@@ -0,0 +1,10 @@ ++prefix=@PREFIX@ ++exec_prefix=${prefix} ++libdir=${prefix}@LIBDIR@ ++includedir=${prefix}/include ++ ++Name: duktape ++Description: Embeddable Javascript engine ++Version: @VERSION@ ++Libs: -L${libdir} -lduktape ++Cflags: -I${includedir}