summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2022-03-29 08:48:22 +0900
committerGitHub <noreply@github.com>2022-03-29 08:48:22 +0900
commitc386ecb0c24eeb9693cc4ad3b1f263b2622c4f1e (patch)
tree70e99a2bf0f0498d714174048bc4f3cd1e26e866 /ext
parent9c51b90dbdb54d2dfbdaa108d63e6b0444dfe725 (diff)
parent96ff606734c41d4057ff6641696751800157d28e (diff)
downloadpsych-c386ecb0c24eeb9693cc4ad3b1f263b2622c4f1e.tar.gz
Merge pull request #544 from nobu/extlibs
Add `--with-libyaml-source-dir` option
Diffstat (limited to 'ext')
-rw-r--r--ext/psych/depend10
-rw-r--r--ext/psych/extconf.rb73
-rw-r--r--ext/psych/extlibs7
3 files changed, 59 insertions, 31 deletions
diff --git a/ext/psych/depend b/ext/psych/depend
index 10d643c..4a2ed3f 100644
--- a/ext/psych/depend
+++ b/ext/psych/depend
@@ -1,4 +1,12 @@
-$(OBJS): $(YAML_H)
+$(TARGET_SO): $(LIBYAML)
+
+libyaml $(LIBYAML):
+ cd libyaml && $(MAKE)
+clean-so::
+ -cd libyaml && $(MAKE) clean
+distclean-so::
+ -cd libyaml && $(MAKE) distclean
+ -$(Q)$(RMDIRS) libyaml/* libyaml
$(OBJS): $(HDRS) $(ruby_headers) \
$(hdrdir)/ruby/encoding.h \
diff --git a/ext/psych/extconf.rb b/ext/psych/extconf.rb
index 7da7376..17c0dee 100644
--- a/ext/psych/extconf.rb
+++ b/ext/psych/extconf.rb
@@ -1,43 +1,56 @@
# -*- coding: us-ascii -*-
# frozen_string_literal: true
require 'mkmf'
-require 'fileutils'
-# :stopdoc:
-
-dir_config 'libyaml'
-
-if enable_config("bundled-libyaml", false) || !pkg_config('yaml-0.1') && !(find_header('yaml.h') && find_library('yaml', 'yaml_get_version'))
- # Embed libyaml since we could not find it.
-
- $VPATH << "$(srcdir)/yaml"
- $INCFLAGS << " -I$(srcdir)/yaml"
-
- $srcs = Dir.glob("#{$srcdir}/{,yaml/}*.c").map {|n| File.basename(n)}.sort
+if $mswin or $mingw or $cygwin
+ $CPPFLAGS << " -DYAML_DECLARE_STATIC"
+end
- header = 'yaml/yaml.h'
- header = "{$(VPATH)}#{header}" if $nmake
- if have_macro("_WIN32")
- $CPPFLAGS << " -DYAML_DECLARE_STATIC -DHAVE_CONFIG_H"
+yaml_source = with_config("libyaml-source-dir") || enable_config("bundled-libyaml", false)
+if yaml_source == true
+ yaml_source = Dir.glob("#{$srcdir}/yaml{,-*}/").max_by {|n| File.basename(n).scan(/\d+/).map(&:to_i)}
+ unless yaml_source
+ require_relative '../../tool/extlibs.rb'
+ extlibs = ExtLibs.new(cache_dir: File.expand_path("../../tmp/download_cache", $srcdir))
+ unless extlibs.process_under($srcdir)
+ raise "failed to download libyaml source"
+ end
+ yaml_source, = Dir.glob("#{$srcdir}/yaml-*/")
+ end
+elsif yaml_source
+ yaml_source = yaml_source.gsub(/\$\((\w+)\)|\$\{(\w+)\}/) {ENV[$1||$2]}
+end
+if yaml_source
+ yaml_configure = "#{File.expand_path(yaml_source)}/configure"
+ unless File.exist?(yaml_configure)
+ raise "Configure script not found in #{yaml_source.quote}"
end
- have_header 'dlfcn.h'
- have_header 'inttypes.h'
- have_header 'memory.h'
- have_header 'stdint.h'
- have_header 'stdlib.h'
- have_header 'strings.h'
- have_header 'string.h'
- have_header 'sys/stat.h'
- have_header 'sys/types.h'
- have_header 'unistd.h'
-
- find_header 'yaml.h'
- have_header 'config.h'
+ puts("Configuring libyaml source in #{yaml_source.quote}")
+ yaml = "libyaml"
+ Dir.mkdir(yaml) unless File.directory?(yaml)
+ unless system(yaml_configure, "-q",
+ "--enable-#{$enable_shared || !$static ? 'shared' : 'static'}",
+ *(["CFLAGS=-w"] if RbConfig::CONFIG["GCC"] == "yes"),
+ chdir: yaml)
+ raise "failed to configure libyaml"
+ end
+ Logging.message("libyaml configured\n")
+ inc = yaml_source.start_with?("#$srcdir/") ? "$(srcdir)#{yaml_source[$srcdir.size..-1]}" : yaml_source
+ $INCFLAGS << " -I#{yaml}/include -I#{inc}/include"
+ Logging.message("INCLFAG=#$INCLFAG\n")
+ libyaml = "#{yaml}/src/.libs/libyaml.#$LIBEXT"
+ $LOCAL_LIBS.prepend("$(LIBYAML) ")
+else
+ pkg_config('yaml-0.1')
+ dir_config('libyaml')
+ unless find_header('yaml.h') && find_library('yaml', 'yaml_get_version')
+ raise "libyaml not found"
+ end
end
create_makefile 'psych' do |mk|
- mk << "YAML_H = #{header}".strip << "\n"
+ mk << "LIBYAML = #{libyaml}".strip << "\n"
end
# :startdoc:
diff --git a/ext/psych/extlibs b/ext/psych/extlibs
new file mode 100644
index 0000000..b4ac02e
--- /dev/null
+++ b/ext/psych/extlibs
@@ -0,0 +1,7 @@
+ver = 0.2.5
+
+https://github.com/yaml/libyaml/releases/download/$(ver)/yaml-$(ver).tar.gz \
+ rmd160:cc175ed640046722fb7790de828002633407b6b9 \
+ sha256:c642ae9b75fee120b2d96c712538bd2cf283228d2337df2cf2988e3c02678ef4 \
+ sha512:dadd7d8e0d88b5ebab005e5d521d56d541580198aa497370966b98c904586e642a1cd4f3881094eb57624f218d50db77417bbfd0ffdce50340f011e35e8c4c02 \
+ #