Commit Graph

326 Commits

Author SHA1 Message Date
Miro Hrončok
03fa61b26b CI: Upgrade dns-lexicon to 3.5.2, but only on Fedora 34+ 2020-12-04 10:50:59 +01:00
Miro Hrončok
32790fff20 Pass PYTHONDONTWRITEBYTECODE=1 to %tox to avoid packaged PYTEST bytecode 2020-12-04 10:50:58 +01:00
Miro Hrončok
38ef5fb85b Allow multiple -e in %pyproject_buildrequires 2020-11-04 18:35:22 +01:00
Miro Hrončok
2660031756 CI tests: Use ! grep to assert something is missing
Previously, we have used `grep -v` to assert something is *not* there.
However, that doesn't work. See for example this file:

    $ cat TEST
    line1
    line2
    line3

    $ grep -v line4 TEST
    line1
    line2
    line3
    $ echo $?
    0

This gives a false sense of correctness, however it exits will 0 with anything:

    $ grep -v line3 TEST
    line1
    line2
    $ echo $?
    0

Instead, we use `! grep` now:

    $ ! grep line4 TEST
    $ echo $?
    0

    $ ! grep line3 TEST
    line3
    $ echo $?
    1

Additionally, remove a trailing slash from one of the checks to match both cases
(with or without the slash).
2020-10-26 17:18:51 +01:00
Miro Hrončok
e9281281f6 BR python3-devel from the test/example specs
This is the usage we want people to see.
One spec left with a comment instead.
2020-10-26 16:11:32 +01:00
Petr Viktorin
6a44fe2d7a Fix name of option that redefines %{toxenv} 2020-10-08 17:55:43 +02:00
Miro Hrončok
57e1b00844 CI tests: Workaround old pip missing features in testing specs 2020-10-07 14:27:57 +02:00
Miro Hrončok
290941c5f3 Support PEP 517 list based backend-path
The PEP 517 shows an example backend-path like this:

    [build-system]
    # Defined by PEP 518:
    requires = ["flit"]
    # Defined by this PEP:
    build-backend = "local_backend"
    backend-path = ["backend"]

https://www.python.org/dev/peps/pep-0517/#source-trees

See that backend-path is a list. Our code previously only supported string path.

Obviously a string path is wrong, but we keep it to support projects that have
made the mistake, such as flit-core.

Add a small integration test for both cases.
Note that the new spec files deliberately don't do much, to save CI time.
2020-10-07 08:35:45 +02:00
Petr Viktorin
d719a00b93 Document %pyproject_extras_subpkg 2020-10-02 20:57:26 +00:00
Miro Hrončok
ea43eebba6 Document %pyproject_buildrequires -x a -x b 2020-10-01 19:25:55 +02:00
Miro Hrončok
6ae1be028b Fix typos 2020-10-01 18:08:06 +02:00
Miro Hrončok
b38c0ff594 CI: Add dns-lexicon to tests new things
This tests:

- https://bugzilla.redhat.com/show_bug.cgi?id=1877977
- https://bugzilla.redhat.com/show_bug.cgi?id=1877978

Unfortunately it is impossible to use this spec to test things on Fedora 31/32,
so we skip the tests there.

We keep python-requests.spec for now to test Fedora 31/32,
but it can be removed after Fedora 32 EOL.
2020-10-01 16:35:08 +02:00
Miro Hrončok
6f6a7636d4 Skip empty lines from tox deps
An empty line happens when there are not deps:

    Handling  from tox --print-deps-only: <toxname>
    WARNING: Skipping invalid requirement:
        Parse error at "''": Expected W:(abcd...)
2020-10-01 16:35:08 +02:00
Miro Hrončok
2ecbed7441 Support multiple -x options for %pyproject_buildrequires
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1877978
2020-10-01 16:35:07 +02:00
Miro Hrončok
9f3eea2ae5 Support the extras configuration option of tox in %pyproject_buildrequires -t
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1877977
2020-10-01 16:33:58 +02:00
Lumir Balhar
0498ef29dd Improve grep regex for RECORD and REQUESTED files 2020-10-01 09:28:21 +02:00
Lumir Balhar
052c239cab Modify clikit to not use %pyproject_save_files and add check there 2020-10-01 09:28:21 +02:00
Lumir Balhar
faa42c8681 Release bump and changelog 2020-10-01 09:28:21 +02:00
Lumir Balhar
595fc3b049 Add check for RECORD and REQUESTED files 2020-10-01 09:28:21 +02:00
Lumir Balhar
c5d2f62b23 Use --verbose and --force when removing RECORD and REQUESTED files 2020-10-01 09:28:21 +02:00
Lumir Balhar
efdfb4727f Automatically remove dist-info/REQUESTED files together with RECORD 2020-10-01 09:28:21 +02:00
Lumir Balhar
7cc563401d [TESTS] Adap tests to new process of handling RECORD files 2020-09-25 12:24:50 +00:00
Lumir Balhar
228f3947df [TESTS] parse_record returns a list of strings instead of BuildrootPaths
Because the output is directly stored to JSON file.
2020-09-25 12:24:50 +00:00
Lumir Balhar
a5cf74fc41 [TESTS] dist-info/RECORD file is no longer present in RPMs
%pyproject_install deletes it after conversion to pyproject-record
2020-09-25 12:24:50 +00:00
Lumir Balhar
8d5b3ac22f Restructure %pyproject_install to remove duplicated for loop 2020-09-25 12:24:50 +00:00
Lumir Balhar
894e21291e Preprocess dist-info/RECORD file in %install and remove it.
According to PEP 627, the RECORD file is optional and
doesn't make sense to keep it for system packages. Moreover,
its absence should indicate to other tools like pip that
they should not touch such packages.

Now, we process content of all RECORD files to one
pyproject-record (JSON) which is then used in
%pyproject_save_files. That way, we can remove the original
files in %pyproject_install and keep their content for
later.

PEP 627: https://www.python.org/dev/peps/pep-0627/#optional-record-file
2020-09-25 12:24:50 +00:00
Miro Hrončok
b1f03d7f51 Add integration test for package with setuptools setup_requires 2020-09-23 11:43:35 +02:00
Miro Hrončok
3b95c7d66c Check the requirements after installing "requires_for_build_wheel"
If not checked, installing runtime requirements might fail.

When a requirement is specified in setuptools' setup_requires:

    setup(
        ...
        setup_requires=["pytest-runner"],
    )

It is part of the get_requires_for_build_wheel hook output.

When runtime requirements are parsed with setuptools without all setup_requires
present, it tries to get them from the internet (at least on Fedora 33).

By checking the requirements after installing "requires_for_build_wheel",
we make sure all setup_requires are already installed.

When runtime requirements are not installed, this adds an unneeded check,
but the script would end at that point anyway, so there is no real difference.
2020-09-23 11:16:41 +02:00
Miro Hrončok
c4743014ca Changelog dates corrections 2020-09-12 09:53:24 +02:00
Gordon Messmer
cb38f210d2 Support more Python version specifiers in generated BuildRequires
This change introduces code from pyreq2rpm, a tested set of
requirement conversion functions used in pyp2rpm and rpm's
pythondistdeps.

This adds support for the '~=' operator and wildcards.
2020-09-12 01:09:48 +02:00
Miro Hrončok
b2b33b8a0b Remove superfluous executable permissions 2020-09-09 09:58:34 +02:00
Miro Hrončok
80a2764884 Remove a no longer useful warning for unrecognized files in %pyproject_save_files
The warning is not actionable and with +auto even redundant.
2020-09-07 11:44:48 +02:00
Miro Hrončok
c1d5d64f8c Prevent "File listed twice" warning with %lang files outside of Python modules 2020-09-07 09:42:33 +00:00
Miro Hrončok
b4fd1c2e74 Only require toml for projects with pyproject.toml
Pros:

 - projects without pyproject.toml will have 1 less dependency
 - toml will be buildable with pyproject-rpm-macros out of the box
 - easier bootstrap sequence (in theory)

Cons:

 - projects with pyproject.toml will have 1 more %generate_buildrequires round
2020-09-07 09:48:27 +02:00
Miro Hrončok
1e199ca6f4 Make code in $PWD importable from %pyproject_buildrequires
In %pyproject_buildrequires, don't run python with -I but -s.

