├── .gitignore ├── README.md ├── COPYING └── modules ├── FindGObject.cmake ├── FindGDKPixbuf.cmake ├── FindGLib.cmake ├── FindATK.cmake ├── FindSoup.cmake ├── FindGDK3.cmake ├── FindCairo.cmake ├── FindGTK3.cmake ├── FindPango.cmake ├── FindValadoc.cmake ├── FindGObjectIntrospection.cmake ├── FindGIO.cmake └── FindVala.cmake /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *.# 3 | *.bak 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CMake modules for GNOME libraries and tools 2 | 3 | This is a collection of CMake modules to support using GNOME libraries 4 | and tools from CMake-based projects. These modules were initially 5 | intended for use from Vala projects, but many can be used for other 6 | languages as well. 7 | 8 | There are currently modules for: 9 | 10 | * ATK 11 | * Cairo 12 | * GDK3 13 | * GDKPixbuf 14 | * GIO 15 | * GLib 16 | * GObject 17 | * GObjectIntrospection 18 | * GTK3 19 | * Pango 20 | * Soup 21 | * Vala 22 | * Valadoc 23 | 24 | Packages for libraries create imported targets with the same name as 25 | the pkg-config file. 26 | 27 | Several of the modules also contain functions for utilizing them; for 28 | example, the Vala contains a function to use the Vala compiler, 29 | GObjectIntrospection contains a function to generate a typelib from a 30 | GIR, and so on. 31 | 32 | This is still very much a work in progress, but it is already fairly 33 | useful. 34 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Evan Nemerson 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /modules/FindGObject.cmake: -------------------------------------------------------------------------------- 1 | # FindGObject.cmake 2 | # 3 | # 4 | # CMake support for GObject. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(GObject_DEPS 33 | GLib) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(GObject_PKG gobject-2.0) 37 | endif() 38 | 39 | find_library(GObject_LIBRARY gobject-2.0 HINTS ${GObject_PKG_LIBRARY_DIRS}) 40 | set(GObject gobject-2.0) 41 | 42 | if(GObject_LIBRARY AND NOT GObject_FOUND) 43 | add_library(${GObject} SHARED IMPORTED) 44 | set_property(TARGET ${GObject} PROPERTY IMPORTED_LOCATION "${GObject_LIBRARY}") 45 | set_property(TARGET ${GObject} PROPERTY INTERFACE_COMPILE_OPTIONS "${GObject_PKG_CFLAGS_OTHER}") 46 | 47 | find_path(GObject_INCLUDE_DIR "gobject/gobject.h" 48 | HINTS ${GObject_PKG_INCLUDE_DIRS}) 49 | 50 | find_package(GLib) 51 | set(GObject_VERSION "${GLib_VERSION}") 52 | 53 | list(APPEND GObject_DEPS_FOUND_VARS "GLib_FOUND") 54 | list(APPEND GObject_INCLUDE_DIRS ${GLib_INCLUDE_DIRS}) 55 | set_property(TARGET ${GObject} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GObject_INCLUDE_DIR}") 56 | 57 | set_property (TARGET "${GObject}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${GLib}") 58 | endif() 59 | 60 | find_program(GLib_GENMARSHAL glib-genmarshal) 61 | if(GLib_GENMARSHAL AND NOT GLib_FOUND) 62 | add_executable(glib-genmarshal IMPORTED) 63 | set_property(TARGET glib-genmarshal PROPERTY IMPORTED_LOCATION "${GLib_GENMARSHAL}") 64 | endif() 65 | 66 | find_program(GLib_MKENUMS glib-mkenums) 67 | if(GLib_MKENUMS AND NOT GLib_FOUND) 68 | add_executable(glib-mkenums IMPORTED) 69 | set_property(TARGET glib-mkenums PROPERTY IMPORTED_LOCATION "${GLib_MKENUMS}") 70 | endif() 71 | 72 | include(FindPackageHandleStandardArgs) 73 | find_package_handle_standard_args(GObject 74 | REQUIRED_VARS 75 | GObject_LIBRARY 76 | GObject_INCLUDE_DIRS 77 | ${GObject_DEPS_FOUND_VARS} 78 | VERSION_VAR 79 | GObject_VERSION) 80 | 81 | unset(GObject_DEPS_FOUND_VARS) 82 | -------------------------------------------------------------------------------- /modules/FindGDKPixbuf.cmake: -------------------------------------------------------------------------------- 1 | # FindGDKPixbuf.cmake 2 | # 3 | # 4 | # CMake support for GDK Pixbuf. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(GDKPixbuf_DEPS 33 | GLib) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(GDKPixbuf_PKG gdk-pixbuf-2.0) 37 | endif() 38 | 39 | find_library(GDKPixbuf_LIBRARY gdk_pixbuf-2.0 HINTS ${GDKPixbuf_PKG_LIBRARY_DIRS}) 40 | set(GDKPixbuf "gdk_pixbuf-2.0") 41 | 42 | if(GDKPixbuf_LIBRARY) 43 | add_library(${GDKPixbuf} SHARED IMPORTED) 44 | set_property(TARGET ${GDKPixbuf} PROPERTY IMPORTED_LOCATION "${GDKPixbuf_LIBRARY}") 45 | set_property(TARGET ${GDKPixbuf} PROPERTY INTERFACE_COMPILE_OPTIONS "${GDKPixbuf_PKG_CFLAGS_OTHER}") 46 | 47 | set(GDKPixbuf_INCLUDE_DIRS) 48 | 49 | find_path(GDKPixbuf_INCLUDE_DIR "gdk-pixbuf/gdk-pixbuf.h" 50 | HINTS ${GDKPixbuf_PKG_INCLUDE_DIRS}) 51 | 52 | if(GDKPixbuf_INCLUDE_DIR) 53 | file(STRINGS "${GDKPixbuf_INCLUDE_DIR}/gdk-pixbuf/gdk-pixbuf-features.h" GDKPixbuf_VERSION REGEX "^#define GDKPIXBUF_VERSION \\\"[^\\\"]+\\\"") 54 | string(REGEX REPLACE "^#define GDKPIXBUF_VERSION \\\"([0-9]+)\\.([0-9]+)\\.([0-9]+)\\\"$" "\\1.\\2.\\3" GDKPixbuf_VERSION "${GDKPixbuf_VERSION}") 55 | 56 | list(APPEND GDKPixbuf_INCLUDE_DIRS ${GDKPixbuf_INCLUDE_DIR}) 57 | set_property(TARGET ${GDKPixbuf} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GDKPixbuf_INCLUDE_DIR}") 58 | endif() 59 | endif() 60 | 61 | set(GDKPixbuf_DEPS_FOUND_VARS) 62 | foreach(gdkpixbuf_dep ${GDKPixbuf_DEPS}) 63 | find_package(${gdkpixbuf_dep}) 64 | 65 | list(APPEND GDKPixbuf_DEPS_FOUND_VARS "${gdkpixbuf_dep}_FOUND") 66 | list(APPEND GDKPixbuf_INCLUDE_DIRS ${${gdkpixbuf_dep}_INCLUDE_DIRS}) 67 | 68 | set_property (TARGET ${GDKPixbuf} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${gdkpixbuf_dep}}") 69 | endforeach(gdkpixbuf_dep) 70 | 71 | include(FindPackageHandleStandardArgs) 72 | find_package_handle_standard_args(GDKPixbuf 73 | REQUIRED_VARS 74 | GDKPixbuf_LIBRARY 75 | GDKPixbuf_INCLUDE_DIRS 76 | ${GDKPixbuf_DEPS_FOUND_VARS} 77 | VERSION_VAR 78 | GDKPixbuf_VERSION) 79 | 80 | unset(GDKPixbuf_DEPS_FOUND_VARS) 81 | -------------------------------------------------------------------------------- /modules/FindGLib.cmake: -------------------------------------------------------------------------------- 1 | # FindGLib.cmake 2 | # 3 | # 4 | # CMake support for GLib/GObject/GIO. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | if(PKG_CONFIG_FOUND) 33 | pkg_search_module(GLib_PKG glib-2.0) 34 | endif() 35 | 36 | find_library(GLib_LIBRARY glib-2.0 HINTS ${GLib_PKG_LIBRARY_DIRS}) 37 | set(GLib glib-2.0) 38 | 39 | if(GLib_LIBRARY AND NOT GLib_FOUND) 40 | add_library(${GLib} SHARED IMPORTED) 41 | set_property(TARGET ${GLib} PROPERTY IMPORTED_LOCATION "${GLib_LIBRARY}") 42 | set_property(TARGET ${GLib} PROPERTY INTERFACE_COMPILE_OPTIONS "${GLib_PKG_CFLAGS_OTHER}") 43 | 44 | find_path(GLib_INCLUDE_DIRS "glib.h" 45 | HINTS ${GLib_PKG_INCLUDE_DIRS} 46 | PATH_SUFFIXES "glib-2.0") 47 | 48 | get_filename_component(GLib_LIBDIR "${GLib}" DIRECTORY) 49 | find_path(GLib_CONFIG_INCLUDE_DIR "glibconfig.h" 50 | HINTS 51 | ${GLib_LIBDIR} 52 | ${GLib_PKG_INCLUDE_DIRS} 53 | PATHS 54 | "${CMAKE_LIBRARY_PATH}" 55 | PATH_SUFFIXES 56 | "glib-2.0/include" 57 | "glib-2.0") 58 | unset(GLib_LIBDIR) 59 | 60 | if(GLib_CONFIG_INCLUDE_DIR) 61 | file(STRINGS "${GLib_CONFIG_INCLUDE_DIR}/glibconfig.h" GLib_MAJOR_VERSION REGEX "^#define GLIB_MAJOR_VERSION +([0-9]+)") 62 | string(REGEX REPLACE "^#define GLIB_MAJOR_VERSION ([0-9]+)$" "\\1" GLib_MAJOR_VERSION "${GLib_MAJOR_VERSION}") 63 | file(STRINGS "${GLib_CONFIG_INCLUDE_DIR}/glibconfig.h" GLib_MINOR_VERSION REGEX "^#define GLIB_MINOR_VERSION +([0-9]+)") 64 | string(REGEX REPLACE "^#define GLIB_MINOR_VERSION ([0-9]+)$" "\\1" GLib_MINOR_VERSION "${GLib_MINOR_VERSION}") 65 | file(STRINGS "${GLib_CONFIG_INCLUDE_DIR}/glibconfig.h" GLib_MICRO_VERSION REGEX "^#define GLIB_MICRO_VERSION +([0-9]+)") 66 | string(REGEX REPLACE "^#define GLIB_MICRO_VERSION ([0-9]+)$" "\\1" GLib_MICRO_VERSION "${GLib_MICRO_VERSION}") 67 | set(GLib_VERSION "${GLib_MAJOR_VERSION}.${GLib_MINOR_VERSION}.${GLib_MICRO_VERSION}") 68 | unset(GLib_MAJOR_VERSION) 69 | unset(GLib_MINOR_VERSION) 70 | unset(GLib_MICRO_VERSION) 71 | 72 | list(APPEND GLib_INCLUDE_DIRS ${GLib_CONFIG_INCLUDE_DIR}) 73 | set_property(TARGET ${GLib} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GLib_INCLUDE_DIRS}") 74 | endif() 75 | endif() 76 | 77 | include(FindPackageHandleStandardArgs) 78 | find_package_handle_standard_args(GLib 79 | REQUIRED_VARS 80 | GLib_LIBRARY 81 | GLib_INCLUDE_DIRS 82 | VERSION_VAR 83 | GLib_VERSION) 84 | -------------------------------------------------------------------------------- /modules/FindATK.cmake: -------------------------------------------------------------------------------- 1 | # FindPango.cmake 2 | # 3 | # 4 | # CMake support for ATK. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(ATK_DEPS 33 | GLib) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(ATK_PKG atk) 37 | endif() 38 | 39 | find_library(ATK_LIBRARY atk-1.0 HINTS ${ATK_PKG_LIBRARY_DIRS}) 40 | set(ATK "atk-1.0") 41 | 42 | if(ATK_LIBRARY AND NOT ATK_FOUND) 43 | add_library(${ATK} SHARED IMPORTED) 44 | set_property(TARGET ${ATK} PROPERTY IMPORTED_LOCATION "${ATK_LIBRARY}") 45 | set_property(TARGET ${ATK} PROPERTY INTERFACE_COMPILE_OPTIONS "${ATK_PKG_CFLAGS_OTHER}") 46 | 47 | find_path(ATK_INCLUDE_DIR "atk/atk.h" 48 | HINTS ${ATK_PKG_INCLUDE_DIRS}) 49 | 50 | if(ATK_INCLUDE_DIR) 51 | file(STRINGS "${ATK_INCLUDE_DIR}/atk/atkversion.h" ATK_MAJOR_VERSION REGEX "^#define ATK_MAJOR_VERSION +\\(?([0-9]+)\\)?$") 52 | string(REGEX REPLACE "^#define ATK_MAJOR_VERSION \\(([0-9]+)\\)$" "\\1" ATK_MAJOR_VERSION "${ATK_MAJOR_VERSION}") 53 | file(STRINGS "${ATK_INCLUDE_DIR}/atk/atkversion.h" ATK_MINOR_VERSION REGEX "^#define ATK_MINOR_VERSION +\\(?([0-9]+)\\)?$") 54 | string(REGEX REPLACE "^#define ATK_MINOR_VERSION \\(([0-9]+)\\)$" "\\1" ATK_MINOR_VERSION "${ATK_MINOR_VERSION}") 55 | file(STRINGS "${ATK_INCLUDE_DIR}/atk/atkversion.h" ATK_MICRO_VERSION REGEX "^#define ATK_MICRO_VERSION +\\(?([0-9]+)\\)?$") 56 | string(REGEX REPLACE "^#define ATK_MICRO_VERSION \\(([0-9]+)\\)$" "\\1" ATK_MICRO_VERSION "${ATK_MICRO_VERSION}") 57 | set(ATK_VERSION "${ATK_MAJOR_VERSION}.${ATK_MINOR_VERSION}.${ATK_MICRO_VERSION}") 58 | unset(ATK_MAJOR_VERSION) 59 | unset(ATK_MINOR_VERSION) 60 | unset(ATK_MICRO_VERSION) 61 | 62 | list(APPEND ATK_INCLUDE_DIRS ${ATK_INCLUDE_DIR}) 63 | set_property(TARGET ${ATK} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${ATK_INCLUDE_DIR}") 64 | endif() 65 | endif() 66 | 67 | set(ATK_DEPS_FOUND_VARS) 68 | foreach(atk_dep ${ATK_DEPS}) 69 | find_package(${atk_dep}) 70 | 71 | list(APPEND ATK_DEPS_FOUND_VARS "${atk_dep}_FOUND") 72 | list(APPEND ATK_INCLUDE_DIRS ${${atk_dep}_INCLUDE_DIRS}) 73 | 74 | set_property (TARGET "${ATK}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${atk_dep}}") 75 | endforeach(atk_dep) 76 | 77 | include(FindPackageHandleStandardArgs) 78 | find_package_handle_standard_args(ATK 79 | REQUIRED_VARS 80 | ATK_LIBRARY 81 | ATK_INCLUDE_DIRS 82 | ${ATK_DEPS_FOUND_VARS} 83 | VERSION_VAR 84 | ATK_VERSION) 85 | 86 | unset(ATK_DEPS_FOUND_VARS) 87 | -------------------------------------------------------------------------------- /modules/FindSoup.cmake: -------------------------------------------------------------------------------- 1 | # FindSoup.cmake 2 | # 3 | # 4 | # CMake support for libsoup. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(Soup_DEPS 33 | GIO) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(Soup_PKG libsoup-2.4) 37 | endif() 38 | 39 | find_library(Soup_LIBRARY soup-2.4 HINTS ${Soup_PKG_LIBRARY_DIRS}) 40 | set(Soup soup-2.4) 41 | 42 | if(Soup_LIBRARY AND NOT Soup_FOUND) 43 | add_library(${Soup} SHARED IMPORTED) 44 | set_property(TARGET ${Soup} PROPERTY IMPORTED_LOCATION "${Soup_LIBRARY}") 45 | set_property(TARGET ${Soup} PROPERTY INTERFACE_COMPILE_OPTIONS "${Soup_PKG_CFLAGS_OTHER}") 46 | 47 | find_path(Soup_INCLUDE_DIR "libsoup/soup.h" 48 | HINTS ${Soup_PKG_INCLUDE_DIRS}) 49 | 50 | if(Soup_INCLUDE_DIR) 51 | file(STRINGS "${Soup_INCLUDE_DIR}/libsoup/soup-version.h" Soup_MAJOR_VERSION REGEX "^#define SOUP_MAJOR_VERSION +\\(?([0-9]+)\\)?$") 52 | string(REGEX REPLACE "^#define SOUP_MAJOR_VERSION \\(([0-9]+)\\)$" "\\1" Soup_MAJOR_VERSION "${Soup_MAJOR_VERSION}") 53 | file(STRINGS "${Soup_INCLUDE_DIR}/libsoup/soup-version.h" Soup_MINOR_VERSION REGEX "^#define SOUP_MINOR_VERSION +\\(?([0-9]+)\\)?$") 54 | string(REGEX REPLACE "^#define SOUP_MINOR_VERSION \\(([0-9]+)\\)$" "\\1" Soup_MINOR_VERSION "${Soup_MINOR_VERSION}") 55 | file(STRINGS "${Soup_INCLUDE_DIR}/libsoup/soup-version.h" Soup_MICRO_VERSION REGEX "^#define SOUP_MICRO_VERSION +\\(?([0-9]+)\\)?$") 56 | string(REGEX REPLACE "^#define SOUP_MICRO_VERSION \\(([0-9]+)\\)$" "\\1" Soup_MICRO_VERSION "${Soup_MICRO_VERSION}") 57 | set(Soup_VERSION "${Soup_MAJOR_VERSION}.${Soup_MINOR_VERSION}.${Soup_MICRO_VERSION}") 58 | unset(Soup_MAJOR_VERSION) 59 | unset(Soup_MINOR_VERSION) 60 | unset(Soup_MICRO_VERSION) 61 | 62 | list(APPEND Soup_INCLUDE_DIRS ${Soup_INCLUDE_DIR}) 63 | set_property(TARGET ${Soup} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Soup_INCLUDE_DIR}") 64 | endif() 65 | endif() 66 | 67 | set(Soup_DEPS_FOUND_VARS) 68 | foreach(soup_dep ${Soup_DEPS}) 69 | find_package(${soup_dep}) 70 | 71 | list(APPEND Soup_DEPS_FOUND_VARS "${soup_dep}_FOUND") 72 | list(APPEND Soup_INCLUDE_DIRS ${${soup_dep}_INCLUDE_DIRS}) 73 | 74 | set_property (TARGET "${Soup}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${soup_dep}}") 75 | endforeach(soup_dep) 76 | 77 | include(FindPackageHandleStandardArgs) 78 | find_package_handle_standard_args(Soup 79 | REQUIRED_VARS 80 | Soup_LIBRARY 81 | Soup_INCLUDE_DIRS 82 | ${Soup_DEPS_FOUND_VARS} 83 | VERSION_VAR 84 | Soup_VERSION) 85 | 86 | unset(Soup_DEPS_FOUND_VARS) 87 | -------------------------------------------------------------------------------- /modules/FindGDK3.cmake: -------------------------------------------------------------------------------- 1 | # FindGDK3.cmake 2 | # 3 | # 4 | # CMake support for GDK 3. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(GDK3_DEPS 33 | Pango) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(GDK3_PKG gdk-3.0) 37 | endif() 38 | 39 | find_library(GDK3_LIBRARY gdk-3 HINTS ${GDK3_PKG_LIBRARY_DIRS}) 40 | set(GDK3 "gdk-3") 41 | 42 | if(GDK3_LIBRARY) 43 | add_library(${GDK3} SHARED IMPORTED) 44 | set_property(TARGET ${GDK3} PROPERTY IMPORTED_LOCATION "${GDK3_LIBRARY}") 45 | set_property(TARGET ${GDK3} PROPERTY INTERFACE_COMPILE_OPTIONS "${GDK3_PKG_CFLAGS_OTHER}") 46 | 47 | set(GDK3_INCLUDE_DIRS) 48 | 49 | find_path(GDK3_INCLUDE_DIR "gdk/gdk.h" 50 | HINTS ${GDK3_PKG_INCLUDE_DIRS}) 51 | 52 | if(GDK3_INCLUDE_DIR) 53 | file(STRINGS "${GDK3_INCLUDE_DIR}/gdk/gdkversionmacros.h" GDK3_MAJOR_VERSION REGEX "^#define GDK_MAJOR_VERSION +\\(?([0-9]+)\\)?$") 54 | string(REGEX REPLACE "^#define GDK_MAJOR_VERSION \\(?([0-9]+)\\)?$" "\\1" GDK3_MAJOR_VERSION "${GDK3_MAJOR_VERSION}") 55 | file(STRINGS "${GDK3_INCLUDE_DIR}/gdk/gdkversionmacros.h" GDK3_MINOR_VERSION REGEX "^#define GDK_MINOR_VERSION +\\(?([0-9]+)\\)?$") 56 | string(REGEX REPLACE "^#define GDK_MINOR_VERSION \\(?([0-9]+)\\)?$" "\\1" GDK3_MINOR_VERSION "${GDK3_MINOR_VERSION}") 57 | file(STRINGS "${GDK3_INCLUDE_DIR}/gdk/gdkversionmacros.h" GDK3_MICRO_VERSION REGEX "^#define GDK_MICRO_VERSION +\\(?([0-9]+)\\)?$") 58 | string(REGEX REPLACE "^#define GDK_MICRO_VERSION \\(?([0-9]+)\\)?$" "\\1" GDK3_MICRO_VERSION "${GDK3_MICRO_VERSION}") 59 | set(GDK3_VERSION "${GDK3_MAJOR_VERSION}.${GDK3_MINOR_VERSION}.${GDK3_MICRO_VERSION}") 60 | unset(GDK3_MAJOR_VERSION) 61 | unset(GDK3_MINOR_VERSION) 62 | unset(GDK3_MICRO_VERSION) 63 | 64 | list(APPEND GDK3_INCLUDE_DIRS ${GDK3_INCLUDE_DIR}) 65 | set_property(TARGET ${GDK3} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GDK3_INCLUDE_DIR}") 66 | endif() 67 | endif() 68 | 69 | set(GDK3_DEPS_FOUND_VARS) 70 | foreach(gdk3_dep ${GDK3_DEPS}) 71 | find_package(${gdk3_dep}) 72 | 73 | list(APPEND GDK3_DEPS_FOUND_VARS "${gdk3_dep}_FOUND") 74 | list(APPEND GDK3_INCLUDE_DIRS ${${gdk3_dep}_INCLUDE_DIRS}) 75 | 76 | set_property (TARGET ${GDK3} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${gdk3_dep}}") 77 | endforeach(gdk3_dep) 78 | 79 | include(FindPackageHandleStandardArgs) 80 | find_package_handle_standard_args(GDK3 81 | REQUIRED_VARS 82 | GDK3_LIBRARY 83 | GDK3_INCLUDE_DIRS 84 | ${GDK3_DEPS_FOUND_VARS} 85 | VERSION_VAR 86 | GDK3_VERSION) 87 | 88 | unset(GDK3_DEPS_FOUND_VARS) 89 | -------------------------------------------------------------------------------- /modules/FindCairo.cmake: -------------------------------------------------------------------------------- 1 | # FindCairo.cmake 2 | # 3 | # 4 | # CMake support for Cairo. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(Cairo_DEPS) 33 | 34 | if(PKG_CONFIG_FOUND) 35 | pkg_search_module(Cairo_PKG cairo) 36 | endif() 37 | 38 | find_library(Cairo_LIBRARY cairo HINTS ${Cairo_PKG_LIBRARY_DIRS}) 39 | set(Cairo cairo) 40 | 41 | if(Cairo_LIBRARY) 42 | add_library(${Cairo} SHARED IMPORTED) 43 | set_property(TARGET ${Cairo} PROPERTY IMPORTED_LOCATION "${Cairo_LIBRARY}") 44 | set_property(TARGET ${Cairo} PROPERTY INTERFACE_COMPILE_OPTIONS "${Cairo_PKG_CFLAGS_OTHER}") 45 | 46 | set(Cairo_INCLUDE_DIRS) 47 | 48 | find_path(Cairo_INCLUDE_DIR "cairo.h" 49 | HINTS ${Cairo_PKG_INCLUDE_DIRS}) 50 | 51 | if(Cairo_INCLUDE_DIR) 52 | file(STRINGS "${Cairo_INCLUDE_DIR}/cairo-version.h" Cairo_VERSION_MAJOR REGEX "^#define CAIRO_VERSION_MAJOR +\\(?([0-9]+)\\)?$") 53 | string(REGEX REPLACE "^#define CAIRO_VERSION_MAJOR \\(?([0-9]+)\\)?$" "\\1" Cairo_VERSION_MAJOR "${Cairo_VERSION_MAJOR}") 54 | file(STRINGS "${Cairo_INCLUDE_DIR}/cairo-version.h" Cairo_VERSION_MINOR REGEX "^#define CAIRO_VERSION_MINOR +\\(?([0-9]+)\\)?$") 55 | string(REGEX REPLACE "^#define CAIRO_VERSION_MINOR \\(?([0-9]+)\\)?$" "\\1" Cairo_VERSION_MINOR "${Cairo_VERSION_MINOR}") 56 | file(STRINGS "${Cairo_INCLUDE_DIR}/cairo-version.h" Cairo_VERSION_MICRO REGEX "^#define CAIRO_VERSION_MICRO +\\(?([0-9]+)\\)?$") 57 | string(REGEX REPLACE "^#define CAIRO_VERSION_MICRO \\(?([0-9]+)\\)?$" "\\1" Cairo_VERSION_MICRO "${Cairo_VERSION_MICRO}") 58 | set(Cairo_VERSION "${Cairo_VERSION_MAJOR}.${Cairo_VERSION_MINOR}.${Cairo_VERSION_MICRO}") 59 | unset(Cairo_VERSION_MAJOR) 60 | unset(Cairo_VERSION_MINOR) 61 | unset(Cairo_VERSION_MICRO) 62 | 63 | list(APPEND Cairo_INCLUDE_DIRS ${Cairo_INCLUDE_DIR}) 64 | set_property(TARGET ${Cairo} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Cairo_INCLUDE_DIR}") 65 | endif() 66 | endif() 67 | 68 | set(Cairo_DEPS_FOUND_VARS) 69 | foreach(cairo_dep ${Cairo_DEPS}) 70 | find_package(${cairo_dep}) 71 | 72 | list(APPEND Cairo_DEPS_FOUND_VARS "${cairo_dep}_FOUND") 73 | list(APPEND Cairo_INCLUDE_DIRS ${${cairo_dep}_INCLUDE_DIRS}) 74 | 75 | set_property (TARGET ${Cairo} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${cairo_dep}}") 76 | endforeach(cairo_dep) 77 | 78 | include(FindPackageHandleStandardArgs) 79 | find_package_handle_standard_args(Cairo 80 | REQUIRED_VARS 81 | Cairo_LIBRARY 82 | Cairo_INCLUDE_DIRS 83 | ${Cairo_DEPS_FOUND_VARS} 84 | VERSION_VAR 85 | Cairo_VERSION) 86 | 87 | unset(Cairo_DEPS_FOUND_VARS) 88 | -------------------------------------------------------------------------------- /modules/FindGTK3.cmake: -------------------------------------------------------------------------------- 1 | # FindGTK3.cmake 2 | # 3 | # 4 | # CMake support for GTK+ 3. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(GTK3_DEPS 33 | GIO 34 | ATK 35 | GDK3 36 | Pango 37 | Cairo 38 | GDKPixbuf) 39 | 40 | if(PKG_CONFIG_FOUND) 41 | pkg_search_module(GTK3_PKG QUIET gtk+-3.0) 42 | endif() 43 | 44 | find_library(GTK3_LIBRARY gtk-3 HINTS ${GTK3_PKG_LIBRARY_DIRS}) 45 | set(GTK3 gtk-3) 46 | 47 | if(GTK3_LIBRARY) 48 | add_library(${GTK3} SHARED IMPORTED) 49 | set_property(TARGET ${GTK3} PROPERTY IMPORTED_LOCATION "${GTK3_LIBRARY}") 50 | set_property(TARGET ${GTK3} PROPERTY INTERFACE_COMPILE_OPTIONS "${GTK3_PKG_CFLAGS_OTHER}") 51 | 52 | set(GTK3_INCLUDE_DIRS) 53 | 54 | find_path(GTK3_INCLUDE_DIR "gtk/gtk.h" 55 | HINTS ${GTK3_PKG_INCLUDE_DIRS}) 56 | 57 | if(GTK3_INCLUDE_DIR) 58 | file(STRINGS "${GTK3_INCLUDE_DIR}/gtk/gtkversion.h" GTK3_MAJOR_VERSION REGEX "^#define GTK_MAJOR_VERSION +\\(?([0-9]+)\\)?$") 59 | string(REGEX REPLACE "^#define GTK_MAJOR_VERSION \\(?([0-9]+)\\)?$" "\\1" GTK3_MAJOR_VERSION "${GTK3_MAJOR_VERSION}") 60 | file(STRINGS "${GTK3_INCLUDE_DIR}/gtk/gtkversion.h" GTK3_MINOR_VERSION REGEX "^#define GTK_MINOR_VERSION +\\(?([0-9]+)\\)?$") 61 | string(REGEX REPLACE "^#define GTK_MINOR_VERSION \\(?([0-9]+)\\)?$" "\\1" GTK3_MINOR_VERSION "${GTK3_MINOR_VERSION}") 62 | file(STRINGS "${GTK3_INCLUDE_DIR}/gtk/gtkversion.h" GTK3_MICRO_VERSION REGEX "^#define GTK_MICRO_VERSION +\\(?([0-9]+)\\)?$") 63 | string(REGEX REPLACE "^#define GTK_MICRO_VERSION \\(?([0-9]+)\\)?$" "\\1" GTK3_MICRO_VERSION "${GTK3_MICRO_VERSION}") 64 | set(GTK3_VERSION "${GTK3_MAJOR_VERSION}.${GTK3_MINOR_VERSION}.${GTK3_MICRO_VERSION}") 65 | unset(GTK3_MAJOR_VERSION) 66 | unset(GTK3_MINOR_VERSION) 67 | unset(GTK3_MICRO_VERSION) 68 | 69 | list(APPEND GTK3_INCLUDE_DIRS ${GTK3_INCLUDE_DIR}) 70 | set_property(TARGET ${GTK3} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK3_INCLUDE_DIR}") 71 | endif() 72 | endif() 73 | 74 | set(GTK3_DEPS_FOUND_VARS) 75 | foreach(gtk3_dep ${GTK3_DEPS}) 76 | find_package(${gtk3_dep}) 77 | 78 | list(APPEND GTK3_DEPS_FOUND_VARS "${gtk3_dep}_FOUND") 79 | list(APPEND GTK3_INCLUDE_DIRS ${${gtk3_dep}_INCLUDE_DIRS}) 80 | 81 | set_property (TARGET "${GTK3}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${gtk3_dep}}") 82 | endforeach(gtk3_dep) 83 | 84 | include(FindPackageHandleStandardArgs) 85 | find_package_handle_standard_args(GTK3 86 | REQUIRED_VARS 87 | GTK3_LIBRARY 88 | GTK3_INCLUDE_DIRS 89 | ${GTK3_DEPS_FOUND_VARS} 90 | VERSION_VAR 91 | GTK3_VERSION) 92 | 93 | unset(GTK3_DEPS_FOUND_VARS) 94 | -------------------------------------------------------------------------------- /modules/FindPango.cmake: -------------------------------------------------------------------------------- 1 | # FindPango.cmake 2 | # 3 | # 4 | # CMake support for Pango. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(Pango_DEPS 33 | GLib) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(Pango_PKG pango) 37 | endif() 38 | 39 | find_library(Pango_LIBRARY pango-1.0 HINTS ${Pango_PKG_LIBRARY_DIRS}) 40 | set(Pango pango-1.0) 41 | 42 | if(Pango_LIBRARY AND NOT Pango_FOUND) 43 | add_library(${Pango} SHARED IMPORTED) 44 | set_property(TARGET ${Pango} PROPERTY IMPORTED_LOCATION "${Pango_LIBRARY}") 45 | set_property(TARGET ${Pango} PROPERTY INTERFACE_COMPILE_OPTIONS "${Pango_PKG_CFLAGS_OTHER}") 46 | 47 | find_path(Pango_INCLUDE_DIR "pango/pango.h" 48 | HINTS ${Pango_PKG_INCLUDE_DIRS}) 49 | 50 | if(Pango_INCLUDE_DIR) 51 | file(STRINGS "${Pango_INCLUDE_DIR}/pango/pango-features.h" Pango_MAJOR_VERSION REGEX "^#define PANGO_VERSION_MAJOR +\\(?([0-9]+)\\)?$") 52 | string(REGEX REPLACE "^#define PANGO_VERSION_MAJOR \\(?([0-9]+)\\)?" "\\1" Pango_MAJOR_VERSION "${Pango_MAJOR_VERSION}") 53 | file(STRINGS "${Pango_INCLUDE_DIR}/pango/pango-features.h" Pango_MINOR_VERSION REGEX "^#define PANGO_VERSION_MINOR +\\(?([0-9]+)\\)?$") 54 | string(REGEX REPLACE "^#define PANGO_VERSION_MINOR \\(?([0-9]+)\\)?" "\\1" Pango_MINOR_VERSION "${Pango_MINOR_VERSION}") 55 | file(STRINGS "${Pango_INCLUDE_DIR}/pango/pango-features.h" Pango_MICRO_VERSION REGEX "^#define PANGO_VERSION_MICRO +\\(?([0-9]+)\\)?$") 56 | string(REGEX REPLACE "^#define PANGO_VERSION_MICRO \\(?([0-9]+)\\)?" "\\1" Pango_MICRO_VERSION "${Pango_MICRO_VERSION}") 57 | set(Pango_VERSION "${Pango_MAJOR_VERSION}.${Pango_MINOR_VERSION}.${Pango_MICRO_VERSION}") 58 | unset(Pango_MAJOR_VERSION) 59 | unset(Pango_MINOR_VERSION) 60 | unset(Pango_MICRO_VERSION) 61 | 62 | list(APPEND Pango_INCLUDE_DIRS ${Pango_INCLUDE_DIR}) 63 | set_property(TARGET ${Pango} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Pango_INCLUDE_DIR}") 64 | endif() 65 | endif() 66 | 67 | set(Pango_DEPS_FOUND_VARS) 68 | foreach(pango_dep ${Pango_DEPS}) 69 | find_package(${pango_dep}) 70 | 71 | list(APPEND Pango_DEPS_FOUND_VARS "${pango_dep}_FOUND") 72 | list(APPEND Pango_INCLUDE_DIRS ${${pango_dep}_INCLUDE_DIRS}) 73 | 74 | set_property (TARGET "${Pango}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${pango_dep}}") 75 | endforeach(pango_dep) 76 | 77 | include(FindPackageHandleStandardArgs) 78 | find_package_handle_standard_args(Pango 79 | REQUIRED_VARS 80 | Pango_LIBRARY 81 | Pango_INCLUDE_DIRS 82 | ${Pango_DEPS_FOUND_VARS} 83 | VERSION_VAR 84 | Pango_VERSION) 85 | 86 | unset(Pango_DEPS_FOUND_VARS) 87 | -------------------------------------------------------------------------------- /modules/FindValadoc.cmake: -------------------------------------------------------------------------------- 1 | # FindValadoc.cmake 2 | # 3 | # 4 | # License: 5 | # 6 | # Copyright (c) 2016 Evan Nemerson 7 | # 8 | # Permission is hereby granted, free of charge, to any person 9 | # obtaining a copy of this software and associated documentation 10 | # files (the "Software"), to deal in the Software without 11 | # restriction, including without limitation the rights to use, copy, 12 | # modify, merge, publish, distribute, sublicense, and/or sell copies 13 | # of the Software, and to permit persons to whom the Software is 14 | # furnished to do so, subject to the following conditions: 15 | # 16 | # The above copyright notice and this permission notice shall be 17 | # included in all copies or substantial portions of the Software. 18 | # 19 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26 | # DEALINGS IN THE SOFTWARE. 27 | 28 | find_program(VALADOC_EXECUTABLE 29 | NAMES valadoc 30 | DOC "Valadoc") 31 | 32 | if(VALADOC_EXECUTABLE) 33 | # Get valadoc version 34 | execute_process(COMMAND ${VALADOC_EXECUTABLE} "--version" OUTPUT_VARIABLE VALADOC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) 35 | string(SUBSTRING "${VALADOC_VERSION}" 8 -1 VALADOC_VERSION) 36 | 37 | # Imported target 38 | add_executable(valadoc IMPORTED) 39 | set_property(TARGET valadoc PROPERTY IMPORTED_LOCATION "${VALADOC_EXECUTABLE}") 40 | endif() 41 | 42 | include(FindPackageHandleStandardArgs) 43 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(Valadoc 44 | FOUND_VAR VALADOC_FOUND 45 | REQUIRED_VARS VALADOC_EXECUTABLE 46 | VERSION_VAR VALADOC_VERSION) 47 | 48 | # valadoc_generate(OUTPUT_DIR 49 | # PACKAGE_NAME name 50 | # [PACKAGE_VERSION version] 51 | # [FLAGS flags…] 52 | # [PACKAGES packages…] 53 | # [DOCLET doclet] 54 | # [ALL]) 55 | # 56 | # PACKAGE_NAME name 57 | # VAPI name to generate documentation for. 58 | # PACKAGE_VERSION version 59 | # Version number of the package. 60 | # FLAGS … 61 | # List of flags you wish to pass to valadoc. 62 | # PACKAGES 63 | # List of dependencies to pass to valac. 64 | # DOCLET doclet-name 65 | # Name of the doclet to use (default: html) 66 | function(valadoc_generate OUTPUT_DIR) 67 | set (options) 68 | set (oneValueArgs DOCLET PACKAGE_NAME PACKAGE_VERSION) 69 | set (multiValueArgs SOURCES PACKAGES FLAGS DEFINITIONS CUSTOM_VAPIS) 70 | cmake_parse_arguments(VALADOC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 71 | unset (options) 72 | unset (oneValueArgs) 73 | unset (multiValueArgs) 74 | 75 | if("${VALADOC_DOCLET}" STREQUAL "") 76 | list(APPEND VALADOC_FLAGS "--doclet=html") 77 | else() 78 | list(APPEND VALADOC_FLAGS "--doclet=${VALADOC_DOCLET}") 79 | endif() 80 | 81 | if(NOT "${VALADOC_PACKAGE_NAME}" STREQUAL "") 82 | list(APPEND VALADOC_FLAGS "--package-name=${VALADOC_PACKAGE_NAME}") 83 | endif() 84 | 85 | if(NOT "${VALADOC_PACKAGE_VERSION}" STREQUAL "") 86 | list(APPEND VALADOC_FLAGS "--package-version=${VALADOC_PACKAGE_VERSION}") 87 | endif() 88 | 89 | foreach(pkg ${VALADOC_PACKAGES}) 90 | list(APPEND VALADOC_FLAGS "--pkg=${pkg}") 91 | endforeach(pkg) 92 | 93 | add_custom_command( 94 | OUTPUT "${OUTPUT_DIR}" 95 | COMMAND valadoc 96 | ARGS 97 | --force 98 | -o "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIR}" 99 | ${VALADOC_FLAGS} 100 | ${VALADOC_SOURCES} 101 | DEPENDS 102 | ${VALADOC_SOURCES} 103 | COMMENT "Generating documentation with Valadoc" 104 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") 105 | endfunction() 106 | -------------------------------------------------------------------------------- /modules/FindGObjectIntrospection.cmake: -------------------------------------------------------------------------------- 1 | # FindGObjectIntrospection.cmake 2 | # 3 | # 4 | # License: 5 | # 6 | # Copyright (c) 2016 Evan Nemerson 7 | # 8 | # Permission is hereby granted, free of charge, to any person 9 | # obtaining a copy of this software and associated documentation 10 | # files (the "Software"), to deal in the Software without 11 | # restriction, including without limitation the rights to use, copy, 12 | # modify, merge, publish, distribute, sublicense, and/or sell copies 13 | # of the Software, and to permit persons to whom the Software is 14 | # furnished to do so, subject to the following conditions: 15 | # 16 | # The above copyright notice and this permission notice shall be 17 | # included in all copies or substantial portions of the Software. 18 | # 19 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26 | # DEALINGS IN THE SOFTWARE. 27 | 28 | find_program(GObjectIntrospection_COMPILER_EXECUTABLE g-ir-compiler) 29 | find_program(GObjectIntrospection_SCANNER_EXECUTABLE g-ir-scanner) 30 | 31 | if(CMAKE_INSTALL_FULL_DATADIR) 32 | set(GObjectIntrospection_REPOSITORY_DIR "${CMAKE_INSTALL_FULL_DATADIR}/gir-1.0") 33 | else() 34 | set(GObjectIntrospection_REPOSITORY_DIR "${CMAKE_INSTALL_PREFIX}/share/gir-1.0") 35 | endif() 36 | 37 | if(CMAKE_INSTALL_FULL_LIBDIR) 38 | set(GObjectIntrospection_TYPELIB_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/girepository-1.0") 39 | else() 40 | set(GObjectIntrospection_TYPELIB_DIR "${CMAKE_INSTALL_LIBDIR}/girepository-1.0") 41 | endif() 42 | 43 | if(GObjectIntrospection_COMPILER_EXECUTABLE) 44 | # Imported target 45 | add_executable(g-ir-compiler IMPORTED) 46 | set_property(TARGET g-ir-compiler PROPERTY IMPORTED_LOCATION "${GObjectIntrospection_COMPILER_EXECUTABLE}") 47 | endif() 48 | 49 | if(GObjectIntrospection_SCANNER_EXECUTABLE) 50 | # Imported target 51 | add_executable(g-ir-scanner IMPORTED) 52 | set_property(TARGET g-ir-scanner PROPERTY IMPORTED_LOCATION "${GObjectIntrospection_SCANNER_EXECUTABLE}") 53 | endif() 54 | 55 | include(FindPackageHandleStandardArgs) 56 | find_package_handle_standard_args(GObjectIntrospection 57 | REQUIRED_VARS 58 | GObjectIntrospection_COMPILER_EXECUTABLE 59 | GObjectIntrospection_SCANNER_EXECUTABLE) 60 | 61 | function(gobject_introspection_compile TYPELIB) 62 | set (options DEBUG VERBOSE) 63 | set (oneValueArgs MODULE SHARED_LIBRARY) 64 | set (multiValueArgs FLAGS INCLUDE_DIRS) 65 | cmake_parse_arguments(GObjectIntrospection_COMPILER "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 66 | unset (options) 67 | unset (oneValueArgs) 68 | unset (multiValueArgs) 69 | 70 | get_filename_component(TYPELIB "${TYPELIB}" ABSOLUTE 71 | BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") 72 | 73 | if(GObjectIntrospection_COMPILER_DEBUG) 74 | list(APPEND GObjectIntrospection_COMPILER_FLAGS "--debug") 75 | endif() 76 | 77 | if(GObjectIntrospection_COMPILER_VERBOSE) 78 | list(APPEND GObjectIntrospection_COMPILER_FLAGS "--verbose") 79 | endif() 80 | 81 | if(GObjectIntrospection_SHARED_LIBRARY) 82 | list(APPEND GObjectIntrospection_COMPILER_FLAGS "--shared-library" "${GObjectIntrospection_SHARED_LIBRARY}") 83 | endif() 84 | 85 | foreach(include_dir ${GObjectIntrospection_COMPILER_INCLUDE_DIRS}) 86 | list(APPEND GObjectIntrospection_COMPILER_FLAGS "--includedir" "${include_dir}") 87 | endforeach() 88 | 89 | add_custom_command( 90 | OUTPUT "${TYPELIB}" 91 | COMMAND g-ir-compiler 92 | ARGS 93 | "-o" "${TYPELIB}" 94 | ${GObjectIntrospection_COMPILER_FLAGS} 95 | ${GObjectIntrospection_COMPILER_UNPARSED_ARGUMENTS} 96 | DEPENDS 97 | ${GObjectIntrospection_COMPILER_UNPARSED_ARGUMENTS}) 98 | endfunction() 99 | -------------------------------------------------------------------------------- /modules/FindGIO.cmake: -------------------------------------------------------------------------------- 1 | # FindGIO.cmake 2 | # 3 | # 4 | # CMake support for GIO. 5 | # 6 | # License: 7 | # 8 | # Copyright (c) 2016 Evan Nemerson 9 | # 10 | # Permission is hereby granted, free of charge, to any person 11 | # obtaining a copy of this software and associated documentation 12 | # files (the "Software"), to deal in the Software without 13 | # restriction, including without limitation the rights to use, copy, 14 | # modify, merge, publish, distribute, sublicense, and/or sell copies 15 | # of the Software, and to permit persons to whom the Software is 16 | # furnished to do so, subject to the following conditions: 17 | # 18 | # The above copyright notice and this permission notice shall be 19 | # included in all copies or substantial portions of the Software. 20 | # 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 | # DEALINGS IN THE SOFTWARE. 29 | 30 | find_package(PkgConfig) 31 | 32 | set(GIO_DEPS 33 | GObject) 34 | 35 | if(PKG_CONFIG_FOUND) 36 | pkg_search_module(GIO_PKG gio-2.0) 37 | endif() 38 | 39 | find_library(GIO_LIBRARY gio-2.0 HINTS ${GIO_PKG_LIBRARY_DIRS}) 40 | set(GIO "gio-2.0") 41 | 42 | if(GIO_LIBRARY AND NOT GIO_FOUND) 43 | add_library(${GIO} SHARED IMPORTED) 44 | set_property(TARGET ${GIO} PROPERTY IMPORTED_LOCATION "${GIO_LIBRARY}") 45 | set_property(TARGET ${GIO} PROPERTY INTERFACE_COMPILE_OPTIONS "${GIO_PKG_CFLAGS_OTHER}") 46 | 47 | find_path(GIO_INCLUDE_DIR "gio/gio.h" 48 | HINTS ${GIO_PKG_INCLUDE_DIRS}) 49 | 50 | find_package(GLib) 51 | find_package(GObject) 52 | set(GIO_VERSION "${GLib_VERSION}") 53 | 54 | list(APPEND GIO_DEPS_FOUND_VARS "GObject_FOUND") 55 | list(APPEND GIO_INCLUDE_DIRS ${GObject_INCLUDE_DIRS}) 56 | 57 | set_property (TARGET "${GIO}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "gobject-2.0") 58 | set_property(TARGET ${GIO} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GIO_INCLUDE_DIR}") 59 | endif() 60 | 61 | find_program(GLib_COMPILE_SCHEMAS glib-compile-schemas) 62 | if(GLib_COMPILE_SCHEMAS AND NOT GLib_FOUND) 63 | add_executable(glib-compile-schemas IMPORTED) 64 | set_property(TARGET glib-compile-schemas PROPERTY IMPORTED_LOCATION "${GLib_COMPILE_SCHEMAS}") 65 | endif() 66 | 67 | # glib_install_schemas( 68 | # [DESTINATION directory] 69 | # schemas…) 70 | # 71 | # Validate and install the listed schemas. 72 | function(glib_install_schemas) 73 | set (options) 74 | set (oneValueArgs DESTINATION) 75 | set (multiValueArgs) 76 | cmake_parse_arguments(GSCHEMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 77 | unset (options) 78 | unset (oneValueArgs) 79 | unset (multiValueArgs) 80 | 81 | foreach(schema ${GSCHEMA_UNPARSED_ARGUMENTS}) 82 | get_filename_component(schema_name "${schema}" NAME) 83 | string(REGEX REPLACE "^(.+)\.gschema.xml$" "\\1" schema_name "${schema_name}") 84 | set(schema_output "${CMAKE_CURRENT_BINARY_DIR}/${schema_name}.gschema.xml.valid") 85 | 86 | add_custom_command( 87 | OUTPUT "${schema_output}" 88 | COMMAND glib-compile-schemas 89 | --strict 90 | --dry-run 91 | --schema-file="${schema}" 92 | COMMAND "${CMAKE_COMMAND}" ARGS -E touch "${schema_output}" 93 | DEPENDS "${schema}" 94 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 95 | COMMENT "Validating ${schema}") 96 | 97 | add_custom_target("gsettings-schema-${schema_name}" ALL 98 | DEPENDS "${schema_output}") 99 | 100 | if(CMAKE_INSTALL_FULL_DATADIR) 101 | set(SCHEMADIR "${CMAKE_INSTALL_FULL_DATADIR}/glib-2.0/schemas") 102 | else() 103 | set(SCHEMADIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas") 104 | endif() 105 | install(FILES "${schema}" 106 | DESTINATION "${SCHEMADIR}") 107 | install(CODE "execute_process(COMMAND \"${GLib_COMPILE_SCHEMAS}\" \"${SCHEMADIR}\")") 108 | endforeach() 109 | endfunction() 110 | 111 | find_program(GLib_COMPILE_RESOURCES glib-compile-resources) 112 | if(GLib_COMPILE_RESOURCES AND NOT GLib_FOUND) 113 | add_executable(glib-compile-resources IMPORTED) 114 | set_property(TARGET glib-compile-resources PROPERTY IMPORTED_LOCATION "${GLib_COMPILE_RESOURCES}") 115 | endif() 116 | 117 | function(glib_compile_resources SPEC_FILE) 118 | set (options INTERNAL) 119 | set (oneValueArgs TARGET SOURCE_DIR HEADER SOURCE C_NAME) 120 | set (multiValueArgs) 121 | cmake_parse_arguments(GLib_COMPILE_RESOURCES "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 122 | unset (options) 123 | unset (oneValueArgs) 124 | unset (multiValueArgs) 125 | 126 | if(NOT GLib_COMPILE_RESOURCES_SOURCE_DIR) 127 | set(GLib_COMPILE_RESOURCES_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 128 | endif() 129 | 130 | set(FLAGS) 131 | 132 | if(GLib_COMPILE_RESOURCES_INTERNAL) 133 | list(APPEND FLAGS "--internal") 134 | endif() 135 | 136 | if(GLib_COMPILE_RESOURCES_C_NAME) 137 | list(APPEND FLAGS "--c-name" "${GLib_COMPILE_RESOURCES_C_NAME}") 138 | endif() 139 | 140 | get_filename_component(SPEC_FILE "${SPEC_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 141 | 142 | execute_process( 143 | COMMAND glib-compile-resources 144 | --generate-dependencies 145 | --sourcedir "${GLib_COMPILE_RESOURCES_SOURCE_DIR}" 146 | "${SPEC_FILE}" 147 | OUTPUT_VARIABLE deps 148 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 149 | OUTPUT_STRIP_TRAILING_WHITESPACE) 150 | string(REPLACE "\n" ";" deps ${deps}) 151 | 152 | if(GLib_COMPILE_RESOURCES_HEADER) 153 | get_filename_component(GLib_COMPILE_RESOURCES_HEADER "${GLib_COMPILE_RESOURCES_HEADER}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") 154 | 155 | add_custom_command( 156 | OUTPUT "${GLib_COMPILE_RESOURCES_HEADER}" 157 | COMMAND glib-compile-resources 158 | --sourcedir "${GLib_COMPILE_RESOURCES_SOURCE_DIR}" 159 | --generate-header 160 | --target "${GLib_COMPILE_RESOURCES_HEADER}" 161 | ${FLAGS} 162 | "${SPEC_FILE}" 163 | DEPENDS "${SPEC_FILE}" ${deps} 164 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") 165 | endif() 166 | 167 | if(GLib_COMPILE_RESOURCES_SOURCE) 168 | get_filename_component(GLib_COMPILE_RESOURCES_SOURCE "${GLib_COMPILE_RESOURCES_SOURCE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") 169 | 170 | add_custom_command( 171 | OUTPUT "${GLib_COMPILE_RESOURCES_SOURCE}" 172 | COMMAND glib-compile-resources 173 | --sourcedir "${GLib_COMPILE_RESOURCES_SOURCE_DIR}" 174 | --generate-source 175 | --target "${GLib_COMPILE_RESOURCES_SOURCE}" 176 | ${FLAGS} 177 | "${SPEC_FILE}" 178 | DEPENDS "${SPEC_FILE}" ${deps} 179 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") 180 | endif() 181 | endfunction() 182 | 183 | find_program(GDBUS_CODEGEN gdbus-codegen) 184 | if(GDBUS_CODEGEN AND NOT GLib_FOUND) 185 | add_executable(gdbus-codegen IMPORTED) 186 | set_property(TARGET gdbus-codegen PROPERTY IMPORTED_LOCATION "${GDBUS_CODEGEN}") 187 | endif() 188 | 189 | include(FindPackageHandleStandardArgs) 190 | find_package_handle_standard_args(GIO 191 | REQUIRED_VARS 192 | GIO_LIBRARY 193 | GIO_INCLUDE_DIRS 194 | ${GIO_DEPS_FOUND_VARS} 195 | VERSION_VAR 196 | GIO_VERSION) 197 | 198 | unset(GIO_DEPS_FOUND_VARS) 199 | -------------------------------------------------------------------------------- /modules/FindVala.cmake: -------------------------------------------------------------------------------- 1 | # FindVala.cmake 2 | # 3 | # 4 | # This file contains functions which can be used to integrate Vala 5 | # compilation with CMake. It is intended as a replacement for Jakob 6 | # Westhoff's FindVala.cmake and UseVala.cmake. It uses fast-vapis for 7 | # faster parallel compilation, and per-target directories for 8 | # generated sources to allow reusing source files across, even with 9 | # different options. 10 | # 11 | # License: 12 | # 13 | # Copyright (c) 2016 Evan Nemerson 14 | # 15 | # Permission is hereby granted, free of charge, to any person 16 | # obtaining a copy of this software and associated documentation 17 | # files (the "Software"), to deal in the Software without 18 | # restriction, including without limitation the rights to use, copy, 19 | # modify, merge, publish, distribute, sublicense, and/or sell copies 20 | # of the Software, and to permit persons to whom the Software is 21 | # furnished to do so, subject to the following conditions: 22 | # 23 | # The above copyright notice and this permission notice shall be 24 | # included in all copies or substantial portions of the Software. 25 | # 26 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 27 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 28 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 29 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 30 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 31 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 32 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 33 | # DEALINGS IN THE SOFTWARE. 34 | 35 | set(VALAC_NAMES valac) 36 | 37 | set(_FIND_VALA_CURRENT_VERSION 98) 38 | while(_FIND_VALA_CURRENT_VERSION GREATER 0) 39 | list(APPEND VALAC_NAMES "valac-0.${_FIND_VALA_CURRENT_VERSION}") 40 | math(EXPR _FIND_VALA_CURRENT_VERSION "${_FIND_VALA_CURRENT_VERSION} - 2") 41 | endwhile() 42 | set(_FIND_VALA_CURRENT_VERSION 98) 43 | while(_FIND_VALA_CURRENT_VERSION GREATER 0) 44 | list(APPEND VALAC_NAMES "valac-1.${_FIND_VALA_CURRENT_VERSION}") 45 | math(EXPR _FIND_VALA_CURRENT_VERSION "${_FIND_VALA_CURRENT_VERSION} - 2") 46 | endwhile() 47 | unset(_FIND_VALA_CURRENT_VERSION) 48 | 49 | find_program(VALA_EXECUTABLE 50 | NAMES ${VALAC_NAMES}) 51 | mark_as_advanced(VALA_EXECUTABLE) 52 | 53 | unset(VALAC_NAMES) 54 | 55 | if(VALA_EXECUTABLE) 56 | # Determine valac version 57 | execute_process(COMMAND ${VALA_EXECUTABLE} "--version" 58 | OUTPUT_VARIABLE VALA_VERSION) 59 | string(REGEX REPLACE "^.*Vala ([0-9]+\\.[0-9]+\\.[0-9]+(\\.[0-9]+(\\-[0-9a-f]+)?)?).*$" "\\1" VALA_VERSION "${VALA_VERSION}") 60 | 61 | add_executable(valac IMPORTED) 62 | set_property(TARGET valac PROPERTY IMPORTED_LOCATION "${VALA_EXECUTABLE}") 63 | endif(VALA_EXECUTABLE) 64 | 65 | include(FindPackageHandleStandardArgs) 66 | find_package_handle_standard_args(Vala 67 | REQUIRED_VARS VALA_EXECUTABLE 68 | VERSION_VAR VALA_VERSION) 69 | 70 | function(_vala_mkdir_for_file file) 71 | get_filename_component(dir "${file}" DIRECTORY) 72 | file(MAKE_DIRECTORY "${dir}") 73 | endfunction() 74 | 75 | macro(_vala_parse_source_file_path source) 76 | set (options) 77 | set (oneValueArgs SOURCE TYPE OUTPUT_PATH OUTPUT_DIR GENERATED_SOURCE FAST_VAPI) 78 | set (multiValueArgs) 79 | cmake_parse_arguments(VALAPATH "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 80 | unset (options) 81 | unset (oneValueArgs) 82 | unset (multiValueArgs) 83 | 84 | if(VALAPATH_SOURCE) 85 | get_filename_component("${VALAPATH_SOURCE}" "${source}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 86 | endif() 87 | 88 | if(VALAPATH_TYPE) 89 | string(REGEX MATCH "[^\\.]+$" "${VALAPATH_TYPE}" "${source}") 90 | string(TOLOWER "${${VALAPATH_TYPE}}" "${VALAPATH_TYPE}") 91 | endif() 92 | 93 | if(VALAPATH_OUTPUT_PATH OR VALAPATH_GENERATED_SOURCE OR VALAPATH_OUTPUT_DIR OR VALAPATH_FAST_VAPI) 94 | get_filename_component(srcfile "${source}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 95 | 96 | string(LENGTH "${CMAKE_BINARY_DIR}" dirlen) 97 | string(SUBSTRING "${srcfile}" 0 ${dirlen} tmp) 98 | if("${CMAKE_BINARY_DIR}" STREQUAL "${tmp}") 99 | string(SUBSTRING "${srcfile}" ${dirlen} -1 tmp) 100 | set(outpath "build${tmp}") 101 | else() 102 | string(LENGTH "${CMAKE_SOURCE_DIR}" dirlen) 103 | string(SUBSTRING "${srcfile}" 0 ${dirlen} tmp) 104 | if("${CMAKE_SOURCE_DIR}" STREQUAL "${tmp}") 105 | string(SUBSTRING "${srcfile}" ${dirlen} -1 tmp) 106 | set(outpath "source${tmp}") 107 | else () 108 | # TODO: this probably doesn't work correctly on Windows… 109 | set(outpath "root${tmp}") 110 | endif() 111 | endif() 112 | 113 | unset(tmp) 114 | unset(dirlen) 115 | unset(srcfile) 116 | endif() 117 | 118 | if(VALAPATH_OUTPUT_PATH) 119 | set("${VALAPATH_OUTPUT_PATH}" "${outpath}") 120 | endif() 121 | 122 | if(VALAPATH_GENERATED_SOURCE) 123 | string(REGEX REPLACE "\\.(vala|gs)$" ".c" "${VALAPATH_GENERATED_SOURCE}" "${outpath}") 124 | endif() 125 | 126 | if(VALAPATH_FAST_VAPI) 127 | string(REGEX REPLACE "\\.(vala|gs)$" ".vapi" "${VALAPATH_FAST_VAPI}" "${outpath}") 128 | endif() 129 | 130 | if(VALAPATH_OUTPUT_DIR) 131 | get_filename_component("${VALAPATH_OUTPUT_DIR}" "${outpath}" DIRECTORY) 132 | endif() 133 | 134 | unset(outpath) 135 | endmacro() 136 | 137 | # vala_precompile_target( 138 | # TARGET 139 | # GENERATED_SOURCES 140 | # SOURCES… 141 | # [VAPI vapi-name.vapi] 142 | # [GIR name-version.gir] 143 | # [HEADER name.h] 144 | # [FLAGS …] 145 | # [PACKAGES …] 146 | # [DEPENDS …]) 147 | # 148 | # This function will use valac to generate C code. 149 | # 150 | # This function uses fast VAPIs to help improve parallelization and 151 | # incremental build times. The problem with this is that CMake 152 | # doesn't allow file-level dependencies across directories; if you're 153 | # generating code in one directory (for example, a library) and would 154 | # like to use it in another directory and are building in parallel, 155 | # the build can fail. To prevent this, this function will create a 156 | # ${TARGET}-vala top-level target (which *is* usable from other 157 | # directories). 158 | # 159 | # Options: 160 | # 161 | # TARGET 162 | # Target to create; it's generally best to make this similar to 163 | # your executable or library target name (e.g., for a "foo" 164 | # executable, "foo-vala" might be a good name), but not 165 | # technically required. 166 | # GENERATED_SOURCES 167 | # Variable in which to store the list of generated sources (which 168 | # you should pass to add_executable or add_library). 169 | # SOURCES 170 | # Vala sources to generate C from. You should include *.vala, 171 | # *.gs, and uninstalled *.vapi files here; you may also include 172 | # C/C++ sources (they will simply be passed directly through to 173 | # the GENERATED_SOURCES variable). 174 | # VAPI name.vapi 175 | # If you would like to have valac generate a VAPI (basically, if 176 | # you are generating a library not an executable), pass the file 177 | # name here. 178 | # GIR name-version.gir 179 | # If you would like to have valac generate a GIR, pass the file 180 | # name here. 181 | # HEADER name.h 182 | # If you would like to have valac generate a C header, pass the 183 | # file name here. 184 | # FLAGS … 185 | # List of flags you wish to pass to valac. They will be added to 186 | # the flags in VALA_COMPILER_FLAGS and VALA_COMPILER_FLAGS_DEBUG 187 | # (for Debug builds) or VALA_COMPILER_FLAGS_RELEASE (for Release 188 | # builds). 189 | # PACKAGES 190 | # List of dependencies to pass to valac. 191 | # DEPENDS 192 | # Any additional dependencies you would like. 193 | macro(vala_precompile_target TARGET GENERATED_SOURCES) 194 | set (options) 195 | set (oneValueArgs VAPI GIR HEADER) 196 | set (multiValueArgs FLAGS PACKAGES DEPENDS) 197 | cmake_parse_arguments(VALAC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 198 | unset (options) 199 | unset (oneValueArgs) 200 | unset (multiValueArgs) 201 | 202 | set(VALA_SOURCES) 203 | set(VALA_VAPIS) 204 | set(VALA_OUTPUT_SOURCES) 205 | 206 | if(VALAC_VAPI) 207 | list(APPEND non_source_out_files "${VALAC_VAPI}") 208 | list(APPEND non_source_valac_args "--vapi" "${VALAC_VAPI}") 209 | endif() 210 | 211 | if(VALAC_GIR) 212 | list(APPEND non_source_out_files "${VALAC_GIR}") 213 | list(APPEND non_source_valac_args 214 | "--gir" "${VALAC_GIR}" 215 | "--library" "${TARGET}" 216 | "--shared-library" "${CMAKE_SHARED_LIBRARY_PREFIX}${TARGET}${CMAKE_SHARED_LIBRARY_SUFFIX}") 217 | endif() 218 | 219 | if(VALAC_HEADER) 220 | list(APPEND non_source_out_files "${VALAC_HEADER}") 221 | list(APPEND non_source_valac_args --header "${VALAC_HEADER}") 222 | endif() 223 | 224 | # Split up the input files into three lists; one containing vala and 225 | # genie sources, one containing VAPIs, and one containing C files 226 | # (which may seem a bit silly, but it does open up the possibility 227 | # of declaring your source file list once instead of having separate 228 | # lists for Vala and C). 229 | foreach(source ${VALAC_UNPARSED_ARGUMENTS}) 230 | _vala_parse_source_file_path("${source}" 231 | SOURCE source_full 232 | TYPE type) 233 | 234 | if("vala" STREQUAL "${type}" OR "gs" STREQUAL "${type}") 235 | list(APPEND VALA_SOURCES "${source_full}") 236 | elseif("vapi" STREQUAL "${type}") 237 | list(APPEND VALA_VAPIS "${source_full}") 238 | elseif( 239 | "c" STREQUAL "${type}" OR 240 | "h" STREQUAL "${type}" OR 241 | "cc" STREQUAL "${type}" OR 242 | "cpp" STREQUAL "${type}" OR 243 | "cxx" STREQUAL "${type}" OR 244 | "hpp" STREQUAL "${type}") 245 | list(APPEND VALA_OUTPUT_SOURCES "${source_full}") 246 | endif() 247 | 248 | unset(type) 249 | unset(source_full) 250 | endforeach() 251 | 252 | # Set the common flags to pass to every valac invocation. 253 | set(VALAFLAGS ${VALAC_FLAGS} ${VALA_VAPIS}) 254 | foreach(pkg ${VALAC_PACKAGES}) 255 | list(APPEND VALAFLAGS "--pkg" "${pkg}") 256 | endforeach() 257 | list(APPEND VALAFLAGS ${VALA_COMPILER_FLAGS}) 258 | if (CMAKE_BUILD_TYPE MATCHES "Debug") 259 | list(APPEND VALAFLAGS ${VALA_COMPILER_FLAGS_DEBUG}) 260 | elseif(CMAKE_BUILD_TYPE MATCHES "Release") 261 | list(APPEND VALAFLAGS ${VALA_COMPILER_FLAGS_RELEASE}) 262 | endif() 263 | 264 | # Where to put the output 265 | set(TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}") 266 | 267 | set(FAST_VAPI_STAMPS) 268 | 269 | # Create fast VAPI targets for each vala source 270 | foreach(source ${VALA_SOURCES}) 271 | _vala_parse_source_file_path("${source}" 272 | FAST_VAPI fast_vapi_path) 273 | 274 | # We need somewhere to put the output… 275 | _vala_mkdir_for_file("${TARGET_DIR}/${fast_vapi_path}") 276 | 277 | # Create the target 278 | add_custom_command( 279 | OUTPUT "${TARGET_DIR}/${fast_vapi_path}.stamp" 280 | BYPRODUCTS "${TARGET_DIR}/${fast_vapi_path}" 281 | DEPENDS 282 | "${source}" 283 | ${VALA_VAPIS} 284 | ${VALAC_DEPENDS} 285 | COMMAND "${VALA_EXECUTABLE}" 286 | ARGS 287 | "${source}" 288 | --fast-vapi "${TARGET_DIR}/${fast_vapi_path}" 289 | ${VALAFLAGS} 290 | COMMAND "${CMAKE_COMMAND}" ARGS -E touch "${TARGET_DIR}/${fast_vapi_path}.stamp" 291 | COMMENT "Generating fast VAPI ${TARGET_DIR}/${fast_vapi_path}") 292 | 293 | list(APPEND FAST_VAPI_STAMPS "${TARGET_DIR}/${fast_vapi_path}.stamp") 294 | 295 | unset(fast_vapi_path) 296 | endforeach() 297 | 298 | # Create a ${TARGET_DIR}-fast-vapis target which depens on all the fast 299 | # vapi stamps. We can use this as a dependency to make sure all 300 | # fast-vapis are up to date. 301 | add_custom_command( 302 | OUTPUT "${TARGET_DIR}/fast-vapis.stamp" 303 | COMMAND "${CMAKE_COMMAND}" ARGS -E touch "${TARGET_DIR}/fast-vapis.stamp" 304 | DEPENDS 305 | ${FAST_VAPI_STAMPS} 306 | ${VALAC_DEPENDS} 307 | COMMENT "Generating fast VAPIs for ${TARGET}") 308 | 309 | add_custom_target("${TARGET}-fast-vapis" 310 | DEPENDS "${TARGET_DIR}/fast-vapis.stamp") 311 | 312 | set(VALA_GENERATED_SOURCE_STAMPS) 313 | 314 | # Add targets to generate C sources 315 | foreach(source ${VALA_SOURCES}) 316 | _vala_parse_source_file_path("${source}" 317 | OUTPUT_PATH output_path 318 | OUTPUT_DIR output_dir 319 | GENERATED_SOURCE generated_source) 320 | 321 | set(use_fast_vapi_flags) 322 | foreach(src ${VALA_SOURCES}) 323 | if(NOT "${src}" STREQUAL "${source}") 324 | _vala_parse_source_file_path("${src}" 325 | FAST_VAPI src_fast_vapi_path) 326 | 327 | list(APPEND use_fast_vapi_flags --use-fast-vapi "${TARGET_DIR}/${src_fast_vapi_path}") 328 | 329 | unset(src_fast_vapi_path) 330 | endif() 331 | endforeach() 332 | 333 | add_custom_command( 334 | OUTPUT "${TARGET_DIR}/${generated_source}.stamp" 335 | BYPRODUCTS "${TARGET_DIR}/${generated_source}" 336 | COMMAND "${VALA_EXECUTABLE}" 337 | ARGS 338 | -d "${TARGET_DIR}/${output_dir}" 339 | -C 340 | "${source}" 341 | ${VALAFLAGS} 342 | ${use_fast_vapi_flags} 343 | COMMAND "${CMAKE_COMMAND}" ARGS -E touch "${TARGET_DIR}/${generated_source}.stamp" 344 | DEPENDS 345 | "${TARGET}-fast-vapis" 346 | "${source}" 347 | ${VALA_VAPIS} 348 | COMMENT "Generating ${TARGET_DIR}/${generated_source}") 349 | unset(use_fast_vapi_flags) 350 | 351 | list(APPEND VALA_OUTPUT_SOURCES "${TARGET_DIR}/${generated_source}") 352 | list(APPEND VALA_GENERATED_SOURCE_STAMPS "${TARGET_DIR}/${generated_source}.stamp") 353 | 354 | unset(fast_vapi_path) 355 | unset(output_dir) 356 | unset(generated_source) 357 | endforeach() 358 | 359 | add_custom_command( 360 | OUTPUT "${TARGET_DIR}/stamp" 361 | COMMAND "${CMAKE_COMMAND}" ARGS -E touch "${TARGET_DIR}/stamp" 362 | DEPENDS ${VALA_GENERATED_SOURCE_STAMPS} 363 | COMMENT "Generating sources from Vala for ${TARGET}") 364 | 365 | set("${GENERATED_SOURCES}" ${VALA_OUTPUT_SOURCES}) 366 | 367 | if(non_source_out_files) 368 | set(use_fast_vapi_flags) 369 | foreach(source ${VALA_SOURCES}) 370 | _vala_parse_source_file_path("${source}" 371 | FAST_VAPI fast_vapi_path) 372 | 373 | list(APPEND use_fast_vapi_flags --use-fast-vapi "${TARGET_DIR}/${fast_vapi_path}") 374 | 375 | unset(fast_vapi_path) 376 | endforeach() 377 | 378 | add_custom_command(OUTPUT ${non_source_out_files} 379 | COMMAND ${VALA_EXECUTABLE} 380 | ARGS 381 | -C 382 | ${non_source_valac_args} 383 | ${VALAFLAGS} 384 | ${use_fast_vapi_flags} 385 | DEPENDS 386 | "${TARGET}-fast-vapis" 387 | ${VALA_VAPIS}) 388 | unset(use_fast_vapi_flags) 389 | endif() 390 | 391 | # CMake doesn't allow file-level dependencies across directories, so 392 | # we provide a target we can depend on from other directories. 393 | add_custom_target("${TARGET}" 394 | DEPENDS 395 | "${TARGET_DIR}/stamp" 396 | ${non_source_out_files} 397 | ${VALAC_DEPENDS} 398 | ${VALA_GENERATED_SOURCE_STAMPS}) 399 | 400 | unset(non_source_out_files) 401 | unset(non_source_valac_args) 402 | 403 | unset(VALA_GENERATED_SOURCE_STAMPS) 404 | unset(FAST_VAPI_STAMPS) 405 | unset(TARGET_DIR) 406 | unset(VALAFLAGS) 407 | unset(VALA_SOURCES) 408 | unset(VALA_VAPIS) 409 | unset(VALA_OUTPUT_SOURCES) 410 | endmacro() 411 | --------------------------------------------------------------------------------