четверг, 3 марта 2016 г.

[prog] Наметки самодельной альтернативы CMake-овскому ExternalProject_Add

В процессе воплощения в жизнь ранее описанных соображений что-то начинает вырисовываться. Вместо того, чтобы писать на CMake вот так:

ExternalProject_add(so_5_prj
  SVN_REPOSITORY http://svn.code.sf.net/p/sobjectizer/repo/tags/so_5/5.5.15.2/dev
  CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
  INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
)

Хочется писать на Ruby как-то вот так:

MxxRu::svn_externals :so_5 do |ext|
   ext.url 'http://svn.code.sf.net/p/sobjectizer/repo/tags/so_5/5.5.15.2' 
   ext.map 'dev/so_5' => 'dev'
end

Ну или даже вот так:

MxxRu::svn_externals :so_5 do |ext|
   ext.url 'http://svn.code.sf.net/p/sobjectizer/repo/tags/so_5/5.5.15.2' 
   ext.option '-q'
   ext.option '--native-eol''LF'
   ext.map 'dev/so_5' => 'dev'
   ext.map 'dev/test/so_5' => 'test'
   ext.map 'dev/samples/so_5' => 'samples'
end

На данный момент уже вполне себе дышит работа с Git, Hg и Svn. Нужно еще подумать на счет реализации дополнительных опций, вроде :clober и :reload. И можно будет релизить новую версию Mxx_ru с поддержкой такого вот подхода к получению зависимостей из внешних источников. Ну а потом на очереди будет загрузка (http/https, ftp) архивов (tar.gz, tar.bz2, tar.xz, zip, 7z). Там, глядишь, и без пакетного менеджера для C++ можно будет прожить еще какое-то время :)

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