[Groonga-commit] groonga/groonga at a01dd25 [master] cmake: support bundling LZ4

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Feb 23 23:40:30 JST 2016


Kouhei Sutou	2016-02-23 23:40:30 +0900 (Tue, 23 Feb 2016)

  New Revision: a01dd2586c902a0189a0eaf1d51b7424934bfc61
  https://github.com/groonga/groonga/commit/a01dd2586c902a0189a0eaf1d51b7424934bfc61

  Message:
    cmake: support bundling LZ4

  Added files:
    bundled_lz4_version
    vendor/download_lz4.rb
    vendor/lz4/CMakeLists.txt
    vendor/lz4/Makefile.am
    vendor/lz4/lz4
  Modified files:
    .gitignore
    CMakeLists.txt
    vendor/CMakeLists.txt
    vendor/Makefile.am

  Modified: .gitignore (+1 -0)
===================================================================
--- .gitignore    2016-02-27 17:44:07 +0900 (ec3ec82)
+++ .gitignore    2016-02-23 23:40:30 +0900 (ebd435c)
@@ -53,6 +53,7 @@ cmake_install.cmake
 /vendor/mecab/mecab
 /vendor/mecab/mecab-dict-index
 /vendor/mecab/mecabrc
+/vendor/lz4-*
 /vendor/plugins/*/
 /groonga.spec
 /stamp-h1

  Modified: CMakeLists.txt (+23 -8)
===================================================================
--- CMakeLists.txt    2016-02-27 17:44:07 +0900 (b1fd03e)
+++ CMakeLists.txt    2016-02-23 23:40:30 +0900 (c2600d1)
@@ -365,19 +365,34 @@ if(NOT ${GRN_WITH_ZLIB} STREQUAL "no")
   endif()
 endif()
 
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/bundled_lz4_version"
+  GRN_BUNDLED_LZ4_VERSION)
+string(STRIP
+  "${GRN_BUNDLED_LZ4_VERSION}"
+  GRN_BUNDLED_LZ4_VERSION)
+option(GRN_WITH_BUNDLED_LZ4 "use bundled LZ4" OFF)
+
 set(GRN_WITH_LZ4 "auto"
   CACHE STRING "Support data compression by LZ4.")
 if(NOT ${GRN_WITH_LZ4} STREQUAL "no")
-  if(NOT DEFINED LIBLZ4_FOUND)
-    pkg_check_modules(LIBLZ4 liblz4)
-  endif()
-  if(LIBLZ4_FOUND)
-    set(GRN_WITH_LZ4 TRUE)
+  if(GRN_WITH_BUNDLED_LZ4)
+    set(LIBLZ4_INCLUDE_DIRS
+      "${CMAKE_CURRENT_SOURCE_DIR}/vendor/lz4-${GRN_BUNDLED_LZ4_VERSION}/lib")
+    set(LIBLZ4_LIBRARY_DIRS
+      "${CMAKE_CURRENT_SOURCE_DIR}/vendor/lz4")
+    set(LIBLZ4_LIBRARIES liblz4)
   else()
-    if(${GRN_WITH_LZ4} STREQUAL "yes")
-      message(FATAL_ERROR "No LZ4 found")
+    if(NOT DEFINED LIBLZ4_FOUND)
+      pkg_check_modules(LIBLZ4 liblz4)
+    endif()
+    if(LIBLZ4_FOUND)
+      set(GRN_WITH_LZ4 TRUE)
+    else()
+      if(${GRN_WITH_LZ4} STREQUAL "yes")
+	message(FATAL_ERROR "No LZ4 found")
+      endif()
+      set(GRN_WITH_LZ4 FALSE)
     endif()
-    set(GRN_WITH_LZ4 FALSE)
   endif()
 endif()
 

  Added: bundled_lz4_version (+1 -0) 100644
===================================================================
--- /dev/null
+++ bundled_lz4_version    2016-02-23 23:40:30 +0900 (b3ca7e0)
@@ -0,0 +1 @@
+r131

  Modified: vendor/CMakeLists.txt (+2 -1)
===================================================================
--- vendor/CMakeLists.txt    2016-02-27 17:44:07 +0900 (507f231)
+++ vendor/CMakeLists.txt    2016-02-23 23:40:30 +0900 (51eb959)
@@ -1,4 +1,4 @@
-# Copyright(C) 2013-2015 Brazil
+# Copyright(C) 2013-2016 Brazil
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -13,6 +13,7 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
+add_subdirectory(lz4)
 add_subdirectory(onigmo)
 add_subdirectory(mruby)
 add_subdirectory(mecab)

  Modified: vendor/Makefile.am (+2 -0)
===================================================================
--- vendor/Makefile.am    2016-02-27 17:44:07 +0900 (2126c36)
+++ vendor/Makefile.am    2016-02-23 23:40:30 +0900 (dbd14bb)
@@ -1,6 +1,7 @@
 NGINX_DIR = nginx-$(NGINX_VERSION)
 
 SUBDIRS =					\
+	lz4					\
 	onigmo					\
 	mecab					\
 	mruby
@@ -9,6 +10,7 @@ EXTRA_DIST =					\
 	$(NGINX_DIR)				\
 	CMakeLists.txt				\
 	plugins/CMakeLists.txt			\
+	download_lz4.rb				\
 	download_mecab.rb
 
 dist-hook:

  Added: vendor/download_lz4.rb (+54 -0) 100755
===================================================================
--- /dev/null
+++ vendor/download_lz4.rb    2016-02-23 23:40:30 +0900 (1795e40)
@@ -0,0 +1,54 @@
+#!/usr/bin/env ruby
+
+require "pathname"
+require "fileutils"
+require "open-uri"
+require "openssl"
+require "rubygems/package"
+require "zlib"
+
+ �� debug = (ENV["DEBUG"] == "true" or ARGV.include?("--debug"))
+
+base_dir = Pathname.new(__FILE__).expand_path.dirname.parent
+
+lz4_version = (base_dir + "bundled_lz4_version").read.strip
+
+lz4_base = "lz4-#{lz4_version}"
+
+def extract_tar_gz(tar_gz_path)
+  Zlib::GzipReader.open(tar_gz_path) do |tar_io|
+    Gem::Package::TarReader.new(tar_io) do |tar|
+      tar.each do |entry|
+        p [entry.header.typeflag, entry.full_name] if @debug
+        if entry.directory?
+          FileUtils.mkdir_p(entry.full_name)
+        else
+          File.open(entry.full_name, "wb") do |file|
+            file.print(entry.read)
+          end
+        end
+      end
+    end
+  end
+end
+
+def download(url, base)
+  ssl_verify_mode = nil
+  if /mingw/ =~ RUBY_PLATFORM
+    ssl_verify_mode = OpenSSL::SSL::VERIFY_NONE
+  end
+
+  tar = "#{base}.tar"
+  tar_gz = "#{tar}.gz"
+  open(url, :ssl_verify_mode => ssl_verify_mode) do |remote_tar_gz|
+    File.open(tar_gz, "wb") do |local_tar_gz|
+      local_tar_gz.print(remote_tar_gz.read)
+    end
+  end
+  FileUtils.rm_rf(base)
+  extract_tar_gz(tar_gz)
+  FileUtils.rm_rf(tar_gz)
+end
+
+download("https://github.com/Cyan4973/lz4/archive/#{lz4_version}.tar.gz",
+         lz4_base)

  Added: vendor/lz4/CMakeLists.txt (+91 -0) 100644
===================================================================
--- /dev/null
+++ vendor/lz4/CMakeLists.txt    2016-02-23 23:40:30 +0900 (dc90143)
@@ -0,0 +1,91 @@
+# Copyright(C) 2016 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+set(LZ4_VERSION ${GRN_BUNDLED_LZ4_VERSION})
+
+set(LZ4_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../lz4-${LZ4_VERSION}")
+set(LZ4_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/../lz4-${LZ4_VERSION}")
+
+if(GRN_WITH_BUNDLED_LZ4)
+  include_directories(
+    BEFORE
+    ${LZ4_BINARY_DIR}
+    "${LZ4_SOURCE_DIR}/lib"
+    )
+
+  set(LIBLZ4_SOURCES
+    "${LZ4_SOURCE_DIR}/lib/lz4.c"
+    "${LZ4_SOURCE_DIR}/lib/lz4.h"
+    "${LZ4_SOURCE_DIR}/lib/lz4frame.c"
+    "${LZ4_SOURCE_DIR}/lib/lz4frame.h"
+    "${LZ4_SOURCE_DIR}/lib/lz4frame_static.h"
+    "${LZ4_SOURCE_DIR}/lib/lz4hc.c"
+    "${LZ4_SOURCE_DIR}/lib/lz4hc.h"
+    "${LZ4_SOURCE_DIR}/lib/xxhash.c"
+    "${LZ4_SOURCE_DIR}/lib/xxhash.h"
+    )
+  set(LZ4_SOURCES
+    "${LZ4_SOURCE_DIR}/programs/lz4cli.c"
+    "${LZ4_SOURCE_DIR}/programs/lz4io.c"
+    "${LZ4_SOURCE_DIR}/programs/lz4io.h"
+    "${LZ4_SOURCE_DIR}/programs/bench.c"
+    )
+
+  set(LZ4_C_COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+
+  add_definitions("-DXXH_NAMESPACE=LZ4_")
+  set_source_files_properties(${LIBLZ4_SOURCES}
+    PROPERTIES
+    COMPILE_FLAGS "${LZ4_C_COMPILE_FLAGS}")
+  set_source_files_properties(${LZ4_SOURCES}
+    PROPERTIES
+    COMPILE_FLAGS "${LZ4_C_COMPILE_FLAGS}")
+
+  if(GRN_BUNDLED)
+    add_library(liblz4 STATIC ${LIBLZ4_SOURCES})
+    set_target_properties(
+      liblz4
+      PROPERTIES
+      POSITION_INDEPENDENT_CODE ON)
+  else()
+    add_library(liblz4 SHARED ${LIBLZ4_SOURCES})
+  endif()
+  if(NOT MSVC)
+    set_target_properties(liblz4 PROPERTIES OUTPUT_NAME "lz4")
+  endif()
+
+  if(!GRN_BUNDLED)
+    add_executable(lz4 ${LZ4_SOURCES})
+    target_link_libraries(lz4 liblz4)
+
+    install(TARGETS liblz4
+      ARCHIVE DESTINATION "${LIB_DIR}"
+      LIBRARY DESTINATION "${LIB_DIR}"
+      RUNTIME DESTINATION "${BIN_DIR}")
+    install(TARGETS lz4
+      DESTINATION "${BIN_DIR}")
+    install(FILES
+      "${LZ4_SOURCE_DIR}/lib/lz4.h"
+      "${LZ4_SOURCE_DIR}/lib/lz4frame.h"
+      "${LZ4_SOURCE_DIR}/lib/lz4hc.h"
+      DESTINATION "${INCLUDE_DIR}")
+  endif()
+
+  install(FILES
+    "${LZ4_SOURCE_DIR}/lib/LICENSE"
+    "${LZ4_SOURCE_DIR}/programs/COPYING"
+    "${LZ4_SOURCE_DIR}/README.md"
+    DESTINATION "${GRN_DATA_DIR}/lz4")
+endif()

  Added: vendor/lz4/Makefile.am (+2 -0) 100644
===================================================================
--- /dev/null
+++ vendor/lz4/Makefile.am    2016-02-23 23:40:30 +0900 (8a65232)
@@ -0,0 +1,2 @@
+EXTRA_DIST =					\
+	CMakeLists.txt

  Added: vendor/lz4/lz4 (+0 -0) 100755
===================================================================
(Binary files differ)
-------------- next part --------------
HTML����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index