Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add meson support #691

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bloom/generators/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ Bloom now supports different build types by inspecting the `build_type` tag in p
Templates for a build type are stored in subdirectories of the platform's templates directory named for the build type.
As an example the templates for the `ament_cmake` build type for debian packages is stored in [bloom/generators/debian/templates/ament_cmake](debian/templates/ament_cmake).

To add support for a new build type create a new templates subdirectory for it in your target platform's `templates` directory, and add any necessary supporting code to the generator for build type specific substitutions.For examples search for "Build-type specific substitutions" in [bloom/generators/debian/generator.py](debian/generator.py).
To add support for a new build type create a new templates subdirectory for it in your target platform's `templates` directory, and add any necessary supporting code to the generator for build type specific substitutions. For examples search for "Build-type specific substitutions" in [bloom/generators/debian/generator.py](debian/generator.py).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this correction. Markdown and RST files in ros-infrastructure projects use "semantic line breaks" with one sentence per line.

So the preferred fix would be:

Suggested change
To add support for a new build type create a new templates subdirectory for it in your target platform's `templates` directory, and add any necessary supporting code to the generator for build type specific substitutions. For examples search for "Build-type specific substitutions" in [bloom/generators/debian/generator.py](debian/generator.py).
To add support for a new build type create a new templates subdirectory for it in your target platform's `templates` directory, and add any necessary supporting code to the generator for build type specific substitutions.
For examples search for "Build-type specific substitutions" in [bloom/generators/debian/generator.py](debian/generator.py).

However in #702 I've expanded and rephrased this section so if this PR merges first then I'll correct it there after resolving any potential conflicts so this does not block.

2 changes: 2 additions & 0 deletions bloom/generators/debian/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,8 @@ def generate_substitutions_from_package(
pass
elif build_type == 'cmake':
pass
elif build_type == 'meson':
pass
elif build_type == 'ament_cmake':
pass
elif build_type == 'ament_python':
Expand Down
7 changes: 7 additions & 0 deletions bloom/generators/debian/templates/meson/changelog.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@[for change_version, change_date, changelog, main_name, main_email in changelogs]@(Package) (@(change_version)@(DebianInc)@(Distribution)) @(Distribution); urgency=high

@(changelog)

-- @(main_name) <@(main_email)> @(change_date)

@[end for]
1 change: 1 addition & 0 deletions bloom/generators/debian/templates/meson/compat.em
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@(debhelper_version)
14 changes: 14 additions & 0 deletions bloom/generators/debian/templates/meson/control.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Source: @(Package)
Section: misc
Priority: optional
Maintainer: @(Maintainer)
Build-Depends: debhelper (>= @(debhelper_version).0.0), @(', '.join(BuildDepends))
Homepage: @(Homepage)
Standards-Version: 4.6.0

Package: @(Package)
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, @(', '.join(Depends))
@[if Conflicts]Conflicts: @(', '.join(Conflicts))@\n@[end if]@
@[if Replaces]Replaces: @(', '.join(Replaces))@\n@[end if]@
Description: @(Description)
11 changes: 11 additions & 0 deletions bloom/generators/debian/templates/meson/copyright.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Format: Bloom subset of https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: @(Name)
@[if BugTracker]Upstream-Contact: @(BugTracker)@\n@[end if]@
@[if Source]Source: @(Source)@\n@[end if]@
@[for License, Text in Licenses]@

Files: See file headers in repository for details
Copyright: See package copyright in source code for details
License: @(License)
@(Text)
@[end for]@
3 changes: 3 additions & 0 deletions bloom/generators/debian/templates/meson/gbp.conf.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[git-buildpackage]
upstream-tag=@(release_tag)
upstream-tree=tag
52 changes: 52 additions & 0 deletions bloom/generators/debian/templates/meson/rules.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.

# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1
# TODO: remove the LDFLAGS override. It's here to avoid esoteric problems
# of this sort:
# https://code.ros.org/trac/ros/ticket/2977
# https://code.ros.org/trac/ros/ticket/3842
export LDFLAGS=
export PKG_CONFIG_PATH=@(InstallationPrefix)/lib/pkgconfig
# Explicitly enable -DNDEBUG, see:
# https://github.com/ros-infrastructure/bloom/issues/327
export DEB_CXXFLAGS_MAINT_APPEND=-DNDEBUG

# Solve shlibdeps errors in REP136 packages that use GNUInstallDirs:
export DEB_HOST_MULTIARCH := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)

%:
dh $@@ -v --buildsystem=meson --builddirectory=.obj-$(DEB_HOST_GNU_TYPE)

override_dh_auto_configure:
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi && \
dh_auto_configure -- \
--prefix="@(InstallationPrefix)" \
--cmake-prefix-path="@(InstallationPrefix)" \
--libdir=lib \
--libexecdir=lib

override_dh_auto_build:
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi && \
dh_auto_build

override_dh_auto_test:
echo -- Running tests. Even if one of them fails the build is not canceled.
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi && \
dh_auto_test || true

override_dh_shlibdeps:
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi && \
dh_shlibdeps -l$(CURDIR)/debian/@(Package)/@(InstallationPrefix)/lib/:$(CURDIR)/debian/@(Package)/@(InstallationPrefix)/lib/${DEB_HOST_MULTIARCH}

override_dh_auto_install:
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi && \
dh_auto_install
1 change: 1 addition & 0 deletions bloom/generators/debian/templates/meson/source/format.em
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.0 (@(format))
6 changes: 6 additions & 0 deletions bloom/generators/debian/templates/meson/source/options.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@[if format and format == 'quilt']@
# Automatically add upstream changes to the quilt overlay.
# http://manpages.ubuntu.com/manpages/trusty/man1/dpkg-source.1.html
# This supports reusing the orig.tar.gz for debian increments.
auto-commit
@[end if]
3 changes: 2 additions & 1 deletion bloom/generators/rosrpm.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ def get_subs(pkg, os_name, os_version, ros_distro):
pkg,
os_name,
os_version,
ros_distro
ros_distro,
RosRpmGenerator.default_install_prefix + ros_distro,
christianrauch marked this conversation as resolved.
Show resolved Hide resolved
)
subs['Package'] = rosify_package_name(subs['Package'], ros_distro)
return subs
Expand Down
2 changes: 2 additions & 0 deletions bloom/generators/rpm/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,8 @@ def generate_substitutions_from_package(
pass
elif build_type == 'cmake':
pass
elif build_type == 'meson':
pass
elif build_type == 'ament_cmake':
pass
elif build_type == 'ament_python':
Expand Down
80 changes: 80 additions & 0 deletions bloom/generators/rpm/templates/meson/template.spec.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
%bcond_without tests
%bcond_without weak_deps

%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
%global __provides_exclude_from ^@(InstallationPrefix)/.*$
%global __requires_exclude_from ^@(InstallationPrefix)/.*$

Name: @(Package)
Version: @(Version)
Release: @(RPMInc)%{?dist}%{?release_suffix}
Summary: ROS @(Name) package

License: @(License)
@[if Homepage and Homepage != '']URL: @(Homepage)@\n@[end if]@
Source0: %{name}-%{version}.tar.gz
@[if NoArch]@\nBuildArch: noarch@\n@[end if]@

@[for p in Depends]Requires: @p@\n@[end for]@
@[for p in BuildDepends]BuildRequires: @p@\n@[end for]@
@[for p in Conflicts]Conflicts: @p@\n@[end for]@
@[for p in Replaces]Obsoletes: @p@\n@[end for]@
@[for p in Provides]Provides: @p@\n@[end for]@
@[if TestDepends]@\n%if 0%{?with_tests}
@[for p in TestDepends]BuildRequires: @p@\n@[end for]@
%endif@\n@[end if]@
@[if Supplements]@\n%if 0%{?with_weak_deps}
@[for p in Supplements]Supplements: @p@\n@[end for]@
%endif@\n@[end if]@

%description
@(Description)

%prep
%autosetup -p1

%build
# override macro
%define __meson_auto_features auto
# In case we're installing to a non-standard location, look for a setup.sh
# in the install tree and source it. It will set things like
# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi
# call meson executable instead of using the 'meson' macro to use default paths
%__meson setup \
--prefix="@(InstallationPrefix)" \
--cmake-prefix-path="@(InstallationPrefix)" \
--libdir=lib \
--libexecdir=lib \
%{_vpath_builddir}
%meson_build

%install
# In case we're installing to a non-standard location, look for a setup.sh
# in the install tree and source it. It will set things like
# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi
%meson_install

%if 0%{?with_tests}
%check
# Look for a Makefile target with a name indicating that it runs tests
TEST_TARGET=$(%__ninja -C %{_vpath_builddir} -t targets | sed "s/^\(test\|check\):.*/\\1/;t f;d;:f;q0")
if [ -n "$TEST_TARGET" ]; then
# In case we're installing to a non-standard location, look for a setup.sh
# in the install tree and source it. It will set things like
# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
if [ -f "@(InstallationPrefix)/setup.sh" ]; then . "@(InstallationPrefix)/setup.sh"; fi
%meson_test || echo "RPM TESTS FAILED"
else echo "RPM TESTS SKIPPED"; fi
%endif

%files
@[for lf in LicenseFiles]%license @lf@\n@[end for]@
@(InstallationPrefix)

%changelog@
@[for change_version, (change_date, main_name, main_email) in changelogs]
* @(change_date) @(main_name) <@(main_email)> - @(change_version)
- Autogenerated by Bloom
@[end for]
Loading