mirror of
https://github.com/Nuitka/Nuitka.git
synced 2026-02-01 11:33:19 +01:00
* Also enhanced reporting error exit reporting through the scons logger to provide the exception in the compilation report. * More error exits in scons should do this.
153 lines
4.2 KiB
Python
Executable File
153 lines
4.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
|
|
|
|
"""This test runner compiles all Python files as a module.
|
|
|
|
This is a test to achieve some coverage, it will only find assertions of
|
|
within Nuitka or warnings from the C compiler. Code will not be run
|
|
normally.
|
|
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
# Find nuitka package relative to us.
|
|
sys.path.insert(
|
|
0,
|
|
os.path.normpath(
|
|
os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..")
|
|
),
|
|
)
|
|
|
|
# isort:start
|
|
|
|
import subprocess
|
|
|
|
from nuitka.tools.testing.Common import (
|
|
checkCompilesNotWithCPython,
|
|
compileLibraryTest,
|
|
createSearchMode,
|
|
getPythonArch,
|
|
getPythonVendor,
|
|
getTempDir,
|
|
my_print,
|
|
setup,
|
|
)
|
|
from nuitka.utils.Importing import getExtensionModuleSuffix
|
|
|
|
python_version = setup(suite="python_modules", needs_io_encoding=True)
|
|
python_vendor = getPythonVendor()
|
|
python_arch = getPythonArch()
|
|
|
|
search_mode = createSearchMode()
|
|
|
|
tmp_dir = getTempDir()
|
|
|
|
# spell-checker: ignore idnadata,tweedie
|
|
|
|
ignore_filenames_list = (
|
|
"__phello__.foo.py", # Triggers error for "." in module name
|
|
"idnadata", # Avoid too complex code for main program.
|
|
"joined_strings.py",
|
|
# Incredible amount of memory in C compiler for test code
|
|
"test_spin.py",
|
|
# Uses outside modules up the chain
|
|
"cheshire_tomography.py",
|
|
)
|
|
|
|
late_syntax_errors = (
|
|
# No syntax error with Python2 compileall, but run time only:
|
|
"_identifier.py",
|
|
"bench.py",
|
|
"_tweedie_compound_poisson.py",
|
|
"session.py",
|
|
)
|
|
|
|
|
|
def decide(_root, filename):
|
|
return (
|
|
filename.endswith(".py")
|
|
and filename not in ignore_filenames_list
|
|
and "(" not in filename
|
|
and filename.count(".") == 1
|
|
)
|
|
|
|
|
|
def action(stage_dir, _root, path):
|
|
command = [
|
|
sys.executable,
|
|
os.path.join("..", "..", "bin", "nuitka"),
|
|
"--mode=module",
|
|
"--output-dir=%s" % stage_dir,
|
|
"--remove-output",
|
|
"--quiet",
|
|
"--nofollow-imports",
|
|
"--no-progressbar",
|
|
]
|
|
|
|
command += os.environ.get("NUITKA_EXTRA_OPTIONS", "").split()
|
|
|
|
suffix = getExtensionModuleSuffix(preferred=True)
|
|
|
|
if os.path.basename(path) == "__init__.py":
|
|
source_filename = os.path.dirname(path)
|
|
target_filename = os.path.basename(source_filename) + suffix
|
|
else:
|
|
source_filename = path
|
|
target_filename = os.path.basename(source_filename)[:-3] + suffix
|
|
|
|
target_filename = target_filename.replace("(", "").replace(")", "")
|
|
|
|
command.append(source_filename)
|
|
|
|
try:
|
|
subprocess.check_call(command)
|
|
except subprocess.CalledProcessError:
|
|
basename = os.path.basename(path)
|
|
|
|
if basename in late_syntax_errors:
|
|
my_print("Syntax error is known unreliable with file %s." % basename)
|
|
else:
|
|
my_print("Falling back to full comparison due to error exit.")
|
|
|
|
checkCompilesNotWithCPython(
|
|
dirname=None, filename=path, search_mode=search_mode
|
|
)
|
|
else:
|
|
my_print("OK")
|
|
|
|
os.unlink(os.path.join(stage_dir, target_filename))
|
|
|
|
|
|
compileLibraryTest(
|
|
search_mode=search_mode,
|
|
stage_dir=os.path.join(
|
|
tmp_dir,
|
|
"compile_library_%s-%s-%s"
|
|
% (".".join(str(d) for d in python_version), python_arch, python_vendor),
|
|
),
|
|
decide=decide,
|
|
action=action,
|
|
)
|
|
|
|
search_mode.finish()
|
|
|
|
# Python test originally created or extracted from other peoples work. The
|
|
# parts from me are licensed as below. It is at least Free Software where
|
|
# it's copied from other people. In these cases, that will normally be
|
|
# indicated.
|
|
#
|
|
# 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.
|