SlideShare una empresa de Scribd logo
1 de 44
PACKAGING OPEN-SOURCE
LIBRARIES WITH CONAN.IO
Konstantin Ivlev
+
+
+
+
+
About me
Konstantin Ivlev
Maintainer of Bincrafters community
Consultant in JFrog, conan developer
Tomsk, Russian Federation
corehard.by
01
CoreHard. Packaging open-source libraries with conan.io
WHAT IS CONAN?
02
CoreHard. Packaging open-source libraries with Conan
● FOSS (MIT License)
● Integration with Visual Studio, CMake, XCode, etc.
● Distributed
● Pre-built packages or build from source
● Cross-platform
● Supports Cross-Compilation
● 100+ contributors, 2K+⭐ (GitHub)
● Used in production by hundreds of companies
USING CONAN
● Let’s write some GUI application using wxWidgets
● Declare dependencies
● Fetch packages
● Build
● Profit
03
CoreHard. Packaging open-source libraries with conan.io
04
CoreHard. Packaging open-source libraries with conan.io
#include "wx/wx.h"
class HelloWorldApp : public wxApp {
public:
bool OnInit() {
wxFrame *frame = new wxFrame((wxFrame*) NULL, -1,
_T("use wxWidgets from Conan.io"));
frame->CreateStatusBar();
frame->SetStatusText(_T("Hello World"));
frame->Show(true);
SetTopWindow(frame);
return true;
}
};
DECLARE_APP(HelloWorldApp)
IMPLEMENT_APP(HelloWorldApp)
CONANFILE.TXT
[requires]
wxwidgets/3.1.1@bincrafters/stable
[generators]
cmake
05
CoreHard. Packaging open-source libraries with conan.io
CONAN IN ACTION
$ conan install .
wxwidgets/3.1.1@bincrafters/stable: Not found in local cache, looking in remotes...
wxwidgets/3.1.1@bincrafters/stable: Trying with 'conan-center'...
wxwidgets/3.1.1@bincrafters/stable: Trying with 'bincrafters'...
Downloading conanmanifest.txt
[==================================================] 166B/166B
Downloading conanfile.py
[==================================================] 16.8KB/16.8KB
Downloading conan_export.tgz
[==================================================] 760B/760B
Decompressing conan_export.tgz: 100%|██████████|
libpng/1.6.34@bincrafters/stable: Not found in local cache, looking in remotes...
06
CoreHard. Packaging open-source libraries with conan.io
CONANBUILDINFO.CMAKE
07
CoreHard. Packaging open-source libraries with conan.io
● Include directories
● Library directories
● Libraries
● Compile definitions
CONANBUILDINFO.CMAKE
08
CoreHard. Packaging open-source libraries with conan.io
$ cat conanbuildinfo.cmake
set(CONAN_WXWIDGETS_ROOT
“C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce")
set(CONAN_INCLUDE_DIRS_WXWIDGETS
"C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce/include"
"C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce/include/msvc")
set(CONAN_LIB_DIRS_WXWIDGETS
"C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce/lib")
set(CONAN_LIBS_WXWIDGETS wx_gtk2u_xrc-3.1 wx_gtk2u_webview-3.1)
set(CONAN_COMPILE_DEFINITIONS_WXWIDGETS "wxUSE_GUI=1")
cmake_minimum_required(VERSION 3.1)
project(UseWxWidgetsFromConan CXX)
include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
add_executable(${PROJECT_NAME} WIN32 main.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE
CONAN_PKG::wxwidgets)
CONAN_BASIC_SETUP
09
CoreHard. Packaging open-source libraries with conan.io
$ cmake . -G "Visual Studio 15 2017 Win64"
$ cmake --build . --config Release
NOW BUILD AND RUN
0A
CoreHard. Packaging open-source libraries with conan.io
CloudIn-house
CONAN IS DECENTRALIZED
0B
CoreHard. Packaging open-source libraries with conan.io
conan_server
Client
Developer machine / CI
Servers
(artifact storage)
Client
bincrafters conan-community
conan-center
REMOTES: CONAN-CENTER
0C
CoreHard. Packaging open-source libraries with conan.io
● Default remote
● Official, carefully-moderated repository
● Packages from library authors
● Currently ~120 packages available
● Goal is to double amount by the end of 2018
https://bintray.com/conan/conan-center
REMOTES: CONAN-COMMUNITY
0D
CoreHard. Packaging open-source libraries with conan.io
● Supported by conan developers
● Incubator for conan-center inclusion
● + 30 additional packages
● Foundational packages (zlib, OpenSSL, boost, etc.)
https://github.com/conan-community/community
REMOTES: BINCRAFTERS
0E
CoreHard. Packaging open-source libraries with conan.io
● Supported by OSS community
● Incubator for conan-center inclusion
● +200 additional packages
● Accept your packages for support
● Complex libraries (Qt, wxWidgets, Wt++,
ffmpeg, ImageMagick, SDL2, CppRestSDK,
ZeroMQ, etc.)
https://github.com/bincrafters/community
ARTIFACTORY CE FOR C++
0F
CoreHard. Packaging open-source libraries with conan.io
https://conan.io/downloads
● Free (CE=Community Edition), also for commercial
purposes
● Run your own package server, in-house
● Easy to install
● Scalability
● Web UI
● Permissions management
● Concurrency
SEARCHING FOR SOMETHING
$ conan search Qt* -r all
Existing package recipes:
Remote 'bincrafters':
Qt/5.11.0@bincrafters/stable
Qt/5.11.1@bincrafters/stable
Qt/5.11.2@bincrafters/stable
10
CoreHard. Packaging open-source libraries with conan.io
CREATING A PACKAGE
● How to get my own library packaged?
● How to write recipe?
● How to build it for all configurations?
● How to check packages are good?
11
CoreHard. Packaging open-source libraries with conan.io
CONANFILE.PY
Methods:
● source( )
● build( )
● package( )
● package_info( )
● package_id( )
12
CoreHard. Packaging open-source libraries with conan.io
Attributes:
● name
● version
● settings
● options
● default_options
EXAMPLE OF CONANFILE.PY (GSL)
class GslMicrosoftConan(ConanFile):
name = "gsl_microsoft"
version = "2.0.0"
description = "Functions use by the C++ Core Guideline"
url = "https://github.com/bincrafters/conan-gsl_microsoft"
license = "MIT"
exports = ["LICENSE.md"]
no_copy_source = True
_source_subfolder = "source_subfolder"
13
CoreHard. Packaging open-source libraries with conan.io
EXAMPLE OF CONANFILE.PY (GSL)
def source(self):
tools.get("https://github.com/Microsoft/GSL/archive/v2.0.0.zip")
extracted_dir = "GSL-" + self.version
os.rename(extracted_dir, self._source_subfolder)
14
CoreHard. Packaging open-source libraries with conan.io
EXAMPLE OF CONANFILE.PY (GSL)
def package(self):
include_folder = os.path.join(self._source_subfolder, "include")
self.copy("LICENSE", dst="licenses", src=self._source_subfolder)
self.copy(pattern="*", dst="include", src=include_folder)
15
CoreHard. Packaging open-source libraries with conan.io
user folder
conan cache
● source
● build
● package
● package_info
● test package
CONAN CREATE
16
CoreHard. Packaging open-source libraries with conan.io
source()
build()
package()
Different for
every binary
configuration
package_info()
Common to all
binaries
test_package:
consuming
project to
check OK
conanbuildinfo.cmake
CHALLENGE: VARIOUS CONFIGURATIONS
● OS (Windows/Linux/macOS)
● Architecture (x86, x86_64)
● Compilers (MSVC, GCC, Clang)
● Release and Debug
● Shared and Static
● Hard to build everything on single machine
● Need to automate somehow
17
CoreHard. Packaging open-source libraries with conan.io
CI: OSS
18
CoreHard. Packaging open-source libraries with conan.io
Linux: gcc/clang
OSX: apple-clang
Multiple versions, archs
Windows: MSVC/MinGW
Multiple versions, archs
Users “git push” to repos
with a “conanfile.py” recipe
bincrafters
conan-center
revision of packages
conan-docker-
tools
conan
package
tools
>100 binaries for each
package recipe
CI: In-house
19
CoreHard. Packaging open-source libraries with conan.io
Users “git push” to repos
with a “conanfile.py” recipe
CI: TRAVIS AND APPVEYOR
● Register via GitHub account
● Add .travis.yml and appveyor.yml
● Consider conan new command
● Or copy from bincrafters-templates
1A
CoreHard. Packaging open-source libraries with conan.io
CPT: CONAN PACKAGE TOOLS
1B
CoreHard. Packaging open-source libraries with conan.io
https://github.com/conan-io/conan-package-tools
$ pip install conan-package-tools
$ pip install bincrafters-package-tools
● build packages for all possible
configurations
● run build, test and upload
● integration with various CI systems
● python module
CDT: CONAN DOCKER TOOLS
1C
CoreHard. Packaging open-source libraries with conan.io
https://github.com/conan-io/conan-docker-tools
https://hub.docker.com/r/conanio/
● various compilers
● conan pre-installed
● x86, x64 and ARM images
● Recently Windows images
were added
CHALLENGE: VARIOUS BUILD SYSTEMS
● CMake
● GNU autotools
● Plain makefiles
● Visual Studio projects
● Something else specially invented
1D
CoreHard. Packaging open-source libraries with conan.io
BUILD HELPERS
● CMake
● AutoToolsBuildEnvironment
● MSBuild
1E
CoreHard. Packaging open-source libraries with conan.io
BUILD HELPERS: CMake
def _configure_cmake(self):
cmake = CMake(self)
cmake.definition['ENABLE_LIBASTRAL'] = self.options.libastral
cmake.configure(build_dir=self._build_subfolder)
return cmake
def build(self):
cmake = self._configure_cmake()
cmake.build()
def package(self):
cmake = self._configure_cmake()
cmake.install()
1F
CoreHard. Packaging open-source libraries with conan.io
BUILD HELPERS: AutoToolsBuildEnvironment
def build(self):
configure_args = []
if self.options.shared:
configure_args.extend(['--disable-static', '--enable-shared'])
else:
configure_args.extend(['--disable-shared', '--enable-static'])
env_build = AutoToolsBuildEnvironment(self)
env_build.configure(args=configure_args)
env_build.make()
env_build.install()
20
CoreHard. Packaging open-source libraries with conan.io
BUILD HELPERS: MSBuild
def build(self):
sln = 'libtheora_dynamic.sln' if self.options.shared else 
'libtheora_static.sln'
msbuild = MSBuild(self)
platforms = {'x86': 'Win32', 'x86_64': 'x64'}
msbuild.build(sln, upgrade_project=True, platforms=platforms)
21
CoreHard. Packaging open-source libraries with conan.io
CHALLENGE: BUILD TOOLS
22
CoreHard. Packaging open-source libraries with conan.io
build_requires:
● ninja_installer
● nasm_installer
● yasm_installer
● msys2_installer
● cygwin_installer
● mingw_installer
● premake_installer
● gyp_installer
PROFILES
23
CoreHard. Packaging open-source libraries with conan.io
● Define set of conan settings and options
● Allow to specify build requirements (like nasm)
● Allow to specify environment variables (e.g. CC, CXX)
● Extremely useful for cross-compilation
Examples:
● Clang-CL
● MinGW
● Raspberry Pi
● iOS
● Android
● Windows Phone
● Emscripten
PROFILE EXAMPLE: CLANG-CL + NINJA
24
CoreHard. Packaging open-source libraries with conan.io
[settings]
compiler=clang
compiler.version=6.0
compiler.libcxx=libstdc++
[env]
CC=clang-cl.exe
CXX=clang-cl.exe
CFLAGS= -fms-compatibility-version=1800
CXXFLAGS= -fms-compatibility-version=1800
PATH=[C:Program FilesLLVMbin]
[build_requires]
ninja_installer/1.8.2@bincrafters/stable
CHALLENGE: CHECKING CORRECTNESS
25
CoreHard. Packaging open-source libraries with conan.io
Use conan hooks (former plug-ins):
● Conan-center guidelines check
● Update BinTray & GitHub metadata
● Binary linter
● Signing
● License check
RESULTS
● >300 libraries packaged, with hundreds of binaries
for each one. Largest repository of C++ binaries.
● Modular Boost
● >1M downloads per month
● Library authors are adopting conan:
○ Range V3
○ FlatBuffers
○ Poco
26
CoreHard. Packaging open-source libraries with conan.io
ONGOING WORK
● Need to add new compilers to all libraries
● How to track updates for libraries?
● Finish review for most-wanted complex libraries and
their dependencies (Qt, wxWidgets, ffmpeg,
ImageMagick, CppRestSDK, Folly, Abseil, etc.)
● Start work on more challenging libraries (LLVM,
GStreamer, VTK, etc)
27
CoreHard. Packaging open-source libraries with conan.io
JOIN US
● Try conan
● Provide feedback (GitHub, Slack)
● Request missing libraries
● Try to write recipes for libraries
● Share your recipes
● Submit inclusion requests to conan-center
28
CoreHard. Packaging open-source libraries with conan.io
WISHLIST
29
CoreHard. Packaging open-source libraries with conan.io
https://croydon.github.io/conan_inquiry/#!wishlist
● Vote ⭐
● Add packages you need 💚
GETTING HELP ON SLACK
https://cpplang-inviter.cppalliance.org/
2A
Channels:
● #CONAN
● #BINCRAFTERS
+
+ +
+
+
+
+
Many thanks!
Questions welcome :)
Konstantin Ivlev tomskside@gmail.com +7 999 620 00 00
+

