Top/Prog/TagSystem/lctags

目次

lctags

環境構築

  1. コードの取得
    $ git clone https://github.com/ifritJP/lctags.git
  2. 追加パッケージのインストール
    • swig (ビルドに必要)
    • liblua50-dev
    • lua5.3
    • luajit
    • liblua5.3-dev
    • libssl-dev
  3. 他モジュールのコードを取得・展開
    $ cd lctags/external
    $ curl http://lua.sqlite.org/index.cgi/zip/lsqlite3_fsl09x.zip?uuid=fsl_9x -o luasqlite3.zip
    $ unzip luasqlite3.zip
    $ cp -Rfdp lsqlite3_fsl09x/ luasqlite3/
    $ curl https://www.lua.org/ftp/lua-5.3.4.tar.gz -o lua/lua-5.3.4/src/lua.tar.gz
    $ tar -xvzf lua.tar.gz
    $ mv lua-5.3.4 lua/
  4. ビルド
    1. src/makefile の修正
      diff --git a/src/makefile b/src/makefile
      index d3dde80..9a92a49 100644
      --- a/src/makefile
      +++ b/src/makefile
      @@ -1,128 +1,152 @@
       NDIR=$(shell pwd)
       
      -INST_DIR=/usr/local/bin
      +INST_DIR := /usr/local/bin
       
      -PROXY=
      +PROXY :=
       
      -SWIG=swig
      +SWIG := swig
       
       INSTALL=/usr/bin/install -c
       
      -SO=so
      -## cygwin
      -#SO=dll
      +LUA_VER := 5.3
      +# LUA_VER := 5.2
      +# LUA_VER := 5.1
       
      -####### customize Lua environment ######
      +LUAJIT_VER := 2.0.4
      +# LUAJIT_VER := $(shell luajit -v | awk '{print $2;}')
      +
      +CLANG_VER := 7
      +# CLANG_VER=3.8
      +
      +UNAME := $(shell uname -a)
      +ifeq ($(filter Darwin,$(UNAME)),Darwin)
      +OS := mac
      +else
      +ifeq ($(filter Linux,$(UNAME)),Linux)
      +OS := linux
      +else
      +ifeq ($(filter MINGW,$(UNAME)),Cygwin)
      +OS := cygwin
      +else
      +$(info Your platform $(UNAME) is not supported.)
      +endif
      +endif
      +endif
       
      +ifeq ($(OS),cygwin)
       ## cygwin
      -# LUA_COMMAND=lua
      -# LUA_INC=/usr/include
      -# LUA_LDFLAGS=
      -# LUA_SO=-llua
      +SO := dll
      +else
      +SO := so
      +endif
       
      -# LUA_COMMAND=lua5.1
      -# LUA_INC=/usr/include/lua5.1
      -# LUA_LDFLAGS=
      -# LUA_SO=-llua5.1
      +####### customize Lua environment ######
      +ifeq ($(OS),cygwin)
      +## cygwin
      +LUA_COMMAND := lua
      +LUA_INC     := /usr/include
      +LUA_LDFLAGS :=
      +LUA_SO      := -llua
       
      -LUA_COMMAND=lua5.3
      -LUA_INC=/usr/include/lua5.3
      -LUA_LDFLAGS=
      -LUA_SO=-llua5.3
      +else
      +LUA_COMMAND := lua$(LUA_VER)
      +LUA_INC     := /usr/include/lua$(LUA_VER)
      +LUA_LDFLAGS :=
      +LUA_SO      := -llua$(LUA_VER)
      +endif
       
      -# LUA_COMMAND=luajit
      -# LUA_INC=/usr/include/luajit-2.0
      -# LUA_LDFLAGS=
      -# LUA_SO=-lluajit-5.1
      +# LUA_COMMAND  := luajit
      +# LUA_INC      := /usr/include/luajit-2.0
      +# LUA_LDFLAGS  := 
      +# LUA_SO       := -lluajit-5.1
       
      -# LUA_COMMAND=./clanglua
      -# LUA_CFLAGS=-fPIC -DLUA_COMPAT_5_1 -DLUA_COMPAT_5_2 -I$(NDIR)/$(LUA_DIR)
      -# LUA_DIR=../external/lua/lua-5.3.4/src
      -# LUA_INC=$(NDIR)/$(LUA_DIR)
      -# LUA_LIB=$(LUA_DIR)/liblua.a
      -# LUA_INST_DIR=/usr/local/bin
      -# LUA_LIB_DIR=/usr/local/lib/lua/5.3
      -# LUA_LDFLAGS=-lncursesw
      +# LUA_COMMAND  := ./clanglua
      +# LUA_CFLAGS   := -fPIC -DLUA_COMPAT_5_1 -DLUA_COMPAT_5_2 -I$(NDIR)/$(LUA_DIR)
      +# LUA_DIR      := ../external/lua/lua-5.3.4/src
      +# LUA_INC      := $(NDIR)/$(LUA_DIR)
      +# LUA_LIB      := $(LUA_DIR)/liblua.a
      +# LUA_INST_DIR := /usr/local/bin
      +# LUA_LIB_DIR  := /usr/local/lib/lua/5.3
      +# LUA_LDFLAGS  := -lncursesw
       
      -TEST_LUA_DIR=../external/lua/lua-5.3.4/src
      +TEST_LUA_DIR := ../external/lua/lua-5.3.4/src
       
      -LUA_URL="https://www.lua.org/ftp/lua-5.3.4.tar.gz"
      +LUA_URL := "https://www.lua.org/ftp/lua-5.3.4.tar.gz"
       
      -LUA_COMMAND_FULL:=$(shell python -c 'import os; print( os.path.abspath( "$(shell which $(LUA_COMMAND))" ) );' )
      +LUA_COMMAND_FULL := $(shell python -c 'import os; print( os.path.abspath( "$(shell which $(LUA_COMMAND))" ) );' )
       
       ####### customize libclang environment ######
       
      +ifeq ($(OS),cygwin)
       ## cygwin
      -# LIBCLANG_INC=/usr/include
      -# LIBCLANG_LIB=/lib
      -# LIBCLANG_STD_INC=/lib/clang/5.0.1/include
      -
      -
      -CLANG_VER=3.8
      -LIBCLANG_INC=/usr/lib/llvm-$(CLANG_VER)/include
      -LIBCLANG_LIB=/usr/lib/llvm-$(CLANG_VER)/lib
      -LIBCLANG_STD_INC=$(shell find /usr/lib/llvm-$(CLANG_VER)/lib/clang/ -maxdepth 1 -mindepth 1 | head -n 1)
      +LIBCLANG_INC     := /usr/include
      +LIBCLANG_LIB     := /lib
      +LIBCLANG_STD_INC := /lib/clang/5.0.1/include
       
      -# LIBCLANG_DIR=/proj/next/clang/r34-final
      -# LIBCLANG_INC=../external/clang/r390/llvm/tools/clang/include
      -# LIBCLANG_STD_INC=../external/clang/r390/build/lib/clang/3.9.0/include
      -# LIBCLANG_LIB=/usr/lib/llvm-$(CLANG_VER)/lib
      +else
      +LIBCLANG_INC     := /usr/lib/llvm-$(CLANG_VER)/include
      +LIBCLANG_LIB     := /usr/lib/llvm-$(CLANG_VER)/lib
      +LIBCLANG_STD_INC := $(shell find /usr/lib/llvm-$(CLANG_VER)/lib/clang/ -maxdepth 1 -mindepth 1 | head -n 1)
       
      -# LIBCLANG_SO=-lclang
      +# LIBCLANG_DIR     := /proj/next/clang/r34-final
      +# LIBCLANG_INC     := ../external/clang/r390/llvm/tools/clang/include
      +# LIBCLANG_STD_INC := ../external/clang/r390/build/lib/clang/3.9.0/include
      +# LIBCLANG_LIB     := /usr/lib/llvm-$(CLANG_VER)/lib
      +endif
       
      -LIBCLANG_SO=-lclang
      +LIBCLANG_SO := -lclang
       
       ####### customize luasqlite3 environment ######
       # If you don't have luasqlite3, you must customize this setting.
       # http://lua.sqlite.org/index.cgi/index
       
      -LUASQLITE3_WORKDIR=../external/luasqlite3
      -LUASQLITE3_DIR=$(LUASQLITE3_WORKDIR)/lsqlite3_fsl09x
      -#USE_BDB_SQLITE=y
      +LUASQLITE3_WORKDIR := ../external/luasqlite3
      +LUASQLITE3_DIR     := $(LUASQLITE3_WORKDIR)/lsqlite3_fsl09x
      +#USE_BDB_SQLITE    := y
       
      -LUASQLITE3_URL="http://lua.sqlite.org/index.cgi/zip/lsqlite3_fsl09x.zip?uuid=fsl_9x"
      +LUASQLITE3_URL := "http://lua.sqlite.org/index.cgi/zip/lsqlite3_fsl09x.zip?uuid=fsl_9x"
       
       
       
       ####### make rules ######
       
      -LUA_LIB_DIR=$(shell echo $(LUA_DIR_LIB) | $(LUA_COMMAND) )
      -LUA_MOD_DIR=$(shell echo $(LUA_DIR_SCRIPT) | $(LUA_COMMAND) )
      +LUA_LIB_DIR := $(shell echo $(LUA_DIR_LIB) | $(LUA_COMMAND) )
      +LUA_MOD_DIR := $(shell echo $(LUA_DIR_SCRIPT) | $(LUA_COMMAND) )
       
      -LCTAGS_LOG=4
      -JOBS=3
      +LCTAGS_LOG := 4
      +JOBS       := 3
       
       ifdef LCTAGS_PROF
      -LCTAGS_PROF_OP = --lctags-prof
      +LCTAGS_PROF_OP  :=  --lctags-prof
       endif
       
      -LCTAGS_LOCKLOG=y
      +LCTAGS_LOCKLOG := y
       ifdef LCTAGS_LOCKLOG
      -LOCKLOG = --lctags-lockLog
      +LOCKLOG  :=  --lctags-lockLog
       endif
       
       ifdef LCTAGS_SERVER_ON
      -LCTAGS_SERVER=--lctags-srv
      +LCTAGS_SERVER := --lctags-srv
       endif
       
      -LUA_LIB:=$(addprefix $(NDIR)/,$(LUA_LIB))
      +LUA_LIB    := $(addprefix $(NDIR)/,$(LUA_LIB))
       
      -LCTAGS_LUA=lctags/lctags.lua
      +LCTAGS_LUA := lctags/lctags.lua
       
      -#OPT_OP = -O3
      +#OPT_OP  :=  -O3
       
      -IF_LUA = libclanglua/if.lua
      -IFC_LUA = libclanglua/ifc.lua
      -COREBASE_SO = libclanglua/coreBase.$(SO)
      -CORE_SO = libclanglua/core.$(SO)
      +IF_LUA       :=  libclanglua/if.lua
      +IFC_LUA      :=  libclanglua/ifc.lua
      +COREBASE_SO  :=  libclanglua/coreBase.$(SO)
      +CORE_SO      :=  libclanglua/core.$(SO)
       
      -LUA_DIR_SCRIPT='for path in string.gmatch( package.path, "[^;]+" ) do if path:find( ".*lua.*%?%.lua" ) then print( (path:gsub( "/%?%.lua", "" )) ); break end end'
      -LUA_DIR_LIB="for path in string.gmatch( package.cpath, '[^;]+' ) do if path:find( \".*lua.*%?%.$(SO)\" ) then print( (path:gsub( \"/%?%.$(SO)\", '' ))); break end end"
      +LUA_DIR_SCRIPT := 'for path in string.gmatch( package.path, "[^;]+" ) do if path:find( ".*lua.*%?%.lua" ) then print( (path:gsub( "/%?%.lua", "" )) ); break end end'
      +LUA_DIR_LIB    := "for path in string.gmatch( package.cpath, '[^;]+' ) do if path:find( \".*lua.*%?%.$(SO)\" ) then print( (path:gsub( \"/%?%.$(SO)\", '' ))); break end end"
       
       
       
       ifneq ($(LUA_DIR),)
      -TARGET_LUA = $(LUA_COMMAND)
      +TARGET_LUA  :=  $(LUA_COMMAND)
       endif
       
       all:
      @@ -254,11 +278,11 @@ test-simple:
       
       
       ifdef BATCH
      -BATCH_OP=--lctags-only-reg
      +BATCH_OP := --lctags-only-reg
       endif
       
       ifeq ($(INDIV),y)
      -INDIV_OP=--lctags-indiv
      +INDIV_OP := --lctags-indiv
       endif
  1. ビルド(lctags のトップディレクトリに戻ってから)
    $ make build
    成功すると、以下のファイルが出来る
    src/lsqlite3.so
    src/lctags/Helper
    src/lctags/Helper.so
    src/lctags/core.so
    src/lctags/coreBase.so

実行ファイルに PATH を通す

emacs から使う

  1. lctags を emacs から使う為の lisp は、lctags のリポジトリ内に同梱されているので、これを load 出来るようにする。
    1. リポジトリ内の src/lisp を、emacs が load 出来る場所にコピーするか、 load-path に追加する。
      (add-to-list 'load-path "hoge/lctags/src/lisp") t)
    2. src/lisp/lctags.el を load する。
      (require 'lctags)
  2. これらを使えるようにするために、 helmgtags.el も使えるようにする必要がある。

参考リンク


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-07-24 (金) 09:55:07