]> git.k1024.org Git - pylibacl.git/log
pylibacl.git
4 years agoStop supporting Python 2
Iustin Pop [Tue, 26 Nov 2019 22:40:16 +0000 (23:40 +0100)]
Stop supporting Python 2

This just changes the documentation and stop testing with Python
2. Future patches will actually drop compatibility.

4 years agoAdd a fast-test target
Iustin Pop [Tue, 26 Nov 2019 21:42:51 +0000 (22:42 +0100)]
Add a fast-test target

4 years agoRename test/ → tests/
Iustin Pop [Tue, 26 Nov 2019 21:41:20 +0000 (22:41 +0100)]
Rename test/ → tests/

More consistency between my packages.

4 years agoRun local tests with 3.8 as well
Iustin Pop [Tue, 26 Nov 2019 21:23:10 +0000 (22:23 +0100)]
Run local tests with 3.8 as well

4 years agoAdd a distcheck target
Iustin Pop [Tue, 26 Nov 2019 21:22:51 +0000 (22:22 +0100)]
Add a distcheck target

5 years agoTravis: test python 3.7 and 3.8 in standard way
Iustin Pop [Sun, 24 Nov 2019 14:39:25 +0000 (15:39 +0100)]
Travis: test python 3.7 and 3.8 in standard way

This removes the hack for python 3.7, and add 3.8 as well.

5 years agoExport coverage results to codecov as well
Iustin Pop [Sun, 24 Nov 2019 14:36:29 +0000 (15:36 +0100)]
Export coverage results to codecov as well

And also move the env var to just the coveralls invocation.

5 years agoBadge-ify the README
Iustin Pop [Sat, 23 Nov 2019 00:14:37 +0000 (01:14 +0100)]
Badge-ify the README

Hey, it's fun!

5 years agoUpdate Travis config to export coverage information
Iustin Pop [Fri, 22 Nov 2019 21:39:22 +0000 (22:39 +0100)]
Update Travis config to export coverage information

5 years agoBump version numbers for new release pylibacl-v0.5.4
Iustin Pop [Thu, 14 Nov 2019 10:58:42 +0000 (11:58 +0100)]
Bump version numbers for new release

Only 4+ years…

5 years agoNote that ACL(text="...") needs a valid ACL to be passed
Iustin Pop [Thu, 14 Nov 2019 10:45:26 +0000 (11:45 +0100)]
Note that ACL(text="...") needs a valid ACL to be passed

Closes #9.

5 years agoEnsure documentation is rebuilt on source (.c) changes
Iustin Pop [Thu, 14 Nov 2019 10:38:27 +0000 (11:38 +0100)]
Ensure documentation is rebuilt on source (.c) changes

5 years agoUpdate FreeBSD notes
Iustin Pop [Thu, 14 Nov 2019 10:27:17 +0000 (11:27 +0100)]
Update FreeBSD notes

This mentions needing to enable ACLs on the file-system, and adds the
packages that need to be installed.

Closes #12.

5 years agoUpdate README about build requirements
Iustin Pop [Wed, 13 Nov 2019 23:23:27 +0000 (00:23 +0100)]
Update README about build requirements

5 years agoMakefile: stop trying to test with py<2.7
Iustin Pop [Wed, 13 Nov 2019 23:16:46 +0000 (00:16 +0100)]
Makefile: stop trying to test with py<2.7

Since actual compat was removed a while back.

5 years agoSwitch documentation building to Python 3
Iustin Pop [Wed, 13 Nov 2019 23:14:24 +0000 (00:14 +0100)]
Switch documentation building to Python 3

This removes build-time dependency on Python 2, which is going away.

5 years agoTravis: remove obsolete python version
Iustin Pop [Sun, 13 Oct 2019 15:55:53 +0000 (17:55 +0200)]
Travis: remove obsolete python version

Some of them, at least.

5 years agoMakefile: re-enable pypy and add pypy3
Iustin Pop [Sun, 3 Mar 2019 12:56:58 +0000 (13:56 +0100)]
Makefile: re-enable pypy and add pypy3

Everything works again now, so let's enable them.

5 years agoACL creation: change how mode arguments are used
Iustin Pop [Sun, 3 Mar 2019 12:45:45 +0000 (13:45 +0100)]
ACL creation: change how mode arguments are used

