On 2021/10/05 15:14, Edd Barrett wrote:
> On Mon, Oct 04, 2021 at 01:06:43PM +0100, Edd Barrett wrote:
> > Hi,
> > 
> > This updates Neovim to the latest version and enables LuaJIT on 
> > architectures
> > where that is possible
> 
> Here's a revised diff that deals with -lc++abi properly (pointed out by 
> sthen@,
> thanks). I based the change on what lang/luajit already does. It's this part 
> in
> the Makefile:
> 
> > .include <bsd.port.arch.mk>
> > .if ${PROPERTIES:Mclang}
> > LUAJIT_TARGET_LIBS =        "-lc++abi -lpthread"
> > WANTLIB +=          c++abi pthread
> > .endif
> 
> One question though. Shouldn't `-lpthread` be `-pthread` (both here in
> editors/neoevim and in lang/luajit)? Or do we not make that distinction any
> more?

That used to be needed but has not been needed for quite a few releases now.
Might have been the move from userland to kernel-backed threads or it might
have been a later change, I don't remember which.

Looks ok to me. btw you might as well get rid of base-gcc from COMPILER,
cmake is not available without ports-gcc so base-gcc will never match.


> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/editors/neovim/Makefile,v
> retrieving revision 1.23
> diff -u -p -r1.23 Makefile
> --- Makefile  18 Jul 2021 09:18:07 -0000      1.23
> +++ Makefile  5 Oct 2021 14:09:16 -0000
> @@ -1,36 +1,61 @@
>  # $OpenBSD: Makefile,v 1.23 2021/07/18 09:18:07 paco Exp $
>  
> +# Use LuaJIT where possible, as some plugins assume it's available. Arches
> +# that can't use LuaJIT have to use the system Lua (and some plugins may not
> +# work).
> +.if ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "aarch64" || \
> +     ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || \
> +     ${MACHINE_ARCH} == "powerpc"
> +EMBED_LUAJIT =       Yes
> +.else
> +EMBED_LUAJIT =       No
> +.endif
> +
>  COMMENT =    continuation and extension of Vim
>  
>  GH_ACCOUNT = neovim
>  GH_PROJECT = neovim
> -GH_TAGNAME = v0.5.0
> +GH_TAGNAME = v0.5.1
>  
>  CATEGORIES = editors devel
>  HOMEPAGE =   https://neovim.io
>  MAINTAINER = Edd Barrett <[email protected]>
>  
> -# Neovim must be statically linked with libluv, which isn't yet ported.
> +# The versions listed here must match those in third-party/CMakeLists.txt.
>  LUV_VER =    1.30.1-1
> -LUV =                luv-${LUV_VER}
> +LUAJIT_VER = 787736990ac3b7d5ceaba2697c7d0f58f77bb782
> +
>  MASTER_SITES0 =      
> https://github.com/luvit/luv/releases/download/${LUV_VER}/
> +MASTER_SITES1 = https://github.com/LuaJIT/LuaJIT/archive/
>  DISTFILES =  ${DISTNAME}${EXTRACT_SUFX} \
> -             ${LUV}${EXTRACT_SUFX}:0
> +             luv-${LUV_VER}${EXTRACT_SUFX}:0 \
> +             luajit-{}${LUAJIT_VER}${EXTRACT_SUFX}:1
>  
> -# Apache 2.0 + Vim License
> +# Neovim: Apache 2.0 + Vim License
> +# LuaJIT: MIT + public domain
> +# libluv: Apache 2.0
>  PERMIT_PACKAGE =     Yes
>  
>  DEBUG_PACKAGES =     ${BUILD_PACKAGES}
>  
> -WANTLIB += c iconv intl ${MODLUA_WANTLIB} m msgpackc pthread termkey
> +WANTLIB += ${COMPILER_LIBCXX} c iconv intl m msgpackc pthread termkey
>  WANTLIB += tree-sitter unibilium util uv vterm
>  
> +.if ${EMBED_LUAJIT} != "Yes"
> +WANTLIB += ${MODLUA_WANTLIB}
> +.endif
> +
>  COMPILER =           base-clang ports-gcc base-gcc
>  
>  MODULES =            devel/cmake \
>                       lang/lua \
>                       textproc/intltool
>  
> +# LuaJIT is binary compatible with Lua-5.1 extension modules, so we can use
> +# them directly, even on architectures where we will be embedding LuaJIT.
> +# https://luajit.org/extensions.html
> +MODLUA_VERSION =     5.1
> +
>  BUILD_DEPENDS =              ${RUN_DEPENDS} \
>                       devel/gperf \
>                       devel/lpeg \
> @@ -46,37 +71,83 @@ LIB_DEPENDS =             devel/gettext,-runtime \
>  
>  RUN_DEPENDS +=               devel/libmpack/lua \
>                       devel/libmpack/main \
> -                     devel/desktop-file-utils
> -
> -MAKE_FLAGS +=                USE_BUNDLED=OFF
> -CONFIGURE_ARGS +=    -DLUA_PRG=${MODLUA_BIN} \
> +                     devel/desktop-file-utils \
> +                     devel/lua-compat53 \
> +                     x11/gtk+3,-guic
> +
> +SEPARATE_BUILD =     Yes
> +CONFIGURE_ARGS +=    -DUSE_BUNDLED=OFF \
> +                     -DLIBLUV_INCLUDE_DIR=${STATIC_DEPS_INST}/include \
> +                     -DLIBLUV_LIBRARY=${STATIC_DEPS_INST}/lib/libluv.a
> +.if ${EMBED_LUAJIT} == "Yes"
> +CONFIGURE_ARGS +=    -DLUA_PRG=${STATIC_DEPS_INST}/bin/luajit-2.1.0-beta3 \
> +                     
> -DLUAJIT_INCLUDE_DIR=${STATIC_DEPS_INST}/include/luajit-2.1 \
> +                     -DLUAJIT_LIBRARY=${STATIC_DEPS_INST}/lib/libluajit-5.1.a
> +.else
> +CONFIGURE_ARGS +=    -DPREFER_LUA=ON \
> +                     -DLUA_PRG=${MODLUA_BIN} \
>                       -DLUA_INCLUDE_DIR=${MODLUA_INCL_DIR} \
> -                     -DLUA_LIBRARIES=${MODLUA_LIB} \
> -                     -DLIBLUV_INCLUDE_DIR=${WRKBUILD}/deps/include \
> -                     -DLIBLUV_LIBRARY=${WRKBUILD}/deps/lib/libluv.a \
> -                     -DPREFER_LUA=ON # disables LuaJIT
> +                     -DLUA_LIBRARIES=${MODLUA_LIB}
> +.endif
>  
>  # Tests need gmake
>  USE_GMAKE = Yes
>  # `test_startup_utf8.vim' requires either bash or zsh
>  MODULES +=   lang/python
>  MODPY_RUNDEP =       No
> -MODPY_BUILDDEP =     No
> +MODPY_BUILDDEP =No
>  TEST_DEPENDS =       shells/bash \
>               editors/py-neovim \
>               editors/py-neovim${MODPY_FLAVOR}
>  
> -# Build libluv first as a static library. We opted not to create a libluv
> -# port because it must be built for a specific Lua version and we don't know
> -# what version future ports might need. Currently no other port requires
> -# libluv, so it's simpler to build a static library here.
> +# Move static deps source code under WRKDIST so that they can be patched.
> +STATIC_DEPS_WRKSRC=${WRKDIST}/static-deps/
> +post-extract:
> +     mkdir ${STATIC_DEPS_WRKSRC}
> +     mv ${WRKDIR}/LuaJIT-${LUAJIT_VER} ${STATIC_DEPS_WRKSRC}/luajit
> +     mv ${WRKDIR}/luv-${LUV_VER} ${STATIC_DEPS_WRKSRC}/luv
> +
> +# Build LuaJIT (if required) and libluv as static libraries.
> +#
> +# We opted not to create a libluv port because it must be built for a 
> specific
> +# Lua version and we don't know what version future ports might need. 
> Currently
> +# no other port requires libluv, so it's simpler to build a static library
> +# here.
> +#
> +# Most of the libluv target is lifted from ${MODCMAKE_configure} in
> +# cmake.port.mk. Unfortunately we can't use it directly, as some of the
> +# arguments make assumptions that can't work for us here.
>  #
> -# Most of this target is lifted from ${MODCMAKE_configure} in cmake.port.mk.
> -# Unfortunately we can't use it directly, as some of the arguments make
> -# assumptions that can't work for us here.
> +# Neovim plugins expect a very specific version of LuaJIT, so it only really
> +# makes sense to embed it.
> +STATIC_DEPS_WRKBUILD=${WRKBUILD}/static-deps-build
> +STATIC_DEPS_INST=${WRKBUILD}/static-deps-inst
> +.include <bsd.port.arch.mk>
> +.if ${PROPERTIES:Mclang}
> +LUAJIT_TARGET_LIBS = "-lc++abi -lpthread"
> +WANTLIB +=           c++abi pthread
> +.endif
>  pre-configure:
> -     mkdir -p ${WRKBUILD}/build
> -     cd ${WRKBUILD}/build && \
> +     mkdir -p ${STATIC_DEPS_WRKBUILD} ${STATIC_DEPS_PREFIX}
> +
> +.if ${EMBED_LUAJIT} == "Yes"
> +     # Build LuaJIT.
> +     # We can't build LuaJIT out of its src dir, so copy it so that we can
> +     # support SEPARATE_BUILD.
> +     cp -r ${STATIC_DEPS_WRKSRC}/luajit ${STATIC_DEPS_WRKBUILD}/luajit
> +     cd ${STATIC_DEPS_WRKBUILD}/luajit/src && \
> +             ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} \
> +             PREFIX=${STATIC_DEPS_INST} CC=${CC} CCOPT="${CFLAGS}" \
> +             CCOPT_x86="" Q="" TARGET_LIBS=${LUAJIT_TARGET_LIBS} \
> +             BUILDMODE=static
> +     cd ${STATIC_DEPS_WRKBUILD}/luajit && \
> +             ${SETENV} ${MAKE_ENV} Q="" ${MAKE_PROGRAM} install \
> +             PREFIX=${STATIC_DEPS_INST}
> +.endif
> +
> +     # Build libluv.
> +     mkdir -p ${STATIC_DEPS_WRKBUILD}/luv
> +     cd ${STATIC_DEPS_WRKBUILD}/luv && \
>               ${SETENV} CC="${CC}" \
>               CXX="${CXX}" \
>               CFLAGS="${CFLAGS}" \
> @@ -87,16 +158,16 @@ pre-configure:
>               -DCMAKE_COLOR_MAKEFILE=OFF \
>               -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
>               -DCMAKE_SUPPRESS_REGENERATION=ON \
> -             -DCMAKE_INSTALL_PREFIX=${WRKBUILD}/deps \
> +             -DCMAKE_INSTALL_PREFIX=${STATIC_DEPS_INST} \
>               -DLUA_BUILD_TYPE=System \
>               -DLUA_INCLUDE_DIR=${MODLUA_INCL_DIR} \
> -             -DLUA_LIBRARIES=${MODLUA_LIB} \
> +             -DLUA_LIBRARIES=${MODLUA_LIBDIR} \
>               -DWITH_LUA_ENGINE=Lua \
> -             ${WRKDIR}/${LUV}
> -     cd ${WRKBUILD}/build && \
> +             ${STATIC_DEPS_WRKSRC}/luv
> +     cd ${STATIC_DEPS_WRKBUILD}/luv && \
>               ${SETENV} ${MAKE_ENV} VERBOSE=1 \
>               ${MAKE_PROGRAM}
> -     cd ${WRKBUILD}/build && \
> +     cd ${STATIC_DEPS_WRKBUILD}/luv && \
>               ${SETENV} ${MAKE_ENV} VERBOSE=1 \
>               ${MAKE_PROGRAM} install
>  
> @@ -105,8 +176,14 @@ pre-configure:
>  #
>  # If cscope is installed, one test fails:
>  # https://github.com/neovim/neovim/issues/12744
> -do-test:
> -     cd ${WRKSRC}/src/nvim/testdir && ${SETENV} LC_CTYPE=en_US.UTF-8 \
> -             ${MAKE_PROGRAM} NVIM_PRG=${WRKBUILD}/bin/nvim ${MAKE_FLAGS}
> +#
> +# XXX: This is broken. The tarball doesn't contain the necessary 'ci'
> +# directory.  Will be fixed for the next release though:
> +# https://github.com/neovim/neovim/issues/15856
> +NO_TEST = Yes
> +#do-test:
> +#    true
> +#    cd ${WRKSRC}/src/nvim/testdir && ${SETENV} LC_CTYPE=en_US.UTF-8 \
> +#            ${MAKE_PROGRAM} NVIM_PRG=${WRKBUILD}/bin/nvim ${MAKE_FLAGS}
>  
>  .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/editors/neovim/distinfo,v
> retrieving revision 1.9
> diff -u -p -r1.9 distinfo
> --- distinfo  18 Jul 2021 09:18:07 -0000      1.9
> +++ distinfo  2 Oct 2021 10:10:22 -0000
> @@ -1,4 +1,6 @@
> +SHA256 (luajit-787736990ac3b7d5ceaba2697c7d0f58f77bb782.tar.gz) = 
> Lj90vCefRsxGOr/Gezbmn6rwNmI3AEdx9MrEvyqfXvs=
>  SHA256 (luv-1.30.1-1.tar.gz) = Tih77W9R/VDOA7p/qMwz2E4bnLhpEcSBK7H0eh4+0So=
> -SHA256 (neovim-0.5.0.tar.gz) = IpTKqdIBGZZJn71w5ABuTvVdt1uZtnGRVMCSYuI3ZO8=
> +SHA256 (neovim-0.5.1.tar.gz) = qkSXleXMab3S7u1wlfILnAhsbs/N4Ktiq5ep0EJD7IQ=
> +SIZE (luajit-787736990ac3b7d5ceaba2697c7d0f58f77bb782.tar.gz) = 1037727
>  SIZE (luv-1.30.1-1.tar.gz) = 1354232
> -SIZE (neovim-0.5.0.tar.gz) = 10337976
> +SIZE (neovim-0.5.1.tar.gz) = 10349190
> Index: patches/patch-src_nvim_CMakeLists_txt
> ===================================================================
> RCS file: patches/patch-src_nvim_CMakeLists_txt
> diff -N patches/patch-src_nvim_CMakeLists_txt
> --- patches/patch-src_nvim_CMakeLists_txt     18 Aug 2020 19:15:54 -0000      
> 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,19 +0,0 @@
> -$OpenBSD: patch-src_nvim_CMakeLists_txt,v 1.3 2020/08/18 19:15:54 edd Exp $
> -
> -No need for libc++abi, only available on clang archs and only needed for
> -luajit (we use lua instead).
> -
> -Index: src/nvim/CMakeLists.txt
> ---- src/nvim/CMakeLists.txt.orig
> -+++ src/nvim/CMakeLists.txt
> -@@ -366,10 +366,6 @@ endforeach()
> - 
> - # Our dependencies come first.
> - 
> --if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
> --  list(APPEND NVIM_LINK_LIBRARIES pthread c++abi)
> --endif()
> --
> - if (LibIntl_FOUND)
> -   list(APPEND NVIM_LINK_LIBRARIES ${LibIntl_LIBRARY})
> - endif()
> Index: patches/patch-static-deps_luajit_src_host_buildvm_asm_c
> ===================================================================
> RCS file: patches/patch-static-deps_luajit_src_host_buildvm_asm_c
> diff -N patches/patch-static-deps_luajit_src_host_buildvm_asm_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-static-deps_luajit_src_host_buildvm_asm_c   2 Oct 2021 
> 10:10:22 -0000
> @@ -0,0 +1,16 @@
> +$OpenBSD$
> +
> +.gnu_attribute requires binutils 2.18
> +
> +Index: static-deps/luajit/src/host/buildvm_asm.c
> +--- static-deps/luajit/src/host/buildvm_asm.c.orig
> ++++ static-deps/luajit/src/host/buildvm_asm.c
> +@@ -327,7 +327,7 @@ void emit_asm(BuildCtx *ctx)
> + #if !(LJ_TARGET_PS3 || LJ_TARGET_PSVITA)
> +     fprintf(ctx->fp, "\t.section .note.GNU-stack,\"\"," ELFASM_PX 
> "progbits\n");
> + #endif
> +-#if LJ_TARGET_PPC && !LJ_TARGET_PS3 && !LJ_ABI_SOFTFP
> ++#if 0 || LJ_TARGET_PPC && !LJ_TARGET_PS3 && !LJ_ABI_SOFTFP
> +     /* Hard-float ABI. */
> +     fprintf(ctx->fp, "\t.gnu_attribute 4, 1\n");
> + #endif
> Index: patches/patch-static-deps_luajit_src_lj_arch_h
> ===================================================================
> RCS file: patches/patch-static-deps_luajit_src_lj_arch_h
> diff -N patches/patch-static-deps_luajit_src_lj_arch_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-static-deps_luajit_src_lj_arch_h    2 Oct 2021 10:10:22 
> -0000
> @@ -0,0 +1,18 @@
> +$OpenBSD$
> +
> +Our base-clang poses as gcc-4.2.1, but building with clang on powerpc
> +"requires" gcc>=4.3, unlike other archs requiring lower versions. Instead,
> +ignore the gcc version check ifdef hell for all base-clang arches.
> +
> +Index: static-deps/luajit/src/lj_arch.h
> +--- static-deps/luajit/src/lj_arch.h.orig
> ++++ static-deps/luajit/src/lj_arch.h
> +@@ -427,7 +427,7 @@
> + /* -- Checks for requirements --------------------------------------------- 
> */
> + 
> + /* Check for minimum required compiler versions. */
> +-#if defined(__GNUC__)
> ++#if defined(__GNUC__) && !defined(__clang__)
> + #if LJ_TARGET_X86
> + #if (__GNUC__ < 3) || ((__GNUC__ == 3) && __GNUC_MINOR__ < 4)
> + #error "Need at least GCC 3.4 or newer"
> Index: pkg/PLIST
> ===================================================================
> RCS file: /cvs/ports/editors/neovim/pkg/PLIST,v
> retrieving revision 1.9
> diff -u -p -r1.9 PLIST
> --- pkg/PLIST 18 Jul 2021 09:18:07 -0000      1.9
> +++ pkg/PLIST 4 Oct 2021 10:55:15 -0000
> @@ -4,10 +4,6 @@ lib/nvim/
>  @man man/man1/nvim.1
>  share/applications/nvim.desktop
>  share/doc/pkg-readmes/${PKGSTEM}
> -share/icons/
> -share/icons/hicolor/
> -share/icons/hicolor/128x128/
> -share/icons/hicolor/128x128/apps/
>  share/icons/hicolor/128x128/apps/nvim.png
>  share/locale/af/LC_MESSAGES/nvim.mo
>  share/locale/ca/LC_MESSAGES/nvim.mo
> @@ -844,6 +840,7 @@ share/nvim/runtime/lua/vim/highlight.lua
>  share/nvim/runtime/lua/vim/inspect.lua
>  share/nvim/runtime/lua/vim/lsp/
>  share/nvim/runtime/lua/vim/lsp.lua
> +share/nvim/runtime/lua/vim/lsp/_snippet.lua
>  share/nvim/runtime/lua/vim/lsp/buf.lua
>  share/nvim/runtime/lua/vim/lsp/codelens.lua
>  share/nvim/runtime/lua/vim/lsp/diagnostic.lua
> @@ -1610,3 +1607,4 @@ share/nvim/runtime/tutor/en/vim-01-begin
>  share/nvim/runtime/tutor/tutor.tutor
>  share/nvim/runtime/tutor/tutor.tutor.json
>  @tag update-desktop-database
> +@tag gtk-update-icon-cache %D/share/icons/hicolor
> Index: pkg/README
> ===================================================================
> RCS file: /cvs/ports/editors/neovim/pkg/README,v
> retrieving revision 1.3
> diff -u -p -r1.3 README
> --- pkg/README        4 Sep 2018 12:46:11 -0000       1.3
> +++ pkg/README        4 Oct 2021 11:41:43 -0000
> @@ -4,22 +4,14 @@ $OpenBSD: README,v 1.3 2018/09/04 12:46:
>  | Running ${PKGSTEM} on OpenBSD
>  
> +-------------------------------------------------------------------------------
>  
> +LuaJIT Support
> +==============
> +
> +Some Neovim plugins now require LuaJIT. Those plugins won't work on
> +architectures that have no LuaJIT support.
> +
>  Why is the Escape Key Not Working Right?
>  ========================================
>  
>  If you use Neovim under tmux, you are likely being bitten by a libtermkey 
> bug.
>  Read the libtermkey package README for a workaround.
> -
> -Migrating from Vim to Neovim
> -============================
> -
> -Note that in Neovim some paths are different from traditional vim. The config
> -dir is ~/.config/nvim, and the main config file is ~/.config/nvim/init.vim. 
> You
> -can symlink your existing traditional vim config and directory to the new
> -paths, and this will work.
> -
> -The first time you invoke nvim, run ':checkhealth' to see what else you might
> -need to do to migrate.
> -
> -Please note that ':checkhealth' was called ':CheckHealth' (with different
> -capitalisation) prior to neovim version 0.3.0.
> 
> -- 
> Best Regards
> Edd Barrett
> 
> https://www.theunixzoo.co.uk

Reply via email to