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

make building work again when flex is not installed #140

Merged

Conversation

eli-schwartz
Copy link
Contributor

This explicitly reverts commit eec7cdf because it was a bad idea.

The motivating bug report was LudovicRousseau/PCSC#124 and the issue there occurred when building from a git clone, running ./bootstrap && ./configure && make, and having:

  • configure succeed
  • make "succeeeds" at having $LEX run, do nothing and fail to generate required sources
  • compiling nonexistent files fail with highly confusing errors

The autoconf manual has always documented the correct way to handle this is to check if lex is unavailable, and set it to the famous automake wrapper "missing", which checks if a program is missing at build time rather than at ./configure time, and fails the build if the rule cannot be run. This means:

When building from a git clone, if flex is not available then

  • configure succeeds
  • make fails to run $LEX, and tells you to install flex

The previous attempt to fix the highly confusing error instead resulted in configure erroring out, and saying flex is required, even when it is not required because a make dist tarball was used, which contains pregenerated tokenparser.c for the express purpose of making flex unnecessary.

See autoconf documentation on $LEX:
https://www.gnu.org/software/autoconf/manual/autoconf-2.72/html_node/Particular-Programs.html#index-AC_005fPROG_005fLEX-1

And automake documentation on why to use "missing": https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html

This explicitly reverts commit eec7cdf
because it was a bad idea.

The motivating bug report was LudovicRousseau/PCSC#124
and the issue there occurred when building from a git clone, running
./bootstrap && ./configure && make, and having:

- configure succeed
- make "succeeeds" at having $LEX run, do nothing and fail to generate
  required sources
- compiling nonexistent files fail with highly confusing errors

The autoconf manual has always documented the correct way to handle this
is to check if lex is unavailable, and set it to the famous automake
wrapper "missing", which checks if a program is missing at build time
rather than at ./configure time, and fails the build if the rule cannot
be run. This means:

When building from a git clone, if flex is not available then
- configure succeeds
- make fails to run $LEX, and tells you to install flex

The previous attempt to fix the highly confusing error instead resulted
in configure erroring out, and saying flex is required, even when it is
*not* required because a `make dist` tarball was used, which contains
pregenerated tokenparser.c for the express purpose of making flex
unnecessary.

See autoconf documentation on $LEX:
https://www.gnu.org/software/autoconf/manual/autoconf-2.72/html_node/Particular-Programs.html#index-AC_005fPROG_005fLEX-1

And automake documentation on why to use "missing":
https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html
@LudovicRousseau LudovicRousseau merged commit 583ca08 into LudovicRousseau:master Jun 11, 2024
10 checks passed
@LudovicRousseau
Copy link
Owner

Note that ./configure is now "deprecated". You should use meson instead.
https://blog.apdu.fr/posts/2024/06/libccid-now-uses-meson-build-tool/

@eli-schwartz eli-schwartz deleted the automake-missing branch June 11, 2024 17:55
gentoo-bot pushed a commit to gentoo/gentoo that referenced this pull request Jun 14, 2024
Needed to e.g. pass LTO warning flags through to the linker. In theory
it would be nice to run a full eautoreconf, since eautoconf is already
run, but the package errors out with automake since a patch deletes the
use of flex in configure.ac while it is still required for the actual
build.

Actually-correct patch created & fix submitted upstream, since there was
never a good reason to hack around this locally:
LudovicRousseau/CCID#140

Signed-off-by: Eli Schwartz <[email protected]>
Signed-off-by: Sam James <[email protected]>
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

Successfully merging this pull request may close these issues.

None yet

2 participants