#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/]]