0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

380 Commits

Author SHA1 Message Date
Christ van Willegen
c078675ac7
patch 9.1.1064: not possible to use plural forms with gettext()
Problem:  not possible to use plural forms with gettext()
Solution: implement ngettext() Vim script function (Christ van Willegen)

closes: #16561

Signed-off-by: Christ van Willegen <cvwillegen@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-02-01 15:47:51 +01:00
Brandon Maier
cbdc3c1f7a
patch 9.1.0946: cross-compiling fails on osx-arm64
Problem:  cross-compiling fails on osx-arm64
Solution: use vim_cv_timer_create_with_lrt() instead of
          vim_cv_timer_create_works() (Brandon Maier)

Cross-compiling to osx-arm64 fails with the following

  In file included from json.c:17:
  In file included from ./vim.h:457:
  ./macros.h:304:24: error: expected identifier or '('
    304 |      static inline int isnan(double x)
        |                        ^
  .../MacOSX11.0.sdk/usr/include/math.h:165:7: note: expanded from macro 'isnan'
    165 |     ( sizeof(x) == sizeof(float)  ? __inline_isnanf((float)(x))
        |       ^

This can be traced back to ./configure incorrectly detecting the
compiler support for `isnan()`, from the config.log:

  configure:14567: checking for isnan()
  configure:14588: arm64-apple-darwin20.0.0-clang <...> -L$PREFIX/lib conftest.c  -lncurses -ltinfo -lrt >&5
  ld: library not found for -lrt
  arm64-apple-darwin20.0: error: linker command failed with exit code 1 (use -v to see invocation)

The `-lrt` linking is added by ./configure script when it detects
compiler support for `timer_create()`. On the osx-arm64 platform
`timer_create()` works but does not link with `-lrt`. This results in
the following settings from config.log:

  vim_cv_timer_create=yes
  vim_cv_timer_create_with_lrt=no
  vim_cv_timer_create_works=yes

But the configure.ac incorrectly uses `timer_create_works` to add
`-lrt`, instead of using `timer_create_with_lrt`.

fixes: https://github.com/conda-forge/vim-feedstock/pull/1664
closes: #16242

Signed-off-by: Brandon Maier <brandon.maier@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-12-18 21:18:01 +01:00
Jonas Sortie Termansen
8bb5eaf019
patch 9.1.0842: not checking for the sync() systemcall
Problem:  not checking for the sync() systemcall
Solution: check for sync in configure script, fix related #ifdefs
          (Jonas Termansen)

It's better to check for features directly rather than maintaining a
denylist of operating systems without them.

closes: #15985

Signed-off-by: Jonas 'Sortie' Termansen <sortie@maxsi.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-11-04 20:36:41 +01:00
Jonas Sortie Termansen
2cf145b78b
patch 9.1.0837: cross-compiling has some issues
Problem:  Cross-compiling to good modern operating systems is difficult as
          configure assumes obscure bugs are present by default. However,
          most core autoconf-based packages today assume features work
          when in doubt, making cross-compilation easier.
Solution: Assume features work by default and continue to issue a warning
          with the appropriate cache variable. This solution shifts the
          burden onto the users of rare buggy operating systems and
          makes cross-compilation work out of the box for everyone else.

The vim_cv_terminfo test was accidentally negated, where the yes case
was in the error handler, leading to false positives if the test program
failed to compile.

Split the timer_create detection into two phases: First locating the
the library containing timer_create, and then another check to check
if timer_create works to properly support cross-compilation.

Signed-off-by: Jonas 'Sortie' Termansen <sortie@maxsi.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-11-03 20:58:21 +01:00
Ken Takata
dc2c75c6b5
patch 9.1.0693: Configure doesn't show result when not using python3 stable abi
Problem:  Configure doesn't show result when not using python3 stable
          abi (after v9.1.0691)
Solution: Add back AC_MSG_RESULT() (Ken Takata)

related: #15555

Signed-off-by: Ken Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-08-24 16:27:50 +02:00
Christian Brabandt
3f7024cf86
patch 9.1.0691: python3: stable-abi may cause segfault on Python 3.11
Problem:  python3: stable-abi may cause segfault on Python 3.11
          (Audrius Kažukauskas, after v9.1.0668)
Solution: do not enable the stable Python ABI by default, only when used
          with --with-python3-stable-abi argument is given

related: #15543

Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-08-23 18:39:08 +02:00
Ken Takata
1c032e36a6
patch 9.1.0669: if_python: stable python ABI not used by default
Problem:  stable python ABI not used by default
Solution: Enable stable python ABI v3.8 when building with python3/dyn
          by default, update the default Python3 version to 3.8 for
          MS-Windows (Ken Takata)

closes: #15470
related: #15457

Signed-off-by: Ken Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-08-11 18:41:41 +02:00
Christ van Willegen
ce0ef910df
patch 9.1.0509: not possible to translate Vim script messages
Problem:  not possible to translate Vim script messages
          (RestorerZ)
Solution: implement bindtextdomain() and gettext() to support Vim script
          message translations (Christ van Willegen)

fixes: #11637
closes: #12447

Signed-off-by: Christ van Willegen <cvwillegen@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-06-20 23:41:59 +02:00
youcai
1acc67ac44
patch 9.1.0452: Configure checks for libelf unnecessarily
Problem:  Configure checks for libelf unnecessarily
Solution: Remove configure check (youcai)

closes: #14879

Signed-off-by: youcai <omegacoleman@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-05-30 19:31:36 +02:00
Christian Brabandt
9c0ff47098
patch 9.1.0408: configure fails on Fedora when including perl
Problem:  configure fails on Fedora when including perl
          (chesheer-smile)
Solution: Filter out -spec=<path> from $LIBS and $LDFLAGS to avoid
          linking relocation errors for unrelated autoconf tests.

closes: #14526

Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-05-11 20:22:32 +02:00
Vladimír Marek
87319173ba
patch 9.1.0308: configure: msgfmt hardcoded
Problem:  configure: msgfmt hardcoded (after v9.1.0173)
Solution: use $MSGFMT instead of msgfmt in configure script,
          regenerate the configure script
          (Vladimír Marek)

fixes: #14515

Signed-off-by: Vladimír Marek <vlmarek13@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-04-11 21:57:02 +02:00
RestorerZ
e498cafe74
patch 9.1.0173: msgfmt ver. 0.22 forcibly converts text to UTF-8
Problem:  msgfmt ver. 0.22 forcibly converts text to UTF-8
Solution: use '--no-convert' if msgfmt supports it. Add a configure
          check for the msgfmt version (RestorerZ).

closes: #14163

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-03-12 22:14:39 +01:00
Christian Brabandt
2f9aef42af
patch 9.1.0104: Linking fails with -lto because of PERL_CFLAGS
Problem:  Linking fails with -lto because of PERL_CFLAGS
          (Zoltan Toth)
Solution: Filter out -flto argument from Perl CFLAGS.

fixes: #14012

Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-02-12 23:14:19 +01:00
Zdenek Dohnal
549f8c0b4e
patch 9.0.2166: Memory leak in Configure Script when checking GTK
Problem:  Memory leak in Configure Script when checking GTK
Solution: Free the allocated memory

If the memory is not freed, GTK GUI VIM cannot be build with address
sanitizer for debugging purposes - configure script will report missing
GTK, because the testing file compilation fails due reported memory
leak.

closes: #13672

Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-14 20:22:49 +01:00
Zdenek Dohnal
1b1c9f272d
patch 9.0.2083: Perl: xsubpp may be in non-standard location
Problem:  Perl: xsubpp may be in non-standard location
Solution: Add --with-subpp configure option

configure.ac: Add --with-xsubpp configure option

Some environments (such as flatpaks) cannot count on xsubpp being
in the common Perl directory, so a configure option should be used for
clean solution.

closes: #13470

Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-02 20:19:06 +01:00
Illia Bobyr
e379e21ddc
patch 9.0.1966: configure prints stray 6 when checking libruby
Problem:  configure prints stray 6 when checking libruby
Solution: redirect stdout to dev/null

configure: Do not print "6" when checking for libruby

`expr` will print the matched string length to the standard output.
Current `configure` output looks like this:

```
checking Ruby header files...  /usr/include/ruby-3.1.0
6
```

The script really only cares about `expr` exit code.

closes: #13234

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
2023-09-30 22:59:27 +02:00
Illia Bobyr
8c358e024f
patch 9.0.1965: wrong auto/configure script
Problem:  wrong auto/configure script
Solution: regenerate with autoconf 2.71

configure: sys/xattr.hs: Regenerate with autoconf 2.71

It seems that `auto/configure` update in

  commit 6de4e58cf27a3bb6e81653ca63b77e29d1bb46f2 (tag: v9.0.1963)
  Author: zeertzjq <zeertzjq@outlook.com>
  Date:   Sat Sep 30 14:19:14 2023 +0200

      patch 9.0.1963: Configure script may not detect xattr

      Problem:  Configure script may not detect xattr correctly
      Solution: include sys/xattr instead of attr/xattr,
                make Test_write_with_xattr_support() test
                xattr feature correctly

      This also applies to the Smack security feature, so change the include
      and configure script for it as well.

      closes: #13229

      Signed-off-by: Christian Brabandt <cb@256bit.org>
      Co-authored-by: zeertzjq <zeertzjq@outlook.com>

was done manually, and missed an update to the generated variable name.

closes: #13235

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
2023-09-30 22:57:19 +02:00
zeertzjq
6de4e58cf2
patch 9.0.1963: Configure script may not detect xattr
Problem:  Configure script may not detect xattr correctly
Solution: include sys/xattr instead of attr/xattr,
          make Test_write_with_xattr_support() test
          xattr feature correctly

This also applies to the Smack security feature, so change the include
and configure script for it as well.

closes: #13229

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
2023-09-30 14:22:07 +02:00
Christian Brabandt
e085dfda5d
patch 9.0.1962: No support for writing extended attributes
Problem:  No support for writing extended attributes
Solution: Add extended attribute support for linux

It's been a long standing issue, that if you write a file with extended
attributes and backupcopy is set to no, the file will loose the extended
attributes.

So this patch adds support for retrieving the extended attributes and
copying it to the new file. It currently only works on linux, mainly
because I don't know the different APIs for other systems (BSD, MacOSX and
Solaris).  On linux, this should be supported since Kernel 2.4 or
something, so this should be pretty safe to use now.

