You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.8 KiB

--- a/MANIFEST.txt
+++ b/MANIFEST.txt
@@ -1,9 +1,6 @@
README.md
CHANGELOG.md
-ext/duktape/duktape.c
-ext/duktape/duktape.h
ext/duktape/duktape_ext.c
-ext/duktape/duk_config.h
ext/duktape/extconf.rb
lib/duktape/version.rb
lib/duktape.rb
--- a/ext/duktape/extconf.rb
+++ b/ext/duktape/extconf.rb
@@ -1,6 +1,64 @@
require 'mkmf'
require 'zlib'
+#
+# functions
+#
+
+def package_config pkg, options={}
+ package = pkg_config(pkg)
+ return package if package
+
+ begin
+ require 'rubygems'
+ gem 'pkg-config', (gem_ver='~> 1.1')
+ require 'pkg-config' and message("Using pkg-config gem version #{PKGConfig::VERSION}\n")
+ rescue LoadError
+ message "pkg-config could not be used to find #{pkg}\nPlease install either `pkg-config` or the pkg-config gem per\n\n gem install pkg-config -v #{gem_ver.inspect}\n\n"
+ else
+ return nil unless PKGConfig.have_package(pkg)
+
+ cflags = PKGConfig.cflags(pkg)
+ ldflags = PKGConfig.libs_only_L(pkg)
+ libs = PKGConfig.libs_only_l(pkg)
+
+ Logging::message "PKGConfig package configuration for %s\n", pkg
+ Logging::message "cflags: %s\nldflags: %s\nlibs: %s\n\n", cflags, ldflags, libs
+
+ [cflags, ldflags, libs]
+ end
+end
+
+def duktape_try_compile
+ try_compile "int main() {return 0;}", "", {werror: true}
+end
+
+def add_cflags(flags)
+ print "checking if the C compiler accepts #{flags}... "
+ with_cflags("#{$CFLAGS} #{flags}") do
+ if duktape_try_compile
+ puts 'yes'
+ true
+ else
+ puts 'no'
+ false
+ end
+ end
+end
+
+#
+# main
+#
+
+if ENV['CC']
+ RbConfig::CONFIG['CC'] = RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC']
+end
+$LIBS << " #{ENV["LIBS"]}"
+$LDFLAGS << " #{ENV["LDFLAGS"]}"
+add_cflags(ENV["CFLAGS"])
+
+package_config('duktape')
+
$CFLAGS += ' -std=c99'
have_func 'rb_sym2str'
create_makefile 'duktape_ext'