- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-07-23T23:41:54+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]] も使えるようにする必要がある。
//==============================================================================
** 参考リンク [#lefcf64d]
- [[ifritJP/lctags - GitHub>https://github.com/ifritJP/lctags]]
- [[lctags で C 言語の関数コールを簡単に - 公開技術情報>https://ifritjp.github.io/documents/lctags/callfunc/]]