Enable the extended attribute support with normal builds.

I also added it explicitly to the :version output as well as make it
able to check using `:echo has("xattr")`, to have users easily check
that this is available.

In contrast to the similar support for SELINUX and SMACK support (which
also internally uses extended attributes), I have made this a FEAT_XATTR
define, instead of the similar HAVE_XATTR.

Add a test and change CI to include relevant packages so that CI can
test that extended attributes are correctly written.

closes: #306
closes: #13203

Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-09-30 12:49:18 +02:00
Yee Cheng Chin
e7d79eb98a
patch 9.0.1900: Configure script uses non-portable == comparison
Problem:  Configure script uses non-portable == comparison
Solution: Use the standard and portable "=" instead

closes: #13095
closes: #13099

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
2023-09-16 13:38:26 +02:00
Illia Bobyr
a96d544bc3
patch 9.0.1823: Autoconf 2.69 too old
Problem:  Autoconf 2.69 too old
Solution: Migrate to Autoconf 2.71

Autoconf 2.69 is almost 10 years old.  And 2.71 is also a few years old
as well.  Should be pretty well tested by now.  It brings a lot of
improvements and there seems to be an ongoing work on autoconf 2.72
already.

This change just addresses two minor changes `autoupdate` suggested, and
then `src/auto/configure` is regenerated by running

  cd src
  make AUTOCONF=autoconf2.71 autoconf