Más contenido relacionado

La actualidad más candente

Os Grossupdated
Os GrossupdatedOs Grossupdated
Os Grossupdated
oscon2007
 
Madrid .NET Meetup: Microsoft open sources .NET!
Madrid .NET Meetup: Microsoft open sources .NET!Madrid .NET Meetup: Microsoft open sources .NET!
Madrid .NET Meetup: Microsoft open sources .NET!
Alfonso Garcia-Caro
 
Clang Analyzer Tool Review
Clang Analyzer Tool ReviewClang Analyzer Tool Review
Clang Analyzer Tool Review
Doug Schuster
 

La actualidad más candente (20)

Introduction to the LLVM Compiler System
Introduction to the LLVM  Compiler SystemIntroduction to the LLVM  Compiler System
Introduction to the LLVM Compiler System
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdb
 
C under Linux
C under LinuxC under Linux
C under Linux
 
Debugging of (C)Python applications
Debugging of (C)Python applicationsDebugging of (C)Python applications
Debugging of (C)Python applications
 
LLVM Compiler
LLVM CompilerLLVM Compiler
LLVM Compiler
 
Os Grossupdated
Os GrossupdatedOs Grossupdated
Os Grossupdated
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
 
Python for Delphi Developers - Part 2
Python for Delphi Developers - Part 2Python for Delphi Developers - Part 2
Python for Delphi Developers - Part 2
 
Os Rego
Os RegoOs Rego
Os Rego
 
Python on Android with Delphi FMX - The Cross Platform GUI Framework
Python on Android with Delphi FMX - The Cross Platform GUI Framework Python on Android with Delphi FMX - The Cross Platform GUI Framework
Python on Android with Delphi FMX - The Cross Platform GUI Framework
 
Os Lattner
Os LattnerOs Lattner
Os Lattner
 
IDE as a Front-end and Fast time-to-market language support in Eclipse IDE re...
IDE as a Front-end and Fast time-to-market language support in Eclipse IDE re...IDE as a Front-end and Fast time-to-market language support in Eclipse IDE re...
IDE as a Front-end and Fast time-to-market language support in Eclipse IDE re...
 
Development and deployment with composer and kite
Development and deployment with composer and kiteDevelopment and deployment with composer and kite
Development and deployment with composer and kite
 
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC
 
Madrid .NET Meetup: Microsoft open sources .NET!
Madrid .NET Meetup: Microsoft open sources .NET!Madrid .NET Meetup: Microsoft open sources .NET!
Madrid .NET Meetup: Microsoft open sources .NET!
 
不深不淺,帶你認識 LLVM (Found LLVM in your life)
不深不淺,帶你認識 LLVM (Found LLVM in your life)不深不淺,帶你認識 LLVM (Found LLVM in your life)
不深不淺,帶你認識 LLVM (Found LLVM in your life)
 
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
Introduction to Python GUI development with Delphi for Python - Part 1:   Del...Introduction to Python GUI development with Delphi for Python - Part 1:   Del...
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
 
Clang Analyzer Tool Review
Clang Analyzer Tool ReviewClang Analyzer Tool Review
Clang Analyzer Tool Review
 
[COSCUP 2021] A trip about how I contribute to LLVM
[COSCUP 2021] A trip about how I contribute to LLVM[COSCUP 2021] A trip about how I contribute to LLVM
[COSCUP 2021] A trip about how I contribute to LLVM
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
 

Similar a C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan.io - Константин Ивлев

LXC Docker and the Future of Software Delivery
LXC Docker and the Future of Software DeliveryLXC Docker and the Future of Software Delivery
LXC Docker and the Future of Software Delivery
Docker, Inc.
 
2 Linux Container and Docker
2 Linux Container and Docker2 Linux Container and Docker
2 Linux Container and Docker
Fabio Fumarola
 

Similar a C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan.io - Константин Ивлев (20)

Introduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange CountyIntroduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange County
 
Introduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkIntroduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New York
 
How Docker didn't invent containers (Docker Meetup Brno #1)
How Docker didn't invent containers (Docker Meetup Brno #1)How Docker didn't invent containers (Docker Meetup Brno #1)
How Docker didn't invent containers (Docker Meetup Brno #1)
 
Docker London Meetup: Docker Engine Evolution
Docker London Meetup: Docker Engine EvolutionDocker London Meetup: Docker Engine Evolution
Docker London Meetup: Docker Engine Evolution
 
Devoxx 2016: A Developer's Guide to OCI and runC
Devoxx 2016: A Developer's Guide to OCI and runCDevoxx 2016: A Developer's Guide to OCI and runC
Devoxx 2016: A Developer's Guide to OCI and runC
 
LXC, Docker, and the future of software delivery | LinuxCon 2013
LXC, Docker, and the future of software delivery | LinuxCon 2013LXC, Docker, and the future of software delivery | LinuxCon 2013
LXC, Docker, and the future of software delivery | LinuxCon 2013
 
LXC Docker and the Future of Software Delivery
LXC Docker and the Future of Software DeliveryLXC Docker and the Future of Software Delivery
LXC Docker and the Future of Software Delivery
 
Develop with linux containers and docker
Develop with linux containers and dockerDevelop with linux containers and docker
Develop with linux containers and docker
 
Cloud Native Landscape (CNCF and OCI)
Cloud Native Landscape (CNCF and OCI)Cloud Native Landscape (CNCF and OCI)
Cloud Native Landscape (CNCF and OCI)
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017
 
2 Linux Container and Docker
2 Linux Container and Docker2 Linux Container and Docker
2 Linux Container and Docker
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
 
Runc: The Little Engine That Could (Run Docker Containers)
Runc: The Little Engine That Could (Run Docker Containers)Runc: The Little Engine That Could (Run Docker Containers)
Runc: The Little Engine That Could (Run Docker Containers)
 
runC: The little engine that could (run Docker containers) by Docker Captain ...
runC: The little engine that could (run Docker containers) by Docker Captain ...runC: The little engine that could (run Docker containers) by Docker Captain ...
runC: The little engine that could (run Docker containers) by Docker Captain ...
 
Docker based-Pipelines with Codefresh
Docker based-Pipelines with CodefreshDocker based-Pipelines with Codefresh
Docker based-Pipelines with Codefresh
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
 
Container Runtimes: Comparing and Contrasting Today's Engines
Container Runtimes: Comparing and Contrasting Today's EnginesContainer Runtimes: Comparing and Contrasting Today's Engines
Container Runtimes: Comparing and Contrasting Today's Engines
 
Docker for developers
Docker for developersDocker for developers
Docker for developers
 
Containers and Cloud: From LXC to Docker to Kubernetes
Containers and Cloud: From LXC to Docker to KubernetesContainers and Cloud: From LXC to Docker to Kubernetes
Containers and Cloud: From LXC to Docker to Kubernetes
 

Más de corehard_by

C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
corehard_by
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
corehard_by
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
corehard_by
 

Más de corehard_by (20)

C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠  CoreHard Autumn 2019Статичный SQL в С++14. Евгений Захаров ➠  CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Último (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan.io - Константин Ивлев

  • 1. PACKAGING OPEN-SOURCE LIBRARIES WITH CONAN.IO Konstantin Ivlev + + + + +
  • 2. About me Konstantin Ivlev Maintainer of Bincrafters community Consultant in JFrog, conan developer Tomsk, Russian Federation corehard.by 01 CoreHard. Packaging open-source libraries with conan.io
  • 3. WHAT IS CONAN? 02 CoreHard. Packaging open-source libraries with Conan ● FOSS (MIT License) ● Integration with Visual Studio, CMake, XCode, etc. ● Distributed ● Pre-built packages or build from source ● Cross-platform ● Supports Cross-Compilation ● 100+ contributors, 2K+⭐ (GitHub) ● Used in production by hundreds of companies
  • 4. USING CONAN ● Let’s write some GUI application using wxWidgets ● Declare dependencies ● Fetch packages ● Build ● Profit 03 CoreHard. Packaging open-source libraries with conan.io
  • 5. 04 CoreHard. Packaging open-source libraries with conan.io #include "wx/wx.h" class HelloWorldApp : public wxApp { public: bool OnInit() { wxFrame *frame = new wxFrame((wxFrame*) NULL, -1, _T("use wxWidgets from Conan.io")); frame->CreateStatusBar(); frame->SetStatusText(_T("Hello World")); frame->Show(true); SetTopWindow(frame); return true; } }; DECLARE_APP(HelloWorldApp) IMPLEMENT_APP(HelloWorldApp)
  • 7. CONAN IN ACTION $ conan install . wxwidgets/3.1.1@bincrafters/stable: Not found in local cache, looking in remotes... wxwidgets/3.1.1@bincrafters/stable: Trying with 'conan-center'... wxwidgets/3.1.1@bincrafters/stable: Trying with 'bincrafters'... Downloading conanmanifest.txt [==================================================] 166B/166B Downloading conanfile.py [==================================================] 16.8KB/16.8KB Downloading conan_export.tgz [==================================================] 760B/760B Decompressing conan_export.tgz: 100%|██████████| libpng/1.6.34@bincrafters/stable: Not found in local cache, looking in remotes... 06 CoreHard. Packaging open-source libraries with conan.io
  • 8. CONANBUILDINFO.CMAKE 07 CoreHard. Packaging open-source libraries with conan.io ● Include directories ● Library directories ● Libraries ● Compile definitions
  • 9. CONANBUILDINFO.CMAKE 08 CoreHard. Packaging open-source libraries with conan.io $ cat conanbuildinfo.cmake set(CONAN_WXWIDGETS_ROOT “C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce") set(CONAN_INCLUDE_DIRS_WXWIDGETS "C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce/include" "C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce/include/msvc") set(CONAN_LIB_DIRS_WXWIDGETS "C:/Users/SSE4/.conan/data/wxwidgets/3.1.1/bincrafters/stable/package/c4c7f302ce/lib") set(CONAN_LIBS_WXWIDGETS wx_gtk2u_xrc-3.1 wx_gtk2u_webview-3.1) set(CONAN_COMPILE_DEFINITIONS_WXWIDGETS "wxUSE_GUI=1")
  • 10. cmake_minimum_required(VERSION 3.1) project(UseWxWidgetsFromConan CXX) include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup(TARGETS) add_executable(${PROJECT_NAME} WIN32 main.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE CONAN_PKG::wxwidgets) CONAN_BASIC_SETUP 09 CoreHard. Packaging open-source libraries with conan.io
  • 11. $ cmake . -G "Visual Studio 15 2017 Win64" $ cmake --build . --config Release NOW BUILD AND RUN 0A CoreHard. Packaging open-source libraries with conan.io
  • 12. CloudIn-house CONAN IS DECENTRALIZED 0B CoreHard. Packaging open-source libraries with conan.io conan_server Client Developer machine / CI Servers (artifact storage) Client bincrafters conan-community conan-center
  • 13. REMOTES: CONAN-CENTER 0C CoreHard. Packaging open-source libraries with conan.io ● Default remote ● Official, carefully-moderated repository ● Packages from library authors ● Currently ~120 packages available ● Goal is to double amount by the end of 2018 https://bintray.com/conan/conan-center
  • 14. REMOTES: CONAN-COMMUNITY 0D CoreHard. Packaging open-source libraries with conan.io ● Supported by conan developers ● Incubator for conan-center inclusion ● + 30 additional packages ● Foundational packages (zlib, OpenSSL, boost, etc.) https://github.com/conan-community/community
  • 15. REMOTES: BINCRAFTERS 0E CoreHard. Packaging open-source libraries with conan.io ● Supported by OSS community ● Incubator for conan-center inclusion ● +200 additional packages ● Accept your packages for support ● Complex libraries (Qt, wxWidgets, Wt++, ffmpeg, ImageMagick, SDL2, CppRestSDK, ZeroMQ, etc.) https://github.com/bincrafters/community
  • 16. ARTIFACTORY CE FOR C++ 0F CoreHard. Packaging open-source libraries with conan.io https://conan.io/downloads ● Free (CE=Community Edition), also for commercial purposes ● Run your own package server, in-house ● Easy to install ● Scalability ● Web UI ● Permissions management ● Concurrency
  • 17. SEARCHING FOR SOMETHING $ conan search Qt* -r all Existing package recipes: Remote 'bincrafters': Qt/5.11.0@bincrafters/stable Qt/5.11.1@bincrafters/stable Qt/5.11.2@bincrafters/stable 10 CoreHard. Packaging open-source libraries with conan.io
  • 18. CREATING A PACKAGE ● How to get my own library packaged? ● How to write recipe? ● How to build it for all configurations? ● How to check packages are good? 11 CoreHard. Packaging open-source libraries with conan.io
  • 19. CONANFILE.PY Methods: ● source( ) ● build( ) ● package( ) ● package_info( ) ● package_id( ) 12 CoreHard. Packaging open-source libraries with conan.io Attributes: ● name ● version ● settings ● options ● default_options
  • 20. EXAMPLE OF CONANFILE.PY (GSL) class GslMicrosoftConan(ConanFile): name = "gsl_microsoft" version = "2.0.0" description = "Functions use by the C++ Core Guideline" url = "https://github.com/bincrafters/conan-gsl_microsoft" license = "MIT" exports = ["LICENSE.md"] no_copy_source = True _source_subfolder = "source_subfolder" 13 CoreHard. Packaging open-source libraries with conan.io
  • 21. EXAMPLE OF CONANFILE.PY (GSL) def source(self): tools.get("https://github.com/Microsoft/GSL/archive/v2.0.0.zip") extracted_dir = "GSL-" + self.version os.rename(extracted_dir, self._source_subfolder) 14 CoreHard. Packaging open-source libraries with conan.io
  • 22. EXAMPLE OF CONANFILE.PY (GSL) def package(self): include_folder = os.path.join(self._source_subfolder, "include") self.copy("LICENSE", dst="licenses", src=self._source_subfolder) self.copy(pattern="*", dst="include", src=include_folder) 15 CoreHard. Packaging open-source libraries with conan.io
  • 23. user folder conan cache ● source ● build ● package ● package_info ● test package CONAN CREATE 16 CoreHard. Packaging open-source libraries with conan.io source() build() package() Different for every binary configuration package_info() Common to all binaries test_package: consuming project to check OK conanbuildinfo.cmake
  • 24. CHALLENGE: VARIOUS CONFIGURATIONS ● OS (Windows/Linux/macOS) ● Architecture (x86, x86_64) ● Compilers (MSVC, GCC, Clang) ● Release and Debug ● Shared and Static ● Hard to build everything on single machine ● Need to automate somehow 17 CoreHard. Packaging open-source libraries with conan.io
  • 25. CI: OSS 18 CoreHard. Packaging open-source libraries with conan.io Linux: gcc/clang OSX: apple-clang Multiple versions, archs Windows: MSVC/MinGW Multiple versions, archs Users “git push” to repos with a “conanfile.py” recipe bincrafters conan-center revision of packages conan-docker- tools conan package tools >100 binaries for each package recipe
  • 26. CI: In-house 19 CoreHard. Packaging open-source libraries with conan.io Users “git push” to repos with a “conanfile.py” recipe
  • 27. CI: TRAVIS AND APPVEYOR ● Register via GitHub account ● Add .travis.yml and appveyor.yml ● Consider conan new command ● Or copy from bincrafters-templates 1A CoreHard. Packaging open-source libraries with conan.io
  • 28. CPT: CONAN PACKAGE TOOLS 1B CoreHard. Packaging open-source libraries with conan.io https://github.com/conan-io/conan-package-tools $ pip install conan-package-tools $ pip install bincrafters-package-tools ● build packages for all possible configurations ● run build, test and upload ● integration with various CI systems ● python module
  • 29. CDT: CONAN DOCKER TOOLS 1C CoreHard. Packaging open-source libraries with conan.io https://github.com/conan-io/conan-docker-tools https://hub.docker.com/r/conanio/ ● various compilers ● conan pre-installed ● x86, x64 and ARM images ● Recently Windows images were added
  • 30. CHALLENGE: VARIOUS BUILD SYSTEMS ● CMake ● GNU autotools ● Plain makefiles ● Visual Studio projects ● Something else specially invented 1D CoreHard. Packaging open-source libraries with conan.io
  • 31. BUILD HELPERS ● CMake ● AutoToolsBuildEnvironment ● MSBuild 1E CoreHard. Packaging open-source libraries with conan.io
  • 32. BUILD HELPERS: CMake def _configure_cmake(self): cmake = CMake(self) cmake.definition['ENABLE_LIBASTRAL'] = self.options.libastral cmake.configure(build_dir=self._build_subfolder) return cmake def build(self): cmake = self._configure_cmake() cmake.build() def package(self): cmake = self._configure_cmake() cmake.install() 1F CoreHard. Packaging open-source libraries with conan.io
  • 33. BUILD HELPERS: AutoToolsBuildEnvironment def build(self): configure_args = [] if self.options.shared: configure_args.extend(['--disable-static', '--enable-shared']) else: configure_args.extend(['--disable-shared', '--enable-static']) env_build = AutoToolsBuildEnvironment(self) env_build.configure(args=configure_args) env_build.make() env_build.install() 20 CoreHard. Packaging open-source libraries with conan.io
  • 34. BUILD HELPERS: MSBuild def build(self): sln = 'libtheora_dynamic.sln' if self.options.shared else 'libtheora_static.sln' msbuild = MSBuild(self) platforms = {'x86': 'Win32', 'x86_64': 'x64'} msbuild.build(sln, upgrade_project=True, platforms=platforms) 21 CoreHard. Packaging open-source libraries with conan.io
  • 35. CHALLENGE: BUILD TOOLS 22 CoreHard. Packaging open-source libraries with conan.io build_requires: ● ninja_installer ● nasm_installer ● yasm_installer ● msys2_installer ● cygwin_installer ● mingw_installer ● premake_installer ● gyp_installer
  • 36. PROFILES 23 CoreHard. Packaging open-source libraries with conan.io ● Define set of conan settings and options ● Allow to specify build requirements (like nasm) ● Allow to specify environment variables (e.g. CC, CXX) ● Extremely useful for cross-compilation Examples: ● Clang-CL ● MinGW ● Raspberry Pi ● iOS ● Android ● Windows Phone ● Emscripten
  • 37. PROFILE EXAMPLE: CLANG-CL + NINJA 24 CoreHard. Packaging open-source libraries with conan.io [settings] compiler=clang compiler.version=6.0 compiler.libcxx=libstdc++ [env] CC=clang-cl.exe CXX=clang-cl.exe CFLAGS= -fms-compatibility-version=1800 CXXFLAGS= -fms-compatibility-version=1800 PATH=[C:Program FilesLLVMbin] [build_requires] ninja_installer/1.8.2@bincrafters/stable
  • 38. CHALLENGE: CHECKING CORRECTNESS 25 CoreHard. Packaging open-source libraries with conan.io Use conan hooks (former plug-ins): ● Conan-center guidelines check ● Update BinTray & GitHub metadata ● Binary linter ● Signing ● License check
  • 39. RESULTS ● >300 libraries packaged, with hundreds of binaries for each one. Largest repository of C++ binaries. ● Modular Boost ● >1M downloads per month ● Library authors are adopting conan: ○ Range V3 ○ FlatBuffers ○ Poco 26 CoreHard. Packaging open-source libraries with conan.io
  • 40. ONGOING WORK ● Need to add new compilers to all libraries ● How to track updates for libraries? ● Finish review for most-wanted complex libraries and their dependencies (Qt, wxWidgets, ffmpeg, ImageMagick, CppRestSDK, Folly, Abseil, etc.) ● Start work on more challenging libraries (LLVM, GStreamer, VTK, etc) 27 CoreHard. Packaging open-source libraries with conan.io
  • 41. JOIN US ● Try conan ● Provide feedback (GitHub, Slack) ● Request missing libraries ● Try to write recipes for libraries ● Share your recipes ● Submit inclusion requests to conan-center 28 CoreHard. Packaging open-source libraries with conan.io
  • 42. WISHLIST 29 CoreHard. Packaging open-source libraries with conan.io https://croydon.github.io/conan_inquiry/#!wishlist ● Vote ⭐ ● Add packages you need 💚
  • 43. GETTING HELP ON SLACK https://cpplang-inviter.cppalliance.org/ 2A Channels: ● #CONAN ● #BINCRAFTERS
  • 44. + + + + + + + Many thanks! Questions welcome :) Konstantin Ivlev tomskside@gmail.com +7 999 620 00 00 +

Notas del editor

  1. PART 1 WHAT IS CONAN? 3mins
  2. PART 2 CONAN IN THE ACTION 5mins
  3. PART 2 CONAN IN THE ACTION 5mins
  4. PART 3 CONAN IS DISTRIBUTED 4mins
  5. PART 4 CREATING PACKAGES 15mins PART 4.1 CONANFILE.PY 5mins
  6. candidate for removal
  7. PART 4.2. CI 4mins
  8. PART 4.3. CHALLENGES 6mins
  9. PART 5 RESULTS 3mins
  10. PART 6: ONGOING WORK 2mins
  11. PART 7 CALL TO ACTION 2mins
  12. PART 8 QUESTIONS 10mins