Currently, initialising from a mode is done by looking at the keywords
arguments that were passed and seeing if mode was part of them. For
some reason, this causes a segfault under PyPy (my fault, probably),
so let's switch to check based on whether the mode argument was
initialised. To do so, switch the type of mode to int and the Python
format char, since the 'H' is defined as "without overflow checking"
anyway, so we don't get any real checks. Document that invalid values
will cause errors.

5 years agoRemove use of PyString/PyUnicode *AndDel() function
Iustin Pop [Sun, 3 Mar 2019 12:42:10 +0000 (13:42 +0100)]
Remove use of PyString/PyUnicode *AndDel() function

These are not documented in Python 3, so let's switch to plain
Concat() for it with explicit delete of original strings. This makes
the code buildable with pypy3.

5 years agoTravis: really test 3.7
Iustin Pop [Sun, 3 Mar 2019 12:22:40 +0000 (13:22 +0100)]
Travis: really test 3.7

This version seems to work. Sigh…

5 years agoTravis: more reworking of Py3.7 support…
Iustin Pop [Sun, 3 Mar 2019 12:02:31 +0000 (13:02 +0100)]
Travis: more reworking of Py3.7 support…

5 years agoTravis: rework build matrix
Iustin Pop [Sun, 3 Mar 2019 11:58:40 +0000 (12:58 +0100)]
Travis: rework build matrix

Apparently python 3.7 is not available on the default Trusty
distribution, so let's add Xenial for the newer Python versions. More
builds!

5 years agoDrop Python 2.6 and earlier support
Iustin Pop [Sun, 3 Mar 2019 11:47:36 +0000 (12:47 +0100)]
Drop Python 2.6 and earlier support

While the C extension doesn't need anything to support it, simply
running the tests becomes more and more difficult with such old
versions. Given upcoming Python 2 deprecation, let's drop support for
older versions and simplify the test suite.

5 years agoDisable pypy tests in Makefile
Iustin Pop [Sun, 3 Mar 2019 01:40:56 +0000 (02:40 +0100)]
Disable pypy tests in Makefile

With my current pypy, ACL_init triggers a SEGFAULT in pypy. Until I
can debug what's up, let's remove this test.

5 years agoIncrease test coverage
Iustin Pop [Sun, 3 Mar 2019 01:40:04 +0000 (02:40 +0100)]
Increase test coverage

These are old changes from October 2016 which I forgot to commit. I
think they're related to test coverage, although a few changes (object
structure) seems a bit different.

Well, anyway, here they are.

5 years agoTravis: add python 3.5/3.6 to build matrix
Iustin Pop [Sat, 2 Mar 2019 20:16:52 +0000 (21:16 +0100)]
Travis: add python 3.5/3.6 to build matrix

5 years agoTravis: remove "sudo:false"
Iustin Pop [Sat, 2 Mar 2019 20:09:30 +0000 (21:09 +0100)]
Travis: remove "sudo:false"

Per the deprecation of container-based
builds (https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration),
remove the sudo:false setting.

8 years agoAdd a makefile coverage target
Iustin Pop [Wed, 26 Oct 2016 16:11:35 +0000 (18:11 +0200)]
Add a makefile coverage target

