Notifier is now a member
[gregoa/zavai.git] / vala.cmake
1 include(FindPkgConfig)
2
3 find_program(VALAC valac)
4
5 function(add_vala_library libname)
6   set(valasources ${ARGN})
7
8   # Get the names of the C sources generated by the vala sources
9   foreach(vs ${valasources})
10     file(RELATIVE_PATH cs ${CMAKE_CURRENT_SOURCE_DIR} ${vs})
11     string(REGEX REPLACE "\\.vala$" ".c" cs ${cs})
12     set(csources ${csources} ${CMAKE_CURRENT_BINARY_DIR}/${cs})
13   endforeach(vs)
14
15   set(header ${CMAKE_CURRENT_BINARY_DIR}/${libname}.h)
16   set(vapi ${CMAKE_CURRENT_BINARY_DIR}/${libname}.vapi)
17
18   set_source_files_properties(${csources} ${header} ${vapi} PROPERTIES GENERATED 1)
19
20   # Export the list of C sources
21   set(${libname}_CSOURCES ${csources} PARENT_SCOPE)
22   
23   # Create --pkg= entries for command line
24   foreach(pkg ${VALA_PACKAGES})
25           set(pkgs ${pkgs} --pkg=${pkg})
26   endforeach(pkg)
27
28   #message(DEPENDS ${valasources})
29   #message(OUTPUT ${csources} ${CMAKE_CURRENT_BINARY_DIR}/${libname}.h ${CMAKE_CURRENT_BINARY_DIR}/${libname}.vapi)
30   add_custom_command(
31       DEPENDS ${valasources}
32       OUTPUT ${csources} ${header} ${vapi}
33       COMMAND ${VALAC} ${VFLAGS} ${pkgs} -C -H ${header} --library=${libname} ${valasources}
34   )
35 endfunction(add_vala_library)
36
37 function(add_vala_program progname)
38   set(valasources ${ARGN})
39
40   # Get the names of the C sources generated by the vala sources
41   foreach(vs ${valasources})
42     file(RELATIVE_PATH cs ${CMAKE_CURRENT_SOURCE_DIR} ${vs})
43     string(REGEX REPLACE "\\.vala$" ".c" cs ${cs})
44     set(csources ${csources} ${cs})
45   endforeach(vs)
46
47   set_source_files_properties(${csources} PROPERTIES GENERATED 1)
48
49   # Export the list of C sources
50   set(${progname}_CSOURCES ${csources} PARENT_SCOPE)
51   
52   # Create --pkg= entries for command line
53   foreach(pkg ${VALA_PACKAGES})
54           set(pkgs ${pkgs} --pkg=${pkg})
55   endforeach(pkg)
56
57   add_custom_command(
58       DEPENDS ${valasources}
59       OUTPUT ${csources}
60       COMMAND ${VALAC} ${VFLAGS} ${pkgs} -C ${valasources}
61   )
62 endfunction(add_vala_program)
63
64 # Requires a prefix: we cannot use TMP as internal prefix because
65 # pkg_check_modules will not overwrite variables which already exist, so
66 # add_packages would not be able to be called more than once
67 function(add_packages prefix)
68   set(packages ${ARGN})
69
70   pkg_check_modules(${prefix} REQUIRED ${packages})
71   add_definitions(${${prefix}_CFLAGS})
72   link_libraries(${${prefix}_LDFLAGS})
73
74   #foreach(pkg ${packages})
75   #  string(REGEX REPLACE "[><=].+" "" modname ${pkg})
76   #  pkg_check_modules(TMP${modname} REQUIRED ${pkg})
77   #  message("FOR ${pkg} CFLAGS ${TMP${modname}_CFLAGS} LIBS ${TMP${modname}_LDFLAGS}")
78   #  add_definitions(${TMP${modname}_CFLAGS})
79   #  link_libraries(${TMP${modname}_LDFLAGS})
80   #endforeach(pkg)
81 endfunction(add_packages)