findwxwidgets.cmake

来自「编译器」· CMAKE 代码 · 共 970 行 · 第 1/3 页

CMAKE
970
字号
      WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?")

      # process selection to set wxWidgets_SELECT_OPTIONS
      WX_CONFIG_SELECT_SET_OPTIONS()
      DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}")

      # run the wx-config program to get cxxflags
      EXECUTE_PROCESS(
        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
          ${wxWidgets_SELECT_OPTIONS} --cxxflags
        OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
        RESULT_VARIABLE RET
        ERROR_QUIET
        )
      IF(RET EQUAL 0)
        STRING(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS)
        SEPARATE_ARGUMENTS(wxWidgets_CXX_FLAGS)

        DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")

        # parse definitions from cxxflags; drop -D* from CXXFLAGS
        STRING(REGEX MATCHALL "-D[^;]+"
          wxWidgets_DEFINITIONS  "${wxWidgets_CXX_FLAGS}")
        STRING(REGEX REPLACE "-D[^;]+;" ""
          wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")

        # parse include dirs from cxxflags; drop -I prefix
        STRING(REGEX MATCHALL "-I[^;]+"
          wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}")
        STRING(REGEX REPLACE "-I[^;]+;" ""
          wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
        STRING(REPLACE "-I" ""
          wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}")

        DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
        DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
        DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")

      ELSE(RET EQUAL 0)
        SET(wxWidgets_FOUND FALSE)
        DBG_MSG_V(
          "${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}")
      ENDIF(RET EQUAL 0)

      # run the wx-config program to get the libs
      # - NOTE: wx-config doesn't verify that the libs requested exist
      #         it just produces the names. Maybe a TRY_COMPILE would
      #         be useful here...
      STRING(REPLACE ";" ","
        wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}")
      EXECUTE_PROCESS(
        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
          ${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS}
        OUTPUT_VARIABLE wxWidgets_LIBRARIES
        RESULT_VARIABLE RET
        ERROR_QUIET
        )
      IF(RET EQUAL 0)
        STRING(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES)
        SEPARATE_ARGUMENTS(wxWidgets_LIBRARIES)
        STRING(REPLACE "-framework;" "-framework "
          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
        STRING(REPLACE "-arch;" "-arch "
          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
        STRING(REPLACE "-isysroot;" "-isysroot "
          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")

        # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
        STRING(REGEX MATCHALL "-L[^;]+"
          wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}")
        STRING(REPLACE "-L" ""
          wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}")

        DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
        DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")

      ELSE(RET EQUAL 0)
        SET(wxWidgets_FOUND FALSE)
        DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}")
      ENDIF(RET EQUAL 0)
    ENDIF(wxWidgets_CONFIG_EXECUTABLE)

#=====================================================================
# Neither UNIX_STYLE_FIND, nor WIN32_STYLE_FIND
#=====================================================================
  ELSE(UNIX_STYLE_FIND)
    IF(NOT wxWidgets_FIND_QUIETLY)
      MESSAGE(STATUS
        "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
        "  Platform unknown/unsupported. It's neither WIN32 nor UNIX "
        "style find."
        )
    ENDIF(NOT wxWidgets_FIND_QUIETLY)
  ENDIF(UNIX_STYLE_FIND)
ENDIF(WIN32_STYLE_FIND)

# Debug output:
DBG_MSG("wxWidgets_FOUND           : ${wxWidgets_FOUND}")
DBG_MSG("wxWidgets_INCLUDE_DIRS    : ${wxWidgets_INCLUDE_DIRS}")
DBG_MSG("wxWidgets_LIBRARY_DIRS    : ${wxWidgets_LIBRARY_DIRS}")
DBG_MSG("wxWidgets_LIBRARIES       : ${wxWidgets_LIBRARIES}")
DBG_MSG("wxWidgets_CXX_FLAGS       : ${wxWidgets_CXX_FLAGS}")
DBG_MSG("wxWidgets_USE_FILE        : ${wxWidgets_USE_FILE}")

#=====================================================================
#=====================================================================
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(wxWidgets DEFAULT_MSG wxWidgets_FOUND)
# Maintain consistency with all other variables.
SET(wxWidgets_FOUND ${WXWIDGETS_FOUND})

#=====================================================================
# Macros for use in wxWidgets apps.
# - This module will not fail to find wxWidgets based on the code
#   below. Hence, it's required to check for validity of:
#
# wxWidgets_wxrc_EXECUTABLE
#=====================================================================

# Resource file compiler.
FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc
  ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw
  )

# 
# WX_SPLIT_ARGUMENTS_ON(<keyword> <left> <right> <arg1> <arg2> ...)
# 
# Sets <left> and <right> to contain arguments to the left and right,
# respectively, of <keyword>.
# 
# Example usage:
#  FUNCTION(WXWIDGETS_ADD_RESOURCES outfiles)
#    WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN})
#    ...
#  ENDFUNCTION(WXWIDGETS_ADD_RESOURCES)
#
#  WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C)
# 
# NOTE: This is a generic piece of code that should be renamed to
# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
# FindPackageStandardArgs.cmake. At the time of this writing
# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied
# here a bit more generalized. So, there are already two find modules
# using this approach.
#
FUNCTION(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar)
  # FIXME: Document that the input variables will be cleared.
  #LIST(APPEND ${_leftvar}  "")
  #LIST(APPEND ${_rightvar} "")
  SET(${_leftvar}  "")
  SET(${_rightvar} "")

  SET(_doing_right FALSE)
  FOREACH(element ${ARGN})
    IF("${element}" STREQUAL "${_keyword}")
      SET(_doing_right TRUE)
    ELSE("${element}" STREQUAL "${_keyword}")
      IF(_doing_right)
        LIST(APPEND ${_rightvar} "${element}")
      ELSE(_doing_right)
        LIST(APPEND ${_leftvar} "${element}")
      ENDIF(_doing_right)
    ENDIF("${element}" STREQUAL "${_keyword}")
  ENDFOREACH(element)

  SET(${_leftvar}  ${${_leftvar}}  PARENT_SCOPE)
  SET(${_rightvar} ${${_rightvar}} PARENT_SCOPE)
ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON)

#
# WX_GET_DEPENDENCIES_FROM_XML(
#   <depends>
#   <match_pattern>
#   <clean_pattern>
#   <xml_contents>
#   <depends_path>
#   )
#
# FIXME: Add documentation here...
#
FUNCTION(WX_GET_DEPENDENCIES_FROM_XML
    _depends
    _match_patt
    _clean_patt
    _xml_contents
    _depends_path
    )

  STRING(REGEX MATCHALL
    ${_match_patt}
    dep_file_list
    "${${_xml_contents}}"
    )
  FOREACH(dep_file ${dep_file_list})
    STRING(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}")

    # make the file have an absolute path
    IF(NOT IS_ABSOLUTE "${dep_file}")
      SET(dep_file "${${_depends_path}}/${dep_file}")
    ENDIF(NOT IS_ABSOLUTE "${dep_file}")

    # append file to dependency list
    LIST(APPEND ${_depends} "${dep_file}")
  ENDFOREACH(dep_file)

  SET(${_depends} ${${_depends}} PARENT_SCOPE)
ENDFUNCTION(WX_GET_DEPENDENCIES_FROM_XML)

# 
# WXWIDGETS_ADD_RESOURCES(<sources> <xrc_files>
#                         OPTIONS <options> [NO_CPP_CODE])
# 
# Adds a custom command for resource file compilation of the
# <xrc_files> and appends the output files to <sources>.
# 
# Example usages:
#   WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc)
#   WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx)
#
FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles)
  WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN})

  # Parse files for dependencies.
  SET(rc_file_list_abs "")
  SET(rc_depends       "")
  FOREACH(rc_file ${rc_file_list})
    GET_FILENAME_COMPONENT(depends_path ${rc_file} PATH)

    GET_FILENAME_COMPONENT(rc_file_abs ${rc_file} ABSOLUTE)
    LIST(APPEND rc_file_list_abs "${rc_file_abs}")

    # All files have absolute paths or paths relative to the location
    # of the rc file.
    FILE(READ "${rc_file_abs}" rc_file_contents)

    # get bitmap/bitmap2 files
    WX_GET_DEPENDENCIES_FROM_XML(
      rc_depends
      "<bitmap[^<]+"
      "^<bitmap[^>]*>"
      rc_file_contents
      depends_path
      )

    # get url files
    WX_GET_DEPENDENCIES_FROM_XML(
      rc_depends
      "<url[^<]+"
      "^<url[^>]*>"
      rc_file_contents
      depends_path
      )

    # get wxIcon files
    WX_GET_DEPENDENCIES_FROM_XML(
      rc_depends
      "<object[^>]*class=\"wxIcon\"[^<]+"
      "^<object[^>]*>"
      rc_file_contents
      depends_path
      )
  ENDFOREACH(rc_file)

  #
  # Parse options.
  # 
  # If NO_CPP_CODE option specified, then produce .xrs file rather
  # than a .cpp file (i.e., don't add the default --cpp-code option).
  LIST(FIND rc_options NO_CPP_CODE index)
  IF(index EQUAL -1)
    LIST(APPEND rc_options --cpp-code)
    # wxrc's default output filename for cpp code.
    SET(outfile resource.cpp)
  ELSE(index EQUAL -1)
    LIST(REMOVE_AT rc_options ${index})
    # wxrc's default output filename for xrs file.
    SET(outfile resource.xrs)
  ENDIF(index EQUAL -1)

  # Get output name for use in ADD_CUSTOM_COMMAND.
  # - short option scanning
  LIST(FIND rc_options -o index)
  IF(NOT index EQUAL -1)
    MATH(EXPR filename_index "${index} + 1")
    LIST(GET rc_options ${filename_index} outfile)
    #LIST(REMOVE_AT rc_options ${index} ${filename_index})
  ENDIF(NOT index EQUAL -1)
  # - long option scanning
  STRING(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}")
  IF(outfile_opt)
    STRING(REPLACE "--output=" "" outfile "${outfile_opt}")
  ENDIF(outfile_opt)
  #STRING(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
  #STRING(REGEX REPLACE ";$" "" rc_options "${rc_options}")
  
  IF(NOT IS_ABSOLUTE "${outfile}")
    SET(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
  ENDIF(NOT IS_ABSOLUTE "${outfile}")
  ADD_CUSTOM_COMMAND(
    OUTPUT "${outfile}"
    COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs}
    DEPENDS ${rc_file_list_abs} ${rc_depends}
    )

  # Add generated header to output file list.
  LIST(FIND rc_options -e short_index)
  LIST(FIND rc_options --extra-cpp-code long_index)
  IF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
    GET_FILENAME_COMPONENT(outfile_ext ${outfile} EXT)
    STRING(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}")
    LIST(APPEND ${_outfiles} "${outfile_header}")
    SET_SOURCE_FILES_PROPERTIES(
      "${outfile_header}" PROPERTIES GENERATED TRUE
      )
  ENDIF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)

  # Add generated file to output file list.
  LIST(APPEND ${_outfiles} "${outfile}")

  SET(${_outfiles} ${${_outfiles}} PARENT_SCOPE)
ENDFUNCTION(WXWIDGETS_ADD_RESOURCES)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?