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
+

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

  • 1.
    PACKAGING OPEN-SOURCE LIBRARIES WITHCONAN.IO Konstantin Ivlev + + + + +
  • 2.
    About me Konstantin Ivlev Maintainerof 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’swrite 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-sourcelibraries 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)
  • 6.
  • 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-sourcelibraries with conan.io ● Include directories ● Library directories ● Libraries ● Compile definitions
  • 9.
    CONANBUILDINFO.CMAKE 08 CoreHard. Packaging open-sourcelibraries 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. Packagingopen-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. Packagingopen-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. Packagingopen-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 FORC++ 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. Packagingopen-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. Packagingopen-source libraries with conan.io Users “git push” to repos with a “conanfile.py” recipe
  • 27.
    CI: TRAVIS ANDAPPVEYOR ● 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 PACKAGETOOLS 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 DOCKERTOOLS 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 BUILDSYSTEMS ● 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 defbuild(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 defbuild(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-sourcelibraries 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 librariespackaged, 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 ● Needto 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 ● Tryconan ● 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-sourcelibraries with conan.io https://croydon.github.io/conan_inquiry/#!wishlist ● Vote ⭐ ● Add packages you need 💚
  • 43.
    GETTING HELP ONSLACK https://cpplang-inviter.cppalliance.org/ 2A Channels: ● #CONAN ● #BINCRAFTERS
  • 44.
    + + + + + + + Many thanks! Questionswelcome :) Konstantin Ivlev tomskside@gmail.com +7 999 620 00 00 +

Editor's Notes

  • #4 PART 1 WHAT IS CONAN? 3mins
  • #5 PART 2 CONAN IN THE ACTION 5mins
  • #6 PART 2 CONAN IN THE ACTION 5mins
  • #13 PART 3 CONAN IS DISTRIBUTED 4mins
  • #19 PART 4 CREATING PACKAGES 15mins PART 4.1 CONANFILE.PY 5mins
  • #20 candidate for removal
  • #25 PART 4.2. CI 4mins
  • #31 PART 4.3. CHALLENGES 6mins
  • #40 PART 5 RESULTS 3mins
  • #41 PART 6: ONGOING WORK 2mins
  • #42 PART 7 CALL TO ACTION 2mins
  • #45 PART 8 QUESTIONS 10mins