This folder contains the necessary files to build the Python bindings for
libcpupower (aside from the libcpupower object files).


requirements
------------

* You need the object files in the libcpupower directory compiled by
cpupower's makefile.
* The SWIG program must be installed.
* The Python's development libraries installed.

Please check that your version of SWIG is compatible with the version of Python
installed on your machine by checking the SWIG changelog on their website.
https://swig.org/

Note that while SWIG itself is GPL v3+ licensed; the resulting output,
the bindings code: is permissively licensed + the license of libcpupower's .o
files. For these bindings that means GPL v2.

Please see https://swig.org/legal.html and the discussion [1] for more details.

[1]
https://lore.kernel.org/linux-pm/Zqv9BOjxLAgyNP5B@hatbackup/


build
-----

Install SWIG and the Python development files provided by your distribution.

Build the object files for libcpupower by running make in the cpupower
directory.

Return to the directory this README is in to run:

$ make


testing
-------

Please verify the _raw_pylibcpupower.so and raw_pylibcpupower.py files have
been created.

To run the test script:

$ python test_raw_pylibcpupower.py


credits
-------

Original Bindings Author:
John B. Wyatt IV
jwyatt@redhat.com
sageofredondo@gmail.com

Copyright (C) 2024 Red Hat
