~ubuntu-branches/ubuntu/jaunty/adept/jaunty

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
## FindPkgConfig.cmake
## by  Albert Strasheim <http://students . ee . sun . ac . za/~albert/>
## and Alex Brooks (a.brooks at acfr . usyd . edu . au)
##
## This module finds packages using pkg-config, which retrieves
## information about packages from special metadata files.
##
## See http://www . freedesktop . org/Software/pkgconfig/
##
## -------------------------------------------------------------------
##
## Usage:
##
## INCLUDE( ${CMAKE_ROOT}/Modules/FindPkgConfig.cmake)
## 
## IF ( CMAKE_EPT_PKGCONFIG_EXECUTABLE )
##
##     # Find all the librtk stuff with pkg-config
##     EPT_PKGCONFIG( "librtk >= 2.0" HAVE_RTK RTK_INCLUDE_DIRS RTK_DEFINES RTK_LINK_DIRS RTK_LIBS )
##
## ELSE  ( CMAKE_EPT_PKGCONFIG_EXECUTABLE )
##
##     # Can't find pkg-config -- have to find librtk somehow else
##
## ENDIF ( CMAKE_EPT_PKGCONFIG_EXECUTABLE )
##
##
## Notes:
## 
## You can set the PKG_CONFIG_PATH environment variable to tell
## pkg-config where to search for .pc files. See pkg-config(1) for
## more information.
##
#
# FIXME: IF(WIN32) pkg-config --msvc-syntax ENDIF(WIN32) ???
#
# FIXME: Parsing of pkg-config output is specific to gnu-style flags
#

FIND_PROGRAM(CMAKE_EPT_PKGCONFIG_EXECUTABLE pkg-config)
MARK_AS_ADVANCED(CMAKE_EPT_PKGCONFIG_EXECUTABLE)

########################################

MACRO(EPT_PKGCONFIG_PARSE_FLAGS FLAGS INCLUDES DEFINES)

  #MESSAGE("DEBUG: FLAGS: ${FLAGS}")

  STRING(REGEX MATCHALL "-I[^ ]*" ${INCLUDES} "${FLAGS}")
  STRING(REGEX REPLACE "-I" "" ${INCLUDES} "${${INCLUDES}}")
  #MESSAGE("DEBUG: INCLUDES: ${${INCLUDES}}")
  
  STRING(REGEX REPLACE "-I[^ ]*" "" ${DEFINES} "${FLAGS}")
  #MESSAGE("DEBUG: DEFINES: ${${DEFINES}}")

ENDMACRO(EPT_PKGCONFIG_PARSE_FLAGS)

########################################

MACRO(EPT_PKGCONFIG_PARSE_LIBS LIBS LINKDIRS LINKLIBS)

  #MESSAGE("DEBUG: LIBS: ${LIBS}")

  STRING(REGEX MATCHALL "-L[^ ]*" ${LINKDIRS} "${LIBS}")
  STRING(REGEX REPLACE "-L" "" ${LINKDIRS} "${${LINKDIRS}}")
  #MESSAGE("DEBUG: LINKDIRS: ${${LINKDIRS}}")

  STRING(REGEX MATCHALL "-l[^ ]*" ${LINKLIBS} "${LIBS}")
  STRING(REGEX REPLACE "-l" "" ${LINKLIBS} "${${LINKLIBS}}")
  #MESSAGE("DEBUG: LINKLIBS: ${${LINKLIBS}}")

ENDMACRO(EPT_PKGCONFIG_PARSE_LIBS)

########################################

MACRO(EPT_PKGCONFIG LIBRARY FOUND INCLUDE_DIRS DEFINES LINKDIRS LINKLIBS)

  SET(${FOUND} 0)

  MESSAGE("-- Looking for ${LIBRARY}")
  
  IF(CMAKE_EPT_PKGCONFIG_EXECUTABLE)
    # MESSAGE("DEBUG: pkg-config executable found")
    
    EXEC_PROGRAM(${CMAKE_EPT_PKGCONFIG_EXECUTABLE}
      ARGS "'${LIBRARY}'"
      OUTPUT_VARIABLE EPT_PKGCONFIG_OUTPUT
      RETURN_VALUE EPT_PKGCONFIG_RETURN)

    IF(NOT EPT_PKGCONFIG_RETURN)
      
      # set C_FLAGS and CXX_FLAGS
      EXEC_PROGRAM(${CMAKE_EPT_PKGCONFIG_EXECUTABLE}
        ARGS "--cflags '${LIBRARY}'"
        OUTPUT_VARIABLE CMAKE_EPT_PKGCONFIG_C_FLAGS)

      #SET(CMAKE_EPT_PKGCONFIG_CXX_FLAGS "${CMAKE_EPT_PKGCONFIG_C_FLAGS}")
      EPT_PKGCONFIG_PARSE_FLAGS( "${CMAKE_EPT_PKGCONFIG_C_FLAGS}" ${INCLUDE_DIRS} ${DEFINES} )
      
      # set LIBRARIES
      EXEC_PROGRAM(${CMAKE_EPT_PKGCONFIG_EXECUTABLE}
        ARGS "--libs '${LIBRARY}'"
        OUTPUT_VARIABLE CMAKE_EPT_PKGCONFIG_LIBRARIES)
      EPT_PKGCONFIG_PARSE_LIBS ( "${CMAKE_EPT_PKGCONFIG_LIBRARIES}" ${LINKDIRS} ${LINKLIBS} )

      SET(${FOUND} 1)
      MESSAGE("-- Looking for ${LIBRARY} -- found")

    ELSE(NOT EPT_PKGCONFIG_RETURN)
      MESSAGE("-- Looking for ${LIBRARY} -- not found")
      
      SET(CMAKE_EPT_PKGCONFIG_C_FLAGS "")
      SET(CMAKE_EPT_PKGCONFIG_CXX_FLAGS "")
      SET(CMAKE_EPT_PKGCONFIG_LIBRARIES "")
      SET(${INCLUDE_DIRS} "")
      SET(${DEFINES} "")
      SET(${LINKDIRS} "")
      SET(${LINKLIBS} "")

    ENDIF(NOT EPT_PKGCONFIG_RETURN)

    set( ${INCLUDE_DIRS} ${${INCLUDE_DIRS}} CACHE STRING "${LIBRARY} include path" )
    set( ${DEFINES} ${${DEFINES}} CACHE STRING "${LIBRARY} defines" )
    set( ${LINKDIRS} ${${LINKDIRS}} CACHE STRING "${LIBRARY} link directories" )
    set( ${LINKLIBS} ${${LINKLIBS}} CACHE STRING "${LIBRARY} link libraries" )

  ELSE(CMAKE_EPT_PKGCONFIG_EXECUTABLE)
    MESSAGE("-- pkg-config executable NOT FOUND")
  ENDIF(CMAKE_EPT_PKGCONFIG_EXECUTABLE)

  MESSAGE("Have  ${LIBRARY}       : ${${FOUND}}")
  MESSAGE("${LIBRARY} include dirs: ${${INCLUDE_DIRS}}")
  MESSAGE("${LIBRARY} defines     : ${${DEFINES}}")
  MESSAGE("${LIBRARY} link dirs   : ${${LINKDIRS}}")
  MESSAGE("${LIBRARY} link libs   : ${${LINKLIBS}}")

ENDMACRO(EPT_PKGCONFIG)