diff mbox series

[1/1] Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

Message ID 1523356092-16037-1-git-send-email-james.byrne@origamienergy.com
State Accepted
Headers show
Series [1/1] Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile | expand

Commit Message

James Byrne April 10, 2018, 10:28 a.m. UTC
For reproducible builds, SOURCE_DATE_EPOCH will be set to the git commit
date if it is not defined in the environment, but this was done by
explicitly using $(TOPDIR)/.git as the git repository, which would not
give the expected result if Buildroot had been put into a subdirectory
of another repository.

This commit removes that restriction, meaning that the default date will
now be the date of the git commit that contains Makefile, regardless of
what level above Makefile the repository is at. This works because the
current directory when the 'git log' command is executed will always be
the directory containing Makefile (it must be, since TOPDIR is set from
CURDIR).

In general this should be a sensible default, and in cases where a
different date is required SOURCE_DATE_EPOCH can be defined in the
environment before invoking make.

Signed-off-by: James Byrne <james.byrne@origamienergy.com>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--
2.7.4

The contents of this email and any attachment are confidential to the intended recipient(s). If you are not an intended recipient: (i) do not use, disclose, distribute, copy or publish this email or its contents; (ii) please contact the sender immediately; and (iii) delete this email. Origami Energy Limited (company number 8619644); Origami Storage Limited (company number 10436515) and OSSPV001 Limited (company number 10933403), each registered in England and each with a registered office at: Ashcombe Court, Woolsack Way, Godalming, GU7 1LQ.

Comments

Thomas Petazzoni April 10, 2018, 12:36 p.m. UTC | #1
Hello,

On Tue, 10 Apr 2018 11:28:12 +0100, James Byrne wrote:
> For reproducible builds, SOURCE_DATE_EPOCH will be set to the git commit
> date if it is not defined in the environment, but this was done by
> explicitly using $(TOPDIR)/.git as the git repository, which would not
> give the expected result if Buildroot had been put into a subdirectory
> of another repository.
> 
> This commit removes that restriction, meaning that the default date will
> now be the date of the git commit that contains Makefile, regardless of
> what level above Makefile the repository is at. This works because the
> current directory when the 'git log' command is executed will always be
> the directory containing Makefile (it must be, since TOPDIR is set from
> CURDIR).
> 
> In general this should be a sensible default, and in cases where a
> different date is required SOURCE_DATE_EPOCH can be defined in the
> environment before invoking make.
> 
> Signed-off-by: James Byrne <james.byrne@origamienergy.com>
> ---
>  Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/Makefile b/Makefile
> index cd53362..3b846b9 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -506,7 +506,7 @@ ifeq ($(BR2_REPRODUCIBLE),y)
>  # If SOURCE_DATE_EPOCH has not been set then use the commit date, or the last
>  # release date if the source tree is not within a Git repository.
>  # See: https://reproducible-builds.org/specs/source-date-epoch/
> -BR2_VERSION_GIT_EPOCH := $(shell $(GIT) --git-dir=$(TOPDIR)/.git log -1 --format=%at 2> /dev/null)
> +BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2> /dev/null)

Was there a reason to have this --git-dir/GIT_DIR option/variable
passed in the first place ?

I don't immediately see any problem with the change you're proposing,
but I'm wondering why we were passing --git-dir (previously GIT_DIR).

It has been done this way since commit
9befe94baf990ee6331e77edb40e286e9dc4df8d, where SOURCE_DATE_EPOCH was
introduced in Buildroot.

Best regards,

Thomas
James Byrne April 12, 2018, 3:40 p.m. UTC | #2
Hi Thomas,

On 10/04/18 13:36, Thomas Petazzoni wrote:
 > On Tue, 10 Apr 2018 11:28:12 +0100, James Byrne wrote:
 >> diff --git a/Makefile b/Makefile
 >> index cd53362..3b846b9 100644
 >> --- a/Makefile
 >> +++ b/Makefile
 >> @@ -506,7 +506,7 @@ ifeq ($(BR2_REPRODUCIBLE),y)
 >>   # If SOURCE_DATE_EPOCH has not been set then use the commit date,
or the last
 >>   # release date if the source tree is not within a Git repository.
 >>   # See: https://reproducible-builds.org/specs/source-date-epoch/
 >> -BR2_VERSION_GIT_EPOCH := $(shell $(GIT) --git-dir=$(TOPDIR)/.git
log -1 --format=%at 2> /dev/null)
 >> +BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2>
/dev/null)
 >
 > Was there a reason to have this --git-dir/GIT_DIR option/variable
 > passed in the first place ?
 >
 > I don't immediately see any problem with the change you're proposing,
 > but I'm wondering why we were passing --git-dir (previously GIT_DIR).
 >
 > It has been done this way since commit
 > 9befe94baf990ee6331e77edb40e286e9dc4df8d, where SOURCE_DATE_EPOCH was
 > introduced in Buildroot.

I don't know, but my guess would be that the original author thought
that if you were building out of tree then the current directory might
be somewhere else, so they wanted to ensure it would use the right one,
but in fact the current directory can only be the one containing Makefile.

