Hi Brian, You have a total comprehension of what is going on, and your solution has left the linux build working. So I would say thank you for an excellent job. I would hope windows users would say the same.
Comments below. On 10/05/2013 09:19 AM, Brian Sidebotham wrote: > Hi Guys, > > Attached is the current patch I can commit to enable Github plugin support > for MinGW. > > It enables OpenSSL, which can be pointed to by setting the OPENSSL_ROOT_DIR > when > configuring with CMake. I've not done any work on getting OpenSSL to compile > under windows > as it cross-compiles under Linux just fine. > > The boost build steps are a bit different to Linux and OSX. On windows we > need to specify > library subsets to b2 rather than bootstrap using a --with- prefix for all > required libraries. > > The installation of boost headers is slightly different under MinGW too, we > end up with an > include directory of ${BOOST_ROOT}/include/boost-1_54/ instead of just the > include base > directory. > > There were some linking problems with github where I had to add > ${wxWidgets_LIBRARIES}. I > guess that is safe to do across all platforms? boost::asio requires us to > link in a socket > layer under MinGW too, so ws2_32 is added for MinGW only. target_link_libraries() is additive, can be called many times without overwriting previous settings. So we should probably change the way you are doing the MINGW ws2_32. See below. > > Dick, if you've got time to review, could you give me your views and any > suggestions for > change? > > I should also add - this will not work with mingw32 as far as I have tested. > The > compilation of a subset of boost libraries does not work for me under the > mingw32. This is > probably a major problem as I expect most people who are using MinGW are > still using the > MinGW32 project and not the mingw-w64 project. With mingw32 using dwarf-2 > though it > doesn't really make any sense to me to use that project. > > Best Regards, > > Brian. > > github-mingw.diff > > > === modified file 'CMakeLists.txt' > --- CMakeLists.txt 2013-09-23 15:19:39 +0000 > +++ CMakeLists.txt 2013-10-05 14:01:22 +0000 > @@ -53,14 +53,7 @@ > > option( USE_FP_LIB_TABLE "Use the new footprint library table > implementation. ( default OFF)" ) > > -# BUILD_GITHUB_PLUGIN for MINGW is pretty demanding due to > download_openssl.cmake and openssl's > -# use of perl to drive its configure step. You might find it works in a > cross builder say on linux. > -# Dick is not personally supporting Windows any more with this exotic stuff. > Some other windows > -# developer will have to smooth out the build issues. So enable this for > MINGW without my help but > -# with my best wishes. > -if( NOT MINGW ) > - option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." OFF ) > -endif() > +option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." OFF ) > > > #Set version option (stable or testing) > > === modified file 'CMakeModules/download_boost.cmake' > --- CMakeModules/download_boost.cmake 2013-09-23 15:19:39 +0000 > +++ CMakeModules/download_boost.cmake 2013-10-05 14:00:23 +0000 > @@ -87,21 +87,27 @@ > > # It will probably be simpler to make this the only path in the future. > > - # (BTW "test" yields "unit_test_framework" when passed to > bootstrap.{sh,bat} ). > + # (BTW "test" yields "unit_test_framework" when passed to bootstrap.sh ). > #message( STATUS "BOOST_LIBS_BUILT:${BOOST_LIBS_BUILT}" ) > - string( REPLACE "unit_test_framework" "test" libs_csv > "${BOOST_LIBS_BUILT}" ) > - #message( STATUS "REPLACE libs_csv:${libs_csv}" ) > - > - string( REGEX REPLACE "\\;" "," libs_csv "${libs_csv}" ) > - #message( STATUS "libs_csv:${libs_csv}" ) > + string( REPLACE "unit_test_framework" "test" boost_libs_list > "${BOOST_LIBS_BUILT}" ) > + #message( STATUS "REPLACE libs_csv:${boost_libs_list}" ) > > if( MINGW ) > - set( bootstrap "bootstart.bat mingw" ) > + set( bootstrap bootstrap.bat mingw ) > + > + foreach( lib ${boost_libs_list} ) > + set( b2_libs ${b2_libs} --with-${lib} ) > + endforeach() > unset( PIC_STUFF ) > else() > - set( bootstrap bootstrap.sh ) > + string( REGEX REPLACE "\\;" "," libs_csv "${boost_libs_list}" ) > + #message( STATUS "libs_csv:${libs_csv}" ) > + > + set( bootstrap bootstrap.sh --with-libraries=${libs_csv} ) > # pass to *both* C and C++ compilers > set( PIC_STUFF "cflags=${PIC_FLAG}" ) > + set( BOOST_INCLUDE "${BOOST_ROOT}/include" ) > + unset( b2_libs ) > endif() > > ExternalProject_Add( boost > @@ -120,13 +126,13 @@ > > BINARY_DIR "${PREFIX}/src/boost/" > CONFIGURE_COMMAND ./${bootstrap} > - --with-libraries=${libs_csv} > > BUILD_COMMAND ./b2 > variant=release > threading=multi > toolset=gcc > ${PIC_STUFF} > + ${b2_libs} > #link=static > --prefix=<INSTALL_DIR> > install > @@ -134,12 +140,35 @@ > INSTALL_COMMAND "" > ) > > + if( MINGW ) > + execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion > + OUTPUT_VARIABLE GCC_VERSION > + OUTPUT_STRIP_TRAILING_WHITESPACE ) > + > + string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.[0-9]+.*" "\\1\\2" > BOOST_GCC_VERSION ${GCC_VERSION} ) > + #message( STATUS "BOOST_GCC_VERSION: ${BOOST_GCC_VERSION}" ) > + > + string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9])" "\\1_\\2" > BOOST_LIB_VERSION ${BOOST_RELEASE} ) > + #message( STATUS "BOOST_LIB_VERSION: ${BOOST_LIB_VERSION}" ) > + > + # adjust the names of the libraries to suit the build. There's no > + # symbolic links provided on the MinGW build to allow us to use > + # generic names for the libs > + foreach( lib ${BOOST_LIBS_BUILT} ) > + set( mingw_boost_libs ${mingw_boost_libs} > ${lib}-mgw${BOOST_GCC_VERSION}-mt-${BOOST_LIB_VERSION} ) > + endforeach() > + > + set( BOOST_LIBS_BUILT ${mingw_boost_libs} ) > + set( BOOST_INCLUDE > "${BOOST_ROOT}/include/boost-${BOOST_LIB_VERSION}" ) > + unset( mingw_boost_libs ) > + endif() > + > set( boost_libs "" ) > set_boost_lib_names( "${BOOST_LIBS_BUILT}" boost_libs ) > #message( STATUS "BOOST_ROOT:${BOOST_ROOT} boost_libs:${boost_libs}" ) > - set( Boost_LIBRARIES ${boost_libs} CACHE FILEPATH "Boost > libraries directory" ) > - set( Boost_INCLUDE_DIR "${BOOST_ROOT}/include" CACHE FILEPATH "Boost > include directory" ) > - > + set( Boost_LIBRARIES ${boost_libs} CACHE FILEPATH "Boost > libraries directory" ) > + set( Boost_INCLUDE_DIR "${BOOST_INCLUDE}" CACHE FILEPATH "Boost include > directory" ) > + #message( STATUS "Boost_INCLUDE_DIR: ${Boost_INCLUDE_DIR}" ) > > else( BUILD_GITHUB_PLUGIN ) > > > === modified file 'pcbnew/github/CMakeLists.txt' > --- pcbnew/github/CMakeLists.txt 2013-09-21 19:20:31 +0000 > +++ pcbnew/github/CMakeLists.txt 2013-10-04 23:04:56 +0000 > @@ -26,7 +26,7 @@ > ################################################# > include( download_avhttp ) > > -if( MINGW ) > +if( MINGW AND NOT OPENSSL_ROOT_DIR ) > # download, compile and install to scratch dir a recent OPENSSL library > and headers > include( download_openssl ) > else() > @@ -58,10 +58,16 @@ > github_plugin.cpp > ) > Remove this if() block: > +if( MINGW ) > + set( GITHUB_ADDITIONAL_LIBS ws2_32 ) > +endif() > + > # No, you don't get github without boost and openssl > target_link_libraries( github_plugin > ${Boost_LIBRARIES} > ${OPENSSL_LIBRARIES} > + ${wxWidgets_LIBRARIES} remove this: > + ${GITHUB_ADDITIONAL_LIBS} > ) and replace it with this trailing additive statement: if( MINGW ) target_link_libraries( github_plugin ws2_32 ) endif() > > add_dependencies( github_plugin boost ) > > > > _______________________________________________ > Mailing list: https://launchpad.net/~kicad-developers > Post to : kicad-developers@lists.launchpad.net > Unsubscribe : https://launchpad.net/~kicad-developers > More help : https://help.launchpad.net/ListHelp > _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp