Skip to contentSkip to conversation

Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

PATCH New James Byrne 3 participants 5 messages Apr 10, 2018 – Apr 12, 2018 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

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.

---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Makefile +1 -1
index cd53362..3b846b9 100644
@@ -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
 

--
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.

#1 lore raw

PATCH 1/1 Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

Hello,

Quoted 27 lines · James Byrne

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.

---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Makefile +0 -0
index cd53362..3b846b9 100644

Makefile ifeq ($(BR2_REPRODUCIBLE),y) · line 509

Quoted 5 lines
Makefile +1 -1
@@ -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

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
#2 lore raw

PATCH 1/1 Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

Hi Thomas,

Quoted 7 lines · Thomas Petazzoni

Makefile ifeq ($(BR2_REPRODUCIBLE),y) · line 506

Quoted 6 lines · James Byrne
Makefile +0 -0
index cd53362..3b846b9 100644
@@ -506,7 +506,7 @@ ifeq ($(BR2_REPRODUCIBLE),y)
  # If SOURCE_DATE_EPOCH has not been set then use the commit date,

or the last

Quoted 3 lines

Makefile ifeq ($(BR2_REPRODUCIBLE),y)

Quoted 3 lines
Makefile +0 -1
  # 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)

Quoted 1 line

Makefile ifeq ($(BR2_REPRODUCIBLE),y) · line 509

Quoted 1 line
Makefile +1 -0
+BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2>

/dev/null)

Quoted 10 lines

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.

#3 lore raw

PATCH 1/1 Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

James, Thomas, All,

On 2018-04-12 16:40 +0100, James Byrne spake thusly:

Quoted 9 lines · Thomas Petazzoni
Quoted 7 lines · James Byrne

Makefile ifeq ($(BR2_REPRODUCIBLE),y) · line 506

Quoted 6 lines
Makefile +0 -0
index cd53362..3b846b9 100644
@@ -506,7 +506,7 @@ ifeq ($(BR2_REPRODUCIBLE),y)
  # If SOURCE_DATE_EPOCH has not been set then use the commit date,

or the last

Quoted 6 lines
Quoted 3 lines

Makefile ifeq ($(BR2_REPRODUCIBLE),y)

Quoted 3 lines
Makefile +0 -1
  # 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)

Quoted 1 line

Makefile ifeq ($(BR2_REPRODUCIBLE),y) · line 509

Quoted 1 line
Makefile +1 -0
+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:

Quoted 6 lines
Quoted 6 lines

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).

Quoted 8 lines
Quoted 3 lines

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.

Quoted 5 lines

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 at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#4 lore raw

PATCH 1/1 Makefile: Take default SOURCE_DATE_EPOCH from repo containing Makefile

In reply to James Byrne

Hello,

Quoted 13 lines · James Byrne

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).

Quoted 8 lines

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.

---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Applied to master, thanks.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com