In Python 2.x an unprefixed string literal produces a byte string.
In Python 3.x an unprefixed string literal produces a textual string.
To produce a byte string in both a b prefix is needed, e.g. b'foo'.
Since I believe Hammer works predominantly with byte strings I have used
b prefixes throughout.
This allows the library to be built and tested with a non-default
version of CPython, e.g.
scons bindings=python python=python3.6
scons bindings=python python=python3.6 testpython
In Python 3.x
- int and long types are unified. The unified type is called int.
- the text string type (unicode) is renamed to str.
- the byte string type (str) is renamed to bytes.
- chr returns a text string (i.e. str)
- xrange is renamed to range.
- dict.has_key() is removed
-
We disable:
- the tests (which require glib) although they can be
reactivated with the `--tests` command line flag
- shared library (lack of export symbol declarations
means that although it can be built, no symbol is
exported and therefore it can't be used)
The `install` target installs the library and headers
under the `build` folder, because it's a traditional practice
to move libraries to a central location on Windows, unless
you are using cygwin. In which case pass `prefix` to the
command line.
We adapt tools\windows\build_examples.bat to take the library
that is built using scons or using tools\windows\build.bat
We will need to use the environment's CC variable to make decisions
that apply to windows compiling and linking. Therefore we move some
existing sections below the set up of env["CC"] and env["CXX"]
We port registry by importing the (public domain) openbsd implementation
of the tfind/tsearch POSIX binary tree search functions.
These are only necessary when building on non-posix platforms
MSVC was complaining that the `tail` variable was potentially
uninitialized in the while branch. Since the while loop is actually
coupled to the if (head != NULL) that initializes the tail variable,
we move them together, which makes the warning disappear.