From a2a453d784c72e6674f6fc6d8c28eecab7fbde58 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Fri, 27 Sep 2019 17:39:48 +0200 Subject: [PATCH 1/8] Generate lib/cucumber/messages_pb.rb on install --- cucumber-messages/ruby/Makefile | 2 +- .../ruby/cucumber-messages.gemspec | 2 ++ .../ruby/ext/cucumber-messages/extconf.rb | 20 +++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 cucumber-messages/ruby/ext/cucumber-messages/extconf.rb diff --git a/cucumber-messages/ruby/Makefile b/cucumber-messages/ruby/Makefile index ecaf00ac14c..6ad80b0ab7d 100644 --- a/cucumber-messages/ruby/Makefile +++ b/cucumber-messages/ruby/Makefile @@ -6,4 +6,4 @@ lib/cucumber/messages_pb.rb: messages.proto protoc -I. -I/usr/local/include --ruby_out lib/cucumber $< clean: - rm -f lib/cucumber/messages_pb.rb + rm -f lib/cucumber/messages_pb.rb pkg/cucumber-messages-*.gem diff --git a/cucumber-messages/ruby/cucumber-messages.gemspec b/cucumber-messages/ruby/cucumber-messages.gemspec index 4da30ec83f5..49beb516234 100644 --- a/cucumber-messages/ruby/cucumber-messages.gemspec +++ b/cucumber-messages/ruby/cucumber-messages.gemspec @@ -10,6 +10,7 @@ Gem::Specification.new do |s| s.platform = Gem::Platform::RUBY s.license = "MIT" s.required_ruby_version = ">= 2.3" + s.extensions = ["ext/cucumber-messages/extconf.rb".freeze] s.metadata = { 'bug_tracker_uri' => 'https://github.com/cucumber/cucumber/issues', @@ -31,6 +32,7 @@ Gem::Specification.new do |s| s.files = Dir[ 'README.md', 'LICENSE', + 'messages.proto', 'lib/**/*' ] s.test_files = Dir['spec/**/*'] diff --git a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb new file mode 100644 index 00000000000..af29d821d8a --- /dev/null +++ b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb @@ -0,0 +1,20 @@ +require "mkmf" + +find_executable('protoc') + +File.open(File.join(Dir.pwd, 'Makefile'), 'w') do |file| + file.write %Q( +default: +\tpushd ../.. && protoc -I. -I/usr/local/include --ruby_out lib/cucumber messages.proto && popd + +install: +\t@echo "Not much to do in fact" +.PHONY: clean + +clean: +\trm ../../lib/cucumber/messages_pb.rb +.PHONY: clean +) +end + +$makefile_created = true From 59fbfcf917ddbd3a730cba0270c8c10c8ec5a799 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Fri, 27 Sep 2019 17:49:12 +0200 Subject: [PATCH 2/8] Ruby makefile: clean gems in pkg directory --- .templates/ruby/default.mk | 2 +- c21e/ruby/default.mk | 2 +- cucumber-expressions/ruby/default.mk | 2 +- cucumber-messages/ruby/Makefile | 2 +- cucumber-messages/ruby/default.mk | 2 +- dots-formatter/ruby/default.mk | 2 +- gherkin/ruby/default.mk | 2 +- json-formatter/ruby/default.mk | 2 +- tag-expressions/ruby/default.mk | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.templates/ruby/default.mk b/.templates/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/.templates/ruby/default.mk +++ b/.templates/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/c21e/ruby/default.mk b/c21e/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/c21e/ruby/default.mk +++ b/c21e/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/cucumber-expressions/ruby/default.mk b/cucumber-expressions/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/cucumber-expressions/ruby/default.mk +++ b/cucumber-expressions/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/cucumber-messages/ruby/Makefile b/cucumber-messages/ruby/Makefile index 6ad80b0ab7d..ecaf00ac14c 100644 --- a/cucumber-messages/ruby/Makefile +++ b/cucumber-messages/ruby/Makefile @@ -6,4 +6,4 @@ lib/cucumber/messages_pb.rb: messages.proto protoc -I. -I/usr/local/include --ruby_out lib/cucumber $< clean: - rm -f lib/cucumber/messages_pb.rb pkg/cucumber-messages-*.gem + rm -f lib/cucumber/messages_pb.rb diff --git a/cucumber-messages/ruby/default.mk b/cucumber-messages/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/cucumber-messages/ruby/default.mk +++ b/cucumber-messages/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/dots-formatter/ruby/default.mk b/dots-formatter/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/dots-formatter/ruby/default.mk +++ b/dots-formatter/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/gherkin/ruby/default.mk b/gherkin/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/gherkin/ruby/default.mk +++ b/gherkin/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/json-formatter/ruby/default.mk b/json-formatter/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/json-formatter/ruby/default.mk +++ b/json-formatter/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby diff --git a/tag-expressions/ruby/default.mk b/tag-expressions/ruby/default.mk index cec5f2805ea..b4eccdd7ed1 100644 --- a/tag-expressions/ruby/default.mk +++ b/tag-expressions/ruby/default.mk @@ -46,5 +46,5 @@ clean: clean-ruby .PHONY: clean clean-ruby: - rm -f .deps .linked .tested Gemfile.lock *.gem + rm -f .deps .linked .tested Gemfile.lock *.gem pkg/*.gem .PHONY: clean-ruby From 566f748341127329920f69c6feb0b37ead9d9096 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Fri, 27 Sep 2019 17:51:08 +0200 Subject: [PATCH 3/8] Do not reference /usr/local/include when building lib/cucumber/messages_pb.rb --- cucumber-messages/ruby/Makefile | 2 +- cucumber-messages/ruby/ext/cucumber-messages/extconf.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cucumber-messages/ruby/Makefile b/cucumber-messages/ruby/Makefile index ecaf00ac14c..16dbce2f948 100644 --- a/cucumber-messages/ruby/Makefile +++ b/cucumber-messages/ruby/Makefile @@ -3,7 +3,7 @@ include default.mk .deps: lib/cucumber/messages_pb.rb lib/cucumber/messages_pb.rb: messages.proto - protoc -I. -I/usr/local/include --ruby_out lib/cucumber $< + protoc -I. --ruby_out lib/cucumber $< clean: rm -f lib/cucumber/messages_pb.rb diff --git a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb index af29d821d8a..324b21adb31 100644 --- a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb +++ b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb @@ -5,7 +5,7 @@ File.open(File.join(Dir.pwd, 'Makefile'), 'w') do |file| file.write %Q( default: -\tpushd ../.. && protoc -I. -I/usr/local/include --ruby_out lib/cucumber messages.proto && popd +\tpushd ../.. && protoc -I. --ruby_out lib/cucumber messages.proto && popd install: \t@echo "Not much to do in fact" From cbeb3dfd4c53cec8729d9cabbe791b3ac91aaf39 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Mon, 30 Sep 2019 10:04:27 +0200 Subject: [PATCH 4/8] Reference lib/cucumber/messages_pb.rb in Makefile so it's only regenerated when needed --- cucumber-messages/ruby/ext/cucumber-messages/extconf.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb index 324b21adb31..15ddc01bfa4 100644 --- a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb +++ b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb @@ -4,7 +4,9 @@ File.open(File.join(Dir.pwd, 'Makefile'), 'w') do |file| file.write %Q( -default: +default: ../../lib/cucumber/messages_pb.rb + +../../lib/cucumber/messages_pb.rb: ../../messages.proto \tpushd ../.. && protoc -I. --ruby_out lib/cucumber messages.proto && popd install: From 40efe97cb6526a27d8f7be68e27286a59d612c00 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Mon, 30 Sep 2019 10:34:40 +0200 Subject: [PATCH 5/8] Add test for install in default target --- cucumber-messages/ruby/Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cucumber-messages/ruby/Makefile b/cucumber-messages/ruby/Makefile index 16dbce2f948..ae488d045a7 100644 --- a/cucumber-messages/ruby/Makefile +++ b/cucumber-messages/ruby/Makefile @@ -1,9 +1,18 @@ include default.mk +LIBNAME = $(shell $(cd "..";basename $(pwd))) + +default: pkg/.installable_tested .deps: lib/cucumber/messages_pb.rb lib/cucumber/messages_pb.rb: messages.proto protoc -I. --ruby_out lib/cucumber $< +pkg/.installable_tested: pkg/cucumber-messages-%.gem + gem install pkg/cucumber-messages-*.gem + +pkg/cucumber-messages-%.gem: .tested + rake build + clean: - rm -f lib/cucumber/messages_pb.rb + rm -f lib/cucumber/messages_pb.rb pkg/.installable_tested From 08734076f16a1b6db11396f955e502e8f4c10e55 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Mon, 30 Sep 2019 11:04:28 +0200 Subject: [PATCH 6/8] Force use of bash when running Makefile to generate messages_pb on install --- cucumber-messages/ruby/ext/cucumber-messages/extconf.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb index 15ddc01bfa4..054b8e33c26 100644 --- a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb +++ b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb @@ -4,6 +4,8 @@ File.open(File.join(Dir.pwd, 'Makefile'), 'w') do |file| file.write %Q( +SHELL := /usr/bin/env bash + default: ../../lib/cucumber/messages_pb.rb ../../lib/cucumber/messages_pb.rb: ../../messages.proto From b923293dc7d1bfeb3fac83b0e725e55d9d3a92b4 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Mon, 30 Sep 2019 11:28:32 +0200 Subject: [PATCH 7/8] Remove useless test in Makefile --- cucumber-messages/ruby/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/cucumber-messages/ruby/Makefile b/cucumber-messages/ruby/Makefile index ae488d045a7..7bc4f1b3584 100644 --- a/cucumber-messages/ruby/Makefile +++ b/cucumber-messages/ruby/Makefile @@ -1,5 +1,4 @@ include default.mk -LIBNAME = $(shell $(cd "..";basename $(pwd))) default: pkg/.installable_tested From 52f3e64d33456190b304a99ee3ab501788d99b5e Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Mon, 30 Sep 2019 11:46:11 +0200 Subject: [PATCH 8/8] Produce empty makefile if lib/cucumber/messages_pb.rb exists This should avoid trouble when installing, for example if bash is not available. The makefile should only be used during development, for released version the file is there and nothing should be done. --- .../ruby/ext/cucumber-messages/extconf.rb | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb index 054b8e33c26..d6429e2fcd9 100644 --- a/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb +++ b/cucumber-messages/ruby/ext/cucumber-messages/extconf.rb @@ -1,9 +1,24 @@ require "mkmf" find_executable('protoc') +makefile_content = '' -File.open(File.join(Dir.pwd, 'Makefile'), 'w') do |file| - file.write %Q( +if File.exist?('../../lib/cucumber/messages_pb.rb') + makefile_content = %Q( +default: +\t@echo "Nothing to do" +.PHONY: clean + +install: +\t@echo "Nothing to do" +.PHONY: clean + +clean: +\t@echo "Nothing to do" +.PHONY: clean +) +else + makefile_content = %Q( SHELL := /usr/bin/env bash default: ../../lib/cucumber/messages_pb.rb @@ -21,4 +36,8 @@ ) end +File.open(File.join(Dir.pwd, 'Makefile'), 'w') do |file| + file.write makefile_content +end + $makefile_created = true