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

build fails due to checkout timestamps #273

Open
line-o opened this issue Oct 14, 2020 · 5 comments
Open

build fails due to checkout timestamps #273

line-o opened this issue Oct 14, 2020 · 5 comments

Comments

@line-o
Copy link

line-o commented Oct 14, 2020

I tried to
bmake -r install, PREFIX=/tmp/x bmake -r install and CC=clang PREFIX=$HOME bmake -r install

they all die with

sid -l ansi-c -s no-numeric-terminals -s no-terminals   src/libre/dialect/glob/parser.sid src/libre/parser.act src/libre/dialect/glob/parser.c src/libre/dialect/glob/parser.h  || { rm -f src/libre/dialect/glob/parser.c src/libre/dialect/glob/parser.h; false; }
/bin/sh: sid: command not found

But I could not find a hint were to get sid on OSX. I hope, it is totally obvious how to fix this.

@dhobsd
Copy link
Collaborator

dhobsd commented Oct 14, 2020

sid is part of tendra, but you shouldn't need this to build from a clean checkout. You might try touching the .c and .h output files (they're intended to be checked in) to get further now. If that still fails, it's possible recent libre changes forgot to regenerate these files.

Edit: Either way, should look into this. Will try to repro later this morning if someone else doesn't.

@line-o
Copy link
Author

line-o commented Oct 14, 2020

I god it to build! Thanks @dhobsd for giving the hint to touch .c and .h files. I restored src/libre/dialect/glob/parser{.c|.h} 4 times from HEAD.
Now I am curious if the binary works :)

@hvdijk
Copy link
Collaborator

hvdijk commented Oct 14, 2020

This is a common problem with Git, especially on systems where both the file system and make support sub-second resolution for file modification time. When cloning a repository, Git will not do anything special with the file mtimes, they correspond to the time the file was written, and files are not guaranteed to be written in any particular order. Generated files may be written before their sources, triggering spurious regenerations if make detects this as an outdated generated file.

There are generally two ways around this in a Git repo:

  • Provide a way to set all repository file modification times to the same value. On a git checkout, this can be done with git ls-files | xargs touch -r <file>, where <file> is any file you like, to set all files to the same mtime. This is not generally safe, as file names may contain characters that need special handling, but is safe for libfsm, as it does not contain any such file. A safer alternative is git ls-files -z | xargs -0 touch -r <file> --, but xargs -0 is not universally supported.
  • Provide a way to disable the make rules for regenerating files. This is something seen in autoconf/automake, where you can specify --enable-maintainer-mode to enable such rules, or --disable-maintainer-mode to disable them, see https://autotools.io/automake/maintainer.html. In make, this could be achieved by adding logic to respond to a MAINTAINER_MODE=0 variable. Any other name would work equally well.

Alternatively, this can be done by not cloning from Git, but instead using Github's functionality to download a tarball or zip file, and extracting that. This works because the tarball/zip file will mark every file with the same modification time.

@dhobsd
Copy link
Collaborator

dhobsd commented Oct 14, 2020 via email

@katef
Copy link
Owner

katef commented Oct 28, 2020

equivalent issue for tendra: tendra/tendra#44

@katef katef changed the title install fails on OSX install fails due to checkout timestamps May 16, 2022
@katef katef changed the title install fails due to checkout timestamps build fails due to checkout timestamps May 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants