### Build and Install libayatana-appindicator Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/INSTALL.md Standard build and installation process for end-users and packagers. The install prefix defaults to `/usr`, but can be changed with `-DCMAKE_INSTALL_PREFIX=/some/path`. The libexec prefix defaults to `/libexec` and can be changed with `-DCMAKE_INSTALL_LIBEXECDIR=lib`. ```bash cd libayatana-appindicator mkdir build cd build cmake .. -DENABLE_GTKDOC=ON make sudo make install ``` -------------------------------- ### Configure Example File Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/mono/examples/CMakeLists.txt Uses CMake to generate the example executable script from an input template. ```cmake configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ayatana-indicator-example.in" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-example" @ONLY) ``` -------------------------------- ### Include Examples Subdirectory Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/CMakeLists.txt Conditionally includes the 'examples' subdirectory if tests are enabled. This allows for building and running examples alongside tests. ```cmake if (ENABLE_TESTS) add_subdirectory(examples) endif() ``` -------------------------------- ### Configure and install policy.0.1.config with CMake Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/mono/CMakeLists.txt This CMake code configures a policy configuration file from a template and installs it. The `configure_file` command substitutes variables, and `install` places the file in the appropriate directory. ```cmake configure_file("${CMAKE_CURRENT_SOURCE_DIR}/policy.0.1.${ayatana_appindicator_gtkver}-sharp.config.in" "${CMAKE_CURRENT_BINARY_DIR}/policy.0.1.${ayatana_appindicator_gtkver}-sharp.config" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/policy.0.1.${ayatana_appindicator_gtkver}-sharp.config" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/cli/${ayatana_appindicator_gtkver}-sharp-0.1") ``` -------------------------------- ### Install Vala Bindings Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/CMakeLists.txt Installs the generated Vala API file to the VAPI data directory. ```cmake install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ayatana-appindicator3-0.1.vapi" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/vala/vapi") ``` -------------------------------- ### Install Vala Dependencies Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/CMakeLists.txt Installs the Vala dependency file to the appropriate data directory for VAPI. ```cmake install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator3-0.1.deps" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/vala/vapi") ``` -------------------------------- ### Configure App Indicator Version Header Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/src/CMakeLists.txt Configures the app-indicator-version.h header file from a template and installs it to the include directory. ```cmake configure_file(app-indicator-version.h.in app-indicator-version.h @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/app-indicator-version.h" DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/lib${ayatana_appindicator_gtkver}-0.1/libayatana-appindicator") ``` -------------------------------- ### C Executable Target Setup Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/example/CMakeLists.txt Adds an executable target for a C client, setting compile definitions, include directories, and linking necessary libraries. ```cmake # simple-client add_executable("simple-client" "${CMAKE_CURRENT_SOURCE_DIR}/simple-client.c") target_compile_definitions("simple-client" PUBLIC LOCAL_ICON="${CMAKE_CURRENT_SOURCE_DIR}/simple-client-test-icon.png") target_include_directories("simple-client" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS}) target_include_directories("simple-client" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_include_directories("simple-client" PUBLIC "${CMAKE_BINARY_DIR}/src") target_link_libraries("simple-client" "${PROJECT_DEPS_LIBRARIES} -l${ayatana_appindicator_gtkver} -L${CMAKE_BINARY_DIR}/src") add_dependencies("simple-client" "${ayatana_appindicator_gtkver}") ``` -------------------------------- ### Build AyatanaIndicatorExample.exe Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/mono/examples/CMakeLists.txt Defines custom commands to compile the C# example using Mono, supporting both GTK2 and GTK3 flavors. ```cmake find_program(MONO mono) if (FLAVOUR_GTK3) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaIndicatorExample.exe" DEPENDS "bindings-mono" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${MCS} -out:"${CMAKE_CURRENT_BINARY_DIR}/AyatanaIndicatorExample.exe" -target:exe ${GTK_SHARP_3_0_LDFLAGS} "-r:${CMAKE_BINARY_DIR}/bindings/mono/ayatana-appindicator3-sharp.dll" "${CMAKE_CURRENT_SOURCE_DIR}/AyatanaIndicatorExample.cs" ) elseif (FLAVOUR_GTK2) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaIndicatorExample.exe" DEPENDS "bindings-mono" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${MCS} -out:"${CMAKE_CURRENT_BINARY_DIR}/AyatanaIndicatorExample.exe" -target:exe ${GTK_SHARP_2_0_LDFLAGS} "-r:${CMAKE_BINARY_DIR}/bindings/mono/ayatana-appindicator-sharp.dll" "${CMAKE_CURRENT_SOURCE_DIR}/AyatanaIndicatorExample.cs" ) endif() add_custom_target("bindings-mono-examples" ALL DEPENDS "AyatanaIndicatorExample.exe") ``` -------------------------------- ### Conditional GTK Version Setup Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/example/CMakeLists.txt Sets variables for GTK version-specific library names and package versions based on the FLAVOUR_GTK3 or FLAVOUR_GTK2 flags. ```cmake if (FLAVOUR_GTK3) set (ayatana_appindicator_gtkver "ayatana-appindicator3") set (gtk_valapkgver "gtk+-3.0") elseif (FLAVOUR_GTK2) set (ayatana_appindicator_gtkver "ayatana-appindicator") set (gtk_valapkgver "gtk+-2.0") endif() ``` -------------------------------- ### Generate policy.0.0.dll with CMake Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/mono/CMakeLists.txt This CMake custom command generates the `policy.0.0.dll` using the `AL` tool. It requires a configuration file and a key file for signing. The generated DLL is then installed. ```cmake find_program( AL al ) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/policy.0.0.${ayatana_appindicator_gtkver}-sharp.dll" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_gtkver}-sharp.dll" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${AL} -link:"policy.0.0.${ayatana_appindicator_gtkver}-sharp.config" -out:"${CMAKE_CURRENT_BINARY_DIR}/policy.0.0.${ayatana_appindicator_gtkver}-sharp.dll" -keyfile:"${CMAKE_CURRENT_SOURCE_DIR}/${ayatana_appindicator_gtkver}-sharp.snk" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/policy.0.0.${ayatana_appindicator_gtkver}-sharp.dll" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/cli/${ayatana_appindicator_gtkver}-sharp-0.1") install(CODE "execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${GACUTIL} -i ${CMAKE_CURRENT_BINARY_DIR}/policy.0.0.${ayatana_appindicator_gtkver}-sharp.dll -package ${ayatana_appindicator_gtkver}-sharp -root ${CMAKE_INSTALL_FULL_LIBDIR})") ``` -------------------------------- ### Build libayatana-appindicator Shared Library Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/src/CMakeLists.txt Defines the shared library, sets its version, compile definitions, include directories, and links against project dependencies. It also configures symbol versioning for non-Apple platforms and installs the library. ```cmake add_library("${ayatana_appindicator_gtkver}" SHARED ${SOURCES}) set_target_properties("${ayatana_appindicator_gtkver}" PROPERTIES VERSION 1.0.0 SOVERSION 1) target_compile_definitions("${ayatana_appindicator_gtkver}" PUBLIC G_LOG_DOMAIN="libayatana-appindicator") target_include_directories("${ayatana_appindicator_gtkver}" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS}) target_include_directories("${ayatana_appindicator_gtkver}" PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories("${ayatana_appindicator_gtkver}" PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries("${ayatana_appindicator_gtkver}" ${PROJECT_DEPS_LIBRARIES}) if(NOT APPLE) target_link_options ("${ayatana_appindicator_gtkver}" PRIVATE "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/app-indicator.symbols") endif() install(TARGETS "${ayatana_appindicator_gtkver}" LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") ``` -------------------------------- ### Executable Target Configuration Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/examples/CMakeLists.txt This section defines the executable target 'ayatana-indicator-example'. It sets compile flags, adds the generated C source file, includes necessary directories, and links against the required libraries, including the ayatana-appindicator library. ```cmake set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-example.c" PROPERTIES COMPILE_FLAGS " -Wno-incompatible-pointer-types") add_executable("ayatana-indicator-example" "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-example.c") target_include_directories("ayatana-indicator-example" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) target_link_libraries("ayatana-indicator-example" "${PROJECT_DEPS_LIBRARIES} -layatana-appindicator3 -L${CMAKE_BINARY_DIR}/src") ``` -------------------------------- ### Build and Test libayatana-appindicator (Unit Tests) Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/INSTALL.md Build and run unit tests for libayatana-appindicator. This configuration enables testing and warnings that cause compilation to fail if warnings are present. ```bash cd libayatana-appindicator mkdir build cd build cmake .. -DENABLE_GTKDOC=ON -DENABLE_WERROR=ON -DENABLE_TESTS=ON make make test ``` -------------------------------- ### Build Test Executable: test-simple-app Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Defines the test-simple-app executable. It configures include directories, links libraries, and adds dependencies. ```cmake add_executable("test-simple-app" "${CMAKE_CURRENT_SOURCE_DIR}/test-simple-app.c") target_include_directories("test-simple-app" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS}) target_include_directories("test-simple-app" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_include_directories("test-simple-app" PUBLIC "${CMAKE_BINARY_DIR}/src") target_link_libraries("test-simple-app" "${PROJECT_DEPS_LIBRARIES} -l${ayatana_appindicator_gtkver}") target_link_directories("test-simple-app" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies("test-simple-app" "${ayatana_appindicator_gtkver}") ``` -------------------------------- ### Custom Command for Vala Compilation Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/examples/CMakeLists.txt This custom command compiles the Vala source file 'ayatana-indicator-example.vala' into a C file. It specifies dependencies, working directory, and compiler options including Vala package requirements and include directories. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ayatana-indicator-example.c" DEPENDS "bindings-vala" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_BINARY_DIR}/src" "${CMAKE_BINARY_DIR}/libayatana-appindicator" COMMAND ${VALA_COMPILER} --pkg ayatana-appindicator3-0.1 --pkg gtk+-3.0 --vapidir=${CMAKE_BINARY_DIR}/bindings/vala -C ayatana-indicator-example.vala --metadatadir "${CMAKE_SOURCE_DIR}/src" --includedir="${CMAKE_BINARY_DIR}/src" --directory=${CMAKE_CURRENT_BINARY_DIR} ) ``` -------------------------------- ### Generate C# Bindings with CMake Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/mono/CMakeLists.txt Configures the build process to generate C# source files using gapi-codegen based on the selected GTK version. ```cmake if (FLAVOUR_GTK3) pkg_check_modules(GTK_SHARP_3_0 REQUIRED gtk-sharp-3.0>=2.99) string(REPLACE ":" ";-I:" GTK_SHARP_3_0_INCLUDE_DIRS ${GTK_SHARP_3_0_INCLUDE_DIRS}) find_program(GAPI3_CODEGEN gapi3-codegen) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/GtkSharp/ObjectManager.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/AppIndicatorCategory.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewAttentionIconHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewStatusHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/AppIndicatorStatus.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewIconHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewIconThemePathHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ScrollEventHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ConnectionChangedHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewLabelHandler.cs" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/lib${ayatana_appindicator_gtkver}-api.xml" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${GAPI3_CODEGEN} --generate lib${ayatana_appindicator_gtkver}-api.xml --outdir=${CMAKE_CURRENT_BINARY_DIR} --assembly-name=${ayatana_appindicator_gtkver}-sharp ${GTK_SHARP_3_0_INCLUDE_DIRS} ) elseif (FLAVOUR_GTK2) pkg_check_modules(GTK_SHARP_2_0 REQUIRED gtk-sharp-2.0>=2.12) string(REPLACE ":" ";-I:" GTK_SHARP_2_0_INCLUDE_DIRS ${GTK_SHARP_2_0_INCLUDE_DIRS}) find_program(GAPI2_CODEGEN gapi2-codegen) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ObjectManager.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/AppIndicatorCategory.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewAttentionIconHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewStatusHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/AppIndicatorStatus.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewIconHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs.raw" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewIconThemePathHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ScrollEventHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ConnectionChangedHandler.cs" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/NewLabelHandler.cs" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/lib${ayatana_appindicator_gtkver}-api.xml" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${GAPI2_CODEGEN} --generate lib${ayatana_appindicator_gtkver}-api.xml --outdir=${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator --assembly-name=${ayatana_appindicator_gtkver}-sharp ${GTK_SHARP_2_0_INCLUDE_DIRS} && mv "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs" "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs.raw" ) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs.raw" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM COMMAND sed -e "s|public class ApplicationIndicator|public partial class ApplicationIndicator|" "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs.raw" > "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator/ApplicationIndicator.cs" ) endif() ``` -------------------------------- ### Generate Main Test Script Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Generates a shell script to execute the tests, setting up the DISPLAY environment variable and sourcing a script to run xvfb. It then invokes the DBUS_TEST_RUNNER with the gtester script. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests" ) ``` -------------------------------- ### Build libayatana-appindicator with Unit Tests and Code Coverage Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/INSTALL.md Build libayatana-appindicator with unit tests and code coverage enabled. This configuration also enables warnings that cause compilation to fail if warnings are present. ```bash cd libayatana-appindicator mkdir build cd build cmake .. -DENABLE_GTKDOC=ON -DENABLE_WERROR=ON -DENABLE_COVERAGE=ON make make coverage ``` -------------------------------- ### Generate Vala Bindings Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/CMakeLists.txt Generates Vala bindings for the AyatanaAppIndicator library. This command requires Vala and uses VAPI to create the necessary typelib and VAPI files. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator3-0.1.vala" DEPENDS "src" "${CMAKE_BINARY_DIR}/src/AyatanaAppIndicator3-0.1.typelib" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${VAPI_GEN} --library=ayatana-appindicator3-0.1 --pkg gtk+-3.0 --girdir="${CMAKE_SOURCE_DIR}/src" --metadatadir "${CMAKE_SOURCE_DIR}/src" "${CMAKE_BINARY_DIR}/src/AyatanaAppIndicator3-0.1.gir" "${CMAKE_CURRENT_SOURCE_DIR}/ayatana-appindicator-0.1-custom.vala" ) ``` -------------------------------- ### Generate policy.0.1.dll with CMake Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/mono/CMakeLists.txt This CMake custom command generates `policy.0.1.dll` using the `AL` tool, depending on the previously generated `policy.0.0.dll`. It links against the `policy.0.1.config` file and signs the output DLL. ```cmake find_program(AL al) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/policy.0.1.${ayatana_appindicator_gtkver}-sharp.dll" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/policy.0.0.${ayatana_appindicator_gtkver}-sharp.dll" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${AL} -link:"policy.0.1.${ayatana_appindicator_gtkver}-sharp.config" -out:"${CMAKE_CURRENT_BINARY_DIR}/policy.0.1.${ayatana_appindicator_gtkver}-sharp.dll" -keyfile:"${CMAKE_CURRENT_SOURCE_DIR}/${ayatana_appindicator_gtkver}-sharp.snk" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/policy.0.1.${ayatana_appindicator_gtkver}-sharp.dll" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/cli/${ayatana_appindicator_gtkver}-sharp-0.1") add_custom_target("bindings-mono" ALL DEPENDS "policy.0.1.${ayatana_appindicator_gtkver}-sharp.dll") ``` -------------------------------- ### Build Test Executable: test-libappindicator-fallback-watcher Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Defines the test-libappindicator-fallback-watcher executable. It sets public include directories, links necessary libraries, and specifies public link directories. ```cmake add_executable("test-libappindicator-fallback-watcher" "${CMAKE_CURRENT_SOURCE_DIR}/test-libappindicator-fallback-watcher.c") target_include_directories("test-libappindicator-fallback-watcher" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS}) target_link_libraries("test-libappindicator-fallback-watcher" "${PROJECT_DEPS_LIBRARIES} -l${ayatana_appindicator_gtkver}") target_link_directories("test-libappindicator-fallback-watcher" PUBLIC "${CMAKE_BINARY_DIR}/src") add_dependencies("test-libappindicator-fallback-watcher" "${ayatana_appindicator_gtkver}") ``` -------------------------------- ### Custom Command for test-libappindicator-status Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Creates a shell script for the status test. It sets up the display environment and uses dbus-test-runner to execute client and server components. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-client" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-server" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-client --task-name Client --ignore-return --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status-server --task-name Server" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-status" ) add_test("test-libappindicator-status" "test-libappindicator-status") ``` -------------------------------- ### Custom Command for test-libappindicator-fallback Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Creates a custom command to generate a shell script for running the fallback test. This script sets up the environment and executes the test runner. ```cmake find_program(DBUS_TEST_RUNNER dbus-test-runner) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback-watcher" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback-item" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback-watcher --task-name Watcher --ignore-return --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback-item --task-name Item" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-fallback" ) add_test("test-libappindicator-fallback" "test-libappindicator-fallback") ``` -------------------------------- ### Custom Command for test-libappindicator-dbus Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Generates a shell script to run the D-Bus integration test. It configures the environment and uses dbus-test-runner to execute client and server tasks. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-client" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-server" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND echo "export DISPLAY=" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND echo "${DBUS_TEST_RUNNER} --keep-env -m 300 --dbus-config /usr/share/dbus-test-runner/session.conf --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-client --task-name Client --ignore-return --task ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus-server --task-name Server" >> "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator-dbus" ) add_test("test-libappindicator-dbus" "test-libappindicator-dbus") ``` -------------------------------- ### Vala Compilation for GTK3 Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/example/CMakeLists.txt Adds a custom command to compile Vala source files into C code for GTK3, including package dependencies and post-compilation modifications. ```cmake # Vala bindings are only available for FLAVOUR_GTK3 if (FLAVOUR_GTK3) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c" DEPENDS "bindings-vala" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${VALA_COMPILER} --pkg ${ayatana_appindicator_gtkver}-0.1 --pkg ${gtk_valapkgver} --vapidir=${CMAKE_BINARY_DIR}/bindings/vala -C simple-client-vala.vala --directory=${CMAKE_CURRENT_BINARY_DIR} VERBATIM COMMAND sed -i "s|#include\s*<\s*libayatana-appindicator/app-indicator.h\s*>||g" "${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c" ) # simple-client-vala set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c" PROPERTIES COMPILE_FLAGS " -include ${CMAKE_SOURCE_DIR}/src/app-indicator.h -Wno-incompatible-pointer-types -Wno-unused-but-set-variable") add_executable("simple-client-vala" "${CMAKE_CURRENT_BINARY_DIR}/simple-client-vala.c") target_include_directories("simple-client-vala" PUBLIC ${PROJECT_DEPS_INCLUDE_DIRS}) target_include_directories("simple-client-vala" PUBLIC "${CMAKE_SOURCE_DIR}/src") target_include_directories("simple-client-vala" PUBLIC "${CMAKE_BINARY_DIR}/src") target_link_libraries("simple-client-vala" "${PROJECT_DEPS_LIBRARIES} -l${ayatana_appindicator_gtkver} -L${CMAKE_BINARY_DIR}/src") add_dependencies("simple-client-vala" "${ayatana_appindicator_gtkver}") endif() ``` -------------------------------- ### Copy GIR Sources Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/src/CMakeLists.txt A custom command to copy GIR source files to the build directory before the library is built. ```cmake add_custom_command( TARGET "${ayatana_appindicator_gtkver}" PRE_BUILD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${GIR_SOURCES} ${CMAKE_CURRENT_BINARY_DIR} ) ``` -------------------------------- ### AppIndicator Versioning Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/docs/reference/libayatana-appindicator-sections.txt Constants and functions for checking the version of the Ayatana AppIndicator library. ```APIDOC ## Versioning ### Description Provides macros and functions to access and check the version of the Ayatana AppIndicator library. ### Version Macros - **AYATANA_APP_INDICATOR_MAJOR_VERSION**: The major version number. - **AYATANA_APP_INDICATOR_MINOR_VERSION**: The minor version number. - **AYATANA_APP_INDICATOR_MICRO_VERSION**: The micro version number. - **AYATANA_APP_INDICATOR_VERSION**: The full version number as a string. - **AYATANA_APP_INDICATOR_VERSION_S**: The full version number as a string (alternative). - **AYATANA_APP_INDICATOR_VERSION_HEX**: The version number in hexadecimal format. ### Version Check Function - **AYATANA_APP_INDICATOR_CHECK_VERSION**(major, minor, micro): Checks if the installed library version meets the specified requirements. ``` -------------------------------- ### Add Vala Bindings Target Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/vala/CMakeLists.txt Creates a custom target for generating Vala bindings, ensuring they are built as part of the ALL target. ```cmake add_custom_target("bindings-vala" ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/AyatanaAppIndicator3-0.1.vala") ``` -------------------------------- ### Define All Tests Target Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Creates a custom target named 'tests' that depends on several other test targets, ensuring all tests are built and can be run together. ```cmake add_custom_target("tests" ALL DEPENDS "test-libappindicator-fallback" "test-libappindicator-dbus" "test-libappindicator-status" "libappindicator-tests") ``` -------------------------------- ### Define Test Executable Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Defines a CMake test named 'libappindicator-tests' that will execute the generated test script. ```cmake add_test("libappindicator-tests" "libappindicator-tests") ``` -------------------------------- ### AppIndicator Functions Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/docs/reference/libayatana-appindicator-sections.txt This section details the primary functions for creating, managing, and retrieving information about application indicators. ```APIDOC ## AppIndicator Functions ### Description Provides functions to create, configure, and query application indicators. ### Functions - **app_indicator_get_type**(): Returns the GType for AppIndicator. - **app_indicator_new**(label, icon, category): Creates a new AppIndicator. - **app_indicator_new_with_path**(label, icon, category, icon_theme_path): Creates a new AppIndicator with a specified icon theme path. - **app_indicator_set_status**(indicator, status): Sets the status of the indicator. - **app_indicator_set_attention_icon**(indicator, icon_name): Sets the attention icon for the indicator. - **app_indicator_set_attention_icon_full**(indicator, icon_name, icon_desc): Sets the attention icon and its description. - **app_indicator_set_menu**(indicator, menu): Sets the context menu for the indicator. - **app_indicator_set_icon**(indicator, icon_name): Sets the icon for the indicator. - **app_indicator_set_icon_full**(indicator, icon_name, icon_desc): Sets the icon and its description. - **app_indicator_set_icon_theme_path**(indicator, icon_theme_path): Sets the icon theme path for the indicator. - **app_indicator_set_label**(indicator, label): Sets the label for the indicator. - **app_indicator_set_ordering_index**(indicator, ordering_index): Sets the ordering index for the indicator. - **app_indicator_set_secondary_activate_target**(indicator, secondary_activate_target): Sets the secondary activate target. - **app_indicator_set_title**(indicator, title): Sets the title for the indicator. - **app_indicator_get_id**(indicator): Retrieves the unique ID of the indicator. - **app_indicator_get_category**(indicator): Retrieves the category of the indicator. - **app_indicator_get_status**(indicator): Retrieves the current status of the indicator. - **app_indicator_get_icon**(indicator): Retrieves the icon name of the indicator. - **app_indicator_get_icon_desc**(indicator): Retrieves the description of the indicator's icon. - **app_indicator_get_icon_theme_path**(indicator): Retrieves the icon theme path. - **app_indicator_get_attention_icon**(indicator): Retrieves the attention icon name. - **app_indicator_get_attention_icon_desc**(indicator): Retrieves the description of the attention icon. - **app_indicator_get_menu**(indicator): Retrieves the context menu of the indicator. - **app_indicator_get_label**(indicator): Retrieves the label of the indicator. - **app_indicator_get_label_guide**(indicator): Retrieves the label guide. - **app_indicator_get_ordering_index**(indicator): Retrieves the ordering index. - **app_indicator_get_secondary_activate_target**(indicator): Retrieves the secondary activate target. - **app_indicator_get_title**(indicator): Retrieves the title of the indicator. - **app_indicator_build_menu_from_desktop**(indicator, desktop_file_path): Builds the indicator's menu from a desktop file. ``` -------------------------------- ### Compile GObject Introspection GIR to Typelib Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/src/CMakeLists.txt Compiles the generated .gir file into a .typelib file using GObjectIntrospection's introspectionscompiler. This command depends on the .gir file being generated. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.typelib" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.gir" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTROSPECTION_COMPILER} --includedir=${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.gir -o "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.typelib" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.typelib" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/girepository-1.0") add_custom_target(src ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.typelib") ``` -------------------------------- ### Generate gtester Script Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/tests/CMakeLists.txt Creates a shell script to run gtester with specific verbose and output configurations. This script is used to execute the compiled test binaries. ```cmake add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM COMMAND echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" COMMAND echo "gtester -k --verbose -o=${CMAKE_CURRENT_BINARY_DIR}/libappindicator-check-results.xml ${CMAKE_CURRENT_BINARY_DIR}/test-libappindicator" >> "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" COMMAND chmod +x "${CMAKE_CURRENT_BINARY_DIR}/libappindicator-tests-gtester" ) ``` -------------------------------- ### Generate GObject Introspection GIR File Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/src/CMakeLists.txt Generates the .gir file using GObjectIntrospection's introspectionscanner. This command requires the GObjectIntrospection package and depends on the built library. ```cmake find_package(GObjectIntrospection REQUIRED) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.gir" DEPENDS "${ayatana_appindicator_gtkver}" COMMAND ${INTROSPECTION_SCANNER} ${GIR_SOURCES} --c-include=libayatana-appindicator/app-indicator.h --symbol-prefix=app --identifier-prefix=App --namespace=${ayatana_appindicator_girver} --nsversion=0.1 --quiet --warn-all --include=GObject-2.0 --include=${gtk_girver} --library-path=${CMAKE_CURRENT_BINARY_DIR} --library="${ayatana_appindicator_gtkver}" --output "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.gir" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${ayatana_appindicator_girver}-0.1.gir" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/gir-1.0") ``` -------------------------------- ### Conditional Subdirectory Inclusion in CMake Source: https://github.com/ayatanaindicators/libayatana-appindicator/blob/main/bindings/CMakeLists.txt This CMake code snippet demonstrates conditional inclusion of subdirectories based on defined build flags. Use this to enable or disable specific build components like Vala or Mono bindings. ```cmake if (ENABLE_BINDINGS_VALA AND FLAVOUR_GTK3) add_subdirectory(vala) endif() if (ENABLE_BINDINGS_MONO) add_subdirectory(mono) endif() ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.