… which says that current test coverage is pretty bad - 55% line-based
and only 67% functions :(

8 years agoAlso run tests with debug interpreters
Iustin Pop [Sun, 15 May 2016 03:18:37 +0000 (05:18 +0200)]
Also run tests with debug interpreters

And bump up Python 3.x versions.

8 years agoAdd travis config file
Iustin Pop [Mon, 2 May 2016 21:07:14 +0000 (23:07 +0200)]
Add travis config file

This can be done now that travis environment has whitelisted the
libacl1-dev package.

9 years agoInvert get_tag_qualifier() return value meaning
Iustin Pop [Fri, 1 May 2015 21:12:23 +0000 (23:12 +0200)]
Invert get_tag_qualifier() return value meaning

Returning negative value on error (rather than zero) makes the
function more friendly for cpychecker, and allows the code to be
cpychecker clean.

9 years agoAdd cpychecker macro for exception negative results
Iustin Pop [Fri, 1 May 2015 20:29:54 +0000 (22:29 +0200)]
Add cpychecker macro for exception negative results

Per http://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html#errors-in-exception-handling.

9 years agoAdd cpychecker annotations for type/object correspondence
Iustin Pop [Fri, 1 May 2015 20:11:22 +0000 (22:11 +0200)]
Add cpychecker annotations for type/object correspondence

Per http://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html#associating-pytypeobject-instances-with-compile-time-types.

9 years agoBump copyright years
Iustin Pop [Fri, 1 May 2015 20:11:15 +0000 (22:11 +0200)]
Bump copyright years

9 years agoRename README→README.rst
Iustin Pop [Fri, 1 May 2015 19:58:21 +0000 (21:58 +0200)]
Rename README→README.rst

This should give better formatting, e.g. in github project page.

9 years agoAdd the release date to NEWS files entries
Iustin Pop [Fri, 1 May 2015 19:56:20 +0000 (21:56 +0200)]
Add the release date to NEWS files entries

9 years agoBump version for 0.5.3 release pylibacl-v0.5.3
Iustin Pop [Thu, 30 Apr 2015 20:20:17 +0000 (22:20 +0200)]
Bump version for 0.5.3 release

9 years agoUpdate my email address
Iustin Pop [Thu, 30 Apr 2015 20:14:56 +0000 (22:14 +0200)]
Update my email address

9 years agoSmall style change in setup.py
Iustin Pop [Thu, 30 Apr 2015 20:13:54 +0000 (22:13 +0200)]
Small style change in setup.py

9 years agoMerge remote-tracking branch 'github/master'
Iustin Pop [Thu, 30 Apr 2015 20:12:53 +0000 (22:12 +0200)]
Merge remote-tracking branch 'github/master'

Merge pull request made on GitHub.

9 years agoCleanup all .so files on 'make clean'
Iustin Pop [Thu, 30 Apr 2015 20:11:32 +0000 (22:11 +0200)]
Cleanup all .so files on 'make clean'

Otherwise 'make test' can result in very weird error messages, if
hitting https://bugs.python.org/issue7559 (don't ask…).

9 years agotests: ignore IOErrors during operations invalid ACLs
Iustin Pop [Thu, 30 Apr 2015 17:48:41 +0000 (19:48 +0200)]
tests: ignore IOErrors during operations invalid ACLs

It seems that FreeBSD at least returns EINVAL from calc_mask() and
other calls if the ACL is invalid, so let's ignore such IOErrors.

This should hopefully fix #6 and #7.

9 years agoMerge pull request #8 from yaneurabeya/master
Iustin Pop [Thu, 30 Apr 2015 18:41:33 +0000 (20:41 +0200)]
Merge pull request #8 from yaneurabeya/master

Handle FreeBSD versions greater than or equal to 7.x

9 years agotests: don't call acl_to_text on an invalid ACL
Iustin Pop [Thu, 30 Apr 2015 17:43:53 +0000 (19:43 +0200)]
tests: don't call acl_to_text on an invalid ACL

While Linux is happy to convert it to text, it seems that under
FreeBSD this doesn't (always? sometimes?) work, so let's use a proper
ACL in the str() test.

Closes #5.

10 years agoHandle FreeBSD versions greater than or equal to 7.x
Garrett Cooper [Wed, 27 Aug 2014 08:14:30 +0000 (01:14 -0700)]
Handle FreeBSD versions greater than or equal to 7.x

Sponsored by: EMC / Isilon Storage Division

10 years agoSimplify a bit the module initialization
Iustin Pop [Sat, 28 Jun 2014 20:35:32 +0000 (22:35 +0200)]
Simplify a bit the module initialization

A few constants are more nicely defined.

10 years agoTry to fix uid_t/gid_t usage in entry qualifiers
Iustin Pop [Sat, 28 Jun 2014 12:13:32 +0000 (14:13 +0200)]
Try to fix uid_t/gid_t usage in entry qualifiers

The current code is very broken with regards to the casting between
Python's integer type (either int in Py2 or the magic int/long in Py3)
and the uid_t/gid_t POSIX types. This means that the code is broken
outside "small" integer values.

By using uid_t/gid_t as appropriate, we can fix most of the problem
(at least as far as the new unittests are concerned). There's still no
automatic printf format modifier for them, so the code hardcodes
unsigned (which is what Linux/glibc defines them to), and also there's
a unittest that expects negative values to fail when set.

This should fix issue #3 (github).

10 years agoFirst step towards fixing qualifier overflow
Iustin Pop [Tue, 24 Jun 2014 21:23:12 +0000 (23:23 +0200)]
First step towards fixing qualifier overflow

This is still a work-in-progress, since it only deals with
Python-level overflows, but it's a step forward.

10 years agoFix error message in Entry_set_qualifier
Iustin Pop [Tue, 24 Jun 2014 19:51:29 +0000 (21:51 +0200)]
Fix error message in Entry_set_qualifier

This closes #1 (github issue).

10 years agoFix download link in README
Iustin Pop [Fri, 23 May 2014 22:57:40 +0000 (00:57 +0200)]
Fix download link in README

… since github no longer provides downloads.

10 years agoAdd a 'dist' target pylibacl-v0.5.2
Iustin Pop [Fri, 23 May 2014 22:41:59 +0000 (00:41 +0200)]
Add a 'dist' target

10 years agoBump version for a trivial 0.5.2 release
Iustin Pop [Fri, 23 May 2014 22:40:07 +0000 (00:40 +0200)]
Bump version for a trivial 0.5.2 release

10 years agoFix some indentation issues in tests
Iustin Pop [Fri, 23 May 2014 22:37:13 +0000 (00:37 +0200)]
Fix some indentation issues in tests

10 years agoFix homepage URL
Iustin Pop [Fri, 23 May 2014 22:36:58 +0000 (00:36 +0200)]
Fix homepage URL

10 years agoFix copyright years and intent to (not) test Solaris
Iustin Pop [Fri, 23 May 2014 22:36:37 +0000 (00:36 +0200)]
Fix copyright years and intent to (not) test Solaris

10 years agoUnify env and python variable TEST_DIR
Iustin Pop [Fri, 23 May 2014 22:22:13 +0000 (00:22 +0200)]
Unify env and python variable TEST_DIR

The difference is just confusing.

10 years agoEnable testing on more Python versions and PyPy
Iustin Pop [Fri, 23 May 2014 22:20:58 +0000 (00:20 +0200)]
Enable testing on more Python versions and PyPy

… except for the refcount test which doesn't work (and makes no sense)
under PyPy as it has a non-reference count model).

12 years agoRename tests → test and distribute test files too
Iustin Pop [Thu, 17 May 2012 02:49:37 +0000 (04:49 +0200)]
Rename tests → test and distribute test files too

The rename is done for consistency with other projects, and
distributing the tests is of course useful.

12 years agoFix manifest file after reorganisations
Iustin Pop [Thu, 17 May 2012 02:48:12 +0000 (04:48 +0200)]
Fix manifest file after reorganisations

Forgot this after the doc changes…

12 years agoUpdate NEWS and bump version number for 0.5.1 release pylibacl-v0.5.1
Iustin Pop [Sun, 13 May 2012 04:14:57 +0000 (06:14 +0200)]
Update NEWS and bump version number for 0.5.1 release

12 years agoExpand the range of Python versions for unittests
Iustin Pop [Sun, 13 May 2012 04:13:11 +0000 (06:13 +0200)]
Expand the range of Python versions for unittests

3.3 has some issues (refuses to recognise 'test-suite') on my machine,
not yet enabled.

12 years agoIntegrate old web site index file into README
Iustin Pop [Sun, 13 May 2012 04:12:34 +0000 (06:12 +0200)]
Integrate old web site index file into README

… and include the README into the main docs page.

12 years agoExtend the refcount leak tests
Iustin Pop [Sun, 13 May 2012 03:29:19 +0000 (05:29 +0200)]
Extend the refcount leak tests

This also exercises the str() more in general, to test/detect the py3k
str() compatibility issue more easily.

12 years agoFix html too-often rebuild
Iustin Pop [Sun, 13 May 2012 03:27:52 +0000 (05:27 +0200)]
Fix html too-often rebuild

12 years agoWorkaround another py3k compatibility issue
Iustin Pop [Sun, 13 May 2012 03:18:24 +0000 (05:18 +0200)]
Workaround another py3k compatibility issue

str() must return unicode in py3k, so we add another layer of macro
names…

12 years agoReplace deprecated names in test suite
Iustin Pop [Sun, 13 May 2012 03:17:45 +0000 (05:17 +0200)]
Replace deprecated names in test suite

12 years agoReorganise documentation
Iustin Pop [Sun, 13 May 2012 02:14:32 +0000 (04:14 +0200)]
Reorganise documentation

Lots of changes so that all docs are buildable by Sphinx.

12 years agoRework documentation style to RST/Sphinx custom
Iustin Pop [Sun, 13 May 2012 01:38:11 +0000 (03:38 +0200)]
Rework documentation style to RST/Sphinx custom

Hrmm, editing it in C source code is ugly… but the docs are pretty!

12 years agoCleanups for RST/sphinx correctness
Iustin Pop [Sun, 13 May 2012 00:14:56 +0000 (02:14 +0200)]
Cleanups for RST/sphinx correctness

This makes sphix build without errors.

12 years agoSwitch from epydoc to sphinx
Iustin Pop [Sat, 12 May 2012 23:26:34 +0000 (01:26 +0200)]
Switch from epydoc to sphinx

It seems sphinx's autodoc extension can investigate the docstrings
from extensions modules too, so let's just use that.

12 years agoUse Py_RETURN_(TRUE|FALSE) instead of explicit code
Iustin Pop [Sat, 12 May 2012 22:54:27 +0000 (00:54 +0200)]
Use Py_RETURN_(TRUE|FALSE) instead of explicit code

This makes it a bit more safe.

12 years agoRework a long if/else if statement
Iustin Pop [Sat, 12 May 2012 22:51:58 +0000 (00:51 +0200)]
Rework a long if/else if statement

The switch/case method seems much clearer (it shows that we case on a
single expression).

12 years agoFix more warning found by static checker
Iustin Pop [Sat, 12 May 2012 22:47:18 +0000 (00:47 +0200)]
Fix more warning found by static checker

These are not critical, but they can be clean up so let's do it.

12 years agoFix critical issues found by static analyser
Iustin Pop [Sat, 12 May 2012 22:40:10 +0000 (00:40 +0200)]
Fix critical issues found by static analyser

Fix issues found per https://bugzilla.redhat.com/800126, thanks Dave
Malcolm! Upon inspection, indeed all were cases of bad refcounting or
other significant issues.

12 years agoAdd test for refcount leak
Iustin Pop [Sat, 12 May 2012 11:30:32 +0000 (13:30 +0200)]
Add test for refcount leak

Not very solid, but it detects a wrong reference count.

12 years agoRename the README file
Iustin Pop [Fri, 11 May 2012 23:05:43 +0000 (01:05 +0200)]
Rename the README file

Since it's anyway mark-down compatible.

14 years agoUpdate NEWS file and release 0.5.0 v0.5.0
Iustin Pop [Sun, 27 Dec 2009 18:23:30 +0000 (19:23 +0100)]
Update NEWS file and release 0.5.0

14 years agoFix a warning with Python 2.6
Iustin Pop [Sun, 27 Dec 2009 17:18:05 +0000 (18:18 +0100)]
Fix a warning with Python 2.6

… which already defined Py_TYPE.

14 years agoUpdate copyright years
Iustin Pop [Sun, 27 Dec 2009 16:58:48 +0000 (17:58 +0100)]
Update copyright years

14 years agoAccept both unicode and string objects
Iustin Pop [Sun, 27 Dec 2009 16:48:04 +0000 (17:48 +0100)]
Accept both unicode and string objects

This converts PyArg functions from "s" to "et" and also adds check for
PyUnicode object in methods that accept generic objects (previously only
PyBytes checks were done).

14 years agoUnittest fixes for python 3
Iustin Pop [Sun, 27 Dec 2009 16:10:08 +0000 (17:10 +0100)]
Unittest fixes for python 3

14 years agoMore python 3 changes
Iustin Pop [Sun, 27 Dec 2009 16:06:47 +0000 (17:06 +0100)]
More python 3 changes

This gets the module to compile without warnings, but the unittest suite
still needs modifications.

14 years agoImport the PyInt_* defines from 3.0's intobject.h
Iustin Pop [Sun, 27 Dec 2009 15:16:05 +0000 (16:16 +0100)]
Import the PyInt_* defines from 3.0's intobject.h

This is a stopgap measure to get the code to work under python 3.x.

14 years agoChange PyString usage to work with py3k
Iustin Pop [Sun, 27 Dec 2009 15:07:37 +0000 (16:07 +0100)]
Change PyString usage to work with py3k

This is one of the many steps needed to enable python 3 support: the
string/unicode changes.

14 years agoFix unittest suite compatibility with python2.6
Iustin Pop [Sun, 27 Dec 2009 12:59:06 +0000 (13:59 +0100)]
Fix unittest suite compatibility with python2.6

It turns out imports by filename were never supposed to work, and
python2.6 just errors out explicitly.

16 years agoMinor change in homepage url
Iustin Pop [Mon, 30 Jun 2008 19:54:18 +0000 (21:54 +0200)]
Minor change in homepage url

16 years agoAdded copyright notice in the README
Iustin Pop [Mon, 30 Jun 2008 19:54:06 +0000 (21:54 +0200)]
Added copyright notice in the README

16 years agoIncrease version to 0.4.0 r0.4.0
Iustin Pop [Sat, 28 Jun 2008 14:39:21 +0000 (16:39 +0200)]
Increase version to 0.4.0

16 years agoInclude the makefile in the generated archive
Iustin Pop [Sat, 28 Jun 2008 14:48:21 +0000 (16:48 +0200)]
Include the makefile in the generated archive

This will help with building the epydoc-generated documentation.

Also remove obsolete 'log' target from the makefile.

16 years agoSmall whitespace change
Iustin Pop [Sat, 28 Jun 2008 14:27:51 +0000 (16:27 +0200)]
Small whitespace change

16 years agoAdd license text to source files
Iustin Pop [Sat, 28 Jun 2008 14:25:37 +0000 (16:25 +0200)]
Add license text to source files

16 years agoUpdate documentation and license for version 0.4
Iustin Pop [Sat, 28 Jun 2008 13:59:03 +0000 (15:59 +0200)]
Update documentation and license for version 0.4

Note that this patch changes the license from GPL to LGPL (2.1 or
later).

16 years agoDocstring updates for epydoc compatibility
Iustin Pop [Sat, 28 Jun 2008 13:41:57 +0000 (15:41 +0200)]
Docstring updates for epydoc compatibility

By just changing a few docstrings, epydoc can generate much better
documentation - the docstrings were half-compatible already with the
epytext format.

Also the makefile and manifest were updated not to include and build the
default pydoc documentation.

16 years agoFix MANIFEST.in after os_linux.c removal
Iustin Pop [Sat, 28 Jun 2008 09:07:24 +0000 (11:07 +0200)]
Fix MANIFEST.in after os_linux.c removal

16 years agoImple the acl_equiv_mode function
Iustin Pop [Sat, 28 Jun 2008 06:19:37 +0000 (08:19 +0200)]
Imple the acl_equiv_mode function

This is another Linux-specific function, but very easy to implement.

16 years agoImplement the acl_extended_* functions
Iustin Pop [Fri, 27 Jun 2008 22:55:02 +0000 (00:55 +0200)]
Implement the acl_extended_* functions

This patch adds support for the Linux-specific acl_extended_fd and
acl_extended_file function, both exposed at module level through the
has_extended function name.

16 years agounittests: generalize the skip decorators
Iustin Pop [Fri, 27 Jun 2008 22:50:48 +0000 (00:50 +0200)]
unittests: generalize the skip decorators

Since there could be many extensions, it's better to generalize to a
single, parametrized decorator than to repeat the same code in multiple
ones.

16 years agounittests: abstract basic acl text into a constant
Iustin Pop [Fri, 27 Jun 2008 22:44:18 +0000 (00:44 +0200)]
unittests: abstract basic acl text into a constant

This patch just moved the basic acl text from being hardcoded in
multiple functions to a constant that can be easily modified, and
changes slightly the ACL.

16 years agoTry to enhance the FreeBSD support
Iustin Pop [Fri, 27 Jun 2008 22:08:00 +0000 (00:08 +0200)]
Try to enhance the FreeBSD support

FreeBSD 7.0 supports more functions, so we split some Linux-only
functions out from the HAVE_LEVEL2 defs and into a HAVE_ACL_COPY_EXT so
FreeBSD can define HAVE_LEVEL2 too.