Forwarding to the list.

(I did proofread the bug report before sending it, but missed adding the
X-Debbugs-Cc header because the "master copy" I was diffing against —
the copy of #823123 in my inbox — didn't have that header, even though
it did get X-Debbugs-Cc'd to this list.)



----- Forwarded message from Daniel Shahaf <danie...@apache.org> -----

Date: Sun, 01 May 2016 19:51:37 +0000
From: Daniel Shahaf <danie...@apache.org>
To: Debian Bug Tracking System <sub...@bugs.debian.org>
Subject: Bug#823174: ros-pluginlib: debian/rules uses non-portable shell 
syntax; please make the build reproducible (shell)
Message-ID: <20160501195137.21143.31130.reportbug@fujitsu.shahaf.local2>
X-Mailer: reportbug 6.6.3

Source: ros-pluginlib
Version: 1.10.1-3
Severity: minor
Tags: patch
User: reproducible-builds@lists.alioth.debian.org
Usertags: environment

Dear Maintainer,

While working on the “reproducible builds” effort, we have noticed that
ros-pluginlib could not be built reproducibly; the diff between two
builds is:

    
https://tests.reproducible-builds.org/rb-pkg/unstable/amd64/ros-pluginlib.html
    │   │   │   │ 
-add_definitions(-DCMAKE_LIBRARY_ARCHITECTURE=\"${CMAKE_LIBRARY_ARCHITECTURE}\")
    │   │   │   │ 
+add_definitions(-DCMAKE_LIBRARY_ARCHITECTURE=\\"${CMAKE_LIBRARY_ARCHITECTURE}\\")

This difference is down to debian/rules calling echo(1) with an argument
that contains a literal backslash.  The behaviour of echo(1) in that
case is (according to POSIX) implementation-defined.  Since debian/rules
uses echo(1) from the building user's shell, the build output differs
when the building user uses SHELL=bash v. SHELL=dash:

    % s=\'foo\\\\bar\'; LC_ALL=C dash -c "echo $s" 
    foo\bar
    % s=\'foo\\\\bar\'; LC_ALL=C bash -c "echo $s" 
    foo\\bar
    %

The following patch removes the use of implementation-defined behaviour:

[[[
diff --git a/debian/rules b/debian/rules
index 9e5b691..c867402 100755
--- a/debian/rules
+++ b/debian/rules
@@ -10,7 +10,7 @@ override_dh_auto_test:
 
 override_dh_auto_configure:
        dh_auto_configure
-       echo 
'add_definitions(-DCMAKE_LIBRARY_ARCHITECTURE=\\"$${CMAKE_LIBRARY_ARCHITECTURE}\\")'
 >> build/catkin_generated/installspace/pluginlibConfig.cmake
+       printf 'add_definitions(-DCMAKE_LIBRARY_ARCHITECTURE=\\"%s\\")' 
'$${CMAKE_LIBRARY_ARCHITECTURE}' >> 
build/catkin_generated/installspace/pluginlibConfig.cmake
 
 override_dh_auto_install:
        dh_auto_install --destdir=debian/tmp
]]]

This patch should also make the build reproducible, but I didn't test that.

Note that when built under bash, pluginlibConfig.cmake would contain
additional backslashes; I'm not sure what their effect would be.

Cheers,

Daniel

----- End forwarded message -----

_______________________________________________
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Reply via email to