понедельник, 7 марта 2016 г.

[prog] В предверии Mxx_ru 1.6.8: пример того, что умеет MxxRu::externals

Думаю, что вот этим уже можно хвастаться:

gem 'Mxx_ru''>= 1.6.8'
require 'mxx_ru/externals'

MxxRu::arch_externals :asio do |e|
  e.url 'https://github.com/chriskohlhoff/asio/archive/asio-1-11-0.tar.gz' 
  e.sha1 '1be2489015a1e1c7b8666a5a803d984cdec4a12b'

  e.map_dir 'asio/include' => 'sources/asio'
  e.map_file 'asio/src/asio.cpp' => 'sources/asio/src/asio.cpp'
  e.map_file 'asio/src/asio_ssl.cpp' => 'sources/asio/src/asio_ssl.cpp'
end

MxxRu::git_externals :spdlog do |e|
  e.url 'https://github.com/gabime/spdlog.git'
  e.commit 'c6f8f1d'
  e.map 'include/spdlog' => 'sources'
end

MxxRu::arch_externals :eigen do |e|
  e.url 'https://bitbucket.org/eigen/eigen/get/3.2.5.tar.bz2'
  e.sha1 'aa4667f0b134f5688c5dff5f03335d9a19aa9b3d' 

  e.map 'Eigen' => 'sources'
end

MxxRu::arch_externals :so_5 do |e|
  e.url 'https://sourceforge.net/projects/sobjectizer/files/sobjectizer/SObjectizer%20Core%20v.5.5/so-5.5.15.2.zip'
  e.sha1 'd2a4c5e262d8b8ff023f18d93bd742d0b0da4aa1'
 
  e.map 'dev/so_5' => 'sources'

  e.unpacker_option '-q'
end

Что здесь происходит?

Из разных источников берутся исходники четырех разных проектов. После чего нужные мне части этих проектов закидываются внутрь каталога sources.

Первый из нужных мне подпроектов, asio, берется с GitHub-а в виде tar.gz архива. Забираю конкретную версию 1.11.0, что и отражается в имени архива для загрузки.

Второй подпроект, spdlog, так же берется с GitHub-а. Но spdlog пока не имеет зафиксированных тегов, поэтому приходится тащить с GitHub-а ветку master. Но, дабы не зависеть от того, сломается ли совместимость будущих версий в мастере с тем, что использую я, дается указания после клонирования репозитория сделать checkout на конкретный commit. Т.е. если мой код работает с spdlog из конкретного коммита, то он и продолжит работать именно с этой версией spdlog, даже если ветка master на GitHub-е уедет далеко вперед со временем.

Второй подпроект, eigen, вытягивается в виде tar.bz2 архива с BitBucket-а. Мне нужна ветка 3.2.5, ссылку на соответствующий архив я взял с BitBucket-а и зафиксировал у себя в externals.rb.

Четвертый подпроект, so_5, вытягивается в виде zip архива с SourceForge. Ссылка на конкретный архив была взята с соответствующей странички на SourceForge.

Для всех загруженных архивов после скачивания проверяется контрольная сумма (посредством хеша SHA1).

В итоге в подкаталоге sources получается следующее:

sources/
`- asio/
   `- include/
      `- *
   `- src/
      `- asio.cpp, asio_ssl.cpp
`- Eigen/
   `- *
`- so_5/
   `- *
`- spdlog/
   `- *

Версия, на которой это проверялось, находится в Svn-е. Выкатывать релиз версии 1.6.8 буду, вероятно, уже после праздников, 9-го или 10-го числа.

Комментариев нет: