On 15 October 2010 16:32, Wayne Stambaugh <stambau...@verizon.net> wrote:
> On 10/15/2010 6:37 AM, Brian Sidebotham wrote:
>>> I already had a suspicion my patch was not complete.
>>> I was hoping to achieve that cmake does all the dependency checks and then 
>>> decides if there is enough to build it or to ask for other dependencies, 
>>> instead of finding out at linking-time.
>>>
>>>
>>> Probably we need to do the wxWidgets check before the expat check, right?
>>>
>>> So the patch should to the following (?):
>>> # only gl and mono can be detected
>>> find_package(wxWidgets COMPONENTS mono gl REQUIRED)
>
> Why is the wxWidgets monolithic library being used?  I can build separate
> wxWidgets libraries on Windows using both dynamic link and static libraries on
> both Mingw/MSYS and Visual Studio 2005 with no problems.  I usually use static
> because it make my life easier but I have successfully built Kicad both ways.
> If you are going use the monolithic library, use a command line switch as 
> shown
> below.
>
> option(KICAD_USE_WX_MONO "Enable/disable building with wxWidgets monolithic
> library (default OFF)")
>
> if(KICAD_USE_WX_MONO)
>    find_package( wxWidgets COMPONENTS mono gl REQUIRED )
> else(KICAD_USE_WX_MONO)
>    find_package( wxWidgets COMPONENTS gl adv html core net base xml aui 
> REQUIRED )
> endif(KICAD_USE_WX_MONO)
>
> Use the -DKICAD_USE_WX_MONO=ON switch when running CMake.
>
>>> if(NOT WIN32)
>>>        find_package(wxWidgets COMPONENTS gl adv html core net base xml 
>>> REQUIRED)
>>> endif(NOT WIN32)
>
> There is no reason to use if(NOT WIN32) here.  I know I've said this before 
> and
> I will say it again.  Build tools should test for features not platforms.
> Whenever you see WIN32, APPLE, POSIX, etc., try to replace it with a feature
> test solution.  See the "Recommendations for Writing Autoconf Macros" page of
> http://www.lrde.epita.fr/~adl/dl/autotools.pdf for an excellent explanation of
> why to test for features.  Unfortunately the CMake folks accept and create
> these kinds of tests.
>
> I know you thinking, how does that solve our expat library problem.  There are
> several ways to approach this problem but fortunately for us, the wxWidgets
> folks have a clue and provided a wxUSE_EXPAT definition when wxWidgets is 
> built
> using its own internal version of expat.  You should be able to use the CMake
> CheckSymbolExists macro to check for wxUSE_EXPAT in the setup.h file for the
> version of wxWidgets that was found.  Now you know which expat library to link
> against.  Assuming that the linker paths are defined correctly, you can link 
> to
> the correct library.  This is actually not the optimal way to do it.  On
> platforms that support wx-config, you should use it instead.  So we end up 
> with
> something as following.
>
> find_program( wx-config, HAS_WX_CONFIG )
>
> if( NOT HAS_WX_CONFIG OR CROSS_COMPILING )
>    CheckSymbolExists( wxUSE_EXPAT path_to_correct_wx_version/setup.h
> USE_WX_EXPAT )
>    if( USE_WX_EXPAT )
>        add_library( name_of_wx_widgets_expat_library )
>    else( USE_WX_EXPAT )
>        add_library( expat )
>    endif( USE_WX_EXPAT )
> endif( NOT HAS_WX_CONFIG OR CROSS_COMPILING )

That is a neat check for wx-config. There is already a windows port in
existence, so no doubt one day it'll make it into the standard windows
wxWidgets build. It's so much better than having to use a big list of
libraries in the link command.

Best Regards,

Brian.

_______________________________________________
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

Reply via email to