diff --git a/.gitignore b/.gitignore index e0f3d0d3..e914a174 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ depcomp src/gitsh lib/gitsh/version.rb gitsh-*.tar.gz +vendor/gems # Sub-repositories for release gh-pages diff --git a/Gemfile b/Gemfile index dcfd9652..ee9efb4d 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,9 @@ source 'https://rubygems.org' ruby '2.0.0' -gem 'parslet' +group :dist do + gem 'parslet' +end group :test do gem 'rspec' diff --git a/Makefile.am b/Makefile.am index d9c2b25c..27998073 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ AUTOMAKE_OPTIONS = foreign -SUBDIRS = src man lib/gitsh +SUBDIRS = src man lib/gitsh vendor EXTRA_DIST = LICENSE README.md .PHONY: release \ diff --git a/configure.ac b/configure.ac index 63863566..a75a6f29 100644 --- a/configure.ac +++ b/configure.ac @@ -24,14 +24,24 @@ AX_PROG_RUBY_VERSION( AC_MSG_ERROR(Ruby 2.0 or later is required to install gitsh) ) +newer=$(ls -t $srcdir/Gemfile.lock $srcdir/vendor/gems/setup.rb 2>/dev/null | (read n; echo $n)) +if test "$newer" == "$srcdir/Gemfile.lock"; then + rm -rf vendor/gems + $srcdir/vendor/vendorize vendor/gems || AC_MSG_ERROR([Vendorizing gems failed]) +fi + rubydir=$datadir/$PACKAGE/ruby pkgrubydir=$rubydir/$PACKAGE -libfiles="$(cd `dirname $0`/lib/gitsh; echo *.rb)" +libfiles="$(cd "$(dirname "$0")/lib/gitsh"; echo *.rb)" +vendorfiles="$(cd "$(dirname "$0")/vendor"; echo $(find gems -type f))" +gemsetuppath=$datadir/$PACKAGE/gems/setup.rb AC_SUBST([RUBY]) AC_SUBST([rubydir]) AC_SUBST([pkgrubydir]) AC_SUBST([libfiles]) +AC_SUBST([vendorfiles]) +AC_SUBST([gemsetuppath]) -AC_CONFIG_FILES([Makefile src/Makefile lib/gitsh/Makefile man/Makefile]) +AC_CONFIG_FILES([Makefile src/Makefile lib/gitsh/Makefile man/Makefile vendor/Makefile]) AC_OUTPUT diff --git a/src/Makefile.am b/src/Makefile.am index 3b4916d1..58753c82 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -4,7 +4,8 @@ EXTRA_DIST = gitsh.in edit = sed \ -e 's|@RUBY[@]|$(RUBY)|g' \ - -e 's|@rubydir[@]|$(rubydir)|g' + -e 's|@rubydir[@]|$(rubydir)|g' \ + -e 's|@gemsetuppath[@]|$(gemsetuppath)|g' gitsh: Makefile gitsh.in $(edit) $(srcdir)/$@.in > $@ diff --git a/src/gitsh.in b/src/gitsh.in index 2fc12e7d..b45b3b0b 100644 --- a/src/gitsh.in +++ b/src/gitsh.in @@ -2,6 +2,7 @@ $LOAD_PATH.unshift('@rubydir@') +require '@gemsetuppath@' require 'gitsh/cli' begin diff --git a/vendor/Makefile.am b/vendor/Makefile.am new file mode 100644 index 00000000..2b0feb61 --- /dev/null +++ b/vendor/Makefile.am @@ -0,0 +1,5 @@ +nobase_dist_pkgdata_DATA = $(vendorfiles) +EXTRA_DIST = vendorize + +distclean-local: + -rm -rf gems diff --git a/vendor/vendorize b/vendor/vendorize new file mode 100755 index 00000000..532ff09c --- /dev/null +++ b/vendor/vendorize @@ -0,0 +1,30 @@ +#!/usr/bin/env ruby + +require 'bundler' + +unless ARGV.length == 1 + $stderr.puts "usage: vendorize path-to-gems" + exit 64 +end + +TARGET_PATH = ARGV.first +SETUP_PATH = File.join(TARGET_PATH, 'setup.rb') + +FileUtils.mkdir_p(TARGET_PATH) + +File.open(SETUP_PATH, 'w') do |setup_file| + Bundler.definition.specs_for([:dist]).each do |gem| + if gem.name != 'bundler' + system( + '/usr/bin/env', 'gem', 'unpack', + '--target', TARGET_PATH, + '--version', gem.version.to_s, + gem.name + ) + + setup_file << "$LOAD_PATH.unshift(File.expand_path(%s, __FILE__))\n" % [ + "../#{gem.name}-#{gem.version}/lib".inspect + ] + end + end +end