add support for python installer
The best I could come up with for allowing compile_seccomp_policy
to be an executable script installed via setup.py.
Originally I cooked up a trick where setup.py also had:
data_files=[('minijail', ['constants.json'])],
and compile_seccomp_policy.py used:
constants_file = 'constants.json'
if pkg_resources.resource_exists(__name__, constants_file):
constants_file = pkg_resources.resource_filename(__name__, constants_file)
so that a package can ship with a constants.json and auotmatically use
it. This works when installed as a 'dist-package' egg, but CrOS installs
as a 'site-package' where this trick don't work (constants.json ends up in
another location under /usr, not to mention being stored with a board) and it
complicates the dependency story for the Makefile so I punted.
For both 'dist-package' and 'site-package' the plain "import XXX" form doesn't work
for files located in the same directory (results in a ModuleNotFoundError error),
so I've added a "from minijail import XXX" fallback so new & original cases both
work okay.
Bug: None
Test: `make tests`. Ran 'python3 setup.py install --record files.txt'
and verified the stubs in /usr/local/bin could be used to launch the 3
scripts without import errors.
Change-Id: I61fe0b624960c89fd715c1c60213edc2b736ad1c
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..ab02ddf
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2020 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""A file that specifies how to install minijail's python-based tool(s)."""
+
+import os
+from setuptools import setup
+
+
+this_directory = os.path.abspath(os.path.dirname(__file__))
+with open(os.path.join(this_directory, 'README.md'), encoding='utf-8') as f:
+ long_description = f.read()
+
+setup(name='minijail',
+ version='0.12',
+ description='A set of tools for Minijail',
+ classifiers=[
+ 'Programming Language :: Python :: 3',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Operating System :: Linux',
+ ],
+ python_requires='>=3.6',
+ license='Apache License 2.0',
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ author='Minijail Developers',
+ author_email='minijail-dev@google.com',
+ url='https://google.github.io/minijail/',
+ packages=['minijail'],
+ package_dir={'minijail': 'tools'},
+ entry_points={
+ 'console_scripts': [
+ 'compile_seccomp_policy = minijail.compile_seccomp_policy:main',
+ 'generate_seccomp_policy = minijail.generate_seccomp_policy:main',
+ 'generate_constants_json = minijail.generate_constants_json:main',
+ ],
+ },
+)