closes: #12958

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
2023-08-30 16:30:15 +02:00
Christian Brabandt
55460da26c
patch 9.0.1818: dynamically linking perl is broken
Problem:  dynamically linking perl is broken
Solution: Fix all issues

This is a combination of several commits:

1) Fix if_perl.xs not being able to build on all versions of Perl (5.30)

This fixes the dynamic builds of Perl interface. The Perl interface file
previously had to manually copy and paste misc inline functions verbatim
from the Perl headers, because we defined `PERL_NO_INLINE_FUNCTIONS`
which prevents us form getting some function definitions. The original
reason we defined it was because those inline functions would reference
Perl functions that would cause linkage errors.

This is a little fragile as every time a new version of Perl comes out,
we inevitably have to copy over new versions of inline functions to our
file, and it's also easy to miss updates to existing functions.

Instead, remove the `PERL_NO_INLINE_FUNCTIONS` define, remove the manual
copy-pasted inline functions. Simply add stub implementations of the
missing linked functions like `Perl_sv_free2` and forward them to the
DLL version of the function at runtime. There are only a few functions
that need this treatment, and it's a simple stub so there is very low
upkeep compared to copying whole implementations to the file.

Also, fix the configure script so that if we are using dynamic linkage,
we don't pass `-lperl` to the build flags, to avoid accidental external
linkage while using dynamic builds. This is similar to how Python
integration works.

