| #!/usr/bin/env bash |
| # Copyright 2019 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Script to build a self contained ruby cipd packages. |
| |
| set -e |
| set -x |
| |
| # Get the directory of this script. |
| DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
| |
| # Get versions from config files. |
| RUBY_MAJOR_VERSION=$(cat $DIR/../ruby_metadata.txt | cut -d ',' -f 1) |
| RUBY_FILE_NAME=$(cat $DIR/../ruby_metadata.txt | cut -d ',' -f 2) |
| |
| |
| # Create the package structure. |
| rm -rf $DIR/../build && mkdir -p $DIR/../build |
| mkdir -p $DIR/../build/tools |
| |
| # Copy files to build directory. |
| cp $DIR/../third_party/ruby_ship/auto_relink_dylibs.rb $DIR/../build/tools/auto_relink_dylibs.rb |
| cp $DIR/../third_party/ruby_ship/ruby_ship_build.sh $DIR/ruby_build.sh |
| cp $DIR/../LICENSE $DIR/../build/LICENSE |
| |
| # Download ruby. |
| mkdir -p $DIR/../cleanup |
| curl https://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR_VERSION/$RUBY_FILE_NAME -o $DIR/../cleanup/$RUBY_FILE_NAME |
| |
| # Install brew dependencies |
| brew install curl |
| brew install openldap |
| brew reinstall --build-from-source gdbm |
| brew reinstall --build-from-source gmp |
| brew reinstall --build-from-source libffi |
| brew reinstall libyaml |
| brew reinstall --build-from-source readline |
| brew reinstall --build-from-source openssl@3 |
| brew reinstall --build-from-source m4 |
| |
| bash -e $DIR/ruby_build.sh $DIR/../cleanup/$RUBY_FILE_NAME |
| |
| # Copy certificates bundle for mac x64. |
| if [ -f /usr/local/etc/ca-certificates/cert.pem ]; then |
| cp /usr/local/etc/ca-certificates/cert.pem $DIR/../build/bin/darwin_ruby/ |
| fi; |
| |
| # Copy certificates bundle for mac x64. |
| if [ -f /opt/homebrew/etc/openssl@3/cert.pem ]; then |
| cp /opt/homebrew/etc/openssl@3/cert.pem $DIR/../build/bin/darwin_ruby/ |
| fi; |
| |
| # Update wrapper scripts to make them use libraries from new location. |
| sed -i'' -e 's/bindir="\${0%\/\*}"/&\nSSL_CERTS="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/cert.pem"\nLIBSPATH="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/dylibs"\nexport DYLD_FALLBACK_LIBRARY_PATH=\$LIBSPATH:\$DYLD_FALLBACK_LIBRARY_PATH\nexport SSL_CERT_FILE="\${SSL_CERTS}"/' $DIR/../build/bin/darwin_ruby/bin/gem |
| sed -i'' -e 's/bindir="\${0%\/\*}"/&\nSSL_CERTS="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/cert.pem"\nLIBSPATH="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/dylibs"\nexport DYLD_FALLBACK_LIBRARY_PATH=\$LIBSPATH:\$DYLD_FALLBACK_LIBRARY_PATH\nexport SSL_CERT_FILE="\${SSL_CERTS}"/' $DIR/../build/bin/darwin_ruby/bin/bundler |
| sed -i'' -e 's/bindir="\${0%\/\*}"/&\nSSL_CERTS="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/cert.pem"\nLIBSPATH="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/dylibs"\nexport DYLD_FALLBACK_LIBRARY_PATH=\$LIBSPATH:\$DYLD_FALLBACK_LIBRARY_PATH\nexport SSL_CERT_FILE="\${SSL_CERTS}"/' $DIR/../build/bin/darwin_ruby/bin/bundle |
| sed -i'' -e 's/bindir="\${0%\/\*}"/&\nSSL_CERTS="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/cert.pem"\nLIBSPATH="\$( cd -- "\$(dirname "\$0")" >\/dev\/null 2>\&1 ; pwd -P )\/..\/dylibs"\nexport DYLD_FALLBACK_LIBRARY_PATH=\$LIBSPATH:\$DYLD_FALLBACK_LIBRARY_PATH\nexport SSL_CERT_FILE="\${SSL_CERTS}"/' $DIR/../build/bin/darwin_ruby/bin/pod |
| |
| # Patch FFI to find libc.dylib in the standard location. |
| find $DIR/../build -name library.rb -exec sed -i'' -e 's/LIBC = FFI\:\:Platform\:\:LIBC/LIBC = \x27\/usr\/lib\/libc.dylib\x27/' {} \; |
| |
| # Ensure all the command are working properly |
| $DIR/../build/bin/bundle --version |
| $DIR/../build/bin/bundler --version |
| $DIR/../build/bin/gem --version |
| $DIR/../build/bin/pod --version |