Как обновить Ruby в Google SketchUp? - PullRequest
1 голос
/ 26 июля 2010

В настоящее время Google SketchUp для Mac имеет версию Ruby 1.8.5, которая, на мой взгляд, несколько устарела. Я могу обновить Ruby до 1.8.7 (версия OSX) с помощью следующих команд

$ cd /Applications/Google\ SketchUp\ 7/SketchUp.app/Contents/Frameworks/Ruby.framework/Versions/Current
$ ls
Headers/       Resources/     Ruby
$ ls Headers/
config.h  defines.h intern.h  missing.h ruby.h

$ rm -r Headers
$ ln -s  /System/Library/Frameworks/Ruby.framework/Headers
$ ln -fs /System/Library/Frameworks/Ruby.framework/Ruby

SketchUp запускается без проблем, а консоль Ruby показывает версию 1.8.7.

1.9.2

Теперь я пытаюсь пойти дальше и обновить до 1.9.2-rc2. Для Google SketchUp требуется i386 двоичный файл, который можно создать с помощью следующих команд

$ cd ~/ruby-1.9.2-rc2/
$ ARCHFLAGS="-arch i386"  CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure  --with-arch=i386
$ make && sudo make install

Затем я копирую необходимые файлы в SketchUp:

$ cd /Applications/Google\ SketchUp\ 7/SketchUp.app/Contents/Frameworks/Ruby.framework/
$ rm Headers Ruby

$ cp /usr/local/bin/ruby Ruby
$ mkdir Headers
$ cp /usr/local/include/ruby-1.9.1/i386-darwin10.4.0/ruby/config.h Headers/
$ cp /usr/local/include/ruby-1.9.1/ruby.h Headers/
$ cp -r /usr/local/include/ruby-1.9.1/ruby/* Headers/
$ ls Headers
backward/   defines.h   dl.h        intern.h    missing.h   re.h        ruby.h      util.h      vm.h
config.h    digest.h    encoding.h  io.h        oniguruma.h regex.h     st.h        version.h

и когда я пытаюсь запустить SketchUp, я получаю следующее сообщение об ошибке

Exception Type:  EXC_BREAKPOINT (SIGTRAP)

Dyld Error Message:
  Library not loaded: @executable_path/../Frameworks/Ruby.framework/Versions/A/Ruby
  Referenced from: /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/SketchUp
  Reason: no suitable image found.  Did find:
    /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/../Frameworks/Ruby.framework/Versions/A/Ruby: can't map
    /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/../Frameworks/Ruby.framework/Versions/A/Ruby: can't map
    /usr/local/lib/Ruby: not a file
    /usr/lib/Ruby: not a file

Model: MacBookPro7,1, BootROM MBP71.0039.B05, 2 processors, Intel Core 2 Duo, 2.4 GHz, 4 GB, SMC 1.62f5

Не могли бы вы сказать мне, почему?

Update1

Дэн Рэтбун провел несколько тестов и обнаружил следующее

На Win32, когда я пытался получить Sketchup загрузить любой 1.9.x я получил "Entry точка не найдена "для рубина C функция "rb_set_kcode", которая не больше в 1.9.x (было переименовано и Рубин люди не псевдоним старого имя к новому имени.)

В основном Sketchup вызывает rb_set_kcode установить кодировку символов в UTF8 сразу после загрузки Ruby переводчик. Работает нормально для любого Рубин в ветке 1.8.x, но в 1.9.x проект Ruby полностью реинжиниринг кодировка символов, и дал все C функционирует новые идентификаторы, и добавлено много других функций.

Решение для 1.9.x и Sketchup кажется, что Sketchup должен быть "Ruby Version Agile", что означает изменение кодировки парнями Google в Boulder.

1 Ответ

1 голос
/ 26 июля 2010

API уровня C изменился в 1.9.1. Обратите внимание, что пути к драгоценным камням указывают на совместимость API: .../1.8/... для строки 1.8 и .../1.9.1/... для строки 1.9.2.

Это очень затрудняет обновление без перекомпиляции.

Можно require "backports"; это даст вам большинство новых методов 1.9.x, но не новый синтаксис или строковое кодирование.

...