<html>
<head>
    <base href="https://wiki.asterisk.org/wiki">
            <link rel="stylesheet" href="/wiki/s/en/2171/18/9/_/styles/combined.css?spaceKey=TOP&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://wiki.asterisk.org/wiki/display/TOP/Building+Asterisk+SCF">Building Asterisk SCF</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://wiki.asterisk.org/wiki/display/~beagles">Brent Eagles</a>
    </h4>
        <br/>
                         <h4>Changes (3)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >{color} <br> <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">Building Asterisk SCF is pretty straightforward but does involve a few steps.  First, you will need to have the proper tools installed. Besides the obvious C++ compiler, you will need a fairly recent version of a git client (current versions are at 1.7.x and should work great), and cmake 2.8 or better. Once these have been properly installed you can obtain and install the &quot;third party&quot; libraries required by Ice. Your system may already have versions of these libraries and header files installed, but you will want to check and make sure the versions are compatible as it can save you a lot of grief later on. You may need to install a patched version of a library in some cases, but this is discussed in greater detail later on. After the third party libraries are installed, you obtain the Ice sources from the Asterisk SCF git server. It is essential that you use this version as it contains modifications that are currently only available there, but more on that later. Once Ice is built, you can obtain the Asterisk SCF sources from git repository and start building. This is where CMake comes and of course the build tools for your target platform. Fortunately there are a few helper scripts that help with these last two parts. <br> <br>That is a lot of very general instructions. Let&#39;s address each area in a bit more detail. <br> <br></td></tr>
            <tr><td class="diff-unchanged" >{color:white} <br>{panel:title=Required Tools - git|titleBGColor=#2022FF|bgColor=#7788FF} <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >{color} <br> <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">Git is an open source, distributed version control system that has gained great popularity over the past few years. By distributed it means that any &quot;clone&quot; of repository is itself a repository and itself can be cloned. It may not be immediately apparent, but this is useful for a wide variety reasons. For example, if you are working on a set changes that you want to share amongst team members or even across different machines in your development environment, you do not have to submit the changes to a central repository and update from there. You simply commit your changes in one repository and &quot;pull&quot; the changes from that repository into the other cloned repositories. If you need to make a fix for a particular platform, you can make the change, test it, commit it and distribute the changes to the other repositories for further testing. All of this while getting the full benefit of version controlled changes. And this is one of the benefits of git&#39;s distributed nature.  <br> <br>One of the things that quickly becomes apparent is how fast git is at cloning repositories and distributing changes. Even with large repositories containing lots of branches, the time it takes to clone a repository is very quick. While everybody wants *faster*, this responsiveness in a version control system enables agility in coding practices, especially with branching, reviewing, merging, etc. <br> <br>Git is very cool and powerful. As in most things, this power comes at a cost of a bit of a learning curve. Although, to be fair, the learning curve is mostly *unlearning* how other version control systems work and accepting the Zen of Git. Probably the first and most important thing to learn is &quot;DON&#39;T PANIC&quot;. As you venture past basic git usage, you might find yourself in strange dark waters. In all but the most extreme cases, git seems to often provide you way back and it is most likely someone else has done whatever has toasted your changes and can describe how to recover. Which brings us to the topic of documentation. It seems git garners nearly as much attention as a spiffy new programming language would in the volume of books, articles and tutorials available. Some of these books are free, such as the Creative Commons Licensed book &quot;Pro Git&quot;, available at http://progit.org. Of course, there is also the Asterisk SCF development community there to help you out of a jam should the need arise! <br> <br></td></tr>
            <tr><td class="diff-unchanged" >{color:white} <br>{panel:title=Required Tools - cmake|titleBGColor=#2022FF|bgColor=#7788FF} <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" > <br>{color:white} <br></td></tr>
            <tr><td class="diff-changed-lines" >{panel:title=Building Asterisk SCF - the <span class="diff-changed-words"><span class="diff-deleted-chars"style="color:#999;background-color:#fdd;text-decoration:line-through;">r</span><span class="diff-added-chars"style="background-color: #dfd;">R</span>epositories|titleBGColor=#2022FF|bgColor=#7788FF}</span> <br></td></tr>
            <tr><td class="diff-unchanged" >* Integration and Release repositories <br>* Repository-per-component <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <div class='panelMacro'><table class='warningMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>In Progress</b><br /></td></tr></table></div>

<h3><a name="BuildingAsteriskSCF-SlideSuggestions"></a>Slide Suggestions</h3>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Building Asterisk SCF</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>Required tools: git, cmake, C++ compiler</li>
        <li>Build Ice
        <ul>
                <li>Obtain and build Ice dependencies (if necessary).</li>
                <li>Obtain and build Ice from the Asterisk SCF Ice git repository.</li>
        </ul>
        </li>
        <li>Obtain and build Asterisk SCF
        <ul>
                <li>Release and Integration repositories.</li>
                <li>Git to know your git for contributing.</li>
                <li>gitall-asterisk-scf.sh</li>
        </ul>
        </li>
</ul>
</div></div></font></p>

<p>Building Asterisk SCF is pretty straightforward but does involve a few steps.  First, you will need to have the proper tools installed. Besides the obvious C++ compiler, you will need a fairly recent version of a git client (current versions are at 1.7.x and should work great), and cmake 2.8 or better. Once these have been properly installed you can obtain and install the "third party" libraries required by Ice. Your system may already have versions of these libraries and header files installed, but you will want to check and make sure the versions are compatible as it can save you a lot of grief later on. You may need to install a patched version of a library in some cases, but this is discussed in greater detail later on. After the third party libraries are installed, you obtain the Ice sources from the Asterisk SCF git server. It is essential that you use this version as it contains modifications that are currently only available there, but more on that later. Once Ice is built, you can obtain the Asterisk SCF sources from git repository and start building. This is where CMake comes and of course the build tools for your target platform. Fortunately there are a few helper scripts that help with these last two parts.</p>

<p>That is a lot of very general instructions. Let's address each area in a bit more detail.</p>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Required Tools - git</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>Free and open source.</li>
        <li>Very popular and for good reason.</li>
        <li>Distributed version control system.</li>
        <li>Fast. Very fast.</li>
        <li>Bit of a learning curve, but documentation exists to specifically help users switching from subversion etc.</li>
        <li>Documentation, tutorials and books widely available, both free and for $$$. e.g. the Creative Commons Pro Git at <a href="http://progit.org/book" class="external-link" rel="nofollow">http://progit.org/book</a>.</li>
</ul>
</div></div></font></p>

<p>Git is an open source, distributed version control system that has gained great popularity over the past few years. By distributed it means that any "clone" of repository is itself a repository and itself can be cloned. It may not be immediately apparent, but this is useful for a wide variety reasons. For example, if you are working on a set changes that you want to share amongst team members or even across different machines in your development environment, you do not have to submit the changes to a central repository and update from there. You simply commit your changes in one repository and "pull" the changes from that repository into the other cloned repositories. If you need to make a fix for a particular platform, you can make the change, test it, commit it and distribute the changes to the other repositories for further testing. All of this while getting the full benefit of version controlled changes. And this is one of the benefits of git's distributed nature. </p>

<p>One of the things that quickly becomes apparent is how fast git is at cloning repositories and distributing changes. Even with large repositories containing lots of branches, the time it takes to clone a repository is very quick. While everybody wants <b>faster</b>, this responsiveness in a version control system enables agility in coding practices, especially with branching, reviewing, merging, etc.</p>

<p>Git is very cool and powerful. As in most things, this power comes at a cost of a bit of a learning curve. Although, to be fair, the learning curve is mostly <b>unlearning</b> how other version control systems work and accepting the Zen of Git. Probably the first and most important thing to learn is "DON'T PANIC". As you venture past basic git usage, you might find yourself in strange dark waters. In all but the most extreme cases, git seems to often provide you way back and it is most likely someone else has done whatever has toasted your changes and can describe how to recover. Which brings us to the topic of documentation. It seems git garners nearly as much attention as a spiffy new programming language would in the volume of books, articles and tutorials available. Some of these books are free, such as the Creative Commons Licensed book "Pro Git", available at <a href="http://progit.org" class="external-link" rel="nofollow">http://progit.org</a>. Of course, there is also the Asterisk SCF development community there to help you out of a jam should the need arise!</p>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Required Tools - cmake</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>(bits about cmake, see Josh's stuff)</li>
</ul>
</div></div></font></p>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Required Tools - Compilers</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>Fairly recent versions of GNU C++, Visual Studio 10 including the "Express" Version.
        <ul>
                <li>Asterisk SCF requires support for fairly recent C++ language standard, but not c++11.. yet <img class="emoticon" src="/wiki/images/icons/emoticons/smile.gif" height="20" width="20" align="absmiddle" alt="" border="0"/>.</li>
        </ul>
        </li>
        <li>Python 2.6.6 is required for the configuration tools. The Python version is mostly tied to what is supported by Ice.</li>
</ul>
</div></div></font></p>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Building Ice - Dependencies</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>This needs to be done first.</li>
        <li>"Third Party Libraries" on ZeroC website
        <ul>
                <li>Pre-built for some platforms, sources including required patches also available.</li>
                <li>When stock packages for a particular platform will do, make sure the "dev" packages are also installed.</li>
                <li>Requires a patched version of libmcpp to workaround a known bug.</li>
        </ul>
        </li>
</ul>
</div></div></font></p>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Building Ice - the Ice repository</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>Includes features added for Asterisk SCF
        <ul>
                <li>Developed in partnership with ZeroC.</li>
                <li>Incorporated in future version of Ice.</li>
        </ul>
        </li>
        <li>New features and why the stock version of Ice will not do:
        <ul>
                <li>unsliceable classes</li>
                <li>custom code generation for visitor class support</li>
                <li>improvements to library loading for services</li>
                <li>code generation fixes</li>
        </ul>
        </li>
</ul>
</div></div></font></p>

<p><font color="white"><br/>
<div class="panel" style="background-color: #7788FF;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;background-color: #2022FF;"><b>Building Asterisk SCF - the Repositories</b></div><div class="panelContent" style="background-color: #7788FF;">
<ul>
        <li>Integration and Release repositories</li>
        <li>Repository-per-component</li>
        <li>Non-component foundation repositories (slice, ice-util-cpp)</li>
        <li>Slice collections</li>
        <li>How cmake ties it all together.</li>
</ul>
</div></div></font></p>

    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;" class="grey">
                        <a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=TOP">Stop watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
        <a href="https://wiki.asterisk.org/wiki/display/TOP/Building+Asterisk+SCF">View Online</a>
        |
        <a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=19006201&revisedVersion=5&originalVersion=4">View Changes</a>
                |
        <a href="https://wiki.asterisk.org/wiki/display/TOP/Building+Asterisk+SCF?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>