Advanced Package Management for C/C++ with Conan [Part 2]

[Webinar: Part 2 of 3]

June 14, 2017

< 1 min read

This webinar will introduce the basic tools and a complete DevOps workflow for C and C++ languages.

This is the 2nd webinar in a 3 part series on C/C++ package management.
In this webinar you’ll learn about advanced C/C++ package management using Conan.

Watch the 1st part of the series
Watch the 3rd part of the series

Learn more about Conan
ConanDay is March 19 – 20, 2020 in Madrid, Spain. Learn more


Diego Rodriguez-Losada Gonzalez

    Diego Rodriguez-Losada Gonzalez

    Diego Rodriguez

    Diego Rodriguez-Losada Gonzalez 's passions are robotics and SW engineering and development. He has developed many years in C and C ++ in the Industrial, Robotics and AI fields. Diego was also a University (tenure track) professor and robotics researcher for 8 years, till 2012, when he quit academia to try to build a C / C ++ dependency manager and co-founded a startup. Since then he mostly develops in Python. Diego is a C / C ++ package manager co-creator and maintainer, now working at JFrog as senior SW engineer and C / C ++ advocate.

    Video Transcript

    we created our first package so what I’m
    going to do right now is I’m going to
    just jump into the terminal because the
    other day we were reviewing a color
    package recipe packet recipe it’s a
    Python script we used to create packages
    and I told you the first webinar don’t
    worry too much about this recipe because
    there are utilities and generated from
    ma template if so to get us started
    today I’m going to create a packet
    recipe is going to call the hot hello
    and I’m going to add the dash T I will
    explain right now
    so this helper common I will create a
    packet recipe for me if I check the
    recipe okay I will see that is exactly
    the same that we that we were seeing the
    other day there are the methods we
    explain like the source metal that is
    doing a git clone to get the sources in
    this case we are packaging a library
    which sources are living in github then
    we also have the the build method that
    is calling teammate to build the liner
    is from the source code we have the we
    have the package method so this is
    scoping the the artifacts the header is
    from the binaries and putting them in
    the package and then finally we have the
    packaging for method that that is
    providing the consumers the information
    they need to link with this package so
    this would be the package recipe and the
    other day we were using it so we created
    the recipe and then we we were asking
    ourselves how do we know that this
    project is working it is working instead
    in this packaging properly by the URL
    for gift coming if is wrong so we know
    that this recipe is working
    we created a test project and from this
    test project we use the package recipe
    and then we create the the binaries we
    build the dinery from sources and
    everybody work with okay so this recipe
    is good with this work so and when I
    type the column new comment I add the
    task T it’s for tests it will create a
    test packet holder for me you can see
    the polar here then this folder is just
    a project it’s just a project exactly
    the same as the projects which we saw
    your beta so it will have a very simple
    example CPP so beam this package example
    CPP it will have a very simple
    application an executable that will use
    the package we are creating they see
    make list if we will be also the same as
    we were single day and then we inside
    the test package we have another column
    files of pi
    let’s have a look to this ok so here we
    have a current photo spy that it is not
    a package recipe ok because it doesn’t
    have a name
    it doesn’t have a version and if you
    read it it doesn’t have a package method
    either ok so it is just a recipe for
    consuming exactly the same as we were
    the column height of text that we were
    seeing the first example we execute the
    other day it is ugly the same so when we
    have a theory sack consuming recipe that
    will define that required section the
    under regards will will depend on the
    package that we are creating ok then we
    will have the build that will call see
    make for us and finally we will have a
    test method here that will execute the
    example application so what is these
    recipes is doing here
    it is just consuming the package to
    design creating is giving an example
    application and then it is
    running the example application okay but
    that is not creating the package so the
    the column files do you have the
    actually creating the package see the
    column Fido spiders in the root folder
    okay so with this test package consumer
    project I can also make the whole
    process of creating and testing the
    package very easily because all I have
    to do is to run current a socket and
    this will do two things it will first
    put the recipe into the local cache with
    a column export method then it will
    build the liners for me so right now it
    is building the package the hello
    package okay it is calling see make with
    is missing with visual studio that it’s
    my default okay I am finally is creating
    a package and now we see that it is
    moving to the project now it is building
    the test project the first package
    project that is not coming right for me
    okay this project is linking with the
    package and finally it is executing the
    application and it explains in the hello
    world so this is the way to create the
    package and we know that is working
    because my test package application has
    been able to link and to execute against
    the library that we live inside the
    package actually now I can search my
    local cache a my local cache I will I
    will see that I have I have this with
    recipe here and I can also search for
    details for this recipe and I will see
    that I have a package for it I have a
    binary with this identifier here okay
    and I can see the specifics of this
    binary for example it is has 64 bits a
    built for the release will type with
    visual studio version version fully okay
    so and one of the virus strengths of
    column is that it can easily handle many
    binaries for the same recipe for same
    library so in this case as I already
    the DES package functionality is very
    easy to create any number of binaries
    for different types for example I can
    just run a column test package and now
    I’m going to specify a different setting
    setting I there are several of the like
    compiler operating system I’m going to
    specify that I want to do for any reason
    I want to build a binary package for 32
    bits so I specify the architecture be in
    x86 that is equivalent to a 32-bit
    Windows architecture and now it is
    building again the package because the
    other the other time I run the package
    and it created 64 weeks and now it has
    to really do obviously the for the 32
    weeks and now it is again building the
    consumer application and running the
    different applications a hello world so
    the 32 bits package is working – now we
    can expect if I do the concert for the
    for the package around creating now I
    can see that i have two different
    packets fineries with two different
    identifiers okay and if I go to the
    settings I will check that the first one
    will be a 32-bit architecture package
    and the other one will be a 64 and
    respects so this process can can just be
    the business for any number of
    configurations I want to do if I want to
    have to build a debug and package I can
    do it if I want to change the compiler
    version and then with an older version
    of business video I can just repeat
    contest packets to find settings and it
    will build every time one different time
    for me so now they have these two
    I can upload them to my so I’m going to
    specify that I want to upload them to my
    remote Myron is going to be at the
    factory in this case that I already saw
    the other day how to configure it and
    how to set it to that
    is called art and I’m 35 as I want to
    upload not only the recipe but also all
    the primaries that I have been for this
    package so I’m going to specify this
    uploading and let’s check into our
    factory let’s refresh
    you can see that in my repo I have this
    package with a hello zero one and then I
    have two different packages and in each
    one I can also inspect the properties if
    you want also you can insert by properly
    source amplifier there are 32-bit
    architectures you can search for them so
    here you can see that I have two
    different one in 64 bits and the other
    one is 32 bits and from them from there
    now the these packages are in at the
    factory they can be served with my team
    and everybody can use use them exactly
    the same as we we working the only so
    now I’m going to briefly review some
    concepts that I think that are are
    balanced playing with a couple of slides
    the first one would be this one okay so
    so we have here and like the two parts
    we have the server side and the and the
    client side the client side they both of
    them the layout is basically the same we
    have any number of packages each package
    is identified with the package name
    typically will match the library name
    this case package will have the package
    person and we will have the user on the
    channel okay if we change any of those
    four things we will have a different
    package so if we have the channel it
    will be a different component with we
    can interchange them but it will be a
    different package okay and for each
    package we have two different things
    first we have the recipe the recipe is
    the basically column file type that
    contains the Python scripts that defined
    in how to be where the packages and then
    we have any number of binaries remember
    of package binaries in this case we have
    created just two of them one for 32-bit
    architecture and one for 64-bit
    architecture but we can have any of them
    actually we can have any number of them
    and all of them will be connected to the
    recipe even if they come from different
    operating system so naive now I go to
    the next and I will become binary and
    little toomai server it will keep
    connected to the recipe so I can store
    all the diner is for different operating
    systems I can store them in the same
    place and refer to the same – ok so this
    the when I upload them uploaded the
    package basically it just uploaded both
    the recipe and every binary so it is
    more or less the local cache you just
    reflect or at the second of their of the
    structure of the server so and now that
    I have my packages in the server and my
    pack expires in the server and I also to
    review what we were doing the other way
    just to understand what it what is
    happening so let’s imagine that now we
    have a server we have the binaries and
    the packs recipe everything artifactory
    and now we have a developer that has
    just a small column so their local cache
    is empty this is the lower part of the
    site ok he is fine a new project so so
    there you have just written a column
    header fix with some requirements
    generator sometimes whatever ok and now
    he wants to install the panels okay so
    he will issue icon like this he will be
    selected colonists oh and he will be
    specify his settings their settings or
    maybe they will use the defaults but
    they will have some specific settings
    for their machine let them happen in
    this case there will be the companion
    GCC with some person with some
    architecture however so what is the
    process of installing the binaries from
    the server to the local cache ok so the
    first step would be ok so I’m requiring
    package person one so I’m going to check
    if this recipe leave an existing my
    local cache so I have just little Conan
    the local cache will be empty so the
    next step will ok let’s check the remote
    let’s check if the packets version 1 is
    remote ok is there so it will fetch the
    recipe and we will bring the recipe to
    the local cache
    this recipe is bison script and it will
    get the settings and the audience from
    the from the user side from the from the
    decompilers if you see the person of the
    setup of the user and it will evaluate
    it we level it against the recipe I
    think we say okay so for these settings
    and this recipe I make this binary this
    is specific binary okay with this
    identifier the directive is basically
    the has of the settings are male terms
    of the package so I need this binary now
    there are two options the first one will
    be okay
    so this identifier this binary already
    exists in my remote if the value exists
    in the remote then the default is to use
    the binary and it will fetch the rider
    from the remote but if the this binary
    does not exist because it has not been
    pre compiled for example or just because
    the user they want to build it from
    sources they want to make sure to build
    the package from sources because they
    don’t want to reuse the binary that is
    already stored in the server for any
    reason so the other option would be okay
    so let’s build the binary from sources
    locally in the local cache and once the
    binary of the packages is in the local
    cache then the next step would be okay
    so now I have the packages I have the
    binaries the variable will have the
    include directories with the headers the
    libraries in everything and it will
    generate a file in case that we are
    using Simek generator it will get a
    cannot be info box email file with all
    the information with all the variables
    that in Simek syntax that the user
    requires to link against this package
    because this packet was typically live
    in the local cache so the path to the
    binaries here will be variables in the
    the mode selector and this is the way
    that their consumer can can easily
    consume packages and know you know the
    packets libraries and everything
    so let’s advance a little bit more into
    some different things okay so in this
    example we are doing this we are
    executing git clone and we are bringing
    bringing the sources from github what
    happens if I don’t want to do that so I
    want to show you a different approach it
    will be yeah so now I’m going to create
    a package recipe I’m going to specify
    the minutes as from sources so now and
    I’m going to have here is a different
    approach instead of bringing the
    attached in the source code from github
    I’m going to embed the source code into
    the recipe itself so now the source code
    it is in a Hello folder that the this
    template has generated for me as an
    example and so I have to the files
    locally this would be the approach I
    would use if I I want to put the recipe
    into my source repo so we find a file
    repository on github and I want to put
    the current file into the replica cells
    and not in a different repository then I
    probably use this approach okay and
    because in this approach we will see the
    recipes the package recipe okay so now
    there is no source function so on the
    sort method doesn’t exist anymore okay
    because now I don’t want to execute
    anything to I I don’t need a gif clone
    but instead what I have right now is
    this I’m especially
    in exports sources and I’m specifying to
    copy everything inside the hello to for
    good further so this is what it’s doing
    this this line here it is copying on the
    other first on the files that are inside
    the local hello folder I’m putting them
    into the recipe itself so this would be
    the concept of a snapshot it is actually
    establishing a snapshot in the source
    code and printer into the recipe so now
    this recipe is self-contained
    it doesn’t require source code from as
    well because the source code is in it
    okay actually the implementation is
    quite efficient so if you don’t need to
    be in the package from sources it will
    not retrieve the sources but that’s a
    different story
    the the concept is that the source code
    is not outside of veracity release
    inside the ship itself besides that the
    the functioning of the of the recipe is
    basically the same I can just create I
    will do just a column text package now
    you will not see any give clone
    typically a trace that will appear here
    because now it is not required but
    besides that the process is exactly the
    same it is creating a package it is
    within a package now it is building the
    consumer application to test that the
    card is totally working and finally we
    have the hello world so this is simply
    package is also working and I I would
    like to spin one thing that is the
    curtain thing and that is the opt-ins
    okay so so far we have been able to
    build two different binaries and what we
    were doing we were changing the settings
    and we were changing specifically the
    architecture sorry and we must be same
    32 bits 64 bits the settings are
    something that will affect the binary
    if we change any of these settings the
    binary will be a different one
    okay so if of course if I came to be
    aside from the back to release the
    banner it will be different so the
    settings are something that are
    typically project-wide and there are
    some pieces are the field defined by the
    end user so it is not something that can
    be defaulted you cannot take that my
    default operating system is Windows
    because if you’re running in Linux that
    doesn’t make sense at all so settings is
    something that is defined by the user
    machine and cannot be reported but
    packages can also specify a different
    configuration that would be real in this
    case a very very difficult one accident
    most typical opportunity versus packages
    would be the okay I want to build static
    or shard libraries okay so I can define
    any opium here with any this is just a
    string but sir it will be a typical
    convention of course and here just
    specify the possible values that this
    piece of them can be have okay and then
    you can specify before the options in
    this case it makes sense you can say
    okay this package this hello packets by
    default will be a static library and if
    you want infirm behavior you can specify
    it and you want to say this it will be a
    solid library but by default it will
    work it will work in all operating
    systems it will work with all compilers
    static library will work so it can be
    defaulted okay how can i specify that I
    I won’t actually want to build a a serf
    library I will do it right now in the
    common line but I want to stay first is
    okay I have this option and what I have
    to do is I have to translate it
    something to my build system in this
    case it is very simple because to make
    it has an optical it has a variable it’s
    called built by lips if you put it on it
    will build certain libraries if you pull
    it off or if you don’t define it it will
    be static libraries so what I’m doing in
    this line and translate
    the value of options sir to the SIMEX
    index okay if you do have a different a
    big system you can do it’s everything
    for example if you are using males
    probably you will be very friend target
    and you will go here and that your was
    going to be like this entangle but in
    any case if there’s possibility of the
    package creator to translate the
    audience to the proper bill commands in
    this case very simple but they visiting
    the system you can read your own so how
    can i specify now that i want to view a
    package with the different option i’m
    instead of a static kind of setting I
    will specify a not deal with – all it
    will be a no feel for the hello package
    because of the Harper package settings
    are typically project-wide even you can
    specify settings for specific packets
    but typically they will be open a
    particular options are basically a
    package with the specific purpose so I
    will say final for the hello package I
    want to build and test a solitaire
    library so I specify hello : sir sir
    equal to
    allow it is creating the package here as
    you can see that is copying some BLS
    there are the South libraries and it is
    working so I can just do the search
    hello and now I have three packages I
    have the packages that I build but are a
    shard equal false and then I have a
    dynamic that I have a sword library here
    too okay
    so I can repeat this I can build a lot
    of salt libraries with friend settings
    exactly the same so here we have a small
    treat because okay you are generating
    VLS and DLS in Windows I mean other
    operating systems they have another
    problem is that they have to be in the
    path so what happened did you manage to
    to actually execute the test and make it
    work okay so there is a small trick here
    I’m going to suspect the test package
    cannot find recipe and I will soldier up
    this line the imports method the imports
    method what it is doing it is coping
    with extracting files from the local
    cache and copying them to user space in
    this case this imports method is saying
    okay if there are some DLL files into
    the packages you are dependent on copy
    them into my local user bin folder okay
    so in this case it is copying the reals
    just besides the binary and I’m going to
    execute so in this way it is not
    necessary to mess with the system path
    it is not necessary to put the IDL else
    in the system 52 or any other folder or
    to modify the system environment
    variable because we are talking the
    diviners is convenient for testing
    release comedian for just struck in the
    diner is because you want to protect to
    distribute to your final customer so
    this would be the imports probably with
    very explain if we review the the
    packaging process so it means not these
    this okay so here we have the the lower
    part of the slide is the user is paid to
    user folders okay so a first the column
    file is in the user folder and the
    moment you you execute the current
    export current test package the first
    step is to copy this column file into
    the export folder every single square in
    the upper in the upper part of the slide
    is a folder it’s a different folder okay
    so it will copy the column file into the
    export folder and if we specify like the
    export sources it will also cook the
    other side is like the sources into the
    export folder then and there are two
    possibilities here
    if the precompiled binaries are in a
    remote then all the mid-part of here the
    source and build are not necessary and
    we will get just a packet the final
    packages from the remote but in this
    case we are Spain how we build from
    source from sources like when we’re
    through the current test packets it is
    not only building from sources so the
    process is okay the first step will take
    the export folder and copy everything to
    a source folder for for the packet
    reference where we are using this
    see the one Guzman Channel it will copy
    everything into a source folder then if
    a source method exists in the recipe it
    will execute it so here for example if
    we have a source method with a gate
    clone the result is that the gif clone
    is executed in the source folder and the
    sources are retrieved from from github
    and copied into the source folder then
    we have to be and we have to build from
    sources we will create a
    different folder for every different
    configuration so if you’re building a
    different configuration with different
    settings or options we will create a
    written built folder because we want a
    clean view from for every different
    configuration it will copy all the
    sources just in case because there are
    some bills that that will that will for
    example generate code and the code
    generators will be different depending
    only on the bill type so and it will
    copy on the surface for in a deal and
    then they can identify another package
    inside the bill folder it will call the
    build function the build method it will
    call see make or make file or whatever
    and give them the binaries and finally
    the package method will extract the
    binaries from the build folder into a
    package folder the package folder is the
    one that is uploaded to the remote is
    the final resource of the package the
    binaries that we are really interested
    in and the last step once we have the
    package folder then there are two things
    that we can get out of the local cache
    one would be the generated files per
    capita column will enforce make it’s a
    generated file that will have all the
    paths to the to the package folders and
    the library nation so long and then the
    other mechanism is the impulse mechanism
    the impulse mechanism can just copy
    files like the DLL from the package
    folders that are in the local cache and
    will copy them and put the DLL into a
    using space in the user folder so they
    can easily be retired or whatever so
    this would be them then the process so
    all these squares in this in this
    graphic are just folders so if you want
    if you go to video your dots column
    folder into your user home you will see
    there the local cache it is very simple
    to inspect so I really recommend to go
    there and to inspect the folders degree
    it is really easy to understand what is
    happening so
    you have a couple of configuration files
    and then you have the data if the data
    is actual storage for packages a brief
    packet you will have the eager to
    embrace your own username channel for
    every bucket and then inside the that
    you will have we explore the source the
    Biel and the package of folders I mean
    each one you will you will see the
    column files we will see the temporary
    build objects and you will see the final
    package instead the final faculty will
    typically be like the improve directory
    with headers Lib directory with
    libraries and so on so it’s very it’s
    something fails for example in your
    build you can just go to a local cache
    I’m going to reduce other as you gotta
    shop in there okay so one of the things
    that I wanted to spend today also if
    what happens when we have a different
    building system okay in this case I want
    to build a the same hello application
    but I’m going to show you inside the
    hello folder I first I don’t have to see
    topeka application anymore I have a C
    application and actually I have a see
    library it is the hello C library and I
    don’t have a C make anymore this project
    here it has a make file so here I can
    see my old brain death in C syntax and I
    can see a very simple make fine okay so
    this is the the library does I want to
    package so let’s see how can I
    the package for for this library so the
    idea would be basically the same as we
    did before the packets better this is
    insane the packaging format of is
    exactly the same and we only have to
    change the deals method the build method
    now it is not even see make so I’m not
    using this image however but we have all
    the helpers for example we have data
    tools build environment it will create
    and manage all the environment variables
    for a typical configure make Auto Tunes
    so with this article’s environment I can
    just change directory with this helper
    it’s a context that does help me to take
    to change to hello directory in a clean
    way and then I will apply all the
    environment variables from the from the
    helper to the environment
    all I have to do is run run make and
    this is the helper that allows me to to
    package libraries that are using other
    tools instead of a cynic so but that
    this recipe still is not complete I will
    show you a couple of things so ok let’s
    try to build it so now I’m going to
    specify the best package my compiler I’m
    using mingw for Windows is GCC and my
    version will be for 9 ok
    and now it is complaining why what is
    what if this error meaning you say okay
    sharings combiner leads c XX is not the
    final say because my nipples are for
    visual studio and you know the DCC they
    have to define if they are using the lip
    STD fittest as early as 3 c plus plus 11
    so I could do this compiler with C xx
    equal a lips STD c plus plus okay I put
    do this and it will work but probably
    some of you would complain and say I do
    you are building a seed project you
    don’t need the C prospectus on a library
    at all and that is true that is totally
    true so the first thing is okay how can
    how can I do this so I’m going to
    specify now configure a method I’m going
    to do this self sir
    remove self setting compiler okay so
    this is it okay this is not a fitness
    class I don’t need the leaf C++ library
    setting at all so I can just remove it
    from ersity
    so I’ll move my recipe let’s set save
    the recipe and let’s try again okay so
    perfect now I’m living with mingw pure C
    library and it’s working okay so this is
    the first thing you can come here the
    settings as you want if you are not
    interested in a setting you can remove
    it if you want to add a different
    setting you can add new settings to your
    to your clear packages you can define
    any configuration you want
    and then the other thing I was asking
    now is okay I know I’m begin a project
    okay with GCC for nine and I know that
    this library will be compatible with
    many with all the TCC versions so if I
    for example if I try to do a corner
    install and I specify compiler GCC and
    compiler version 5.1 it will complain we
    say a I don’t have a premium package for
    for this configuration you have to build
    it from source if you own it but I say
    yes I will I don’t want to build a new
    package finally I know that my my binary
    deal with 4/9 is compatible with all
    these three persons
    let-let’s is not that’s not true but
    let’s assume for this example that is
    true so how can I do this okay so the
    thing is that you can configure any ABI
    binary compatibility you can configure
    it yourself up to your knowledge of the
    of your package binary compatibility in
    this case if I want to redefine my
    package binary compatibility I will just
    overwrite my package ID and method and
    all I have to do is specify that my
    sharing compiler version will be any
    okay so now with this line and say okay
    so the packet identifier would be a
    second with him always irrespective of
    the compiler person so now I can visit
    packet everything’s working I can search
    for my package and here you will see
    that the compiler version for this ec is
    any so right now and also the patch
    identifier starts with C F F okay so now
    if I installed for five one for VC C 5 1
    ok say ok so the packet is already stole
    because the packet identifier is going
    to be exactly the same it doesn’t matter
    if I specify 5 1 5 2 6 1 so all of them
    they will use the same package binary
    that was created with GCC for 9 and this
    is more or less the way just the basics
    has to the way you control the binary
    compatibility and how you can define the
    number of binaries how many wineries you
    will have for different architectures
    for everything and you have to control
    all of that and to finish today Waggoner
    I want you to do something a bit more
    risky so let’s let’s try if if this work
    so I’m going to try to build a cross
    application to a Raspberry Pi so here I
    have a packet recipe you can check
    but it’s basically the same exactly the
    same as we did before the same methods
    the same source code we dis packaging
    the same library the same hello library
    the only thing that I have to do and
    it’s because I I want to do something
    special for example I want to be back in
    the raspberry pie this package so as I
    want to be back in the raspberry pie
    this package and this package is going
    to be created in Windows okay I have to
    do two things the first thing would be
    to specify to GCC so mapping I have to
    map the debug Perfect’s to the so that I
    let the debugger
    I let gdb to find the sources and then
    also now I am packaging the sources into
    the final package because if I want to
    be back in the raspberry pie I need the
    sources in the first of library so all I
    had to do is to do back at the sources
    the CBB sources into a new source folder
    into the final package but besides these
    these two lines the packet is exactly
    the same so how I would build this okay
    so I could just try to do a current test
    package reckon on this package and now I
    will have to specify my compiler GCC
    bye-bye architecture is a RM also
    Michael my cross compiler I will have to
    specify them like environment variable C
    excess will be like erm GCC ABI I don’t
    know it I don’t know I miss it a bit
    inconvenient so what I’m going to show
    you a better way to do it if you are
    going to manage different configurations
    current has something very useful data
    are very profiles so M :
    profile please I’m here I have to a
    predefined profiles that I created
    myself :
    profile so API
    we see eight four six so this will we
    also just some predefined settings and
    environment variables in this case I’m
    going to compile for Linux because
    Raspberry Pi is running Linux I am
    building for GCC this architecture is
    the armv6 architecture add the debug
    build type the compile will be DC 4 6
    and then I’m also defining the cross
    compilers which has a cross compiler I
    am in Windows so I downloaded them and
    put them some somewhere in my computer
    so I’m specifying the package all the
    settings and apparent variables
    everything but it means so then it is
    very convenient these are just text
    files you can just write them your your
    computer so you can have any number of
    profiles each one will be no different a
    file and you can even put the profiles
    in your source repository and use them
    from there you can sell the profiles
    with your team there are gas textiles so
    there it’s very very simple to manage
    them so I can create this test package
    and now I’m going to specify that I want
    to use this profile ok so I have a
    message cross-platform from Windows to
    Linux here you can see that it is using
    the this raspberry pi cross compiler
    and now it is between the test
    application of course it is not running
    the test application okay because I’m
    Windows only this cross building so so
    what I did in the my desk package
    consumer application I did this check if
    my platform is different from the
    operating systems I believe or I just
    check that the dinery exists because I
    cannot run but if the platform matches
    they operate the system then I am native
    and I can just execute a simple in this
    case I do them execute because I’m
    comparing problems in Windows it doesn’t
    match so it just checked off the battery
    okay so I created the binary and what I
    am going to do is of course I’m going to
    upload two artifactory and all the Irish
    okay everything’s good and now let’s try
    now I’m going to log in remotely into my
    Raspberry Pi okay good
    and I told you Connor no grunting in
    many many different platforms it is
    portable Python so I’m going to move to
    this consumer project and this consumer
    project is just on the component is very
    very simple and not mystical just and it
    will just requires the packets that I
    just created so let’s make sure
    anything’s clean you can check Kanaan
    search in my Raspberry Pi it will show
    an MP local cache there are low packets
    so what I’m going to do is I’m going to
    install the package from ulta factory
    that I created from windows so : install
    and I’m going to use the debug ok ok so
    it goes the binaries from architecture
    and now I can create my project with
    just pure C make
    as you can see the Raspberry Pi is quite
    as low so it’s very good to die I
    actually created the my package cross
    companion from a most powerful machine
    let’s try to delete so I build my
    application here I linked with the
    packet that that was cross-compiling
    windows – for the Raspberry Pi and also
    now I can check that I can be bar this
    application let’s start ok breakpoints
    and then I can stay and you can check
    but now I’m actually into the source
    code of the package that has been
    retrieved from the package and put there
    some ID bugger in the rough I can
    actually debug the application so let’s
    face and with this I would like to
    conclude my presentation just
    remembering that that we will be in Napa
    in May in some pub talking about all
    these things that will be trained about
    : so if you can be a regular opportunity
    to to join us to learn more about color
    and that today it was the part 2 of this
    three-part webinar and soon we will be
    doing the the last one it will be mostly
    about DevOps and different packaging
    approaches continuous integration the
    so keep shifting to the different
    webinar pages because we will be
    announcing next one show ok so thanks
    very much
    so now if there are any questions I’d
    love to
    so anyone if anyone has questions please
    type them in the Q&A box at the bottom
    of your screen and
    happy to answer them
    okay so
    so that is a question from Sebastian is
    can you build a package from source
    without making a copy of the source to
    the build directories may be linking and
    the answer is no it is not possible so
    the source code will be actually here
    the source code will always be copied
    from for every in folder so this as most
    this is subtitle in this case we prefer
    to absolutely make sure that we have a
    clean environment every time we build
    because there are some places but the
    source code is actually changed when you
    run for example configure it will
    generate headers for example a typical
    context does H Heather I mean it can you
    can create the header into the source
    tree if you are not careful
    or you can be running some some code
    generation approach for example we can
    be running Google proto map that will
    generate source code from from the from
    the proto declarations so we want to
    make sure that we really have to clean
    environment so so we are copying we are
    always copying the source code to every
    folder and approach works perfectly the
    only thing that if there was something
    two together is that it takes a little
    bit more of this space but this is
    freeze is very is very cheap the time
    for copy needs is just a fraction of
    variations not 1% of the time that you
    actually need to view the package so it
    is nothing because there is space is
    very cheap and also if you want after
    building you can specifically remove
    just the build folder and you can keep
    the export the package you can keep
    everything and just remove the will
    photos with temporary folder if you want
    to to free the disk space so this is the
    reason we prefer to make sure that the
    bill which always clean and we don’t
    want we don’t allow to to share the same
    source code from for dependents
    I see a girl any more questions and then
    a question so we have another question
    from Sebastian question is is there an
    option to trim old binary packages llego
    what yes actually there is some known
    but I have strongly suggest to submit a
    gift a visa because I think this is a
    nuisance meter but when we have right
    now is we do run the current search as
    IP you will time but there are like a
    dated there is a field that is come out
    dated it marks when the packets binary a
    were generated from an older packet
    recipe I’ll probably do could use that
    that few to automatically remove all the
    Irish if you want but this is not
    implemented but I think that being able
    to clean like all old I nourish it will
    be a nuisance with repeater so if you if
    you want to submit it to to give us a
    bigger request
    I think it has chances to to be a
    and again from Sebastian how can I have
    additional settings that affect the
    binary like make the girls gypsy three
    plus XY buy a package IP okay yeah
    that’s also a very good question so I’m
    going to show you so this is what it is
    my my local cache the local cache there
    are several files one of them is called
    settings yellow okay so this setting
    channels has the product Nishant of the
    segments that are allowed so you can
    just change these are the predefined
    settings but you can change them for
    example if you want to add a new
    operating system you will go here and
    you will work at your operating system
    and if you want for example in this case
    you want to add you have like
    compatibility you want to add compatible
    for daily to give see that you can
    specify me anyone give me C and specify
    here at your own put your own values for
    example GCC or two point seven two point
    eight mmm whatever and you can add your
    own settings there if you want okay so
    as long as then you can share this with
    this fight with your team and as long as
    you do you’re using the same settings
    Amal everything we work so actually this
    is very common well we have a active
    users now in column something that they
    will really find the settings I’ll to
    account for their own settings so
    typical one would be the red heart
    because Red Hat six Red Hat seven they
    would have some binary compatibility
    issues and you could just add the Delete
    key setting or g-code could add like a
    bistro setting and because
    Disko hearing when the distro being
    ready at 6:00 already excellent and this
    will allow you to specify different
    binary compatibility taking into account
    that you can have read 6 and 7 with the
    same compiler but the miners will be
    incompatible because they Dilek see
    underlying library okay that’s all the
    time we have for now thanks everybody
    for joining us today and thank you Vegas
    for your time we’ll be happy to send you
    an email with the recording of this
    webinar on any relevant links in the
    next couple of days
    don’t ring the contact us with any other
    questions that you may have countable
    thanks very much and I forgot my line