blob: 439bbcd908cb168c3187e66bc22098cde2a8a901 [file] [log] [blame]
#!/usr/bin/env bash
set -e
set -x
function remove_dylib_signatures() {
if [[ -z "$1" ]]; then
echo 'remove_dylib_signatures must be called with the path to the dylibs dir as an argument' >&2
exit 42
fi
# Remove signatures
ls "$1/"* | xargs codesign --remove-signature;
# Resign with adhoc
ls "$1/"* | xargs codesign --force -s -;
}
# Verify parameters.
if [ $# -eq 0 ]; then
echo "No arguments supplied"
echo "Usage: ruby_build.sh /path/to/ruby_source.tar.gz"
exit 1
fi
# This script supports only Mac.
OS="darwin"
# Directory of this script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COCOAPODS_VERSION=$(cat $DIR/../cocoapods_version.txt)
echo "Compiling and installing ruby"
# Pre install/cleanup
rm -rf $DIR/../cleanup/extracted_ruby
mkdir $DIR/../cleanup/extracted_ruby
# Unzip source code.
tar -xzf $1 -C $DIR/../cleanup/extracted_ruby
#Get ruby version and directory.
RUBYDIR="$(ls $DIR/../cleanup/extracted_ruby)"
RUBY_VERSION="$(echo $RUBYDIR | cut -d'-' -f 2)"
echo "############################"
echo "Installing ruby version $RUBY_VERSION"
echo "############################"
# Building ruby.
cd $DIR/../cleanup/extracted_ruby/$RUBYDIR
if [[ "$OS" == "darwin" ]]; then
OPTS=""
OPTS+="$(brew --prefix openssl)"
OPTS+=":$(brew --prefix readline)"
OPTS+=":$(brew --prefix libyaml)"
OPTS+=":$(brew --prefix gdbm)"
OPTS+=":$(brew --prefix libffi)"
$DIR/../cleanup/extracted_ruby/$RUBYDIR/configure \
--enable-load-relative \
--prefix=$DIR/../build/bin/${OS}_ruby \
--with-opt-dir="$OPTS"
fi
make
make install
# Copy default libraries to build directory
mkdir -p "$DIR/../build/bin/darwin_ruby/dylibs/"
find $(brew --prefix curl)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
find $(brew --prefix gdbm)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
find $(brew --prefix libffi)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
find $(brew --prefix libyaml)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
find $(brew --prefix openldap)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
find $(brew --prefix openssl)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
find $(brew --prefix readline)/lib/ -name '*.dylib' -exec cp {} -f "$DIR/../build/bin/darwin_ruby/dylibs/" \;
# Setting up reference directories.
RUBY_INSTALL_DIR="$(ls $DIR/../build/bin/${OS}_ruby/include)"
RUBY_VERSION_DIR="$(echo $RUBY_INSTALL_DIR | cut -d'-' -f 2)"
RUBY_BINARY_INSTALL_DIR="$(ls $DIR/../build/bin/${OS}_ruby/lib/ruby/$RUBY_VERSION_DIR | grep ${OS})"
#SETTING UP COMMON WRAPPER COMPONENTS
OS_SELECTOR=$'#!/usr/bin/env bash\nOS=\"darwin\"\n'
DIR_SETTER="DIR=\"\$( cd \"\$( dirname \"\${BASH_SOURCE[0]}\" )\" && pwd )\""
#Building wrappers.
#ruby
echo "$OS_SELECTOR" > $DIR/../build/bin/ruby
echo "$DIR_SETTER" >> $DIR/../build/bin/ruby
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_ruby.sh\" \"\$@\"" >> $DIR/../build/bin/ruby
#gem
echo "$OS_SELECTOR" > $DIR/../build/bin/gem
echo "$DIR_SETTER" >> $DIR/../build/bin/gem
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_gem.sh\" \"\$@\"" >> $DIR/../build/bin/gem
#erb
echo "$OS_SELECTOR" > $DIR/../build/bin/erb
echo "$DIR_SETTER" >> $DIR/../build/bin/erb
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_erb.sh\" \"\$@\"" >> $DIR/../build/bin/erb
#irb
echo "$OS_SELECTOR" > $DIR/../build/bin/irb
echo "$DIR_SETTER" >> $DIR/../build/bin/irb
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_irb.sh\" \"\$@\"" >> $DIR/../build/bin/irb
#rake
echo "$OS_SELECTOR" > $DIR/../build/bin/rake
echo "$DIR_SETTER" >> $DIR/../build/bin/rake
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_rake.sh\" \"\$@\"" >> $DIR/../build/bin/rake
#rdoc
echo "$OS_SELECTOR" > $DIR/../build/bin/rdoc
echo "$DIR_SETTER" >> $DIR/../build/bin/rdoc
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_rdoc.sh\" \"\$@\"" >> $DIR/../build/bin/rdoc
#ri
echo "$OS_SELECTOR" > $DIR/../build/bin/ri
echo "$DIR_SETTER" >> $DIR/../build/bin/ri
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_ri.sh\" \"\$@\"" >> $DIR/../build/bin/ri
#bundle
echo "$OS_SELECTOR" > $DIR/../build/bin/bundle
echo "$DIR_SETTER" >> $DIR/../build/bin/bundle
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_ri.sh\" \"\$@\"" >> $DIR/../build/bin/bundle
#bundler
echo "$OS_SELECTOR" > $DIR/../build/bin/bundler
echo "$DIR_SETTER" >> $DIR/../build/bin/bundler
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_bundler.sh\" \"\$@\"" >> $DIR/../build/bin/bundler
#pod
echo "$OS_SELECTOR" > $DIR/../build/bin/pod
echo "$DIR_SETTER" >> $DIR/../build/bin/pod
echo "bash -e \"\${DIR}/\${OS}_ruby/\${OS}_pod.sh\" \"\$@\"" >> $DIR/../build/bin/pod
# Making OS specific scripts:
GEM_PATH_SETTER="GEM_PATH=\"\${DIR}/lib/ruby/gems/$RUBY_VERSION_DIR/:\${DIR}/lib/ruby/$RUBY_VERSION_DIR/:\${DIR}/bin/:\${DIR}/lib/ruby/$RUBY_VERSION_DIR/$RUBY_BINARY_INSTALL_DIR/\""
GEM_HOME_SETTER="GEM_HOME=\"\${DIR}/lib/ruby/gems/$RUBY_VERSION_DIR/\""
# OS_ruby
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_ruby.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_ruby.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_ruby.sh
echo "\"\${DIR}/bin/ruby\" -I \"\${DIR}/lib/ruby/gems/$RUBY_VERSION_DIR/\" -I \"\${DIR}/lib/ruby/$RUBY_VERSION_DIR/\" -I \"\${DIR}/bin/\" -I \"\${DIR}/lib/ruby/$RUBY_VERSION_DIR/$RUBY_BINARY_INSTALL_DIR/\"" \"\$@\" >> $DIR/../build/bin/${OS}_ruby/${OS}_ruby.sh
# gem command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
echo "\"\${DIR}/bin/gem\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
echo "if [[ \"\$1\" == \"install\" ]]; then" >> $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
echo "\"${DIR}/../build/bin/ruby\" \"\${DIR}/../../tools/auto_relink_dylibs.rb\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
echo "fi" >> $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
# erb command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_erb.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_erb.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_erb.sh
echo "\"\${DIR}/bin/erb\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_erb.sh
# irb command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_irb.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_irb.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_irb.sh
echo "\"\${DIR}/bin/irb\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_irb.sh
# rake command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_rake.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_rake.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_rake.sh
echo "\"\${DIR}/bin/rake\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_rake.sh
# rdoc command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_rdoc.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_rdoc.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_rdoc.sh
echo "\"\${DIR}/bin/rdoc\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_rdoc.sh
#ri command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_ri.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_ri.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_ri.sh
echo "\"\${DIR}/bin/ri\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_ri.sh
# pod command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_pod.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_pod.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_pod.sh
echo "\"\${DIR}/bin/pod\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_pod.sh
# bundle command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
echo "\"\${DIR}/../build/bin/${OS}_ruby/lib/ruby/gems/$RUBY_VERSION_DIR/bin/bundle\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
echo "if [ \"\$1\" == \"install\" ] || [ \"\$1\" == \"update\" ]; then" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
echo " ${DIR}/../build/bin/ruby \"\${DIR}/../../auto_relink_dylibs.rb\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
echo "fi" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
#bundler command script:
echo "$DIR_SETTER" > $DIR/../build/bin/${OS}_ruby/${OS}_bundler.sh
echo "$GEM_PATH_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundler.sh
echo "$GEM_HOME_SETTER" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundler.sh
echo "\"\${DIR}/bin/bundler\" \"\$@\"" >> $DIR/../build/bin/${OS}_ruby/${OS}_bundler.sh
chmod a+x $DIR/../build/bin/ruby
chmod a+x $DIR/../build/bin/gem
chmod a+x $DIR/../build/bin/erb
chmod a+x $DIR/../build/bin/irb
chmod a+x $DIR/../build/bin/pod
chmod a+x $DIR/../build/bin/rake
chmod a+x $DIR/../build/bin/rdoc
chmod a+x $DIR/../build/bin/ri
chmod a+x $DIR/../build/bin/bundle
chmod a+x $DIR/../build/bin/bundler
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_ruby.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_gem.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_erb.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_irb.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_rake.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_rdoc.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_ri.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_bundle.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_bundler.sh
chmod a+x $DIR/../build/bin/${OS}_ruby/${OS}_pod.sh
# Remove signatures from ruby and re-sign as adhoc.
codesign --remove-signature $DIR/../build/bin/darwin_ruby/bin/ruby
codesign --force -s - $DIR/../build/bin/darwin_ruby/bin/ruby
remove_dylib_signatures "$DIR/../build/bin/darwin_ruby/dylibs"
# Install bundler
$DIR/../build/bin/gem cleanup bundler
$DIR/../build/bin/gem install -f bundler
remove_dylib_signatures "$DIR/../build/bin/darwin_ruby/dylibs"
# Install cococoapods
$DIR/../build/bin/gem install activesupport -v 7.0.8 # Pin this dep version.
$DIR/../build/bin/gem install cocoapods -v $COCOAPODS_VERSION
remove_dylib_signatures "$DIR/../build/bin/darwin_ruby/dylibs"
# Cleanup temp folder.
rm -rf $DIR/../cleanup
#NOTIFY USER ON HOW TO USE RUBY SHIP
echo "############################"
echo "############DONE############"
echo "############################"
echo "Finished creating bundler for Ruby $RUBY_VERSION!"
echo "Run scripts by using scripts in the bin/ as you would use the normal ruby command."
echo "Eg.: bin/ruby -v"
echo "=> ruby $RUBY_VERSION..."