Skip to content

Instantly share code, notes, and snippets.

@hackallcode
Created October 27, 2017 06:38
Show Gist options
  • Save hackallcode/2fbb4293f7d67bb5b6413b8a0b26c729 to your computer and use it in GitHub Desktop.
Save hackallcode/2fbb4293f7d67bb5b6413b8a0b26c729 to your computer and use it in GitHub Desktop.
lab08

Laboratory work VIII

Данная лабораторная работа посвещена изучению средств пакетирования на примере CPack

$ open https://cmake.org/Wiki/CMake:CPackPackageGenerators

Tasks

  • 1. Создать публичный репозиторий с названием lab08 на сервисе GitHub
  • 2. Выполнить инструкцию учебного материала
  • 3. Ознакомиться со ссылками учебного материала
  • 4. Составить отчет и отправить ссылку личным сообщением в Slack

Tutorial

$ export GITHUB_USERNAME=hackallcode
$ export GITHUB_EMAIL=sevvova@inbox.ru
$ alias edit=nano
$ alias gsed=sed # for *-nix system
$ git clone https://github.com/${GITHUB_USERNAME}/lab07 lab08
$ cd lab08
$ git remote remove origin
$ git remote add origin https://github.com/${GITHUB_USERNAME}/lab08

Устанавливаем новые версии TWEAK, PATCH, MINOR, MAJOR.

$ gsed -i '/project(print)/a\
set(PRINT_VERSION_STRING "v${PRINT_VERSION}")
' CMakeLists.txt
$ gsed -i '/project(print)/a\
set(PRINT_VERSION \
\${PRINT_VERSION_MAJOR}.\${PRINT_VERSION_MINOR}.\${PRINT_VERSION_PATCH}.\${PRINT_VERSION_TWEAK})
' CMakeLists.txt
$ gsed -i '/project(print)/a\
set(PRINT_VERSION_TWEAK 0)
' CMakeLists.txt
$ gsed -i '/project(print)/a\
set(PRINT_VERSION_PATCH 0)
' CMakeLists.txt
$ gsed -i '/project(print)/a\ 
set(PRINT_VERSION_MINOR 1)
' CMakeLists.txt
$ gsed -i '/project(print)/a\ 
set(PRINT_VERSION_MAJOR 0)
' CMakeLists.txt

Создаем DESCRIPTION и ChangeLog.md

$ touch DESCRIPTION && edit DESCRIPTION
$ touch ChangeLog.md
$ DATE=`date +"%a %b %d %Y"` cat > ChangeLog.md <<EOF
* ${DATE} ${GITHUB_USERNAME} <${GITHUB_EMAIL}> 0.1.0.0
- Initial RPM release
EOF

Редактируем CPackConfig.cmake

$ cat > CPackConfig.cmake <<EOF
include(InstallRequiredSystemLibraries)
EOF

Устанавливаем значения

$ cat >> CPackConfig.cmake <<EOF
set(CPACK_PACKAGE_CONTACT ${GITHUB_EMAIL})
set(CPACK_PACKAGE_VERSION_MAJOR \${PRINT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR \${PRINT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH \${PRINT_VERSION_PATCH})
set(CPACK_PACKAGE_VERSION_TWEAK \${PRINT_VERSION_TWEAK})
set(CPACK_PACKAGE_VERSION \${PRINT_VERSION})
set(CPACK_PACKAGE_DESCRIPTION_FILE \${CMAKE_CURRENT_SOURCE_DIR}/DESCRIPTION)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "static c++ library for printing")
EOF

Указываем пути к файлам

$ cat >> CPackConfig.cmake <<EOF

set(CPACK_RESOURCE_FILE_LICENSE \${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
set(CPACK_RESOURCE_FILE_README \${CMAKE_CURRENT_SOURCE_DIR}/README.md)
EOF

Устанавливаем параметры

$ cat >> CPackConfig.cmake <<EOF

set(CPACK_RPM_PACKAGE_NAME "print-devel") # Имя архивирования "print-devel"
set(CPACK_RPM_PACKAGE_LICENSE "MIT") # Лицензия MIT
set(CPACK_RPM_PACKAGE_GROUP "print") # Группа "print"
set(CPACK_RPM_PACKAGE_URL "https://github.com/${GITHUB_USERNAME}/lab07") # Страница на doxygen
set(CPACK_RPM_CHANGELOG_FILE \${CMAKE_CURRENT_SOURCE_DIR}/ChangeLog.md) # Путь к логу
set(CPACK_RPM_PACKAGE_RELEASE 1) # Обозначим, что это уже релиз
EOF
$ cat >> CPackConfig.cmake <<EOF

set(CPACK_DEBIAN_PACKAGE_NAME "libprint-dev") # Имя архивирования "libprint-dev"
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://${GITHUB_USERNAME}.github.io/lab07") # Домашняя страница doxygen
set(CPACK_DEBIAN_PACKAGE_PREDEPENDS "cmake >= 3.0") # Версия cmake
set(CPACK_DEBIAN_PACKAGE_RELEASE 1) # Включение архивирования для Debian
EOF
$ cat >> CPackConfig.cmake <<EOF

include(CPack) # Подключаем CPack
EOF
$ cat >> CMakeLists.txt <<EOF

include(CPackConfig.cmake) # Подключаем CPackConfig.cmake
EOF
$ gsed -i 's/lab07/lab08/g' README.md
$ git add .
$ git commit -m"added cpack config"
$ git push origin master
$ travis login --auto
$ travis enable
$ cmake -H. -B_build
$ cmake --build _build # Создаем папку _build
$ cd _build
$ cpack -G "TGZ" # Устанавливаем тип архивирования "TGZ"
$ cd ..
$ cmake -H. -B_build -DCPACK_GENERATOR="TGZ" # Задаем архивирование в tar.gz
$ cmake --build _build --target package # Архивируем
$ mkdir artifacts
$ mv _build/*.tar.gz artifacts
$ tree artifacts
artifacts
├── print-0.1.0.0-Linux.tar.gz
└── screenshot.png

Report

$ cd ~/workspace/labs/
$ export LAB_NUMBER=08
$ git clone https://github.com/tp-labs/lab${LAB_NUMBER} tasks/lab${LAB_NUMBER}
$ mkdir reports/lab${LAB_NUMBER}
$ cp tasks/lab${LAB_NUMBER}/README.md reports/lab${LAB_NUMBER}/REPORT.md
$ cd reports/lab${LAB_NUMBER}
$ edit REPORT.md
$ gistup -m "lab${LAB_NUMBER}"

Links

Copyright (c) 2017 Братья Вершинины
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment