SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
1
DIVIDE AND MANAGE WITHDIVIDE AND MANAGE WITH
CONAN.IOCONAN.IO
Pavel.Filonov@kaspersky.com
2
C++ PROVIDES CONTROLC++ PROVIDES CONTROL
Example: parameter passing
f(X)1.
f(X&)2.
f(const X&)3.
f(X*)4.
f(const X*)5.
f(X&&)6.
template<class T> f(T&&)7.
f(owner<X*>)8.
f(not_null<X*>)9.
f(unique_ptr<X>)10.
f(shared_ptr<X>)11.
3
C++ PROVIDES PORTABILITYC++ PROVIDES PORTABILITY
But how we could build all of this!
4
C++ BUILD TOOLSC++ BUILD TOOLS
CMake
qmake
bazel
ninja
meson
maiken
Scons
...
Ok. But who will manage our dependencies?
5
C++ PACKAGE MANAGERSC++ PACKAGE MANAGERS
Linux
apt, yum, portage, pacman, ...
Macos
MacPorts, Fink, Homebrew, ...
Windows
Nuget, Chocolatey
Cross-plarform
cpm, hunter, ExternalProject_Add
<self-written scripts on python, perl, bash, cmake>
biicode
conan
6
"HELLO, WORLD" IN TDD STYLE"HELLO, WORLD" IN TDD STYLE
hello.h
#ifndef HELLO_H
#define HELLO_H
#include <ostream>
std::ostream& hello(std::ostream&);
#endif
test_hello.cpp
void test_hello() {
std::stringstream ss;
hello(ss);
assert("Hello, world" == ss.str());
}
7
BUILD CONFIGURATIONBUILD CONFIGURATION
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(hello CXX)
set(${PROJECT_NAME}_SOURCES
${CMAKE_SOURCE_DIR}/src/hello.cpp
)
set(${PROJECT_NAME}_HEADERS
${CMAKE_SOURCE_DIR}/include/hello.h
)
include_directories(include)
add_executable(${PROJECT_NAME}
${CMAKE_SOURCE_DIR}/src/main.cpp
${${PROJECT_NAME}_SOURCES}
${${PROJECT_NAME}_HEADERS}
)
enable_testing()
add_subdirectory(test)
TRAVIS CI CONFIGURATIONTRAVIS CI CONFIGURATION
.travis.yml
sudo: required
dist: trusty
script:
- mkdir build && cd build
- cmake ..
- cmake --build .
- ctest
matrix:
include:
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.9
env: CXX=g++-4.9
- os: linux
addons:
8
packages:
- g++-5
env: CXX=g++-5
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-6
env: CXX=g++-6
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
9
PROFIT!PROFIT!
10
APPVEYOR CONFIGURATIONAPPVEYOR CONFIGURATION
appveyor.yml
build:
build_script:
- mkdir build && cd build
- cmake -G "%TOOLCHAIN_VERSION%" ..
- cmake --build . --config release
test_script:
- cmd: ctest -C release -VV
environment:
matrix:
- TOOLCHAIN_VERSION: Visual Studio 14 2015
- TOOLCHAIN_VERSION: Visual Studio 12 2013
- TOOLCHAIN_VERSION: Visual Studio 11 2012
11
WE NEED MORE BUILDSWE NEED MORE BUILDS
12
NOW WE WANT TO USE GOOGLETESTNOW WE WANT TO USE GOOGLETEST
#include <sstream>
#include <iostream>
#include <gtest/gtest.h>
#include <hello.h>
TEST(hello, simple) {
std::stringstream ss;
hello(ss);
ASSERT_EQ("Hello, world", ss.str());
}
But how build it on CI?
13
HERE COMES CONANHERE COMES CONAN
pip install conan
conanfile.txt
[requires]
gtest/1.7.0@lasote/stable
[generators]
cmake
CMakeLists.txt
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
14
INSTALL DEPENDENCIESINSTALL DEPENDENCIES
$conan install
Requirements
gtest/1.7.0@lasote/stable from conan.io
Packages
gtest/1.7.0@lasote/stable:ee666ea2ce
gtest/1.7.0@lasote/stable: Installing package ee666ea2ce
gtest/1.7.0@lasote/stable: Looking for package ee666ea2ce in remote 'conan.io'
Downloading conan_package.tgz
[==================================================]
Downloading conanmanifest.txt
[==================================================]
Downloading conaninfo.txt
[==================================================]
gtest/1.7.0@lasote/stable: Package installed ee666ea2ce
PROJECT: Generated cmake created conanbuildinfo.cmake
PROJECT: Generated conaninfo.txt
15
IF NO BINARY PACKAGE FOUNDIF NO BINARY PACKAGE FOUND
$conan install --build=missing
gtest/1.7.0: WARN: Binary for ad55876aa not in remote: Package not found!
gtest/1.7.0: Building your package in ~/.conan/data/gtest/1.7.0/lasote
gtest/1.7.0: Configuring sources in ~/.conan/data/gtest/1.7.0/lasote/stable/
[==================================================]
Unzipping 4.8 MB, this can take a while
gtest/1.7.0: Copying sources to build folder
gtest/1.7.0: Generated cmake created conanbuildinfo.cmake
-- The C compiler identification is GNU 6.1.1
-- The CXX compiler identification is GNU 6.1.1
...
gtest/1.7.0 package(): Copied 20 '.h' files
gtest/1.7.0 package(): Copied 2 '.so' files: libgtest_main.so, libgtest.so
gtest/1.7.0: Package 'ad55876aa' created
PROJECT: Generated cmake created conanbuildinfo.cmake
PROJECT: Generated conaninfo.txt
16
USING CONAN ON CIUSING CONAN ON CI
.travis.yml
before_install:
- sudo pip install conan
install:
- conan install --build=missing
appveyor.yml
install:
- set PATH=%PATH%;%PYTHON%/Scripts/
- pip.exe install conan # It install conan too
- conan install --build=missing
17
CONAN REPOSITORY PACKAGE LISTCONAN REPOSITORY PACKAGE LIST
18
HOW TO BUILD OWN PACKAGEHOW TO BUILD OWN PACKAGE
conanfile.py
class LibrabbitmqConan(ConanFile):
name = "librabbitmq"
version = "0.8.1"
def source(self):
self.run("git clone https://github.com/alanxz/rabbitmq-c.git")
def build(self):
cmake = CMake(self.settings)
self.run("cmake -DENABLE_SSL_SUPPORT=OFF "
"%s/rabbitmq-c %s" % (self.conanfile_directory,
cmake.command_line))
self.run("cmake --build . %s" % cmake.build_config)
def package(self):
self.copy("*.h", dst="include", src="rabbitmq-c/librabbitmq")
conan export demo/testing
19
CONAN PRIVATE REPOSITORYCONAN PRIVATE REPOSITORY
Get sources
$ git clone https://github.com/conan-io/conan.git
$ cd conan
$ git checkout master
$ pip install -r conans/requirements.txt
$ pip install -r conans/requirements_server.txt
$ pip install gunicorn
Run server
gunicorn -b 0.0.0.0:9300 -w 4 -t 120 
conans.server.server_launcher:app
Upload packages
$ conan upload librabbitmq/0.8.1@demo/testing
20
CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS
build.py
from conan.packager import ConanMultiPackager
if __name__ == "__main__":
builder = ConanMultiPackager()
builder.add_common_builds(pure_c=True)
builder.run()
CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS
.travis.yml
os: linux
services:
- docker
sudo: required
language: python
env:
matrix:
- CONAN_GCC_VERSIONS=4.6 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=4.8 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=4.9 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=5.2 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=5.3 CONAN_USE_DOCKER=1
global:
- CONAN_UPLOAD=1
- CONAN_REFERENCE="librabbitmq/0.8.1"
- CONAN_USERNAME="filonovpv"
- CONAN_CHANNEL="testing"
- CONAN_TOTAL_PAGES=1
- CONAN_CURRENT_PAGE=1 21
osx_image: xcode7.3 # apple-clang 7.3
language: generic
env:
- os: osx
osx_image: xcode7.1 # apple-clang 7.0
language: generic
env:
- os: osx
osx_image: xcode6.4 # apple-clang 6.1
language: generic
env:
- os: osx
osx_image: xcode6.2 # apple-clang 6.0
language: generic
env:
CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS
appveyor.yml
build: false
environment:
PYTHON: "C:Python27"
PYTHON_VERSION: "2.7.8"
PYTHON_ARCH: "32"
CONAN_UPLOAD: 1
CONAN_REFERENCE: "librabbitmq/0.8.1"
CONAN_USERNAME: "filonovpv"
CONAN_CHANNEL: "testing"
CONAN_TOTAL_PAGES: 4
matrix:
- CONAN_CURRENT_PAGE: 1
- CONAN_CURRENT_PAGE: 2
- CONAN_CURRENT_PAGE: 3
- CONAN_CURRENT_PAGE: 4
install:
# Workaround for CMake not wanting sh.exe on PATH for MinGW
- set PATH=%PATH:C:Program FilesGitusrbin;=%
22
test_script:
- python build.py
CREATED PACKAGESCREATED PACKAGES
24
CREATED PACKAGESCREATED PACKAGES
25
CREATED PACKAGESCREATED PACKAGES
26
CONCLUSIONSCONCLUSIONS
Positive points
build scripts on python
public repository
private repository
build matrix
Negative points
build scripts on python
small number of packages in the official repository
small amount of documentation
27
REFERENCESREFERENCES
Conan - C/C++ package manager - ,1.
conan.io c++ package manager demo with sfml -2.
CppCon 2014: Lightning Talks - Boris Kolpackov "C++
Package Manager" -
3.
Diego Rodriguez-Losada: Biicode, a C/C++ dependency
manager with a hosting service -
4.
Diego Rodriguez-Losada: Why in heaven is there no
dependency management for C++? -
5.
Arne Mertz, Using Conan for Third Party Libraries -6.
Programming C++ With The 4 Cs: Clang, Cmake, Clion
And Conan -
7.
Site Source
Video
Video
Video
Video
Blogpost
Blogpost
28
THANK YOU FOR YOUR ATTENTION!THANK YOU FOR YOUR ATTENTION!
Contacts:
email Pavel.Filonov@kaspersky.com
github
twitter @filonovpv
sdukshis

Contenu connexe

Tendances

GoLang & GoatCore
GoLang & GoatCore GoLang & GoatCore
GoLang & GoatCore
Sebastian Pożoga
 
Connecting to the network
Connecting to the networkConnecting to the network
Connecting to the network
Mu Chun Wang
 
Lamp configuration u buntu 10.04
Lamp configuration   u buntu 10.04Lamp configuration   u buntu 10.04
Lamp configuration u buntu 10.04
mikehie
 
nginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよnginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよ
mamoru tateoka
 
Openstack kilo installation using rdo
Openstack kilo installation using rdoOpenstack kilo installation using rdo
Openstack kilo installation using rdo
Narasimha sreeram
 

Tendances (20)

Building a network emulator with Docker and Open vSwitch
Building a network emulator with Docker and Open vSwitchBuilding a network emulator with Docker and Open vSwitch
Building a network emulator with Docker and Open vSwitch
 
[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺
 
Service Discovery for Continuous Delivery with Docker
Service Discovery for Continuous Delivery with DockerService Discovery for Continuous Delivery with Docker
Service Discovery for Continuous Delivery with Docker
 
DockerCoreNet
DockerCoreNetDockerCoreNet
DockerCoreNet
 
GoLang & GoatCore
GoLang & GoatCore GoLang & GoatCore
GoLang & GoatCore
 
Connecting to the network
Connecting to the networkConnecting to the network
Connecting to the network
 
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
 
Lamp configuration u buntu 10.04
Lamp configuration   u buntu 10.04Lamp configuration   u buntu 10.04
Lamp configuration u buntu 10.04
 
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
 
DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)
 
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment
 
nginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよnginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよ
 
OpenCSW - What is the project about?
OpenCSW - What is the project about?OpenCSW - What is the project about?
OpenCSW - What is the project about?
 
Linux administration ii-parti
Linux administration ii-partiLinux administration ii-parti
Linux administration ii-parti
 
Advanced Replication
Advanced ReplicationAdvanced Replication
Advanced Replication
 
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
 
All bugfixes are incompatibilities
All bugfixes are incompatibilitiesAll bugfixes are incompatibilities
All bugfixes are incompatibilities
 
Openstack kilo installation using rdo
Openstack kilo installation using rdoOpenstack kilo installation using rdo
Openstack kilo installation using rdo
 

En vedette

Unit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by ExampleUnit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by Example
Benjamin Eberlei
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
Platonov Sergey
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
yaevents
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
 

En vedette (20)

Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit Testing
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексией
 
Managing modular software for your nu get, c++ and java development
Managing modular software for your nu get, c++ and java developmentManaging modular software for your nu get, c++ and java development
Managing modular software for your nu get, c++ and java development
 
Unit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by ExampleUnit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by Example
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
 
Василий Сорокин, “Google C++ Mocking and Test Frameworks”
Василий Сорокин, “Google C++ Mocking and Test Frameworks”Василий Сорокин, “Google C++ Mocking and Test Frameworks”
Василий Сорокин, “Google C++ Mocking and Test Frameworks”
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансы
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
Practical unit testing in c & c++
Practical unit testing in c & c++Practical unit testing in c & c++
Practical unit testing in c & c++
 
Clean Unit Test Patterns
Clean Unit Test PatternsClean Unit Test Patterns
Clean Unit Test Patterns
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
 
Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 

Similaire à Павел Филонов, Разделяй и управляй вместе с Conan.io

Node.js basics
Node.js basicsNode.js basics
Node.js basics
Ben Lin
 
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdfKubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Srinivasa Rao
 
Domino9on centos6
Domino9on centos6Domino9on centos6
Domino9on centos6
a8us
 

Similaire à Павел Филонов, Разделяй и управляй вместе с Conan.io (20)

Conan a C/C++ Package Manager
Conan a C/C++ Package ManagerConan a C/C++ Package Manager
Conan a C/C++ Package Manager
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)
 
Vagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopVagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptop
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Kickstart
KickstartKickstart
Kickstart
 
青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes 青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes
 
Docker Compose and Panamax - ContainerDays Boston - June 2015
Docker Compose and Panamax - ContainerDays Boston - June 2015Docker Compose and Panamax - ContainerDays Boston - June 2015
Docker Compose and Panamax - ContainerDays Boston - June 2015
 
Zenoss: Buildout
Zenoss: BuildoutZenoss: Buildout
Zenoss: Buildout
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on Docker
 
Node.js basics
Node.js basicsNode.js basics
Node.js basics
 
RDO-Packstack Workshop
RDO-Packstack Workshop RDO-Packstack Workshop
RDO-Packstack Workshop
 
Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36
 
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdfKubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
 
Domino9on centos6
Domino9on centos6Domino9on centos6
Domino9on centos6
 
Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
 
Dependency Management in C++ (NDC TechTown 2021)
Dependency Management in C++ (NDC TechTown 2021)Dependency Management in C++ (NDC TechTown 2021)
Dependency Management in C++ (NDC TechTown 2021)
 
Continuous delivery with docker
Continuous delivery with dockerContinuous delivery with docker
Continuous delivery with docker
 
Linux Containers From Scratch: Makfile MicroVPS
Linux Containers From Scratch: Makfile MicroVPSLinux Containers From Scratch: Makfile MicroVPS
Linux Containers From Scratch: Makfile MicroVPS
 
Docker
DockerDocker
Docker
 
Install Cuckoo on Mac OS X
Install Cuckoo on Mac OS XInstall Cuckoo on Mac OS X
Install Cuckoo on Mac OS X
 

Plus de Sergey Platonov

Plus de Sergey Platonov (20)

Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhere
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STL
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
Алексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляАлексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуля
 
Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++
 
Дмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репортДмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репорт
 

Dernier

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Dernier (20)

Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 

Павел Филонов, Разделяй и управляй вместе с Conan.io

  • 1. 1 DIVIDE AND MANAGE WITHDIVIDE AND MANAGE WITH CONAN.IOCONAN.IO Pavel.Filonov@kaspersky.com
  • 2. 2 C++ PROVIDES CONTROLC++ PROVIDES CONTROL Example: parameter passing f(X)1. f(X&)2. f(const X&)3. f(X*)4. f(const X*)5. f(X&&)6. template<class T> f(T&&)7. f(owner<X*>)8. f(not_null<X*>)9. f(unique_ptr<X>)10. f(shared_ptr<X>)11.
  • 3. 3 C++ PROVIDES PORTABILITYC++ PROVIDES PORTABILITY But how we could build all of this!
  • 4. 4 C++ BUILD TOOLSC++ BUILD TOOLS CMake qmake bazel ninja meson maiken Scons ... Ok. But who will manage our dependencies?
  • 5. 5 C++ PACKAGE MANAGERSC++ PACKAGE MANAGERS Linux apt, yum, portage, pacman, ... Macos MacPorts, Fink, Homebrew, ... Windows Nuget, Chocolatey Cross-plarform cpm, hunter, ExternalProject_Add <self-written scripts on python, perl, bash, cmake> biicode conan
  • 6. 6 "HELLO, WORLD" IN TDD STYLE"HELLO, WORLD" IN TDD STYLE hello.h #ifndef HELLO_H #define HELLO_H #include <ostream> std::ostream& hello(std::ostream&); #endif test_hello.cpp void test_hello() { std::stringstream ss; hello(ss); assert("Hello, world" == ss.str()); }
  • 7. 7 BUILD CONFIGURATIONBUILD CONFIGURATION CMakeLists.txt cmake_minimum_required(VERSION 2.8.12) project(hello CXX) set(${PROJECT_NAME}_SOURCES ${CMAKE_SOURCE_DIR}/src/hello.cpp ) set(${PROJECT_NAME}_HEADERS ${CMAKE_SOURCE_DIR}/include/hello.h ) include_directories(include) add_executable(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/src/main.cpp ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS} ) enable_testing() add_subdirectory(test)
  • 8. TRAVIS CI CONFIGURATIONTRAVIS CI CONFIGURATION .travis.yml sudo: required dist: trusty script: - mkdir build && cd build - cmake .. - cmake --build . - ctest matrix: include: - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.9 env: CXX=g++-4.9 - os: linux addons: 8
  • 9. packages: - g++-5 env: CXX=g++-5 - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-6 env: CXX=g++-6 - os: linux addons: apt: sources: - ubuntu-toolchain-r-test
  • 11. 10 APPVEYOR CONFIGURATIONAPPVEYOR CONFIGURATION appveyor.yml build: build_script: - mkdir build && cd build - cmake -G "%TOOLCHAIN_VERSION%" .. - cmake --build . --config release test_script: - cmd: ctest -C release -VV environment: matrix: - TOOLCHAIN_VERSION: Visual Studio 14 2015 - TOOLCHAIN_VERSION: Visual Studio 12 2013 - TOOLCHAIN_VERSION: Visual Studio 11 2012
  • 12. 11 WE NEED MORE BUILDSWE NEED MORE BUILDS
  • 13. 12 NOW WE WANT TO USE GOOGLETESTNOW WE WANT TO USE GOOGLETEST #include <sstream> #include <iostream> #include <gtest/gtest.h> #include <hello.h> TEST(hello, simple) { std::stringstream ss; hello(ss); ASSERT_EQ("Hello, world", ss.str()); } But how build it on CI?
  • 14. 13 HERE COMES CONANHERE COMES CONAN pip install conan conanfile.txt [requires] gtest/1.7.0@lasote/stable [generators] cmake CMakeLists.txt include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
  • 15. 14 INSTALL DEPENDENCIESINSTALL DEPENDENCIES $conan install Requirements gtest/1.7.0@lasote/stable from conan.io Packages gtest/1.7.0@lasote/stable:ee666ea2ce gtest/1.7.0@lasote/stable: Installing package ee666ea2ce gtest/1.7.0@lasote/stable: Looking for package ee666ea2ce in remote 'conan.io' Downloading conan_package.tgz [==================================================] Downloading conanmanifest.txt [==================================================] Downloading conaninfo.txt [==================================================] gtest/1.7.0@lasote/stable: Package installed ee666ea2ce PROJECT: Generated cmake created conanbuildinfo.cmake PROJECT: Generated conaninfo.txt
  • 16. 15 IF NO BINARY PACKAGE FOUNDIF NO BINARY PACKAGE FOUND $conan install --build=missing gtest/1.7.0: WARN: Binary for ad55876aa not in remote: Package not found! gtest/1.7.0: Building your package in ~/.conan/data/gtest/1.7.0/lasote gtest/1.7.0: Configuring sources in ~/.conan/data/gtest/1.7.0/lasote/stable/ [==================================================] Unzipping 4.8 MB, this can take a while gtest/1.7.0: Copying sources to build folder gtest/1.7.0: Generated cmake created conanbuildinfo.cmake -- The C compiler identification is GNU 6.1.1 -- The CXX compiler identification is GNU 6.1.1 ... gtest/1.7.0 package(): Copied 20 '.h' files gtest/1.7.0 package(): Copied 2 '.so' files: libgtest_main.so, libgtest.so gtest/1.7.0: Package 'ad55876aa' created PROJECT: Generated cmake created conanbuildinfo.cmake PROJECT: Generated conaninfo.txt
  • 17. 16 USING CONAN ON CIUSING CONAN ON CI .travis.yml before_install: - sudo pip install conan install: - conan install --build=missing appveyor.yml install: - set PATH=%PATH%;%PYTHON%/Scripts/ - pip.exe install conan # It install conan too - conan install --build=missing
  • 18. 17 CONAN REPOSITORY PACKAGE LISTCONAN REPOSITORY PACKAGE LIST
  • 19. 18 HOW TO BUILD OWN PACKAGEHOW TO BUILD OWN PACKAGE conanfile.py class LibrabbitmqConan(ConanFile): name = "librabbitmq" version = "0.8.1" def source(self): self.run("git clone https://github.com/alanxz/rabbitmq-c.git") def build(self): cmake = CMake(self.settings) self.run("cmake -DENABLE_SSL_SUPPORT=OFF " "%s/rabbitmq-c %s" % (self.conanfile_directory, cmake.command_line)) self.run("cmake --build . %s" % cmake.build_config) def package(self): self.copy("*.h", dst="include", src="rabbitmq-c/librabbitmq") conan export demo/testing
  • 20. 19 CONAN PRIVATE REPOSITORYCONAN PRIVATE REPOSITORY Get sources $ git clone https://github.com/conan-io/conan.git $ cd conan $ git checkout master $ pip install -r conans/requirements.txt $ pip install -r conans/requirements_server.txt $ pip install gunicorn Run server gunicorn -b 0.0.0.0:9300 -w 4 -t 120 conans.server.server_launcher:app Upload packages $ conan upload librabbitmq/0.8.1@demo/testing
  • 21. 20 CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS build.py from conan.packager import ConanMultiPackager if __name__ == "__main__": builder = ConanMultiPackager() builder.add_common_builds(pure_c=True) builder.run()
  • 22. CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS .travis.yml os: linux services: - docker sudo: required language: python env: matrix: - CONAN_GCC_VERSIONS=4.6 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=4.8 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=4.9 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=5.2 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=5.3 CONAN_USE_DOCKER=1 global: - CONAN_UPLOAD=1 - CONAN_REFERENCE="librabbitmq/0.8.1" - CONAN_USERNAME="filonovpv" - CONAN_CHANNEL="testing" - CONAN_TOTAL_PAGES=1 - CONAN_CURRENT_PAGE=1 21
  • 23. osx_image: xcode7.3 # apple-clang 7.3 language: generic env: - os: osx osx_image: xcode7.1 # apple-clang 7.0 language: generic env: - os: osx osx_image: xcode6.4 # apple-clang 6.1 language: generic env: - os: osx osx_image: xcode6.2 # apple-clang 6.0 language: generic env:
  • 24. CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS appveyor.yml build: false environment: PYTHON: "C:Python27" PYTHON_VERSION: "2.7.8" PYTHON_ARCH: "32" CONAN_UPLOAD: 1 CONAN_REFERENCE: "librabbitmq/0.8.1" CONAN_USERNAME: "filonovpv" CONAN_CHANNEL: "testing" CONAN_TOTAL_PAGES: 4 matrix: - CONAN_CURRENT_PAGE: 1 - CONAN_CURRENT_PAGE: 2 - CONAN_CURRENT_PAGE: 3 - CONAN_CURRENT_PAGE: 4 install: # Workaround for CMake not wanting sh.exe on PATH for MinGW - set PATH=%PATH:C:Program FilesGitusrbin;=% 22
  • 29. 26 CONCLUSIONSCONCLUSIONS Positive points build scripts on python public repository private repository build matrix Negative points build scripts on python small number of packages in the official repository small amount of documentation
  • 30. 27 REFERENCESREFERENCES Conan - C/C++ package manager - ,1. conan.io c++ package manager demo with sfml -2. CppCon 2014: Lightning Talks - Boris Kolpackov "C++ Package Manager" - 3. Diego Rodriguez-Losada: Biicode, a C/C++ dependency manager with a hosting service - 4. Diego Rodriguez-Losada: Why in heaven is there no dependency management for C++? - 5. Arne Mertz, Using Conan for Third Party Libraries -6. Programming C++ With The 4 Cs: Clang, Cmake, Clion And Conan - 7. Site Source Video Video Video Video Blogpost Blogpost
  • 31. 28 THANK YOU FOR YOUR ATTENTION!THANK YOU FOR YOUR ATTENTION! Contacts: email Pavel.Filonov@kaspersky.com github twitter @filonovpv sdukshis