#author("2020-07-23T23:41:54+00:00","","")
#author("2020-07-24T00:55:07+00:00","","")
#topicpath

///////////////////////////////////////////////////////////////////////////////
* 目次 [#of67ad55]
#contents();


///////////////////////////////////////////////////////////////////////////////
* lctags [#jfb0b04c]
//==============================================================================
** 環境構築 [#k8dbdfff]
+ コードの取得
 $ git clone https://github.com/ifritJP/lctags.git
+ 追加パッケージのインストール
-- swig (ビルドに必要)
-- liblua50-dev
-- lua5.3
-- luajit
-- liblua5.3-dev
-- libssl-dev
+ 他モジュールのコードを取得・展開
 $ 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/
+ ビルド
++ 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


++ ビルド(lctags のトップディレクトリに戻ってから)
 $ make build
成功すると、以下のファイルが出来る
 src/lsqlite3.so
 src/lctags/Helper
 src/lctags/Helper.so
 src/lctags/core.so
 src/lctags/coreBase.so

//==============================================================================
** 実行ファイルに PATH を通す [#ab952543]
- make で生成された実行ファイルと共有ライブラリを、1箇所に集めて環境変数 PATH と LD_LIBRARY_PATH に追加する。
-- 或いは、パッケージ管理システムで構築されている環境では、これらをパッケージ化してインストールする。

//==============================================================================
** emacs から使う [#o7c56a8d]
+ lctags を emacs から使う為の lisp は、lctags のリポジトリ内に同梱されているので、これを load 出来るようにする。
++ リポジトリ内の src/lisp を、emacs が load 出来る場所にコピーするか、 load-path に追加する。
 (add-to-list 'load-path "hoge/lctags/src/lisp") t)
++ src/lisp/lctags.el を load する。
 (require 'lctags)
+ これらを使えるようにするために、 [[helm>Editor/emacsen#helm]] と [[gtags.el>Prog/TagSystem#gtags-global]] も使えるようにする必要がある。
+ これらを使えるようにするために、 [[helm>Editor/emacs#helm]] と [[gtags.el>Prog/TagSystem/gtags]] も使えるようにする必要がある。

//==============================================================================
** 参考リンク [#lefcf64d]
- [[ifritJP/lctags - GitHub>https://github.com/ifritJP/lctags]]
- [[lctags で C 言語の関数コールを簡単に - 公開技術情報>https://ifritjp.github.io/documents/lctags/callfunc/]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS