Merge pull request #4678 from Rmys/master

kicad
This commit is contained in:
Rmys
2018-04-05 13:04:54 +03:00
committed by GitHub
8 changed files with 158744 additions and 158194 deletions
+158264 -158192
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
2ae86d245e242cd3d6b793df0b771fd71a0de4e5
f49b5574004db8a293cf803fb4c001d75504c0f8
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
9fd63ecafe1d453c9940d5404a8575c78b413d43
65c77fd89d7df9008387099a7c6788e4e0d9eabc
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Licensed under the GNU General Public License, version 3.
# See the file http://www.gnu.org/licenses/gpl.txt
from pisi.actionsapi import cmaketools
from pisi.actionsapi import pisitools
from pisi.actionsapi import shelltools
from pisi.actionsapi import get
def setup():
shelltools.makedirs("Release")
shelltools.cd("Release")
cmaketools.configure("-DKICAD_STABLE_VERSION=ON \
-DKICAD_REPO_NAME=stable \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DKICAD_SKIP_BOOST=ON \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DBUILD_GITHUB_PLUGIN=ON", sourceDir="..")
shelltools.cd("..")
shelltools.cd("kicad-i18n-4.0.7")
shelltools.makedirs("Release")
shelltools.cd("Release")
cmaketools.configure("-DCMAKE_INSTALL_PREFIX=/usr \
-DKICAD_I18N_UNIX_STRICT_PATH=ON", sourceDir="..")
shelltools.cd("..")
def build():
shelltools.cd("Release")
cmaketools.make()
shelltools.cd("..")
shelltools.cd("kicad-i18n-4.0.7")
shelltools.cd("Release")
cmaketools.make()
shelltools.cd("..")
def install():
shelltools.cd("Release")
cmaketools.rawInstall("DESTDIR=%s" % get.installDIR())
shelltools.cd("..")
shelltools.cd("kicad-i18n-4.0.7")
shelltools.cd("Release")
cmaketools.rawInstall("DESTDIR=%s" % get.installDIR())
#shelltools.cd("..")
#pisitools.dodoc("AUTHORS*", "CHANGELOG*", "README*")
@@ -0,0 +1,347 @@
--- a/common/tool/tool_manager.cpp
+++ b/common/tool/tool_manager.cpp
@@ -532,11 +532,11 @@
if( st->cofunc )
st->Push();
+ st->cofunc = new COROUTINE<int, const TOOL_EVENT&>( tr.second );
+
// as the state changes, the transition table has to be set up again
st->transitions.clear();
- st->cofunc = new COROUTINE<int, const TOOL_EVENT&>( tr.second );
-
// got match? Run the handler.
st->cofunc->Call( aEvent );
--- a/include/tool/coroutine.h
+++ b/include/tool/coroutine.h
@@ -27,10 +28,15 @@
#include <cstdlib>
-#include <boost/context/fcontext.hpp>
#include <boost/version.hpp>
+#include <type_traits>
-#include "delegate.h"
+#if BOOST_VERSION <= 106000
+#include <boost/context/fcontext.hpp>
+#else
+#include <boost/context/execution_context.hpp>
+#include <boost/context/protected_fixedsize_stack.hpp>
+#endif
/**
* Class COROUNTINE.
@@ -53,13 +59,12 @@
* See coroutine_example.cpp for sample code.
*/
-template <class ReturnType, class ArgType>
+template <typename ReturnType, typename ArgType>
class COROUTINE
{
public:
COROUTINE() :
- m_saved( NULL ), m_self( NULL ), m_stack( NULL ), m_stackSize( c_defaultStackSize ),
- m_running( false )
+ COROUTINE( nullptr )
{
}
@@ -69,8 +74,7 @@
*/
template <class T>
COROUTINE( T* object, ReturnType(T::* ptr)( ArgType ) ) :
- m_func( object, ptr ), m_self( NULL ), m_saved( NULL ), m_stack( NULL ),
- m_stackSize( c_defaultStackSize ), m_running( false )
+ COROUTINE( std::bind( ptr, object, std::placeholders::_1 ) )
{
}
@@ -78,9 +82,15 @@
* Constructor
* Creates a coroutine from a delegate object
*/
- COROUTINE( DELEGATE<ReturnType, ArgType> aEntry ) :
- m_func( aEntry ), m_saved( NULL ), m_self( NULL ), m_stack( NULL ),
- m_stackSize( c_defaultStackSize ), m_running( false )
+ COROUTINE( std::function<ReturnType(ArgType)> aEntry ) :
+ m_func( std::move( aEntry ) ),
+ m_running( false ),
+#if BOOST_VERSION <= 106000
+ m_stack( nullptr ),
+ m_stackSize( c_defaultStackSize ),
+#endif
+ m_caller( nullptr ),
+ m_callee( nullptr )
{
// Avoid not initialized members, and make static analysers quiet
m_args = 0;
@@ -89,18 +99,26 @@
~COROUTINE()
{
- if( m_saved )
- delete m_saved;
-
#if BOOST_VERSION >= 105600
- if( m_self )
- delete m_self;
+ delete m_callee;
#endif
+#if BOOST_VERSION <= 106000
+ delete m_caller;
+
if( m_stack )
free( m_stack );
+#endif
}
+private:
+#if BOOST_VERSION <= 106000
+ using context_type = boost::context::fcontext_t;
+#else
+ using context_type = boost::context::execution_context<COROUTINE*>;
+#endif
+
+public:
/**
* Function Yield()
*
@@ -110,7 +128,12 @@
*/
void Yield()
{
- jump( m_self, m_saved, 0 );
+#if BOOST_VERSION <= 106000
+ jump( m_callee, m_caller, false );
+#else
+ auto result = (*m_caller)( this );
+ *m_caller = std::move( std::get<0>( result ) );
+#endif
}
/**
@@ -122,7 +145,11 @@
void Yield( ReturnType& aRetVal )
{
m_retVal = aRetVal;
- jump( m_self, m_saved, 0 );
+#if BOOST_VERSION <= 106000
+ jump( m_callee, m_caller, false );
+#else
+ m_caller( this );
+#endif
}
/**
@@ -130,9 +157,9 @@
*
* Defines the entry point for the coroutine, if not set in the constructor.
*/
- void SetEntry( DELEGATE<ReturnType, ArgType> aEntry )
+ void SetEntry( std::function<ReturnType(ArgType)> aEntry )
{
- m_func = aEntry;
+ m_func = std::move( aEntry );
}
/* Function Call()
@@ -143,6 +170,10 @@
*/
bool Call( ArgType aArgs )
{
+ assert( m_callee == NULL );
+ assert( m_caller == NULL );
+
+#if BOOST_VERSION <= 106000
// fixme: Clean up stack stuff. Add a guard
m_stack = malloc( c_defaultStackSize );
@@ -151,22 +182,32 @@
// correct the stack size
m_stackSize -= ( (size_t) m_stack + m_stackSize - (size_t) sp );
-
- assert( m_self == NULL );
- assert( m_saved == NULL );
+#endif
m_args = &aArgs;
-#if BOOST_VERSION >= 105600
- m_self = new boost::context::fcontext_t();
- *m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
+
+#if BOOST_VERSION < 105600
+ m_callee = boost::context::make_fcontext( sp, m_stackSize, callerStub );
+#elif BOOST_VERSION <= 106000
+ m_callee = new context_type( boost::context::make_fcontext( sp, m_stackSize, callerStub ) );
#else
- m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
+ m_callee = new context_type( std::allocator_arg_t(),
+ boost::context::protected_fixedsize_stack( c_defaultStackSize ), &COROUTINE::callerStub );
+#endif
+
+#if BOOST_VERSION <= 106000
+ m_caller = new context_type();
#endif
- m_saved = new boost::context::fcontext_t();
m_running = true;
+
// off we go!
- jump( m_saved, m_self, reinterpret_cast<intptr_t>( this ) );
+#if BOOST_VERSION <= 106000
+ jump( m_caller, m_callee, reinterpret_cast<intptr_t>( this ) );
+#else
+ auto result = (*m_callee)( this );
+ *m_callee = std::move( std::get<0>( result ) );
+#endif
return m_running;
}
@@ -179,7 +220,12 @@
*/
bool Resume()
{
- jump( m_saved, m_self, 0 );
+#if BOOST_VERSION <= 106000
+ jump( m_caller, m_callee, false );
+#else
+ auto result = (*m_callee)( this );
+ *m_callee = std::move( std::get<0>( result ) );
+#endif
return m_running;
}
@@ -208,61 +254,66 @@
static const int c_defaultStackSize = 2000000; // fixme: make configurable
/* real entry point of the coroutine */
+#if BOOST_VERSION <= 106000
static void callerStub( intptr_t aData )
+#else
+ static context_type callerStub( context_type caller, COROUTINE* cor )
+#endif
{
// get pointer to self
+#if BOOST_VERSION <= 106000
COROUTINE<ReturnType, ArgType>* cor = reinterpret_cast<COROUTINE<ReturnType, ArgType>*>( aData );
+#else
+ cor->m_caller = &caller;
+#endif
// call the coroutine method
- cor->m_retVal = cor->m_func( *cor->m_args );
+ cor->m_retVal = cor->m_func( *( cor->m_args ) );
cor->m_running = false;
// go back to wherever we came from.
- jump( cor->m_self, cor->m_saved, 0 ); // reinterpret_cast<intptr_t>( this ));
+#if BOOST_VERSION <= 106000
+ jump( cor->m_callee, cor->m_caller, 0 );
+#else
+ return caller;
+#endif
}
///> Wrapper for jump_fcontext to assure compatibility between different boost versions
- static inline intptr_t jump(boost::context::fcontext_t* aOld, boost::context::fcontext_t* aNew,
+#if BOOST_VERSION <= 106000
+ static inline intptr_t jump( context_type* aOld, context_type* aNew,
intptr_t aP, bool aPreserveFPU = true )
{
-#if BOOST_VERSION >= 105600
- return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
-#else
+#if BOOST_VERSION < 105600
return boost::context::jump_fcontext( aOld, aNew, aP, aPreserveFPU );
+#else
+ return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
#endif
}
+#endif
- template <typename T>
- struct strip_ref
- {
- typedef T result;
- };
+ std::function<ReturnType(ArgType)> m_func;
- template <typename T>
- struct strip_ref<T&>
- {
- typedef T result;
- };
+ bool m_running;
- DELEGATE<ReturnType, ArgType> m_func;
+#if BOOST_VERSION <= 106000
+ ///< coroutine stack
+ void* m_stack;
+
+ size_t m_stackSize;
+#endif
///< pointer to coroutine entry arguments. Stripped of references
///< to avoid compiler errors.
- typename strip_ref<ArgType>::result* m_args;
+ typename std::remove_reference<ArgType>::type* m_args;
+
ReturnType m_retVal;
///< saved caller context
- boost::context::fcontext_t* m_saved;
+ context_type* m_caller;
///< saved coroutine context
- boost::context::fcontext_t* m_self;
-
- ///< coroutine stack
- void* m_stack;
-
- size_t m_stackSize;
-
- bool m_running;
+ context_type* m_callee;
};
#endif
--- a/include/tool/tool_base.h
+++ b/include/tool/tool_base.h
@@ -31,7 +32,7 @@
#include <tool/tool_event.h>
#include <tool/tool_settings.h>
-#include <tool/delegate.h>
+#include <functional>
class EDA_ITEM;
class TOOL_MANAGER;
@@ -53,7 +54,9 @@
/// Unique identifier for tools
typedef int TOOL_ID;
-typedef DELEGATE<int, const TOOL_EVENT&> TOOL_STATE_FUNC;
+
+using TOOL_STATE_FUNC = std::function<int(const TOOL_EVENT&)>;
+
/**
* Class TOOL_BASE
--- a/include/tool/tool_interactive.h
+++ b/include/tool/tool_interactive.h
@@ -113,7 +114,7 @@
void TOOL_INTERACTIVE::Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
const TOOL_EVENT_LIST& aConditions )
{
- TOOL_STATE_FUNC sptr( static_cast<T*>( this ), aStateFunc );
+ TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
goInternal( sptr, aConditions );
}
+72
View File
@@ -0,0 +1,72 @@
<?xml version="1.0" ?>
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
<PISI>
<Source>
<Name>kicad</Name>
<Homepage>http://kicad-pcb.org/</Homepage>
<Packager>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Packager>
<License>GPLv1</License>
<IsA>library</IsA>
<Summary>Electronic schematic and printed circuit board (PCB) design tools</Summary>
<Description>Electronic schematic and printed circuit board (PCB) design tools</Description>
<Archive sha1sum="6e4276edd0761f47008038c5ba8435653b2aee59" type="tarxz">https://launchpad.net/kicad/4.0/4.0.7/+download/kicad-4.0.7.tar.xz</Archive>
<Archive sha1sum="27a4ea6fc4efe7f9fcea4734c880241217d8d5e7" type="targz" target="kicad-4.0.7">https://github.com/KiCad/kicad-i18n/archive/4.0.7.tar.gz</Archive>
<BuildDependencies>
<Dependency>swig</Dependency>
<Dependency>cmake</Dependency>
<Dependency>curl-devel</Dependency>
<Dependency>zlib-devel</Dependency>
<Dependency>glew-devel</Dependency>
<Dependency>cairo-devel</Dependency>
<Dependency>wxGTK-devel</Dependency>
<Dependency>boost-devel</Dependency>
<Dependency>libSM-devel</Dependency>
<Dependency>mesa-devel</Dependency>
<Dependency>doxygen</Dependency>
<Dependency>openssl-devel</Dependency>
<Dependency>python-devel</Dependency>
<Dependency>mesa-glu-devel</Dependency>
<Dependency>desktop-file-utils</Dependency>
</BuildDependencies>
<Patches>
<Patch>boost-1.61.patch</Patch>
</Patches>
</Source>
<Package>
<Name>kicad</Name>
<RuntimeDependencies>
<Dependency>curl</Dependency>
<Dependency>glew</Dependency>
<Dependency>mesa</Dependency>
<Dependency>boost</Dependency>
<Dependency>cairo</Dependency>
<Dependency>wxGTK</Dependency>
<Dependency>libgcc</Dependency>
<Dependency>python</Dependency>
<Dependency>libgomp</Dependency>
<Dependency>openssl</Dependency>
<Dependency>mesa-glu</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="executable">/usr/bin</Path>
<Path fileType="library">/usr/lib</Path>
<Path fileType="data">/usr/share</Path>
<Path fileType="localedata">/usr/share/locale</Path>
<Path fileType="doc">/usr/share/doc</Path>
</Files>
</Package>
<History>
<Update release="1">
<Date>2018-04-04</Date>
<Version>4.0.7</Version>
<Comment>First release</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
</History>
</PISI>
@@ -0,0 +1,8 @@
<?xml version="1.0" ?>
<PISI>
<Source>
<Name>kicad</Name>
<Summary xml:lang="tr">Electronic schematic and printed circuit board (PCB) design tools</Summary>
<Description xml:lang="tr">Electronic schematic and printed circuit board (PCB) design tools</Description>
</Source>
</PISI>