diff --git a/CHANGELOG.md b/CHANGELOG.md index d8f52de..ede2448 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,5 @@ ## Next version - * We now support multiple versions of native extension gems. For example, we now supply Nokogiri 1.5 and 1.6. * Fixed the mysql2 native extension not working on Linux. This is done by dynamically linking against libstdc++. Closes GH-21. ## Version 20141219 diff --git a/linux/build b/linux/build index e862c1e..3738189 100755 --- a/linux/build +++ b/linux/build @@ -11,7 +11,7 @@ RUNTIME_DIR= OUTPUT_DIR= ARCHITECTURE= CONCURRENCY=$CPUCOUNT -GEMFILE="$SELFDIR/../shared/gemfiles" +GEMFILE="$SELFDIR/../shared/Gemfile" SETUP_SOURCE=true COMPILE=true SANITY_CHECK_OUTPUT=true @@ -101,20 +101,9 @@ if [[ ! -e "$RUNTIME_DIR/mock" ]]; then fi if [[ "$GEMFILE" != "" ]]; then GEMFILE="`absolute_path \"$GEMFILE\"`" - if [[ -d "$GEMFILE" ]]; then - for F in "$GEMFILE"/*/Gemfile; do - DIR="`dirname \"$F\"`" - DIR="`basename \"$DIR\"`" - GEMFILE_MOUNT+=(-v "$F:/gemfiles/$DIR/Gemfile:ro") - if [[ -e "$F.lock" ]]; then - GEMFILE_MOUNT+=(-v "$F.lock:/gemfiles/$DIR/Gemfile.lock:ro") - fi - done - else - GEMFILE_MOUNT=(-v "$GEMFILE:/gemfiles/Gemfile:ro") - if [[ -e "$GEMFILE.lock" ]]; then - GEMFILE_MOUNT+=(-v "$GEMFILE.lock:/gemfiles/Gemfile.lock:ro") - fi + GEMFILE_MOUNT=(-v "$GEMFILE:/Gemfile:ro") + if [[ -e "$GEMFILE.lock" ]]; then + GEMFILE_MOUNT+=(-v "$GEMFILE.lock:/Gemfile.lock:ro") fi fi diff --git a/linux/internal/build b/linux/internal/build index 6e9f5cd..0abdfb2 100755 --- a/linux/internal/build +++ b/linux/internal/build @@ -12,9 +12,12 @@ ROOT=/var/lib/mock/$CHROOT_NAME/root run rm -rf $ROOT/system $ROOT/output run mkdir $ROOT/system $ROOT/output run cp /system/* $ROOT/system/ -run cp -R /system_shared/* $ROOT/system/ -if [[ -e /gemfiles ]]; then - run cp -R /gemfiles $ROOT/system/ +run cp /system_shared/* $ROOT/system/ +if [[ -e /Gemfile ]]; then + run cp /Gemfile $ROOT/system/ +fi +if [[ -e /Gemfile.lock ]]; then + run cp /Gemfile.lock $ROOT/system/ fi echo "Dumping parameters" echo $ARCHITECTURE > $ROOT/system/NAME diff --git a/linux/internal/build-inside-mock b/linux/internal/build-inside-mock index 1f2858c..79dade0 100755 --- a/linux/internal/build-inside-mock +++ b/linux/internal/build-inside-mock @@ -172,21 +172,15 @@ echo $GEM_EXTENSION_API_VERSION > /tmp/ruby/info/GEM_EXTENSION_API_VERSION # removing explicitly gems. run rm -rf /tmp/ruby/lib/ruby/gems/$RUBY_COMPAT_VERSION/gems/{test-unit,rdoc}-* -if [[ -e /system/gemfiles ]]; then +if [[ -e /system/Gemfile ]]; then run /tmp/ruby/bin/gem install bundler -v $BUNDLER_VERSION --no-rdoc --no-ri - - for GEMFILE in /system/gemfiles/*/Gemfile; do - run cp "$GEMFILE" /tmp/ruby/ - if [[ -e "$GEMFILE.lock" ]]; then - run cp "$GEMFILE.lock" /tmp/ruby/ - fi - echo "+ Entering /tmp/ruby" - pushd /tmp/ruby >/dev/null - run /tmp/ruby/bin/bundle install --system --retry 3 - run rm Gemfile* - echo "+ Leaving /tmp/ruby" - popd >/dev/null - done + run cp /system/Gemfile* /tmp/ruby + echo "+ Entering /tmp/ruby" + pushd /tmp/ruby >/dev/null + run /tmp/ruby/bin/bundle install --system --retry 3 + run rm Gemfile* + echo "+ Leaving /tmp/ruby" + popd >/dev/null fi # Strip binaries and remove unnecessary files. diff --git a/linux/internal/setup-runtime b/linux/internal/setup-runtime index 5e78ff4..490609a 100755 --- a/linux/internal/setup-runtime +++ b/linux/internal/setup-runtime @@ -50,7 +50,7 @@ header "Installing additional software inside chroot" run rm -rf /var/lib/mock/$CHROOT_NAME/root/system run mkdir /var/lib/mock/$CHROOT_NAME/root/system run cp /system/* /var/lib/mock/$CHROOT_NAME/root/system/ -run cp -R /system_shared/* /var/lib/mock/$CHROOT_NAME/root/system/ +run cp /system_shared/* /var/lib/mock/$CHROOT_NAME/root/system/ echo $ARCHITECTURE > /var/lib/mock/$CHROOT_NAME/root/system/ARCHITECTURE run /system/setuser app /usr/bin/mock -r $CHROOT_NAME --shell /system/setup-runtime-inside-mock run rm -rf /var/lib/mock/$CHROOT_NAME/root/system diff --git a/linux/internal/setup-runtime-inside-mock b/linux/internal/setup-runtime-inside-mock index 30478ed..c2125be 100755 --- a/linux/internal/setup-runtime-inside-mock +++ b/linux/internal/setup-runtime-inside-mock @@ -26,8 +26,6 @@ export PATH=/usr/local/override/bin:$PATH CMAKE_VERSION=3.0.2 OPENSSL_VERSION=1.0.1j FFI_VERSION=3.2.1 -LIBXML2_VERSION=2.9.2 -LIBXSLT_VERSION=1.1.28 SQLITE3_VERSION=3080702 MYSQL_LIB_VERSION=6.1.5 POSTGRESQL_VERSION=9.3.5 @@ -104,48 +102,6 @@ if [[ ! -e /usr/local/override/lib/libffi.so.6 ]]; then fi echo -header "Installing libxml2" -if [[ ! -e /usr/local/override/lib/libxml2.a ]]; then - download_and_extract libxml2-$LIBXML2_VERSION.tar.gz \ - ftp://xmlsoft.org/libxml2/libxml2-$LIBXML2_VERSION.tar.gz - echo "Entering libxml2-$LIBXML2_VERSION" - pushd libxml2-$LIBXML2_VERSION >/dev/null - - run ./configure --prefix=/usr/local/override --disable-shared \ - --without-debug --without-docbook --without-fexceptions \ - --without-ftp --without-http --without-history --without-mem-debug \ - --without-python --without-readline --with-c14n \ - --with-threads CFLAGS='-fPIC -fvisibility=hidden' - run make -j$CONCURRENCY - run make install-strip - - echo "Leaving source directory" - popd >/dev/null - run rm -rf libxml2-$LIBXML2_VERSION -fi -echo - -header "Installing libxslt" -if [[ ! -e /usr/local/override/lib/libxslt.a ]]; then - download_and_extract libxslt-$LIBXSLT_VERSION.tar.gz \ - ftp://xmlsoft.org/libxml2/libxslt-$LIBXSLT_VERSION.tar.gz - echo "Entering libxslt-$LIBXSLT_VERSION" - pushd libxslt-$LIBXSLT_VERSION >/dev/null - - run ./configure --prefix=/usr/local/override --disable-shared \ - --without-python --without-crypto --without-debug \ - --without-mem-debug --without-debugger \ - CFLAGS='-fPIC -fvisibility=hidden' - run make -j$CONCURRENCY - run make install-strip - - echo "Leaving source directory" - popd >/dev/null - run rm -rf libxslt-$LIBXSLT_VERSION -fi -echo - -header "Installing SQLite3" if [[ ! -e /usr/local/override/lib/libsqlite3.a ]]; then download_and_extract sqlite-autoconf-$SQLITE3_VERSION.tar.gz \ http://www.sqlite.org/2014/sqlite-autoconf-$SQLITE3_VERSION.tar.gz diff --git a/osx/build b/osx/build index ce1ea04..e9a2aae 100755 --- a/osx/build +++ b/osx/build @@ -9,12 +9,11 @@ BUNDLER_VERSION=`cat "$SELFDIR/../BUNDLER_VERSION.txt"` WORKDIR= OWNS_WORKDIR=true -GEMFILES=() RUNTIME_DIR= OUTPUT_DIR= CONCURRENCY=4 -GEMFILE="$SELFDIR/../shared/gemfiles" +GEMFILE="$SELFDIR/../shared/Gemfile" SETUP_SOURCE=true COMPILE=true @@ -177,11 +176,6 @@ else fi if [[ "$GEMFILE" != "" ]]; then GEMFILE="`absolute_path \"$GEMFILE\"`" - if [[ -d "$GEMFILE" ]]; then - GEMFILES=("$GEMFILE"/*/Gemfile) - else - GEMFILES=("$GEMFILE") - fi fi @@ -274,29 +268,25 @@ if [[ "$GEMFILE" != "" ]]; then run /tmp/ruby/bin/gem install "$RUNTIME_DIR/vendor/cache/bundler-$BUNDLER_VERSION.gem" --no-rdoc --no-ri else run /tmp/ruby/bin/gem install bundler -v $BUNDLER_VERSION --no-rdoc --no-ri - run mkdir -p "$RUNTIME_DIR/vendor/cache" - run cp /tmp/ruby/lib/ruby/gems/$RUBY_COMPAT_VERSION/cache/bundler-$BUNDLER_VERSION.gem "$RUNTIME_DIR/vendor/cache/" fi # Run bundle install. - for GEMFILE in "${GEMFILES[@]}"; do - run cp "$GEMFILE" /tmp/ruby/ - if [[ -e "$GEMFILE.lock" ]]; then - run cp "$GEMFILE.lock" /tmp/ruby/ - fi - echo "+ Entering /tmp/ruby" - pushd /tmp/ruby >/dev/null - run /tmp/ruby/bin/bundle config --local build.nokogiri "" - run /tmp/ruby/bin/bundle config --local build.mysql2 "--with-mysql_config" - run /tmp/ruby/bin/bundle install --system --retry 3 - run /tmp/ruby/bin/bundle package - run rm -rf "$RUNTIME_DIR/vendor" - run mv vendor "$RUNTIME_DIR/" - - run rm -rf Gemfile* .bundle - echo "+ Leaving /tmp/ruby" - popd >/dev/null - done + run cp "$GEMFILE" /tmp/ruby/ + if [[ -e "$GEMFILE.lock" ]]; then + run cp "$GEMFILE.lock" /tmp/ruby/ + fi + echo "+ Entering /tmp/ruby" + pushd /tmp/ruby >/dev/null + run /tmp/ruby/bin/bundle config --local build.nokogiri "" + run /tmp/ruby/bin/bundle config --local build.mysql2 "--with-mysql_config" + run /tmp/ruby/bin/bundle install --system --retry 3 + run /tmp/ruby/bin/bundle package + run rm -rf "$RUNTIME_DIR/vendor" + run mv vendor "$RUNTIME_DIR/" + run cp /tmp/ruby/lib/ruby/gems/$RUBY_COMPAT_VERSION/cache/bundler-$BUNDLER_VERSION.gem "$RUNTIME_DIR/vendor/cache/" + run rm -rf Gemfile* .bundle + echo "+ Leaving /tmp/ruby" + popd >/dev/null fi # Strip binaries and remove unnecessary files. diff --git a/osx/setup-runtime b/osx/setup-runtime index 6d2bbc3..acd6cf8 100755 --- a/osx/setup-runtime +++ b/osx/setup-runtime @@ -26,10 +26,6 @@ FORCE_LIBFFI=false SKIP_LIBFFI=false FORCE_LIBYAML=false SKIP_LIBYAML=false -FORCE_LIBXML2=false -SKIP_LIBXML2=false -FORCE_LIBXSLT=false -SKIP_LIBXSL=false FORCE_SQLITE3=false SKIP_SQLITE3=false FORCE_LIBLZMA=false @@ -180,7 +176,7 @@ RUNTIME_DIR="`cd \"$RUNTIME_DIR\" && pwd`" ####################################### -TOTAL_LIBS=12 +TOTAL_LIBS=10 RUBY_MAJOR_MINOR=2.1 RUBY_VERSION=2.1.5 CMAKE_VERSION=3.0.2 @@ -192,8 +188,6 @@ GMP_VERSION=6.0.0a GMP_DIR_VERSION=6.0.0 LIBFFI_VERSION=3.2.1 LIBYAML_VERSION=0.1.5 -LIBXML2_VERSION=2.9.2 -LIBXSLT_VERSION=1.1.28 SQLITE3_VERSION=3080702 XZ_VERSION=5.0.7 MYSQL_LIB_VERSION=6.1.5 @@ -236,8 +230,7 @@ elif [[ ! -e "$RUNTIME_DIR/bin/cmake" ]] || $FORCE_CMAKE; then run ./configure --prefix="$RUNTIME_DIR" --no-qt-gui --parallel=$CONCURRENCY run make -j$CONCURRENCY run make install - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf cmake-$CMAKE_VERSION else @@ -259,8 +252,7 @@ elif [[ ! -e "$RUNTIME_DIR/bin/openssl" ]] || $FORCE_OPENSSL; then threads zlib shared no-sse2 run make run make install_sw - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf openssl-$OPENSSL_VERSION @@ -298,8 +290,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libncurses.5.dylib" ]] || $FORCE_NCURSES; then --without-develop run make -j$CONCURRENCY run make install - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf ncurses-$NCURSES_VERSION @@ -330,8 +321,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libedit.0.dylib" ]] || $FORCE_LIBEDIT; then run ./configure --prefix="$RUNTIME_DIR" --disable-static --enable-widec run make -j$CONCURRENCY run make install-strip - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf libedit-$LIBEDIT_DIR_VERSION @@ -359,8 +349,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libgmp.10.dylib" ]] || $FORCE_GMP; then run ./configure --prefix="$RUNTIME_DIR" --disable-static --without-readline run make -j$CONCURRENCY run make install-strip - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf gmp-$GMP_DIR_VERSION @@ -386,8 +375,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libffi.6.dylib" ]] || $FORCE_LIBFFI; then ./configure --prefix="$RUNTIME_DIR" --disable-static --enable-portable-binary run make -j$CONCURRENCY run make install-strip - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf libffi-$LIBFFI_VERSION @@ -410,8 +398,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libyaml-0.2.dylib" ]] || $FORCE_LIBYAML; then run ./configure --prefix="$RUNTIME_DIR" --disable-static run make -j$CONCURRENCY run make install-strip - - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf yaml-$LIBYAML_VERSION @@ -422,56 +409,7 @@ else fi echo -header "Compiling runtime libraries 7/$TOTAL_LIBS: libxml2..." -if $SKIP_LIBXML2; then - echo "Skipped." -elif [[ ! -e "$RUNTIME_DIR/lib/libxml2.a" ]] || $FORCE_LIBXML2; then - download_and_extract libxml2-$LIBXML2_VERSION.tar.gz \ - ftp://xmlsoft.org/libxml2/libxml2-$LIBXML2_VERSION.tar.gz - echo "Entering $RUNTIME_DIR/libxml2-$LIBXML2_VERSION" - pushd libxml2-$LIBXML2_VERSION >/dev/null - - run ./configure --prefix="$RUNTIME_DIR" --disable-shared \ - --without-debug --without-docbook --without-fexceptions \ - --without-ftp --without-http --without-history --without-mem-debug \ - --without-python --without-readline --with-c14n \ - --with-threads CFLAGS='-fPIC -fvisibility=hidden' - run make -j$CONCURRENCY - run make install-strip - - echo "Leaving source directory" - popd >/dev/null - run rm -rf libxml2-$LIBXML2_VERSION -else - echo "Already installed." -fi -echo - -header "Compiling runtime libraries 8/$TOTAL_LIBS: libxslt..." -if $SKIP_LIBXSLT; then - echo "Skipped." -elif [[ ! -e "$RUNTIME_DIR/lib/libxslt.a" ]] || $FORCE_LIBXSLT; then - download_and_extract libxslt-$LIBXSLT_VERSION.tar.gz \ - ftp://xmlsoft.org/libxml2/libxslt-$LIBXSLT_VERSION.tar.gz - echo "Entering libxslt-$LIBXSLT_VERSION" - pushd libxslt-$LIBXSLT_VERSION >/dev/null - - run ./configure --prefix=/usr/local/override --disable-shared \ - --without-python --without-crypto --without-debug \ - --without-mem-debug --without-debugger \ - CFLAGS='-fPIC -fvisibility=hidden' - run make -j$CONCURRENCY - run make install-strip - - echo "Leaving source directory" - popd >/dev/null - run rm -rf libxslt-$LIBXSLT_VERSION -else - echo "Already installed." -fi -echo - -header "Compiling runtime libraries 9/$TOTAL_LIBS: sqlite3..." +header "Compiling runtime libraries 7/$TOTAL_LIBS: sqlite3..." if $SKIP_SQLITE3; then echo "Skipped." elif [[ ! -e "$RUNTIME_DIR/lib/libsqlite3.a" ]] || $FORCE_SQLITE3; then @@ -492,7 +430,7 @@ else fi echo -header "Compiling runtime libraries 10/$TOTAL_LIBS: liblzma..." +header "Compiling runtime libraries 8/$TOTAL_LIBS: liblzma..." if $SKIP_LIBLZMA; then echo "Skipped." elif [[ ! -e "$RUNTIME_DIR/lib/liblzma.5.dylib" ]] || $FORCE_LIBLZMA; then @@ -507,7 +445,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/liblzma.5.dylib" ]] || $FORCE_LIBLZMA; then run make -j$CONCURRENCY run make install-strip - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf xz-$XZ_VERSION @@ -518,7 +456,7 @@ else fi echo -header "Compiling runtime libraries 11/$TOTAL_LIBS: MySQL..." +header "Compiling runtime libraries 9/$TOTAL_LIBS: MySQL..." if $SKIP_MYSQL; then echo "Skipped." elif [[ ! -e "$RUNTIME_DIR/lib/libmysqlclient.a" ]] || $FORCE_MYSQL; then @@ -542,7 +480,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libmysqlclient.a" ]] || $FORCE_MYSQL; then run make -C include install run make -C scripts install - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf mysql-connector-c-$MYSQL_LIB_VERSION-src else @@ -550,7 +488,7 @@ else fi echo -header "Compiling runtime libraries 12/$TOTAL_LIBS: PostgreSQL..." +header "Compiling runtime libraries 10/$TOTAL_LIBS: PostgreSQL..." if $SKIP_POSTGRESQL; then echo "Skipped." elif [[ ! -e "$RUNTIME_DIR/lib/libpq.a" ]] || $FORCE_POSTGRESQL; then @@ -569,7 +507,7 @@ elif [[ ! -e "$RUNTIME_DIR/lib/libpq.a" ]] || $FORCE_POSTGRESQL; then run make -j$CONCURRENCY -C src/bin/pg_config run make -C src/bin/pg_config install-strip - echo "Leaving source directory" + echo "Entering $RUNTIME_DIR" popd >/dev/null run rm -rf postgresql-$POSTGRESQL_VERSION diff --git a/shared/gemfiles/default/Gemfile b/shared/Gemfile similarity index 100% rename from shared/gemfiles/default/Gemfile rename to shared/Gemfile diff --git a/shared/gemfiles/default/Gemfile.lock b/shared/Gemfile.lock similarity index 100% rename from shared/gemfiles/default/Gemfile.lock rename to shared/Gemfile.lock diff --git a/shared/gemfiles/nokogiri-1.5/Gemfile b/shared/gemfiles/nokogiri-1.5/Gemfile deleted file mode 100644 index 47fac78..0000000 --- a/shared/gemfiles/nokogiri-1.5/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -#source 'http://production.cf.rubygems.org/' -source 'https://rubygems.org' - -gem 'nokogiri', '~> 1.5.0' diff --git a/shared/gemfiles/nokogiri-1.5/Gemfile.lock b/shared/gemfiles/nokogiri-1.5/Gemfile.lock deleted file mode 100644 index cbec8be..0000000 --- a/shared/gemfiles/nokogiri-1.5/Gemfile.lock +++ /dev/null @@ -1,10 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - nokogiri (1.5.11) - -PLATFORMS - ruby - -DEPENDENCIES - nokogiri (~> 1.5.0)