diff --git a/kicad-2015.03.21-boost-1.61.patch b/kicad-2015.03.21-boost-1.61.patch new file mode 100644 index 0000000..91a6982 --- /dev/null +++ b/kicad-2015.03.21-boost-1.61.patch @@ -0,0 +1,372 @@ +diff -urN kicad-2015.03.21/common/tool/tool_manager.cpp kicad-2015.03.21-patched/common/tool/tool_manager.cpp +--- kicad-2015.03.21/common/tool/tool_manager.cpp 2015-03-21 23:21:48.000000000 +1000 ++++ kicad-2015.03.21-patched/common/tool/tool_manager.cpp 2016-12-06 22:29:28.103774738 +1000 +@@ -513,11 +513,11 @@ + if( st->cofunc ) + st->Push(); + ++ st->cofunc = new COROUTINE( tr.second ); ++ + // as the state changes, the transition table has to be set up again + st->transitions.clear(); + +- st->cofunc = new COROUTINE( tr.second ); +- + // got match? Run the handler. + st->cofunc->Call( aEvent ); + +diff -urN kicad-2015.03.21/include/tool/coroutine.h kicad-2015.03.21-patched/include/tool/coroutine.h +--- kicad-2015.03.21/include/tool/coroutine.h 2015-03-21 23:21:48.000000000 +1000 ++++ kicad-2015.03.21-patched/include/tool/coroutine.h 2016-12-06 22:29:28.105774738 +1000 +@@ -3,6 +3,7 @@ + * + * Copyright (C) 2013 CERN + * @author Tomasz Wlostowski ++ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -27,10 +28,15 @@ + + #include + +-#include + #include ++#include + +-#include "delegate.h" ++#if BOOST_VERSION <= 106000 ++#include ++#else ++#include ++#include ++#endif + + /** + * Class COROUNTINE. +@@ -53,13 +59,12 @@ + * See coroutine_example.cpp for sample code. + */ + +-template ++template + 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 + 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,26 +82,40 @@ + * Constructor + * Creates a coroutine from a delegate object + */ +- COROUTINE( DELEGATE aEntry ) : +- m_func( aEntry ), m_saved( NULL ), m_self( NULL ), m_stack( NULL ), +- m_stackSize( c_defaultStackSize ), m_running( false ) ++ COROUTINE( std::function 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 ) + { + } + + ~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; ++#endif ++ ++public: + /** + * Function Yield() + * +@@ -107,7 +125,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 + } + + /** +@@ -119,7 +142,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 + } + + /** +@@ -127,9 +154,9 @@ + * + * Defines the entry point for the coroutine, if not set in the constructor. + */ +- void SetEntry( DELEGATE aEntry ) ++ void SetEntry( std::function aEntry ) + { +- m_func = aEntry; ++ m_func = std::move( aEntry ); + } + + /* Function Call() +@@ -140,6 +167,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 ); + +@@ -148,22 +179,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( this ) ); ++#if BOOST_VERSION <= 106000 ++ jump( m_caller, m_callee, reinterpret_cast( this ) ); ++#else ++ auto result = (*m_callee)( this ); ++ *m_callee = std::move( std::get<0>( result ) ); ++#endif + return m_running; + } + +@@ -176,7 +217,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; + } +@@ -205,61 +251,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* cor = reinterpret_cast*>( 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( 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 +- struct strip_ref +- { +- typedef T result; +- }; ++ std::function m_func; + +- template +- struct strip_ref +- { +- typedef T result; +- }; ++ bool m_running; + +- DELEGATE 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::result* m_args; ++ typename std::remove_reference::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 +diff -urN kicad-2015.03.21/include/tool/tool_base.h kicad-2015.03.21-patched/include/tool/tool_base.h +--- kicad-2015.03.21/include/tool/tool_base.h 2015-03-21 23:21:48.000000000 +1000 ++++ kicad-2015.03.21-patched/include/tool/tool_base.h 2016-12-06 22:30:28.474774500 +1000 +@@ -3,6 +3,7 @@ + * + * Copyright (C) 2013 CERN + * @author Tomasz Wlostowski ++ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -29,7 +30,7 @@ + #include // for KICAD_T + + #include +-#include ++#include + + class EDA_ITEM; + class TOOL_MANAGER; +@@ -51,7 +52,9 @@ + + /// Unique identifier for tools + typedef int TOOL_ID; +-typedef DELEGATE TOOL_STATE_FUNC; ++ ++using TOOL_STATE_FUNC = std::function; ++ + + /** + * Class TOOL_BASE +diff -urN kicad-2015.03.21/include/tool/tool_interactive.h kicad-2015.03.21-patched/include/tool/tool_interactive.h +--- kicad-2015.03.21/include/tool/tool_interactive.h 2015-03-21 23:21:48.000000000 +1000 ++++ kicad-2015.03.21-patched/include/tool/tool_interactive.h 2016-12-06 22:29:28.106774738 +1000 +@@ -3,6 +3,7 @@ + * + * Copyright (C) 2013 CERN + * @author Tomasz Wlostowski ++ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -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( this ), aStateFunc ); ++ TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast( this ), std::placeholders::_1 ); + + goInternal( sptr, aConditions ); + } diff --git a/kicad.spec b/kicad.spec index 2892303..7f9e17f 100644 --- a/kicad.spec +++ b/kicad.spec @@ -1,12 +1,12 @@ %define revision 5528 +Summary: EDA software suite for creation of schematic diagrams and PCBs Name: kicad Version: 2015.03.21 -Release: 0.rev%{revision}.2 +Release: 0.rev%{revision}.3 Epoch: 1 -Summary: EDA software suite for creation of schematic diagrams and PCBs -Group: Sciences/Computer science License: GPLv2+ +Group: Sciences/Computer science Url: http://www.kicad-pcb.org # URL2: https://launchpad.net/kicad # URL3: http://orson.net.pl/pub/kicad/ @@ -19,22 +19,23 @@ Url: http://www.kicad-pcb.org # kicad-export.sh ... export BZR repositories and create tarballs # kicad-walter-libs.sh ... download, unpack and prepare tarball with walter libs -Source: %{name}-%{version}.tar.xz +Source0: %{name}-%{version}.tar.xz Source1: %{name}-doc-%{version}.tar.xz Source2: %{name}-libraries-%{version}.tar.xz Source3: %{name}-footprints-%{version}.tar.xz Source7: Epcos-MKT-1.0.tar.bz2 Source8: %{name}-walter-libraries-%{version}.tar.xz +Patch0: kicad-2015.03.21-boost-1.61.patch Patch1: kicad-2015.01.02-nostrip.patch Patch2: kicad-2015.01.02-freerouting.patch -BuildRequires: desktop-file-utils -BuildRequires: wxgtku3.0-devel -BuildRequires: boost-devel BuildRequires: cmake +BuildRequires: desktop-file-utils BuildRequires: doxygen -BuildRequires: glew-devel -BuildRequires: openssl-devel +BuildRequires: boost-devel +BuildRequires: wxgtku3.0-devel +BuildRequires: pkgconfig(glew) +BuildRequires: pkgconfig(openssl) Requires: electronics-menu Requires: freerouting @@ -84,13 +85,13 @@ KiCad is a set of four softwares and a project manager: #---------------------------------------------------------------------------- -%package doc +%package doc Summary: Documentation for KiCad Group: Documentation License: GPLv2+ BuildArch: noarch -%description doc +%description doc Documentation and tutorials for KiCad in English. %files doc @@ -105,14 +106,14 @@ Documentation and tutorials for KiCad in English. #---------------------------------------------------------------------------- -%package doc-de +%package doc-de Summary: Documentation for KiCad in German Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-de BuildArch: noarch -%description doc-de +%description doc-de Documentation and tutorials for KiCad in German %files doc-de @@ -121,14 +122,14 @@ Documentation and tutorials for KiCad in German #---------------------------------------------------------------------------- -%package doc-es +%package doc-es Summary: Documentation for KiCad in Spanish Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-es BuildArch: noarch -%description doc-es +%description doc-es Documentation and tutorials for KiCad in Spanish %files doc-es @@ -137,14 +138,14 @@ Documentation and tutorials for KiCad in Spanish #---------------------------------------------------------------------------- -%package doc-fr +%package doc-fr Summary: Documentation for KiCad in French Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-fr BuildArch: noarch -%description doc-fr +%description doc-fr Documentation and tutorials for KiCad in French %files doc-fr @@ -153,14 +154,14 @@ Documentation and tutorials for KiCad in French #---------------------------------------------------------------------------- -%package doc-hu +%package doc-hu Summary: Documentation for KiCad in Hungarian Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-hu BuildArch: noarch -%description doc-hu +%description doc-hu Documentation and tutorials for KiCad in Hungarian %files doc-hu @@ -168,14 +169,14 @@ Documentation and tutorials for KiCad in Hungarian #---------------------------------------------------------------------------- -%package doc-it +%package doc-it Summary: Documentation for KiCad in Italian Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-it BuildArch: noarch -%description doc-it +%description doc-it Documentation and tutorials for KiCad in Italian %files doc-it @@ -184,14 +185,14 @@ Documentation and tutorials for KiCad in Italian #---------------------------------------------------------------------------- -%package doc-ja +%package doc-ja Summary: Documentation for KiCad in Japanese Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-ja BuildArch: noarch -%description doc-ja +%description doc-ja Documentation and tutorials for KiCad in Japanese %files doc-ja @@ -201,14 +202,14 @@ Documentation and tutorials for KiCad in Japanese #---------------------------------------------------------------------------- -%package doc-pl +%package doc-pl Summary: Documentation for KiCad in Polish Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-pl BuildArch: noarch -%description doc-pl +%description doc-pl Documentation and tutorials for KiCad in Polish %files doc-pl @@ -217,14 +218,14 @@ Documentation and tutorials for KiCad in Polish #---------------------------------------------------------------------------- -%package doc-pt +%package doc-pt Summary: Documentation for KiCad in Portuguese Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-pt BuildArch: noarch -%description doc-pt +%description doc-pt Documentation and tutorials for KiCad in Portuguese %files doc-pt @@ -232,14 +233,14 @@ Documentation and tutorials for KiCad in Portuguese #---------------------------------------------------------------------------- -%package doc-ru +%package doc-ru Summary: Documentation for KiCad in Russian Group: Documentation Requires: %{name}-doc = %{EVRD} Requires: locales-ru BuildArch: noarch -%description doc-ru +%description doc-ru Documentation and tutorials for KiCad in Russian %files doc-ru @@ -248,7 +249,7 @@ Documentation and tutorials for KiCad in Russian #---------------------------------------------------------------------------- -%package doc-zh_CN +%package doc-zh_CN Summary: Documentation for KiCad in Chinese Group: Documentation Requires: %{name}-doc = %{EVRD} @@ -266,6 +267,7 @@ Documentation and tutorials for KiCad in Chinese %prep %setup -q -a 1 -a 2 -a 3 -a 7 -a 8 +%patch0 -p1 %patch1 -p1 %patch2 -p1 @@ -275,13 +277,12 @@ iconv -f iso8859-1 -t utf-8 AUTHORS.txt > AUTHORS.conv && mv -f AUTHORS.conv AUT #multilibs %ifarch x86_64 sparc64 ppc64 amd64 s390x -%{__sed} -i "s|KICAD_PLUGINS lib/kicad/plugins|KICAD_PLUGINS lib64/kicad/plugins|" CMakeLists.txt +se} -i "s|KICAD_PLUGINS lib/kicad/plugins|KICAD_PLUGINS lib64/kicad/plugins|" CMakeLists.txt #%{__sed} -i "s|/usr/lib/kicad|/usr/lib64/kicad|" %{SOURCE3} %endif %build - # Add Epcos library cd Epcos-MKT-1.0 cp -pR library ../%{name}-libraries-%{version}/