37 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # Note that the path could itself be a python file, or a directory
 | |
| 
 | |
| # Note that the py_byte_compile macro should work for all Python versions
 | |
| # Which unfortunately makes the definition more complicated than it should be
 | |
| 
 | |
| # Usage:
 | |
| #    %py_byte_compile <interpereter> <path>
 | |
| # Example:
 | |
| #    %py_byte_compile %{__python3} %{buildroot}%{_datadir}/spam/plugins/
 | |
| 
 | |
| # This will terminate build on SyntaxErrors, if you want to avoid that,
 | |
| # use it in a subshell like this:
 | |
| #    (%{py_byte_compile <interpereter> <path>}) || :
 | |
| 
 | |
| %py_byte_compile()\
 | |
| py2_byte_compile () {\
 | |
|     python_binary="%1"\
 | |
|     bytecode_compilation_path="%2"\
 | |
|     failure=0\
 | |
|     find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -s -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("'"$RPM_BUILD_ROOT"'")[2], doraise=True) for f in sys.argv[1:]]' || failure=1\
 | |
|     find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -s -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("'"$RPM_BUILD_ROOT"'")[2], doraise=True) for f in sys.argv[1:]]' || failure=1\
 | |
|     test $failure -eq 0\
 | |
| }\
 | |
| \
 | |
| py3_byte_compile () {\
 | |
|     python_binary="%1"\
 | |
|     bytecode_compilation_path="%2"\
 | |
|     PYTHONPATH="%{_rpmconfigdir}/redhat" $python_binary -s -B -m compileall2 -o 0 -o 1 -s $RPM_BUILD_ROOT -p / $bytecode_compilation_path \
 | |
| }\
 | |
| \
 | |
| # Path to intepreter should not contain any arguments \
 | |
| [[ "%1" =~ " -" ]] && echo "ERROR py_byte_compile: Path to interpreter should not contain any arguments" >&2 && exit 1 \
 | |
| # Get version without a dot (36 instead of 3.6), bash doesn't compare floats well \
 | |
| python_version=$(%1 -c "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))") \
 | |
| # compileall2 Python module is not compatible with Python < 3.4 \
 | |
| if [ "$python_version" -ge 34 ]; then py3_byte_compile "%1" "%2"; else py2_byte_compile "%1" "%2"; fi
 |