2) Fix GIMME_V deprecation warnings in Perl 5.38

Just use GIMME_V, and only use GIMME when using 5.30 to avoid needing to
link Perl_block_gimme. We could provide a stub like the other linked
functions like Perl_sv_free2, but simply using GIMME is the simplest and
it has always worked before.

3) Fix Perl 5.38 issues

Fix two issues:

3.1. Perl 5.38 links against more functions in their inline headers, so we
   need to stub them too.

3.2. Perl 5.38 made Perl_get_context an inline function, but *only* for
   non-Windows build. Fix that. Note that this was happening in Vim
   currently, as it would build, but fail to run Perl code at runtime.

4) Fix Perl 5.36/5.38 when thread local is used

Perl 5.36 introduced using `_Thread_local` for the current context,
which causes inline functions to fail. Create a stub
`PL_current_context` thread local variable to satisfy the linker for
inlined functions. Note that this is going to result in a different
`PL_current_context` being used than the one used in the library, but so
far from testing it seems to work.

5) Add docs for how to build Perl for dynamic linking to work

closes: #12827
closes: #12914

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
2023-08-29 21:31:28 +02:00
Illia Bobyr
0e82b59df3
patch 9.0.1817: configure: using obsolete AC_HEADER_STDC
Problem:  configure: using obsolete AC_HEADER_STDC
Solution: Remove it and re-create configure

closes: #12949

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
2023-08-29 21:17:50 +02:00
ichizok
bddc6adca6
patch 9.0.1816: configure: sed uses non-portable regex
Problem:  configure: sed uses non-portable regex
Solution: use '*' modifier instead of '\?' in regex
          for luajit version detection

closes: #12954

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: ichizok <gclient.gaap@gmail.com>
2023-08-29 20:54:32 +02:00
Illia Bobyr
74e1dada41
patch 9.0.1794: autoconf: not correctly detecing include dirs
Problem:  autoconf: not correctly detecing include dirs
Solution: make use of python3 to generate includedirs

configure: Python3: Use sysconfig for -I

It seems better to use tools provided by Python for determining the
include directories, rather than construct them "manually".

Current system is broken when using virtual environments for python
3.11.4.  It used to work before, but now it detects a incorrect value
for `-I`.

It would probably make sense to switch to a similar logic for lib
folders, that is for the `-l` switch.  There are also
`sysconfig.get_config_h_filename()` and
`sysconfig.get_makefile_filename()`, that could replace more Python
specific logic in the current `configure{.ac,}`.

