PORTNAME=	lua-language-server
DISTVERSION=	3.17.1
PORTEPOCH=	1
CATEGORIES=	devel

MAINTAINER=	dave@freedave.net
COMMENT=	Lua development server and LSP client
WWW=		https://luals.github.io

LICENSE=	MIT
LICENSE_FILE=	${WRKSRC}/LICENSE

USES=		dos2unix inotify ninja:make
DOS2UNIX_REGEX=	.*\.(cpp|h|json|lua|md|obj)
USE_GITHUB=	yes
GH_ACCOUNT=	LuaLS

# autogenerated with:
# submodules2tuple -v -b $DISTVERSION https://github.com/LuaLS/lua-language-server
# But then you must distinguish the 2 `bee.lua` manually.
GH_TUPLE=	CppCXY:EmmyLuaCodeStyle:8c4289b7:emmyluacodestyle/3rd/EmmyLuaCodeStyle \
		actboy168:bee.lua:f55b6988:beelua/3rd/bee.lua \
		actboy168:json.lua:08095fd2:jsonlua/3rd/json.lua \
		actboy168:ltest:0d2d81f:ltest/3rd/json.lua/test/ltest \
		love2d-community:love-api:85363928:loveapi/3rd/love-api \
		bjornbytes:lovr-docs:e89c753e:lovrdocs/3rd/lovr-api \
		sqmedeiros:lpeglabel:912b0b9e:lpeglabel/3rd/lpeglabel \
		actboy168:luamake:4c4bd16c:luamake/3rd/luamake \
		actboy168:bee.lua:466c4f0:beelua_luamake/3rd/luamake/bee.lua \
		LuaCATS:cocos4.0:c0b2259e:cocos40/meta/3rd/Cocos4.0 \
		LuaCATS:defold:05379b40:defold/meta/3rd/Defold \
		LuaCATS:jass:80d85cbb:jass/meta/3rd/Jass \
		LuaCATS:openresty:3bec36f0:openresty/meta/3rd/OpenResty \
		LuaCATS:bee:c8ce19fd:bee/meta/3rd/bee \
		LuaCATS:busted:5ed85d0e:busted/meta/3rd/busted \
		LuaCATS:ffi-reflect:e9037efc:ffireflect/meta/3rd/ffi-reflect \
		LuaCATS:luafilesystem:9b5cfc15:luafilesystem/meta/3rd/lfs \
		LuaCATS:love2d:98f76845:love2d/meta/3rd/love2d \
		LuaCATS:lovr:3ba215f9:lovr/meta/3rd/lovr \
		LuaCATS:luaecs:21192fbd:luaecs/meta/3rd/luaecs \
		LuaCATS:luassert:d3528bb6:luassert/meta/3rd/luassert \
		LuaCATS:luv:3615eb12:luv/meta/3rd/luv \
		LuaCATS:skynet:afa6717a:skynet/meta/3rd/skynet

SUB_FILES=	lua-language-server pkg-message

PLIST_FILES=	bin/lua-language-server \
		${DATADIR_REL}/bin/lua-language-server \
		${DATADIR_REL}/bin/main.lua \
		${DATADIR_REL}/debugger.lua \
		${DATADIR_REL}/main.lua

PORTDATA=	locale meta script

PORTEXAMPLES=	neovim.luarc.json

OPTIONS_DEFINE=	EXAMPLES

EXAMPLES_SUB_FILES=	neovim.luarc.json

.include <bsd.port.pre.mk>

# `luamake' has its own syntax for linking of inotify library
.if defined(INOTIFY_PORT)
LM_INOTIFY_LINK=	links = "inotify",
.endif

post-patch:
	${REINPLACE_CMD} -e 's|%LOCALBASE%|${LOCALBASE}|' ${WRKSRC}/3rd/bee.lua/compile/common.lua
	${REINPLACE_CMD} -e 's|%LM_INOTIFY_LINK%|${LM_INOTIFY_LINK}|' ${WRKSRC}/3rd/bee.lua/compile/common.lua
	${REINPLACE_CMD} -e 's|%LOCALBASE%|${LOCALBASE}|' ${WRKSRC}/3rd/luamake/compile/ninja/freebsd.ninja
	${REINPLACE_CMD} -e 's|%INOTIFY_LIB%|${INOTIFY_LIB}|' ${WRKSRC}/3rd/luamake/compile/ninja/freebsd.ninja
	${REINPLACE_CMD} -e 's|%WRKDIR%|${WRKDIR}|' ${WRKSRC}/3rd/luamake/bee.lua/test/test.lua
	${REINPLACE_CMD} -e 's|%WRKDIR%|${WRKDIR}|' ${WRKSRC}/3rd/bee.lua/test/test.lua
	${REINPLACE_CMD} -e 's|%NINJA_CMD%|${NINJA_CMD}|' ${WRKSRC}/3rd/luamake/compile/build.sh
	${REINPLACE_CMD} -e 's|%NINJA_CMD%|${NINJA_CMD}|' ${WRKSRC}/3rd/luamake/scripts/globals.lua

# `luamake all` instead of `luamake rebuild` because there is a flaky test
do-build:
	cd ${WRKSRC}/3rd/luamake && compile/build.sh notest
	cd ${WRKSRC} && 3rd/luamake/luamake all

do-install:
	${MKDIR} ${STAGEDIR}${DATADIR}/bin
	${INSTALL_SCRIPT} ${WRKDIR}/lua-language-server ${STAGEDIR}${PREFIX}/bin
	${INSTALL_PROGRAM} ${WRKSRC}/bin/lua-language-server ${STAGEDIR}${DATADIR}/bin
	${INSTALL_SCRIPT} ${WRKSRC}/bin/main.lua ${STAGEDIR}${DATADIR}/bin
	${INSTALL_DATA} ${WRKSRC}/debugger.lua ${STAGEDIR}${DATADIR}
	${INSTALL_DATA} ${WRKSRC}/main.lua ${STAGEDIR}${DATADIR}
	cd ${WRKSRC} && ${COPYTREE_SHARE} "locale meta script" ${STAGEDIR}${DATADIR}

do-install-EXAMPLES-on:
	${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
	${INSTALL_DATA} ${WRKDIR}/neovim.luarc.json ${STAGEDIR}${EXAMPLESDIR}

# you may hit https://github.com/LuaLS/lua-language-server/issues/2896
# also an incorrect test for bee (in both versions) doing thread.sleep
do-test:
	cd ${WRKSRC}/3rd/luamake && build/freebsd/bin/luamake bee.lua/test/test.lua
	cd ${WRKSRC} && 3rd/luamake/luamake unit-test

.include <bsd.port.post.mk>