James
--
The contents of this email and any attachment are confidential to the intended recipient(s). If you are not an intended recipient: (i) do not use, disclose, distribute, copy or publish this email or its contents; (ii) please contact the sender immediately; and (iii) delete this email. Origami Energy Limited (company number 8619644); Origami Storage Limited (company number 10436515) and OSSPV001 Limited (company number 10933403), each registered in England and each with a registered office at: Ashcombe Court, Woolsack Way, Godalming, GU7 1LQ.
Yann E. MORIN April 12, 2018, 5:29 p.m. UTC | #3
James, Thomas, All,

On 2018-04-12 16:40 +0100, James Byrne spake thusly:
> On 10/04/18 13:36, Thomas Petazzoni wrote:
> > On Tue, 10 Apr 2018 11:28:12 +0100, James Byrne wrote:
> >> diff --git a/Makefile b/Makefile
> >> index cd53362..3b846b9 100644
> >> --- a/Makefile
> >> +++ b/Makefile
> >> @@ -506,7 +506,7 @@ ifeq ($(BR2_REPRODUCIBLE),y)
> >>   # If SOURCE_DATE_EPOCH has not been set then use the commit date,
> or the last
> >>   # release date if the source tree is not within a Git repository.
> >>   # See: https://reproducible-builds.org/specs/source-date-epoch/
> >> -BR2_VERSION_GIT_EPOCH := $(shell $(GIT) --git-dir=$(TOPDIR)/.git
> log -1 --format=%at 2> /dev/null)
> >> +BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2>
> /dev/null)

I was pretty sure I had ACKed that patch. Seems not, so:

Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

> > Was there a reason to have this --git-dir/GIT_DIR option/variable
> > passed in the first place ?
> >
> > I don't immediately see any problem with the change you're proposing,
> > but I'm wondering why we were passing --git-dir (previously GIT_DIR).
> >
> > It has been done this way since commit
> > 9befe94baf990ee6331e77edb40e286e9dc4df8d, where SOURCE_DATE_EPOCH was
> > introduced in Buildroot.
> 
> I don't know, but my guess would be that the original author thought
> that if you were building out of tree then the current directory might
> be somewhere else, so they wanted to ensure it would use the right one,
> but in fact the current directory can only be the one containing Makefile.

Indeed, the current directory can only be the Buildroot top-dir,
whatever the conditions we call Buildroot;

  - in-tree: well, obviously, we're in top-dir,
  - out-fo-tree with 'make -C': make will chdir into our top-dir,
  - out-of-tree, via wrapper: the wrapper calls make -C

So, it does not really make sense to enforce the git directory.

Regards,
Yann E. MORIN.

> The contents of this email and any attachment are confidential to the intended recipient(s). If you are not an intended recipient: (i) do not use, disclose, distribute, copy or publish this email or its contents; (ii) please contact the sender immediately; and (iii) delete this email. Origami Energy Limited (company number 8619644); Origami Storage Limited (company number 10436515) and OSSPV001 Limited (company number 10933403), each registered in England and each with a registered office at: Ashcombe Court, Woolsack Way, Godalming, GU7 1LQ.
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Thomas Petazzoni April 12, 2018, 9:32 p.m. UTC | #4
Hello,

On Tue, 10 Apr 2018 11:28:12 +0100, James Byrne wrote:
> For reproducible builds, SOURCE_DATE_EPOCH will be set to the git commit
> date if it is not defined in the environment, but this was done by
> explicitly using $(TOPDIR)/.git as the git repository, which would not
> give the expected result if Buildroot had been put into a subdirectory
> of another repository.
> 
> This commit removes that restriction, meaning that the default date will
> now be the date of the git commit that contains Makefile, regardless of
> what level above Makefile the repository is at. This works because the
> current directory when the 'git log' command is executed will always be
> the directory containing Makefile (it must be, since TOPDIR is set from
> CURDIR).
> 
> In general this should be a sensible default, and in cases where a
> different date is required SOURCE_DATE_EPOCH can be defined in the
> environment before invoking make.
> 
> Signed-off-by: James Byrne <james.byrne@origamienergy.com>
> ---
>  Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Applied to master, thanks.

Thomas
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index cd53362..3b846b9 100644
--- a/Makefile
+++ b/Makefile
@@ -506,7 +506,7 @@  ifeq ($(BR2_REPRODUCIBLE),y)
 # If SOURCE_DATE_EPOCH has not been set then use the commit date, or the last
 # release date if the source tree is not within a Git repository.
 # See: https://reproducible-builds.org/specs/source-date-epoch/
-BR2_VERSION_GIT_EPOCH := $(shell $(GIT) --git-dir=$(TOPDIR)/.git log -1 --format=%at 2> /dev/null)
+BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2> /dev/null)
 export SOURCE_DATE_EPOCH ?= $(or $(BR2_VERSION_GIT_EPOCH),$(BR2_VERSION_EPOCH))
 endif