Merge lp:~ted/ubuntu-app-launch/abi-compliance into lp:ubuntu-app-launch/16.10

Proposed by Ted Gould on 2016-08-07
Status: Merged
Approved by: dobey on 2016-08-17
Approved revision: 247
Merged at revision: 242
Proposed branch: lp:~ted/ubuntu-app-launch/abi-compliance
Merge into: lp:ubuntu-app-launch/16.10
Prerequisite: lp:~ted/ubuntu-app-launch/eventually-tests
Diff against target: 161 lines (+82/-8)
7 files modified
CMakeLists.txt (+15/-0)
debian/control (+5/-1)
libubuntu-app-launch/CMakeLists.txt (+1/-7)
libubuntu-app-launch/abi-check/CMakeLists.txt (+15/-0)
libubuntu-app-launch/abi-check/build.xml.in (+9/-0)
libubuntu-app-launch/abi-check/check-abi.sh.in (+28/-0)
libubuntu-app-launch/abi-check/installed.xml.in (+9/-0)
To merge this branch: bzr merge lp:~ted/ubuntu-app-launch/abi-compliance
Reviewer Review Type Date Requested Status
Charles Kerr (community) Approve on 2016-08-17
dobey (community) 2016-08-07 Approve on 2016-08-17
unity-api-1-bot continuous-integration 2016-08-07 Approve on 2016-08-17
Review via email: mp+302216@code.launchpad.net

This proposal supersedes a proposal from 2016-08-05.

Commit Message

Add test for abi compatibility

Description of the Change

This is a bit of a hack, but it seems to work well. It makes the version of ubuntu-app-launch that is in the archive a build dependency so that it gets installed on the system. Then it generates the ABI profile of that version and compares it against the built version in this branch. If they match, we're all good, if not it is an error.

To make sure that we can bootstrap we also depend on valgrind. If there is no previous version then the test succeeds without checking.

To post a comment you must log in.
unity-api-1-bot (unity-api-1-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:244
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/29/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/300/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/306
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/235
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/235
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/235
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/164
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/164/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/164
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/164/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/164
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/164/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/164/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/164/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/164
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/164/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/164/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/164
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/164/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/164
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/164/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/29/rebuild

review: Needs Fixing (continuous-integration)
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:245
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/41/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/312
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/318
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/247
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/247
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/247
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/176/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/176
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/176/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/41/rebuild

review: Approve (continuous-integration)
dobey (dobey) wrote :

I think this needs review by a core dev.

review: Needs Information
246. By Ted Gould on 2016-08-08

Using build profiles to make it cleaner

unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:246
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/42/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/313
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/319
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/248
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/248
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/248
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/177/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/177
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/177/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/42/rebuild

review: Approve (continuous-integration)
Ted Gould (ted) wrote :

Discussed with seb128 and Laney in #ubuntu-desktop and they suggested changing to <!stage1> to solve the bootstrap issue, but otherwise were happy with the idea.

dobey (dobey) wrote :

I'm not really happy with it, because while this does theoretically somewhat guarantee stability in a specific series, it doesn't solve the core problem that we ship different ABIs with the same soname, in different versions of Ubuntu.

review: Needs Fixing
Ted Gould (ted) wrote :

Certainly it doesn't solve all the problems we could have, but I think it is general improvement from what is currently being done for UAL today. There is, AFAIK, not a solution that covers all of those cases for C++ libraries without maintaining a large array of ABI captures for every series/architecture.

247. By Ted Gould on 2016-08-17

Pulling through eventually test updates

unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:247
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/56/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/393
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/399
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/314
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/314
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/314
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/244/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/244
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/244/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-ubuntu-app-launch-ci/56/rebuild

review: Approve (continuous-integration)
dobey (dobey) wrote :

Really wish we could do this some other way than the ouroboros effect.

review: Approve
Charles Kerr (charlesk) wrote :

Approving the CMake. Optional comments inline.

As for the ABI part -- Since Ted's gotten in-IRC comment from Seb128 and Laney, I'd prefer to see one of them here for reviewing the actual ABI test.

+1 to the Dobey/Ted comments that this is a step forward rather than a total fix.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2016-04-21 01:01:47 +0000
3+++ CMakeLists.txt 2016-08-17 13:13:53 +0000
4@@ -1,6 +1,17 @@
5 project(ubuntu-app-launch C CXX)
6 cmake_minimum_required(VERSION 2.8.9)
7
8+##########################
9+# Version Info
10+##########################
11+
12+set(API_VERSION 2)
13+set(ABI_VERSION 2)
14+
15+##########################
16+# Options
17+##########################
18+
19 option (enable_tests "Build tests" ON)
20 option (enable_lcov "Generate Coverage Reports" ON)
21
22@@ -8,6 +19,10 @@
23
24 set(PACKAGE ${CMAKE_PROJECT_NAME})
25
26+##########################
27+# Dependent Packages
28+##########################
29+
30 find_package(PkgConfig REQUIRED)
31 find_package(GObjectIntrospection REQUIRED)
32 include(GNUInstallDirs)
33
34=== modified file 'debian/control'
35--- debian/control 2016-06-07 13:21:39 +0000
36+++ debian/control 2016-08-17 13:13:53 +0000
37@@ -2,7 +2,8 @@
38 Section: gnome
39 Priority: optional
40 Maintainer: Ted Gould <ted@ubuntu.com>
41-Build-Depends: click-dev (>= 0.2.2),
42+Build-Depends: abi-compliance-checker,
43+ click-dev (>= 0.2.2),
44 cmake,
45 dbus-x11,
46 dbus-test-runner,
47@@ -21,6 +22,9 @@
48 libnih-dbus-dev,
49 libnih-dev,
50 libproperties-cpp-dev,
51+# For ABI check to distro version
52+# Make sure to set DEB_BUILD_PROFILES when bootstrapping
53+ libubuntu-app-launch2-dev <!stage1>,
54 libupstart-dev,
55 libzeitgeist-2.0-dev,
56 gobject-introspection,
57
58=== modified file 'libubuntu-app-launch/CMakeLists.txt'
59--- libubuntu-app-launch/CMakeLists.txt 2016-06-07 04:01:41 +0000
60+++ libubuntu-app-launch/CMakeLists.txt 2016-08-17 13:13:53 +0000
61@@ -1,13 +1,6 @@
62 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
63 include_directories(${CMAKE_CURRENT_BINARY_DIR})
64
65-##########################
66-# Version Info
67-##########################
68-
69-set(API_VERSION 2)
70-set(ABI_VERSION 2)
71-
72
73 ##########################
74 # Library
75@@ -148,3 +141,4 @@
76 list(APPEND INTROSPECTION_GIRS UbuntuAppLaunch-2.gir)
77 gir_add_introspections(INTROSPECTION_GIRS)
78
79+add_subdirectory(abi-check)
80
81=== added directory 'libubuntu-app-launch/abi-check'
82=== added file 'libubuntu-app-launch/abi-check/CMakeLists.txt'
83--- libubuntu-app-launch/abi-check/CMakeLists.txt 1970-01-01 00:00:00 +0000
84+++ libubuntu-app-launch/abi-check/CMakeLists.txt 2016-08-17 13:13:53 +0000
85@@ -0,0 +1,15 @@
86+
87+set(ABI_BUILD_HEADERS ${LAUNCHER_HEADERS})
88+list(APPEND ABI_BUILD_HEADERS ${LAUNCHER_CPP_HEADERS})
89+list_prefix(ABI_BUILD_HEADERS_PATH ABI_BUILD_HEADERS "${CMAKE_SOURCE_DIR}/libubuntu-app-launch/")
90+
91+set(HEADER_AS_LIST "")
92+foreach(HEADER IN LISTS ABI_BUILD_HEADERS_PATH)
93+ set(HEADER_AS_LIST "${HEADER_AS_LIST}\n${HEADER}")
94+endforeach()
95+
96+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/check-abi.sh.in ${CMAKE_CURRENT_BINARY_DIR}/check-abi.sh @ONLY)
97+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in ${CMAKE_CURRENT_BINARY_DIR}/build.xml @ONLY)
98+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/installed.xml.in ${CMAKE_CURRENT_BINARY_DIR}/installed.xml @ONLY)
99+
100+add_test (NAME abi-check COMMAND ${CMAKE_CURRENT_BINARY_DIR}/check-abi.sh)
101
102=== added file 'libubuntu-app-launch/abi-check/build.xml.in'
103--- libubuntu-app-launch/abi-check/build.xml.in 1970-01-01 00:00:00 +0000
104+++ libubuntu-app-launch/abi-check/build.xml.in 2016-08-17 13:13:53 +0000
105@@ -0,0 +1,9 @@
106+<version>
107+@ABI_VERSION@
108+</version>
109+<headers>
110+@HEADER_AS_LIST@
111+</headers>
112+<libs>
113+@CMAKE_BINARY_DIR@/libubuntu-app-launch/libubuntu-app-launch.so.@ABI_VERSION@
114+</libs>
115
116=== added file 'libubuntu-app-launch/abi-check/check-abi.sh.in'
117--- libubuntu-app-launch/abi-check/check-abi.sh.in 1970-01-01 00:00:00 +0000
118+++ libubuntu-app-launch/abi-check/check-abi.sh.in 2016-08-17 13:13:53 +0000
119@@ -0,0 +1,28 @@
120+#!/bin/sh
121+
122+set -e
123+
124+if [ ! -e "/usr/lib/@UBUNTU_APP_LAUNCH_ARCH@/libubuntu-app-launch.so.@ABI_VERSION@" ] ; then
125+ exit 0
126+fi
127+
128+cd @CMAKE_CURRENT_BINARY_DIR@
129+
130+LIBRARY_NAME=@CMAKE_PROJECT_NAME@
131+LIBRARY_VERSION=@ABI_VERSION@
132+
133+rm -rf abi_dumps
134+rm -rf installed_dumps
135+rm -rf build_dumps
136+
137+abi-compliance-checker -l ${LIBRARY_NAME} -dump @CMAKE_CURRENT_BINARY_DIR@/installed.xml
138+mv abi_dumps installed_dumps
139+
140+abi-compliance-checker -l ${LIBRARY_NAME} -dump @CMAKE_CURRENT_BINARY_DIR@/build.xml
141+mv abi_dumps build_dumps
142+
143+abi-compliance-checker \
144+ -l ${LIBRARY_NAME} \
145+ -old installed_dumps/${LIBRARY_NAME}/${LIBRARY_NAME}_${LIBRARY_VERSION}.abi.tar.gz \
146+ -new build_dumps/${LIBRARY_NAME}/${LIBRARY_NAME}_${LIBRARY_VERSION}.abi.tar.gz
147+
148
149=== added file 'libubuntu-app-launch/abi-check/installed.xml.in'
150--- libubuntu-app-launch/abi-check/installed.xml.in 1970-01-01 00:00:00 +0000
151+++ libubuntu-app-launch/abi-check/installed.xml.in 2016-08-17 13:13:53 +0000
152@@ -0,0 +1,9 @@
153+<version>
154+@ABI_VERSION@
155+</version>
156+<headers>
157+/usr/include/libubuntu-app-launch-@API_VERSION@/
158+</headers>
159+<libs>
160+/usr/lib/@UBUNTU_APP_LAUNCH_ARCH@/libubuntu-app-launch.so.@ABI_VERSION@
161+</libs>

Subscribers

People subscribed via source and target branches