← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] Check required libraries in FindwxWidgets.cmake

 

This looks like the same patch as the first one.

On 3/20/2017 3:49 PM, Jan Mrázek wrote:
> Hi,
> 
> I have taken your points in account and made a much nicer solution
> (patch attached).
> 
> Dne 20.3.2017 v 18:33 Wayne Stambaugh napsal(a):
>> On 3/20/2017 11:15 AM, Jan Mrázek wrote:
>>> There are no missing headers, only some parts of the headers are
>>> #ifdefed out. This is the reason I looked for the build configuration.
>>> According to guys from wxWidgets team, #ifdefed parts of the headers are
>>> defined by the packed libraries.
>> I wasn't talking about the #ifdefed out parts of the wx headers.  If
>> libwxbase3.0-dev is not installed, none of the wx header are installed
>> even though wx-config is installed.  That is the fundamental problem.
>> Finding the libraries will not resolve the build issues.
>>> I agree with you, that the solution is not ideal and the ideal solution
>>> is probably out-of KiCAD's scope. But on the other hand, I think it is
>>> not a good situation, when project build can fail with a mysterious
>>> error on two commonly-spread distributions. Maybe just showing a warning
>>> in CMake ("Following libraries are missing. Please check that your
>>> distribution of wxWidgets.") might be a good compromise?
>> The config should always fail when there are missing build dependencies.
>>   What really should happen is the cmake find() macros should be used to
>> confirm the appropriate library and header files are install on the
>> system.  You could use wx-config to determine to appropriate install
>> paths and library names but you still need to use find() to verify they
>> actually exist on the system.
>>
>>>
>>> Dne 20.3.2017 v 15:55 Wayne Stambaugh napsal(a):
>>>> I'm confused as to why you are checking for just the libraries rather
>>>> than the missing headers which cause the build error.  The libraries
>>>> can
>>>> be present and the headers still missing since libwxbase3.0-dev is
>>>> not a
>>>> dependency of libwxbase3.0 so kicad will fail to build in this case.
>>>> The opposite cannot happen as libwxbase3.0 is a dependency for
>>>> libwxbase3.0-dev.  This is the way wxwidgets is packaged in Debain so
>>>> I'm guessing Ubuntu is the same.
>>>>
>>>> IMO, the real problem lies in the packaging of wxwidgets.  The
>>>> wx-config
>>>> file is part of the wxcommon package which doesn't make much sense to
>>>> me.  Should it not be distributed with the libwxbase3.0-dev package?
>>>> AFAICK, wx-config is used to determine the build configuration for
>>>> wxwidgets.  What other purpose would it be used for?  I would think
>>>> that
>>>> the only reason you would need to call wx-config is when compiling a
>>>> program that depends on wxwidgets which would require both the headers
>>>> and libraries.
>>>>
>>>> The other issue I see with this patch is that it depends on the help
>>>> output of wx-config.  I would think that depending on this to be
>>>> consistent might be wishful thinking leading to maintenance issues.  I
>>>> am not thrilled with the idea of patching our build config to fix what
>>>> seems to me to be a packaging issue.
>>>>
>>>> On 3/20/2017 10:16 AM, Jan Mrázek wrote:
>>>>> Both official one and KiCad one version of FindwxWidgets.cmake do not
>>>>> check if
>>>>> all the required components are part of the wxWidgets build. This
>>>>> couses trouble
>>>>> on Ubuntu when user misses libwxgtk3.0-dev package - CMake succeeds,
>>>>> build does
>>>>> not.
>>>>>
>>>>> Probably only posibility to get a list of components is to grep
>>>>> output of
>>>>> wx-config.
>>>>>
>>>>> Base component is removed from the dependencies as it is not present
>>>>> on GUI
>>>>> builds of wxWidgets.
>>>>>
>>>>> Fixes: lp:1630020
>>>>> * https://bugs.launchpad.net/kicad/+bug/1630020
>>>>> ---
>>>>>    CMakeLists.txt                   |  2 +-
>>>>>    CMakeModules/FindwxWidgets.cmake | 36
>>>>> ++++++++++++++++++++++++++++++++++++
>>>>>    2 files changed, 37 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/CMakeLists.txt b/CMakeLists.txt
>>>>> index 18f2052e1..63f5b17a5 100644
>>>>> --- a/CMakeLists.txt
>>>>> +++ b/CMakeLists.txt
>>>>> @@ -511,7 +511,7 @@ add_definitions( -DWX_COMPATIBILITY )
>>>>>    # See line 41 of CMakeModules/FindwxWidgets.cmake
>>>>>    set( wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS}
>>>>> --static=no )
>>>>>    -find_package( wxWidgets 3.0.0 COMPONENTS gl aui adv html core net
>>>>> base xml stc REQUIRED )
>>>>> +find_package( wxWidgets 3.0.0 REQUIRED gl aui adv html core net xml
>>>>> stc )
>>>>>      # Include wxWidgets macros.
>>>>>    include( ${wxWidgets_USE_FILE} )
>>>>> diff --git a/CMakeModules/FindwxWidgets.cmake
>>>>> b/CMakeModules/FindwxWidgets.cmake
>>>>> index 9a6e56f7b..cb13bf93a 100644
>>>>> --- a/CMakeModules/FindwxWidgets.cmake
>>>>> +++ b/CMakeModules/FindwxWidgets.cmake
>>>>> @@ -141,6 +141,7 @@
>>>>>    #
>>>>>    # Miguel A. Figueroa-Villanueva (miguelf at ieee dot org).
>>>>>    # Jan Woetzel (jw at mip.informatik.uni-kiel.de).
>>>>> +# Jan Mrázek (email at honzamrazek.cz)
>>>>>    #
>>>>>    # Based on previous works of:
>>>>>    # Jan Woetzel (FindwxWindows.cmake),
>>>>> @@ -728,6 +729,38 @@ else()
>>>>>          endforeach()
>>>>>        endmacro()
>>>>>    +    #
>>>>> +    # Check if all the required libraries are present in the build.
>>>>> The only way
>>>>> +    # to find out the list of libraries is to run wx-config and grep
>>>>> its output
>>>>> +    # - libraries are hardcoded in the help text.
>>>>> +    #
>>>>> +    macro(WX_CONFIG_CHECK_LIBS)
>>>>> +      execute_process(
>>>>> +        COMMAND "${wxWidgets_CONFIG_EXECUTABLE}"
>>>>> +        OUTPUT_VARIABLE _wx_selected_config
>>>>> +        ERROR_VARIABLE _wx_selected_config
>>>>> +        RESULT_VARIABLE _wx_result
>>>>> +        ERROR_QUIET
>>>>> +        )
>>>>> +      string(REGEX MATCH "Available libraries in this build
>>>>> are:\n(.*)\n"
>>>>> +       _wx_available_libs ${_wx_selected_config})
>>>>> +      string(REGEX REPLACE "Available libraries in this build
>>>>> are:\n(.*)\n"
>>>>> +        "\\1" _wx_available_libs ${_wx_available_libs})
>>>>> +      string(STRIP _wx_available_libs ${_wx_available_libs})
>>>>> +      string(REPLACE " " ";" _wx_available_libs
>>>>> "${_wx_available_libs}")
>>>>> +      foreach(lib ${wxWidgets_FIND_COMPONENTS})
>>>>> +        list(FIND _wx_available_libs "${lib}" _index)
>>>>> +        if (${_index} LESS 0)
>>>>> +          list(APPEND _missing ${lib})
>>>>> +          DBG_MSG("Library ${lib} not found")
>>>>> +        endif()
>>>>> +      endforeach()
>>>>> +      if (_missing)
>>>>> +        string(REPLACE ";" " " _missing "${_missing}")
>>>>> +        message(FATAL_ERROR "Missing following wxWidgets libraris:
>>>>> ${_missing}")
>>>>> +      endif()
>>>>> +    endmacro()
>>>>> +
>>>>>       
>>>>> #-----------------------------------------------------------------
>>>>>        # UNIX: Start actual work.
>>>>>       
>>>>> #-----------------------------------------------------------------
>>>>> @@ -741,6 +774,9 @@ else()
>>>>>        if(wxWidgets_CONFIG_EXECUTABLE)
>>>>>          set(wxWidgets_FOUND TRUE)
>>>>>    +      # check if current build supports all required libraries
>>>>> +      WX_CONFIG_CHECK_LIBS()
>>>>> +
>>>>>          # get defaults based on "wx-config --selected-config"
>>>>>          WX_CONFIG_SELECT_GET_DEFAULT()
>>>>>   
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~kicad-developers
>>>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>>> More help   : https://help.launchpad.net/ListHelp
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~kicad-developers
>>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>> More help   : https://help.launchpad.net/ListHelp
>> _______________________________________________
>> Mailing list: https://launchpad.net/~kicad-developers
>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~kicad-developers
>> More help   : https://help.launchpad.net/ListHelp
> 
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
> 


Follow ups

References