/+junk/libgego

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/%2Bjunk/libgego
1 by Gustav Hartvigsson
* Initial code.
1
# Copyright (C) 2010, Pino Toscano, <pino@kde.org>
2
#
3
# Redistribution and use is allowed according to the terms of the BSD license.
4
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
5
6
macro(_gir_list_prefix _outvar _listvar _prefix)
7
  set(${_outvar})
8
  foreach(_item IN LISTS ${_listvar})
9
    list(APPEND ${_outvar} ${_prefix}${_item})
10
  endforeach()
11
endmacro(_gir_list_prefix)
12
13
macro(gir_add_introspections introspections_girs)
14
15
  set(_gir_girs)
16
  set(_gir_typelibs)
17
18
  foreach(gir IN LISTS ${introspections_girs})
19
20
    set(_gir_name "${gir}")
21
22
    ## Transform the gir filename to something which can reference through a variable
23
    ## without automake/make complaining, eg Gtk-2.0.gir -> Gtk_2_0_gir
24
    string(REPLACE "-" "_" _gir_name "${_gir_name}")
25
    string(REPLACE "." "_" _gir_name "${_gir_name}")
26
27
    # Namespace and Version is either fetched from the gir filename
28
    # or the _NAMESPACE/_VERSION variable combo
29
    set(_gir_namespace "${${_gir_name}_NAMESPACE}")
30
    if (_gir_namespace STREQUAL "")
31
      string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${gir}")
32
    endif ()
33
    set(_gir_version "${${_gir_name}_VERSION}")
34
    if (_gir_version STREQUAL "")
35
      string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${gir}")
36
    endif ()
37
38
    # _PROGRAM is an optional variable which needs it's own --program argument
39
    set(_gir_program "${${_gir_name}_PROGRAM}")
40
    if (NOT _gir_program STREQUAL "")
41
      set(_gir_program "--program=${_gir_program}")
42
    endif ()
43
44
    # Variables which provides a list of things
45
    _gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=")
46
    _gir_list_prefix(_gir_packages ${_gir_name}_PACKAGES "--pkg=")
47
    _gir_list_prefix(_gir_includes ${_gir_name}_INCLUDES "--include=")
48
    _gir_list_prefix(_gir_export_packages ${_gir_name}_EXPORT_PACKAGES "--pkg-export=")
49
50
    # Reuse the LIBTOOL variable from by automake if it's set
51
    set(_gir_libtool "--no-libtool")
52
53
    add_custom_command(
54
      COMMAND ${INTROSPECTION_SCANNER}
55
              ${INTROSPECTION_SCANNER_ARGS}
56
              --namespace=${_gir_namespace}
57
              --nsversion=${_gir_version}
58
              ${_gir_libtool}
59
              ${_gir_program}
60
              ${_gir_libraries}
61
              ${_gir_packages}
62
              ${_gir_includes}
63
              ${_gir_export_packages}
64
              ${${_gir_name}_SCANNERFLAGS}
65
              ${${_gir_name}_CFLAGS}
66
              ${${_gir_name}_FILES}
67
              --output ${CMAKE_CURRENT_BINARY_DIR}/${gir}
68
      DEPENDS ${${_gir_name}_FILES}
69
              ${${_gir_name}_LIBS}
70
      OUTPUT ${gir}
71
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
72
      VERBATIM
73
    )
74
    list(APPEND _gir_girs ${CMAKE_CURRENT_BINARY_DIR}/${gir})
75
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${gir} DESTINATION share/gir-1.0)
76
77
    string(REPLACE ".gir" ".typelib" _typelib "${gir}")
78
    add_custom_command(
79
      COMMAND ${INTROSPECTION_COMPILER}
80
              ${INTROSPECTION_COMPILER_ARGS}
81
              --includedir=.
82
              ${CMAKE_CURRENT_BINARY_DIR}/${gir}
83
              -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}
84
      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${gir}
85
      OUTPUT ${_typelib}
86
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
87
    )
88
    list(APPEND _gir_typelibs ${CMAKE_CURRENT_BINARY_DIR}/${_typelib})
89
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION lib${LIB_SUFFIX}/girepository-1.0)
90
91
  endforeach()
92
93
  add_custom_target(gir-girs ALL DEPENDS ${_gir_girs})
94
  add_custom_target(gir-typelibs ALL DEPENDS ${_gir_typelibs})
95
96
endmacro(gir_add_introspections)