diff --git a/.gitignore b/.gitignore index c6836c7..b6c5794 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /site/ /spec/reports/ /tmp/ -ext/Makefile -ext/*.o -ext/*.bundle +ext/**/Makefile +ext/**/*.o +ext/**/*.bundle +*.gem diff --git a/Rakefile b/Rakefile index 005de45..39516b8 100644 --- a/Rakefile +++ b/Rakefile @@ -1,12 +1,18 @@ require 'bundler/gem_tasks' +require 'English' +require 'open3' require 'rake/testtask' require 'rubocop/rake_task' task :compile do puts 'Compiling C extension' - `cd ext && make clean` - `cd ext && ruby extconf.rb` - `cd ext && make` + # ignore clean failure because the Makefile may not exist yet + cmd = 'cd ext/wordexp_ext && (make clean || true) && ruby extconf.rb && make' + out, status = Open3.capture2e(cmd) + unless status.success? + warn out + raise 'Failed to compile native extension' + end puts 'Done' end diff --git a/ext/extconf.rb b/ext/extconf.rb deleted file mode 100644 index fb7299b..0000000 --- a/ext/extconf.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'mkmf' - -create_makefile 'wordexp_ext' diff --git a/ext/wordexp_ext/extconf.rb b/ext/wordexp_ext/extconf.rb new file mode 100644 index 0000000..5aead55 --- /dev/null +++ b/ext/wordexp_ext/extconf.rb @@ -0,0 +1,3 @@ +require 'mkmf' + +create_makefile 'wordexp_ext/wordexp_ext' diff --git a/ext/wordexp_ext.c b/ext/wordexp_ext/wordexp_ext.c similarity index 97% rename from ext/wordexp_ext.c rename to ext/wordexp_ext/wordexp_ext.c index e73c09f..f3bab50 100644 --- a/ext/wordexp_ext.c +++ b/ext/wordexp_ext/wordexp_ext.c @@ -11,12 +11,10 @@ * */ +#include #include #include -#include "ruby.h" -#include "ruby/encoding.h" - static VALUE ext_wordexp(VALUE self, VALUE rstring) { Check_Type(rstring, T_STRING); char *string = RSTRING_PTR(rstring); diff --git a/lib/wordexp.rb b/lib/wordexp.rb index dc8fdea..e8a6f48 100644 --- a/lib/wordexp.rb +++ b/lib/wordexp.rb @@ -1,4 +1,4 @@ -require 'wordexp_ext' +require 'wordexp_ext/wordexp_ext' module Wordexp autoload :CLI, 'wordexp/cli'