diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-03-29 08:48:22 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 08:48:22 +0900 |
commit | c386ecb0c24eeb9693cc4ad3b1f263b2622c4f1e (patch) | |
tree | 70e99a2bf0f0498d714174048bc4f3cd1e26e866 /ext | |
parent | 9c51b90dbdb54d2dfbdaa108d63e6b0444dfe725 (diff) | |
parent | 96ff606734c41d4057ff6641696751800157d28e (diff) | |
download | psych-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/depend | 10 | ||||
-rw-r--r-- | ext/psych/extconf.rb | 73 | ||||
-rw-r--r-- | ext/psych/extlibs | 7 |
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 \ + # |