sysconfig provides the necessary tools since Python 2.7.

closes: #12889

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
2023-08-27 18:26:54 +02:00
Illia Bobyr
f39842f148
patch 9.0.1793: obsolete macros in configure script
Problem:  obsolete macros in configure script
Solution: Remove those and start moving to autoconf 2.71

src/configure.ac: Remove obsolete macros

These macros are declared obsolete in autoconf 2.69, which is almost 10
years old by now:

  https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Obsolete-Macros.html

They generate warnings when in a subsequent upgrade to autoconf 2.71.

`autoupdate` from autoupdate 2.71 suggests most of these changes, except
that it also adds obsolete warnings, that where individually checked and
removed.

Regenerated `src/auto/configure` by running:

  cd src
  autoconf2.69 --output=auto/configure configure.ac
  sed --in-place --expression='s@>config.log@>auto/config.log@g' auto/configure

closes: #12888

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
2023-08-27 18:24:59 +02:00
Christian Brabandt
d42f95bbfb
patch 9.0.1787: Cannot build with latest luajit
Problem:  Cannot build with latest luajit
Solution: adjust sed regexp and don't expect '-' in version output

closes: #12896

Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-08-24 08:15:38 +02:00
Yee Cheng Chin
c13b3d1350
patch 9.0.1776: No support for stable Python 3 ABI
Problem:  No support for stable Python 3 ABI
Solution: Support Python 3 stable ABI

Commits:
1) Support Python 3 stable ABI to allow mixed version interoperatbility

Vim currently supports embedding Python for use with plugins, and the
"dynamic" linking option allows the user to specify a locally installed
version of Python by setting `pythonthreedll`. However, one caveat is
that the Python 3 libs are not binary compatible across minor versions,
and mixing versions can potentially be dangerous (e.g. let's say Vim was
linked against the Python 3.10 SDK, but the user sets `pythonthreedll`
to a 3.11 lib). Usually, nothing bad happens, but in theory this could
lead to crashes, memory corruption, and other unpredictable behaviors.
It's also difficult for the user to tell something is wrong because Vim
has no way of reporting what Python 3 version Vim was linked with.

For Vim installed via a package manager, this usually isn't an issue
because all the dependencies would already be figured out. For prebuilt
Vim binaries like MacVim (my motivation for working on this), AppImage,
and Win32 installer this could potentially be an issue as usually a
single binary is distributed. This is more tricky when a new Python
version is released, as there's a chicken-and-egg issue with deciding
what Python version to build against and hard to keep in sync when a new
Python version just drops and we have a mix of users of different Python
versions, and a user just blindly upgrading to a new Python could lead to
bad interactions with Vim.