This allows projects used by the script itself, such as packaging or toml,
to be packaged using the macros, using "self" -- i.e. the code from $PWD.
2020-09-04 21:47:35 +00:00
Tomas Hrnciar
a506123afe Replace pathfix with py3_shebang_fix
%pyproject_install currently has:
`pathfix%{python3_version}.py -pni "%{__python3}" -k%{?py3_shbang_opts: -a%{py3_shbang_opts_nodash}} %{buildroot}%{_bindir}/*`

We should replace it with `%py3_shebang_fix %{buildroot}%{_bindir}/*` which expands to:
~~~~
  if [ -f /usr/bin/pathfix%{python3_version}.py ]; then
    pathfix=/usr/bin/pathfix%{python3_version}.py
  else
    # older versions of Python don't have it and must BR /usr/bin/pathfix.py from python3-devel explicitly
    pathfix=/usr/bin/pathfix.py
  fi
  $pathfix -pni %{__python3} -k%{?py3_shebang_flags:a %py3_shebang_flags}} %{buildroot}%{_bindir}/*
~~~~

Mainly so that we:
 - switch to %py3_shebang_flags
 - have only one place to fix the invocation

Fixes: rhbz#1868347
2020-09-04 18:24:30 +02:00
Tomas Hrnciar
d754bc75b9 Test for package with lang files located outside of module 2020-09-04 10:39:52 +02:00
Tomas Hrnciar
da3d9bc23d Automatically mark language files with %lang macro 2020-09-04 10:39:52 +02:00
Miro Hrončok
a613e176e3 Handle Python Extras in %pyproject_buildrequires on Fedora 33+
There is a slight problem when reporting that a dependency with extra is satisfied.
In fact, we only check the "base" dependency.
This can lead to a problem when a dependency is wrongly assumed as present
and the script proceeds to the "next stage" without restarting --
if the next stage tries to use (import) the missing dependency,
the script would crash.

However, that might be a very unlikely set of events and if such case ever happens,
we'll workaround it or fix it.
2020-08-20 15:30:49 +02:00
Petr Viktorin
91acc88e2d Make %{_pyproject_wheeldir} an implementation detail 2020-08-20 12:02:34 +02:00
Petr Viktorin
fb4066b150 Update README
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1868346

- Explain what "provisional" means
- Say what kinds of projects the macros handle
- Tell people to BuidRequire python*-devel
- Say %pyproject_buildrequires is needed for the other macros
- Note that %pyproject_buildrequires generates `exit 11` messages
- Note that most buildsystems have prepare-metadata-for-build-wheel
2020-08-20 12:00:28 +02:00
Petr Viktorin
09be4c117d Typo fix 2020-08-20 11:48:14 +02:00
Miro Hrončok
6a8d86ed70 Allow multiple, comma-separated extras in %pyproject_buildrequires -x 2020-08-11 15:54:42 +02:00
Lumir Balhar
59bc07b713 Release bump and changelog for universal macros 2020-08-10 12:05:45 +02:00
Lumir Balhar
cb8e334272 Use python -m tox instead of just tox
This way, macros can use whatever Python has tox module available
instead of only the main one which owns /usr/bin/tox.
2020-08-10 12:04:22 +02:00
Lumir Balhar
5561755a00 Make %pyproject_buildrequires more universal
so it can work with any non-main Python version and generate
proper dependencies.
2020-08-10 12:04:22 +02:00
Lumir Balhar
64e45518ef Use versioned pathfixX.Y.py script
so pyproject-rpm-macros can depend on any pythonX.Y-devel package
2020-08-10 12:04:22 +02:00
Miro Hrončok
99d9596d7c Make sure to put * in '' in %pyproject_save_files
Otherwise, it may be expanded by Shell in random cases.
2020-08-06 20:19:40 +02:00
Tomas Hrnciar
bd0f6049de Update test yaml with newly added specs 2020-08-06 15:26:37 +02:00
Tomas Hrnciar
1fc1c18fd9 Removes bindir parameter from script
This parameter is not necessary anymore with +auto argument replacing +bindir.
2020-08-06 15:26:37 +02:00