Add two new ports: bbfreeze and bbfreeze-loader (helper script).

bbfreeze creates standalone executables from Python scripts.  It's similar
in purpose to the well known py2exe for Windows, py2app for OS X, PyInstaller
and cx_Freeze (in fact ancient versions were based on cx_Freeze.
And it uses the modulegraph package, which is also used by py2app).

It has the following features:

  - ZIP/Egg file import tracking
  - Binary dependency tracking (e.g. shared libraries)
  - Multiple script freezing support
  - Python interpreter included (named 'py')
  - Automatic pathname rewriting (pathnames in tracebacks are relative)
  - New distutils command: bdist_bbfreeze

WWW: https://pypi.python.org/pypi/bbfreeze/
This commit is contained in:
Alexey Dokuchaev 2014-11-28 10:35:30 +00:00
parent 02c627a3ca
commit f02f4db8d0
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=373541
8 changed files with 113 additions and 0 deletions

View File

@ -117,6 +117,8 @@
SUBDIR += avro-cpp
SUBDIR += awscli
SUBDIR += bam
SUBDIR += bbfreeze
SUBDIR += bbfreeze-loader
SUBDIR += bcc
SUBDIR += bcpp
SUBDIR += beautifyphp

View File

@ -0,0 +1,18 @@
# Created by: Alexey Dokuchaev <danfe@FreeBSD.org>
# $FreeBSD$
PORTNAME= bbfreeze-loader
PORTVERSION= 1.1.0
CATEGORIES= devel python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
MAINTAINER= python@FreeBSD.org
COMMENT= Binary loader module required for bbfreeze
LICENSE= ZLIB
USES= python:2 zip
USE_PYTHON= autoplist distutils
.include <bsd.port.mk>

View File

@ -0,0 +1,2 @@
SHA256 (bbfreeze-loader-1.1.0.zip) = 0dbe47ba2335a9c222b01a3c81746406a17d42a2e219785582f164c62441adb7
SIZE (bbfreeze-loader-1.1.0.zip) = 13728

View File

@ -0,0 +1,4 @@
bbfreeze-loader provides binary dependencies for bbfreeze, utility to create
standalone executables from Python scripts.
WWW: https://pypi.python.org/pypi/bbfreeze-loader/

33
devel/bbfreeze/Makefile Normal file
View File

@ -0,0 +1,33 @@
# Created by: Alexey Dokuchaev <danfe@FreeBSD.org>
# $FreeBSD$
PORTNAME= bbfreeze
PORTVERSION= 1.1.3
CATEGORIES= devel python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
MAINTAINER= python@FreeBSD.org
COMMENT= Module to create standalone executables from Python scripts
LICENSE= ZLIB
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}altgraph>=0.9:${PORTSDIR}/math/py-altgraph \
${PYTHON_PKGNAMEPREFIX}bbfreeze-loader>=1.1.0:${PORTSDIR}/devel/bbfreeze-loader
USES= python:2 zip
USE_PYTHON= autoplist distutils
DOCSDIR= ${PREFIX}/share/doc/${PYTHON_PKGNAMEPREFIX}${PORTNAME}
PORTDOCS= *
post-patch:
@${REINPLACE_CMD} -e '/altgraph/s,==,>=,' ${WRKSRC}/${PYSETUP}
@${REINPLACE_CMD} -e '/from altgraph.compat import/d' \
${WRKSRC}/bbfreeze/modulegraph/modulegraph.py
post-install:
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/README.rst ${STAGEDIR}${DOCSDIR}
.include <bsd.port.mk>

2
devel/bbfreeze/distinfo Normal file
View File

@ -0,0 +1,2 @@
SHA256 (bbfreeze-1.1.3.zip) = 5936f30d41cddba4814b5e3c9d068ae179215cbc47e255173ae5efcfa73cd1bf
SIZE (bbfreeze-1.1.3.zip) = 65010

View File

@ -0,0 +1,37 @@
--- bbfreeze/freezer.py.orig 2013-11-08 07:20:06 UTC
+++ bbfreeze/freezer.py
@@ -1,4 +1,4 @@
-import os
+import os, stat
import sys
import re
import time
@@ -791,16 +791,24 @@ if __name__ == '__main__':
os.environ['S'] = p
os.system('strip $S')
+ def copy_noschg(self, src, dst):
+ """ copy access/modification times and user flags only to
+ allow operation under regular user e.g. on FreeBSD,
+ where /lib/libc.so.* by default has stat.SF_IMMUTABLE
+ flag set (which is super-user only)"""
+ shutil.copyfile(src, dst)
+ sb = os.stat(src)
+ os.utime(dst, (sb.st_atime, sb.st_mtime))
+ os.chflags(dst, sb.st_flags & 0x0000ffff) # UF_SETTABLE
+
def _handle_Executable(self, m):
dst = os.path.join(self.distdir, os.path.basename(m.filename))
- shutil.copy2(m.filename, dst)
- os.chmod(dst, 0755)
+ self.copy_noschg(m.filename, dst)
self.adaptBinary(dst)
def _handle_SharedLibrary(self, m):
dst = os.path.join(self.distdir, os.path.basename(m.filename))
- shutil.copy2(m.filename, dst)
- os.chmod(dst, 0755)
+ self.copy_noschg(m.filename, dst)
self.adaptBinary(dst)
def showxref(self):

15
devel/bbfreeze/pkg-descr Normal file
View File

@ -0,0 +1,15 @@
bbfreeze creates standalone executables from Python scripts. It's similar
in purpose to the well known py2exe for Windows, py2app for OS X, PyInstaller
and cx_Freeze (in fact ancient versions were based on cx_Freeze.
And it uses the modulegraph package, which is also used by py2app).
It has the following features:
- ZIP/Egg file import tracking
- Binary dependency tracking (e.g. shared libraries)
- Multiple script freezing support
- Python interpreter included (named 'py')
- Automatic pathname rewriting (pathnames in tracebacks are relative)
- New distutils command: bdist_bbfreeze
WWW: https://pypi.python.org/pypi/bbfreeze/