|
| 1 | +#!/usr/bin/env bash |
| 2 | +#VERIFY PARAMETERS |
| 3 | +if [ $# -eq 0 ] |
| 4 | + then |
| 5 | + echo "No arguments supplied" |
| 6 | + echo "Usage: nix_compile_ruby.sh /path/to/ruby_source.tar.gz" |
| 7 | + exit 1 |
| 8 | +fi |
| 9 | + |
| 10 | +#DETECT OPERATING SYSTEM |
| 11 | +OS="unknown" |
| 12 | +if [[ "$OSTYPE" == "linux"* ]]; then |
| 13 | + OS="linux" |
| 14 | +elif [[ "$OSTYPE" == "darwin"* ]]; then |
| 15 | + OS="darwin" |
| 16 | +elif [[ "$OSTYPE" == "cygwin" ]]; then |
| 17 | + OS="cygwin" |
| 18 | +elif [[ "$OSTYPE" == "win32" ]]; then |
| 19 | + OS="win32" |
| 20 | +elif [[ "$OSTYPE" == "FreeBSD"* ]]; then |
| 21 | + OS="freebsd" |
| 22 | +fi |
| 23 | + |
| 24 | +#DETERMINE DIRECTORY OF THIS SCRIPT |
| 25 | +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
| 26 | + |
| 27 | +echo "Compiling and installing ruby" |
| 28 | + |
| 29 | +#PRE INSTALL CLEANUP |
| 30 | +rm -rf $DIR/extracted_ruby |
| 31 | +mkdir $DIR/extracted_ruby |
| 32 | + |
| 33 | +#UNZIP SOURCE |
| 34 | +tar -xzf $1 -C $DIR/extracted_ruby |
| 35 | + |
| 36 | +#GET RUBY VERSION AND DIRECTORY |
| 37 | +RUBYDIR="$(ls $DIR/extracted_ruby)" |
| 38 | +RUBY_VERSION="$(echo $RUBYDIR | cut -d'-' -f 2)" |
| 39 | + |
| 40 | +echo "############################" |
| 41 | +echo "Ruby Ship is installing ruby version $RUBY_VERSION" |
| 42 | +echo "############################" |
| 43 | + |
| 44 | +#BUILDING RUBY |
| 45 | +cd $DIR/extracted_ruby/$RUBYDIR |
| 46 | +if [[ "$OS" == "darwin" ]]; then |
| 47 | + $DIR/extracted_ruby/$RUBYDIR/configure --enable-load-relative --prefix=$DIR/../bin/shipyard/${OS}_ruby --with-opt-dir="$(brew --prefix openssl):$(brew --prefix readline):$(brew --prefix libyaml):$(brew --prefix gdbm):$(brew --prefix libffi)" |
| 48 | +else |
| 49 | + $DIR/extracted_ruby/$RUBYDIR/configure --enable-load-relative --prefix=$DIR/../bin/shipyard/${OS}_ruby |
| 50 | +fi |
| 51 | +make |
| 52 | +make install |
| 53 | + |
| 54 | + |
| 55 | +#SETTING UP REFERENCE DIRECTORIES |
| 56 | +RUBY_INSTALL_DIR="$(ls $DIR/../bin/shipyard/${OS}_ruby/include)" |
| 57 | +RUBY_VERSION_DIR="$(echo $RUBY_INSTALL_DIR | cut -d'-' -f 2)" |
| 58 | +RUBY_BINARY_INSTALL_DIR="$(ls $DIR/../bin/shipyard/${OS}_ruby/lib/ruby/$RUBY_VERSION_DIR | grep ${OS})" |
| 59 | + |
| 60 | +#SETTING UP COMMON WRAPPER COMPONENTS |
| 61 | +OS_SELECTOR=$'#!/usr/bin/env bash\nOS=\"unknown\"\nif [[ \"$OSTYPE\" == \"linux\"* ]]; then\n OS=\"linux\"\nelif [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n OS=\"darwin\"\nelif [[ \"$OSTYPE\" == \"cygwin\" ]]; then\n OS=\"win\"\nelif [[ \"$OSTYPE\" == \"win32\" ]]; then\n OS=\"win\"\nelif [[ \"$OSTYPE\" == \"FreeBSD\"* ]]; then\n OS=\"freebsd\"\nelse\n echo \"OS not compatible\"\n exit 1\nfi\n' |
| 62 | +DIR_SETTER="DIR=\"\$( cd \"\$( dirname \"\${BASH_SOURCE[0]}\" )\" && pwd )\"" |
| 63 | + |
| 64 | + |
| 65 | + |
| 66 | + |
| 67 | +#BUILDING RUBY SHIP WRAPPERS: |
| 68 | +#ruby_ship |
| 69 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship.sh |
| 70 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship.sh |
| 71 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_ruby.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship.sh |
| 72 | + |
| 73 | +#ruby_ship_gem |
| 74 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_gem.sh |
| 75 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_gem.sh |
| 76 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_gem.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_gem.sh |
| 77 | + |
| 78 | +#ruby_ship_erb |
| 79 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_erb.sh |
| 80 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_erb.sh |
| 81 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_erb.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_erb.sh |
| 82 | + |
| 83 | +#ruby_ship_irb |
| 84 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_irb.sh |
| 85 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_irb.sh |
| 86 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_irb.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_irb.sh |
| 87 | + |
| 88 | +#ruby_ship_rake |
| 89 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_rake.sh |
| 90 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_rake.sh |
| 91 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_rake.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_rake.sh |
| 92 | + |
| 93 | +#ruby_ship_rdoc |
| 94 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_rdoc.sh |
| 95 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_rdoc.sh |
| 96 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_rdoc.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_rdoc.sh |
| 97 | + |
| 98 | +#ruby_ship_ri |
| 99 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_ri.sh |
| 100 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_ri.sh |
| 101 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_ri.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_ri.sh |
| 102 | + |
| 103 | +#ruby_ship_testrb |
| 104 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_testrb.sh |
| 105 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_testrb.sh |
| 106 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_testrb.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_testrb.sh |
| 107 | + |
| 108 | +#ruby_ship_bundle |
| 109 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_bundle.sh |
| 110 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_bundle.sh |
| 111 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_bundle.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_bundle.sh |
| 112 | + |
| 113 | +#ruby_ship_bundler |
| 114 | +echo "$OS_SELECTOR" > $DIR/../bin/ruby_ship_bundler.sh |
| 115 | +echo "$DIR_SETTER" >> $DIR/../bin/ruby_ship_bundler.sh |
| 116 | +echo "SSL_CERT_FILE=\"\${DIR}/shipyard/cacerts.pem\" \"\${DIR}/shipyard/\${OS}_bundler.sh\" \"\$@\"" >> $DIR/../bin/ruby_ship_bundler.sh |
| 117 | + |
| 118 | + |
| 119 | + |
| 120 | + |
| 121 | +#MAKING THE OS SPECIFIC SCRIPTS: |
| 122 | + |
| 123 | +GEM_PATH_SETTER="GEM_PATH=\"\${DIR}/${OS}_ruby/lib/ruby/gems/$RUBY_VERSION_DIR/:\${DIR}/${OS}_ruby/lib/ruby/$RUBY_VERSION_DIR/:\${DIR}/${OS}_ruby/bin/:\${DIR}/${OS}_ruby/lib/ruby/$RUBY_VERSION_DIR/$RUBY_BINARY_INSTALL_DIR/\"" |
| 124 | +GEM_HOME_SETTER="GEM_HOME=\"\${DIR}/${OS}_ruby/lib/ruby/gems/$RUBY_VERSION_DIR/\"" |
| 125 | + |
| 126 | +#OS_ruby |
| 127 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_ruby.sh |
| 128 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_ruby.sh |
| 129 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_ruby.sh |
| 130 | +echo "\"\${DIR}/${OS}_ruby/bin/ruby\" -I \"\${DIR}/shipyard/${OS}_ruby/lib/ruby/gems/$RUBY_VERSION_DIR/\" -I \"\${DIR}/shipyard/${OS}_ruby/lib/ruby/$RUBY_VERSION_DIR/\" -I \"\${DIR}/shipyard/${OS}_ruby/bin/\" -I \"\${DIR}/shipyard/${OS}_ruby/lib/ruby/$RUBY_VERSION_DIR/$RUBY_BINARY_INSTALL_DIR/\"" \"\$@\" >> $DIR/../bin/shipyard/${OS}_ruby.sh |
| 131 | + |
| 132 | +#gem command script: |
| 133 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_gem.sh |
| 134 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 135 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 136 | +echo "\"\${DIR}/${OS}_ruby/bin/gem\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 137 | +if [[ "$OS" == "darwin" ]]; then |
| 138 | + echo "if [[ \"\$1\" == \"install\" ]]; then" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 139 | + echo " cd \"\${DIR}/../../\"" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 140 | + echo " ruby \"./tools/auto_relink_dylibs.rb\"" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 141 | + echo "fi" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 142 | + # echo "echo \"Remember to run 'ruby tools/auto_relink_dylibs.rb' after you install new gems\"" >> $DIR/../bin/shipyard/${OS}_gem.sh |
| 143 | +fi |
| 144 | +#erb command script: |
| 145 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_erb.sh |
| 146 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_erb.sh |
| 147 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_erb.sh |
| 148 | +echo "\"\${DIR}/${OS}_ruby/bin/erb\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_erb.sh |
| 149 | + |
| 150 | +#irb command script: |
| 151 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_irb.sh |
| 152 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_irb.sh |
| 153 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_irb.sh |
| 154 | +echo "\"\${DIR}/${OS}_ruby/bin/irb\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_irb.sh |
| 155 | + |
| 156 | +#rake command script: |
| 157 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_rake.sh |
| 158 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_rake.sh |
| 159 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_rake.sh |
| 160 | +echo "\"\${DIR}/${OS}_ruby/bin/rake\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_rake.sh |
| 161 | + |
| 162 | +#rdoc command script: |
| 163 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_rdoc.sh |
| 164 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_rdoc.sh |
| 165 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_rdoc.sh |
| 166 | +echo "\"\${DIR}/${OS}_ruby/bin/rdoc\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_rdoc.sh |
| 167 | + |
| 168 | +#ri command script: |
| 169 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_ri.sh |
| 170 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_ri.sh |
| 171 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_ri.sh |
| 172 | +echo "\"\${DIR}/${OS}_ruby/bin/ri\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_ri.sh |
| 173 | + |
| 174 | +#testrb command script: |
| 175 | +echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_testrb.sh |
| 176 | +echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_testrb.sh |
| 177 | +echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_testrb.sh |
| 178 | +echo "\"\${DIR}/${OS}_ruby/bin/testrb\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_testrb.sh |
| 179 | + |
| 180 | + |
| 181 | +#for some reason darwin installs bundler to a strange location. |
| 182 | +if [[ "$OS" == "darwin" ]]; then |
| 183 | + #bundle command script darwin: |
| 184 | + echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_bundle.sh |
| 185 | + echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 186 | + echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 187 | + echo "\"\${DIR}/${OS}_ruby/lib/ruby/gems/$RUBY_VERSION_DIR/bin/bundle\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 188 | + echo "if [ \"\$1\" == \"install\" ] || [ \"\$1\" == \"update\" ]; then" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 189 | + echo " cd \"\${DIR}/../../\"" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 190 | + echo " ruby \"./tools/auto_relink_dylibs.rb\"" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 191 | + echo "fi" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 192 | + #bundler command script darwin: |
| 193 | + echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_bundler.sh |
| 194 | + echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_bundler.sh |
| 195 | + echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_bundler.sh |
| 196 | + echo "\"\${DIR}/${OS}_ruby/lib/ruby/gems/$RUBY_VERSION_DIR/bin/bundler\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_bundler.sh |
| 197 | +else |
| 198 | + #bundle command script: |
| 199 | + echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_bundle.sh |
| 200 | + echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 201 | + echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 202 | + echo "\"\${DIR}/${OS}_ruby/bin/bundle\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_bundle.sh |
| 203 | + #bundler command script: |
| 204 | + echo "$DIR_SETTER" > $DIR/../bin/shipyard/${OS}_bundler.sh |
| 205 | + echo "$GEM_PATH_SETTER" >> $DIR/../bin/shipyard/${OS}_bundler.sh |
| 206 | + echo "$GEM_HOME_SETTER" >> $DIR/../bin/shipyard/${OS}_bundler.sh |
| 207 | + echo "\"\${DIR}/${OS}_ruby/bin/bundler\" \"\$@\"" >> $DIR/../bin/shipyard/${OS}_bundler.sh |
| 208 | +fi |
| 209 | + |
| 210 | +chmod a+x $DIR/../bin/ruby_ship.sh |
| 211 | +chmod a+x $DIR/../bin/ruby_ship_gem.sh |
| 212 | +chmod a+x $DIR/../bin/ruby_ship_erb.sh |
| 213 | +chmod a+x $DIR/../bin/ruby_ship_irb.sh |
| 214 | +chmod a+x $DIR/../bin/ruby_ship_rake.sh |
| 215 | +chmod a+x $DIR/../bin/ruby_ship_rdoc.sh |
| 216 | +chmod a+x $DIR/../bin/ruby_ship_ri.sh |
| 217 | +chmod a+x $DIR/../bin/ruby_ship_testrb.sh |
| 218 | +chmod a+x $DIR/../bin/ruby_ship_bundle.sh |
| 219 | +chmod a+x $DIR/../bin/ruby_ship_bundler.sh |
| 220 | + |
| 221 | +chmod a+x $DIR/../bin/shipyard/${OS}_ruby.sh |
| 222 | +chmod a+x $DIR/../bin/shipyard/${OS}_gem.sh |
| 223 | +chmod a+x $DIR/../bin/shipyard/${OS}_erb.sh |
| 224 | +chmod a+x $DIR/../bin/shipyard/${OS}_irb.sh |
| 225 | +chmod a+x $DIR/../bin/shipyard/${OS}_rake.sh |
| 226 | +chmod a+x $DIR/../bin/shipyard/${OS}_rdoc.sh |
| 227 | +chmod a+x $DIR/../bin/shipyard/${OS}_ri.sh |
| 228 | +chmod a+x $DIR/../bin/shipyard/${OS}_testrb.sh |
| 229 | +chmod a+x $DIR/../bin/shipyard/${OS}_bundle.sh |
| 230 | +chmod a+x $DIR/../bin/shipyard/${OS}_bundler.sh |
| 231 | + |
| 232 | +#CLEAN UP AFTER EXTRACTION |
| 233 | +rm -rf $DIR/extracted_ruby |
| 234 | + |
| 235 | + |
| 236 | +#NOTIFY USER ON HOW TO USE RUBY SHIP |
| 237 | +echo "############################" |
| 238 | +echo "############DONE############" |
| 239 | +echo "############################" |
| 240 | +echo "Ruby Ship finished installing Ruby $RUBY_VERSION!" |
| 241 | +echo "Run scripts by using the bin/ruby_ship.sh as you would use the normal ruby command." |
| 242 | +echo "Eg.: bin/ruby_ship.sh -v" |
| 243 | +echo "=> ruby $RUBY_VERSION..." |
0 commit comments