Python 3 does have a solution for this problem: stable ABI / limited API
(see https://docs.python.org/3/c-api/stable.html). The C SDK limits the
API to a set of functions that are promised to be stable across
versions. This pull request adds an ifdef config that allows us to turn
it on when building Vim. Vim binaries built with this option should be
safe to freely link with any Python 3 libraies without having the
constraint of having to use the same minor version.

Note: Python 2 has no such concept and this doesn't change how Python 2
integration works (not that there is going to be a new version of Python
2 that would cause compatibility issues in the future anyway).

---

Technical details:
======

The stable ABI can be accessed when we compile with the Python 3 limited
API (by defining `Py_LIMITED_API`). The Python 3 code (in `if_python3.c`
and `if_py_both.h`) would now handle this and switch to limited API
mode. Without it set, Vim will still use the full API as before so this
is an opt-in change.

The main difference is that `PyType_Object` is now an opaque struct that
we can't directly create "static types" out of, and we have to create
type objects as "heap types" instead. This is because the struct is not
stable and changes from version to version (e.g. 3.8 added a
`tp_vectorcall` field to it). I had to change all the types to be
allocated on the heap instead with just a pointer to them.

Other functions are also simply missing in limited API, or they are
introduced too late (e.g. `PyUnicode_AsUTF8AndSize` in 3.10) to it that
we need some other ways to do the same thing, so I had to abstract a few
things into macros, and sometimes re-implement functions like
`PyObject_NEW`.

One caveat is that in limited API, `OutputType` (used for replacing
`sys.stdout`) no longer inherits from `PyStdPrinter_Type` which I don't
think has any real issue other than minor differences in how they
convert to a string and missing a couple functions like `mode()` and
`fileno()`.

Also fixed an existing bug where `tp_basicsize` was set incorrectly for
`BufferObject`, `TabListObject, `WinListObject`.

Technically, there could be a small performance drop, there is a little
more indirection with accessing type objects, and some APIs like
`PyUnicode_AsUTF8AndSize` are missing, but in practice I didn't see any
difference, and any well-written Python plugin should try to avoid
excessing callbacks to the `vim` module in Python anyway.

I only tested limited API mode down to Python 3.7, which seemes to
compile and work fine. I haven't tried earlier Python versions.

2) Fix PyIter_Check on older Python vers / type##Ptr unused warning

For PyIter_Check, older versions exposed them as either macros (used in
full API), or a function (for use in limited API). A previous change
exposed PyIter_Check to the dynamic build because Python just moved it
to function-only in 3.10 anyway. Because of that, just make sure we
always grab the function in dynamic builds in earlier versions since
that's what Python eventually did anyway.

3) Move Py_LIMITED_API define to configure script

Can now use --with-python-stable-abi flag to customize what stable ABI
version to target. Can also use an env var to do so as well.

4) Show +python/dyn-stable in :version, and allow has() feature query

Not sure if the "/dyn-stable" suffix would break things, or whether we
should do it another way. Or just don't show it in version and rely on
has() feature checking.

5) Documentation first draft. Still need to implement v:python3_version

6) Fix PyIter_Check build breaks when compiling against Python 3.8

7) Add CI coverage stable ABI on Linux/Windows / make configurable on Windows

This adds configurable options for Windows make files (both MinGW and
MSVC). CI will also now exercise both traditional full API and stable
ABI for Linux and Windows in the matrix for coverage.

Also added a "dynamic" option to Linux matrix as a drive-by change to
make other scripting languages like Ruby / Perl testable under both
static and dynamic builds.

8) Fix inaccuracy in Windows docs

Python's own docs are confusing but you don't actually want to use
`python3.dll` for the dynamic linkage.

9) Add generated autoconf file

10) Add v:python3_version support

This variable indicates the version of Python3 that Vim was built
against (PY_VERSION_HEX), and will be useful to check whether the Python
library you are loading in dynamically actually fits it. When built with
stable ABI, it will be the limited ABI version instead
(`Py_LIMITED_API`), which indicates the minimum version of Python 3 the
user should have, rather than the exact match. When stable ABI is used,
we won't be exposing PY_VERSION_HEX in this var because it just doesn't
seem necessary to do so (the whole point of stable ABI is the promise
that it will work across versions), and I don't want to confuse the user
with too many variables.

Also, cleaned up some documentation, and added help tags.

11) Fix Python 3.7 compat issues

Fix a couple issues when using limited API < 3.8

- Crash on exit: In Python 3.7, if a heap-allocated type is destroyed
  before all instances are, it would cause a crash later. This happens
  when we destroyed `OptionsType` before calling `Py_Finalize` when
  using the limited API. To make it worse, later versions changed the
  semantics and now each instance has a strong reference to its own type
  and the recommendation has changed to have each instance de-ref its
  own type and have its type in GC traversal. To avoid dealing with
  these cross-version variations, we just don't free the heap type. They
  are static types in non-limited-API anyway and are designed to last
  through the entirety of the app, and we also don't restart the Python
  runtime and therefore do not need it to have absolutely 0 leaks.

  See:
  - https://docs.python.org/3/whatsnew/3.8.html#changes-in-the-c-api
  - https://docs.python.org/3/whatsnew/3.9.html#changes-in-the-c-api

- PyIter_Check: This function is not provided in limited APIs older than
  3.8. Previously I was trying to mock it out using manual
  PyType_GetSlot() but it was brittle and also does not actually work
  properly for static types (it will generate a Python error). Just
  return false. It does mean using limited API < 3.8 is not recommended
  as you lose the functionality to handle iterators, but from playing
  with plugins I couldn't find it to be an issue.

- Fix loading of PyIter_Check so it will be done when limited API < 3.8.
  Otherwise loading a 3.7 Python lib will fail even if limited API was
  specified to use it.

12) Make sure to only load `PyUnicode_AsUTF8AndSize` in needed in limited API

We don't use this function unless limited API >= 3.10, but we were
loading it regardless. Usually it's ok in Unix-like systems where Python
just has a single lib that we load from, but in Windows where there is a
separate python3.dll this would not work as the symbol would not have
been exposed in this more limited DLL file. This makes it much clearer
under what condition is this function needed.

closes: #12032

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
2023-08-20 21:18:38 +02:00
Mike Gilbert
a055b441f5
patch 9.0.1765: Error when cross-compiling Vim
Problem:  Error when cross-compiling Vim
Solution: use AC_CHECK_SIZEOF to find sizeof(wchar_t)

This fixes an error when cross compiling.

closes: #12828

Bug: https://bugs.gentoo.org/889430
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-08-20 19:01:41 +02:00
Rose
00d07e7682 patch 9.0.1517: MacOS: configure removes -O2 from $CFLAGS
Problem:    MacOS: configure removes -O2 from $CFLAGS.
Solution:   Only adjust $CFLAGS for gcc. (closes #12351)
2023-05-06 18:07:14 +01:00
Bram Moolenaar
08210f8def patch 9.0.1450: MacOS: building fails if clock_gettime() is not available
Problem:    MacOS: building fails if clock_gettime() is not available.
Solution:   Add a configure check for clock_gettime(). (closes #12242)
2023-04-13 19:15:54 +01:00
Bram Moolenaar
01967f5b10 patch 9.0.1445: openSUSE: configure doesn't find the Motif library
Problem:    openSUSE: configure doesn't find the Motif library. (Tony
            Mechelynck)
Solution:   Also search in /usr/lib64.
2023-04-12 16:24:03 +01:00
Yee Cheng Chin
b6ebe5af74 patch 9.0.1441: MacOS: Python 3 using framework do not set dll name properly
Problem:    MacOS: Python 3 using framework do not set dll name properly.
Solution:   Use the framework prefix. (Yee Cheng Chin, closes #12189)
2023-04-05 18:24:50 +01:00
Bram Moolenaar
869113f376 patch 9.0.1433: on some systems the Lua library is not found
Problem:    On some systems the Lua library is not found.
Solution:   Check if a subdirectory for Lua exists.  (closes #4475)
2023-03-31 21:29:00 +01:00
Zdenek Dohnal
4219698603 patch 9.0.1219: handling of FORTIFY_SOURCE flags doesn't match Fedora usage
Problem:    Handling of FORTIFY_SOURCE flags doesn't match Fedora usage.
Solution:   Adjust the "sed" patterns. (Zdenek Dohnal, closes #11847)
2023-01-18 16:09:51 +00:00
Zdenek Dohnal
870cd76283 patch 9.0.1162: configure does not handle all FORTIFY_SOURCE variants
Problem:    Configure does not handle all FORTIFY_SOURCE variants.
Solution:   Also handle Fedora's default FORTIFY_SOURCE flags. (Zdenek Dohnal,
            closes #11794)
2023-01-09 13:18:08 +00:00
Evan Miller
254480736f patch 9.0.1110: build fails on Mac OS X 10.4/10.5
Problem:    Build fails on Mac OS X 10.4/10.5 .
Solution:   Check if the dispatch/dispatch.h header exists. (Evan Miller,
            closes #11746)
2022-12-30 10:42:23 +00:00
Zdenek Dohnal
1d822afaf6 patch 9.0.0928: using Ruby LDFLAGS may cause build problems
Problem:    Using Ruby LDFLAGS may cause build problems.
Solution:   Do not add Ruby LDFLAGS to Vim's LDFLAGS. (Zdenek Dohnal,
            closes #11592)
2022-11-23 12:06:08 +00:00
Sam James
f8ea10677d patch 9.0.0834: warning for missing return type
Problem:    Warning for missing return type.
Solution:   Add "int". (San James, closes #11496)
2022-11-05 15:13:50 +00:00
Martin Tournoij
25f3a146a0 patch 9.0.0700: there is no real need for a "big" build
Problem:    There is no real need for a "big" build.
Solution:   Move common features to "normal" build, less often used features
            to the "huge" build. (Martin Tournoij, closes #11283)
2022-10-08 19:26:41 +01:00
Martin Tournoij
7904fa420e patch 9.0.0657: too many #ifdefs
Problem:    Too many #ifdefs.
Solution:   Graduate the +cmdwin feature.  Now the tiny and small builds are
            equal, drop the small build.  (Martin Tournoij, closes #11268)
2022-10-04 16:28:45 +01:00
K.Takata
236ccbf6f8 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Problem:    Supporting Ruby 1.8 makes code complicated.
Solution:   Drop Ruby 1.8 support, it is ancient. (Ken Takata, closes #11195)
2022-09-22 16:12:06 +01:00
Bram Moolenaar
73e28dcc61 patch 9.0.0491: no good reason to build without the float feature
Problem:    No good reason to build without the float feature.
Solution:   Remove configure check for float and "#ifdef FEAT_FLOAT".
2022-09-17 21:08:33 +01:00
Bram Moolenaar
5f6cae8b8a patch 9.0.0108: configure check for timer_create may give wrong error
Problem:    Configure check for timer_create may give wrong error.
Solution:   Give a warning instead of an error.
2022-07-30 11:00:50 +01:00
Bram Moolenaar
efffa5360e patch 9.0.0103: if running configure with cached results -lrt may be missing
Problem:    If running configure with cached results -lrt may be missing.
Solution:   Use two cache variables, one without and one with -lrt.
            (closes #10799)  Swap checks to avoid adding -lrt unnecessarily.
2022-07-28 22:39:54 +01:00
Bram Moolenaar
5748b7f2c8 patch 9.0.0098: missing include file in timer_create configure check
Problem:    missing include file in timer_create configure check.
Solution:   Inlucde stdlib.h.
2022-07-28 12:09:04 +01:00
Richard Purdie
509695c1c3 patch 9.0.0065: cross-compiling doesn't work because of timer_create check
Problem:    Cross-compiling doesn't work because of timer_create check.
Solution:   Use AC_CACHE_CHECK(). (Richard Purdie, closes #10777)
2022-07-24 20:48:00 +01:00
Bram Moolenaar
f2ce76a8c0 patch 9.0.0023: on Solaris timer_create() exists but does not work
Problem:    On Solaris timer_create() exists but does not work.
Solution:   Adjust the configure check to run the test program.
            (closes #10647)
2022-07-02 11:40:40 +01:00
Bram Moolenaar
0f0d3a7fb6 patch 8.2.5135: running configure gives warnings for main() return type
Problem:    Running configure gives warnings for main() return type.
Solution:   Specify "int" return type.  Avoid a few more warnings.
2022-06-19 18:02:05 +01:00
Bram Moolenaar
e530395c2c patch 8.2.5131: timeout implementation is not optimal
Problem:    Timeout implementation is not optimal.
Solution:   Further improvements for timeouts.  Add a test for searchpair()
            timeout. (partly by Paul Ollis)
2022-06-19 17:05:47 +01:00