diff --git a/lang/tauthon/Makefile b/lang/tauthon/Makefile index 7fc1266de42f..c8a9eccacfa1 100644 --- a/lang/tauthon/Makefile +++ b/lang/tauthon/Makefile @@ -1,191 +1,190 @@ # This Makefile was copied from lang/python27 and then gradually # adapted/cleaned-up for Tauthon. # As for lang/python27, some core modules with extraneous dependencies are # disabled, and should be made available in other ports if the need arises (see # 'pkg-message'). # -- Olivier Certner PORTNAME= tauthon DISTVERSIONPREFIX= v -DISTVERSION= 2.8.5 -PORTREVISION= 1 +DISTVERSION= 2.8.5-20240706 CATEGORIES= lang python MAINTAINER= olce.freebsd.ports@certner.fr COMMENT= Backwards-compatible fork of CPython 2.7 with Python 3.x features WWW= https://github.com/naftaliharris/tauthon LICENSE= PSFL DEPRECATED= Uses Python 2.7 codebase USES= pathfix shebangfix autoreconf ncurses pkgconfig readline ssl \ tar:xz compiler PATHFIX_MAKEFILEIN= Makefile.pre.in USE_GITHUB= yes GH_ACCOUNT= naftaliharris -GH_PROJECT= tauthon +GH_TAGNAME= b787044f7c9a3728604471119e6d6220d09d6d94 USE_LDCONFIG= yes GNU_CONFIGURE= yes GNU_CONFIGURE_MANPREFIX=${PREFIX}/share # Piggyback on Python support in shebangfix python_CMD= ${PREFIX}/bin/${NAME_VERSION} # Better be safe than sorry .for _DIRS in Demo/cgi Demo/comparisons Demo/curses Demo/parser Demo/pdist \ Demo/pysvr Demo/scripts Demo/sockets Demo/tkinter/guido Demo/turtle \ Demo/zlib Doc/includes Doc/tools Lib Lib/encodings Lib/ensurepip \ Lib/idlelib Lib/lib2to3/pgen2 Lib/lib2to3/tests \ Lib/lib2to3/tests/data Lib/plat-mac Lib/test Lib/test/crashers \ Mac/BuildScript Mac/scripts Mac/Tools Modules/_ctypes/libffi \ Parser PCbuild Python Tools/compiler Tools/faqwiz Tools/freeze \ Tools/gdb Tools/i18n Tools/nuget Tools/pybench Tools/scripts \ Tools/ssl Tools/unicode Tools/webchecker SHEBANG_FILES+= ${_DIRS}/*.py .endfor CONFIGURE_ARGS+= --enable-shared CONFIGURE_ENV+= ac_cv_opt_olimit_ok=no OPT="" # Null out OPT to respect user CFLAGS and remove optimizations INSTALL_TARGET= altinstall # Don't want cloberring of unprefixed files TEST_TARGET= buildbottest TEST_ARGS= TESTOPTS=-j${MAKE_JOBS_NUMBER} MAKE_ARGS+= INSTALL_SHARED="${INSTALL_LIB}" # Strip shared library PLIST_SUB= ABI=${ABIFLAGS} \ DISTVERSION=${DISTVERSION} \ TAUTHON_VERSION=${TAUTHON_VERSION} \ VERSION_LONG=${VERSION_LONG} \ VERSION_NOMICRO=${VERSION_NOMICRO} \ OSMAJOR=${OSVERSION:C/([0-9]*)[0-9]{5}/\1/} # For plat-freebsd* in pkg-plist. https://bugs.python.org/issue19554 OPTIONS_DEFINE= DEBUG IPV6 LIBFFI LTO NLS OPTIMIZATIONS PYMALLOC THREADS OPTIONS_DEFAULT= LIBFFI PYMALLOC THREADS UCS4 OPTIONS_SINGLE= UNICODE OPTIONS_SINGLE_UNICODE= UCS2 UCS4 OPTIONS_SUB= yes LIBFFI_DESC= Use libffi from ports instead of bundled version LTO_DESC= Apply Link-Time Optimizations (implies OPTIMIZATIONS) NLS_DESC= Enable gettext support for the locale module OPTIMIZATIONS_DESC= Enable code optimizations (notably PGO) UCS2_DESC= Enable UCS2 Unicode Strings UCS4_DESC= Enable UCS4 Unicode Strings PYMALLOC_DESC= Enable specialized mallocs DEBUG_CONFIGURE_WITH= pydebug IPV6_CONFIGURE_ENABLE= ipv6 LIBFFI_CONFIGURE_WITH= system-ffi LIBFFI_LIB_DEPENDS= libffi.so:devel/libffi LTO_IMPLIES= OPTIMIZATIONS LTO_CONFIGURE_WITH= lto # Use CPPFLAGS over CFLAGS due to -I ordering, causing elementtree and pyexpat # to break in Python 2.7, or preprocessor complaints in Python >= 3.3 # Upstream Issue: https://bugs.python.org/issue6299 NLS_USES= gettext NLS_CPPFLAGS= -I${LOCALBASE}/include NLS_LIBS= -L${LOCALBASE}/lib -lintl NLS_CONFIGURE_ENV_OFF= ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no OPTIMIZATIONS_CONFIGURE_ENABLE= optimizations PYMALLOC_CONFIGURE_WITH=pymalloc THREADS_CONFIGURE_WITH= threads THREADS_LDFLAGS= -lpthread UCS2_CONFIGURE_ENABLE= unicode=ucs2 UCS4_CONFIGURE_ENABLE= unicode=ucs4 TAUTHON_VERSION= ${DISTVERSION:C/-.*\$//} VERSION_LONG= ${TAUTHON_VERSION}.final.0 VERSION_NOMICRO= ${TAUTHON_VERSION:R} NAME_VERSION= tauthon${VERSION_NOMICRO} DISABLED_MODULES= _bsddb _sqlite3 _tkinter gdbm .include .if !empty(PORT_OPTIONS:MLTO) && ${CC:T} == "cc" # Tauthon's configure and Makefile recognize which compiler we are using based # on the executable name. . if ${CC:T} == ${CC} CC:=${COMPILER_TYPE} . else CC:=${CC:H}/${COMPILER_TYPE} . endif .endif # https://bugs.python.org/issue22521 # https://bugs.python.org/issue23042 .if !${PORT_OPTIONS:MLIBFFI} && ${ARCH} == i386 BROKEN= You must use libffi from ports on i386. Enable the LIBFFI option .endif .if ${ARCH} == i386 PLIST_SUB+= X86_ONLY="" .else PLIST_SUB+= X86_ONLY="@comment " .endif .if ${ARCH:M*64*} PLIST_SUB+= 32BIT_ONLY="@comment " .else PLIST_SUB+= 32BIT_ONLY="" .endif # See https://bugs.freebsd.org/115940 and https://bugs.freebsd.org/193650 .if !exists(/usr/bin/ypcat) || defined(WITHOUT_NIS) PLIST_SUB+= NO_NIS="@comment " DISABLED_MODULES+= nis .else PLIST_SUB+= NO_NIS="" .endif post-patch: @${REINPLACE_CMD} -e 's|/usr/local/bin/python|${python_CMD}|' \ ${WRKSRC}/Lib/cgi.py @${REINPLACE_CMD} -e \ 's/%%DISABLED_MODULES%%/${DISABLED_MODULES:C/^(.*)$/"\1", /g}/g' \ ${WRKSRC}/setup.py post-install: # Create symlink for tauthon executable ${RLN} ${STAGEDIR}${PREFIX}/bin/${NAME_VERSION} \ ${STAGEDIR}${PREFIX}/bin/tauthon # Strip shared extensions for i in ${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/lib-dynload/*.so; do \ ${STRIP_CMD} $$i; done # This code block exists for the qemu-user enabled cross build environment. # When using this environment in poudriere, CC is not set to the default # of /usr/bin/cc and a cross-compile toolchain is used. We need to hand # edit this so that the run time configuration for python matches what the # FreeBSD base system provides. sbruno 02Aug2017 .if ${CC} == /nxb-bin/usr/bin/cc @${REINPLACE_CMD} -e 's=/nxb-bin==' \ ${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/_sysconfigdata.py @cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ ./tauthon -E -m compileall -d ${PREFIX}/lib/${NAME_VERSION} \ ${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/_sysconfigdata.py @cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ ./tauthon -E -O -m compileall -d ${PREFIX}/lib/${NAME_VERSION} \ ${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/_sysconfigdata.py @${REINPLACE_CMD} -e 's=/nxb-bin==' \ ${STAGEDIR}${PREFIX}/lib/${NAME_VERSION}/config/Makefile .endif ${INSTALL_DATA} ${WRKSRC}/Tools/gdb/libpython.py \ ${STAGEDIR}${PREFIX}/lib/lib${NAME_VERSION}.so.1-gdb.py .include .if !empty(PORT_OPTIONS:MLTO) && ${COMPILER_TYPE} == gcc # These have to be appended after bsd.port.mk appends to them, because we are # basically overriding what it did on seeing USE_BINUTILS (pulled by USE_GCC). CONFIGURE_ENV+= AR=${CC:S/^gcc/gcc-ar/} RANLIB=${CC:S/^gcc/gcc-ranlib/} MAKE_ENV+= AR=${CC:S/^gcc/gcc-ar/} RANLIB=${CC:S/^gcc/gcc-ranlib/} .endif diff --git a/lang/tauthon/distinfo b/lang/tauthon/distinfo index 48fdcf4dfa96..24c7526cefe3 100644 --- a/lang/tauthon/distinfo +++ b/lang/tauthon/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1685108476 -SHA256 (naftaliharris-tauthon-v2.8.5_GH0.tar.gz) = 0d0f2ffd3a912768c138ee7b66e8163df3674f407c92152d09304c3240557dbf -SIZE (naftaliharris-tauthon-v2.8.5_GH0.tar.gz) = 18465302 +TIMESTAMP = 1736502076 +SHA256 (naftaliharris-tauthon-v2.8.5-20240706-b787044f7c9a3728604471119e6d6220d09d6d94_GH0.tar.gz) = e3ae96666d452db5e5ed0d30c514a3e001293b90cb49920ff75cab72416b5dae +SIZE (naftaliharris-tauthon-v2.8.5-20240706-b787044f7c9a3728604471119e6d6220d09d6d94_GH0.tar.gz) = 18481726 diff --git a/lang/tauthon/files/patch-Include_patchlevel.h b/lang/tauthon/files/patch-Include_patchlevel.h new file mode 100644 index 000000000000..bea1139cd0f5 --- /dev/null +++ b/lang/tauthon/files/patch-Include_patchlevel.h @@ -0,0 +1,11 @@ +--- Include/patchlevel.h.orig 2024-07-06 14:55:44 UTC ++++ Include/patchlevel.h +@@ -26,7 +26,7 @@ + #define PY_RELEASE_SERIAL 0 + + /* Version as a string */ +-#define PY_VERSION "2.8.5+" ++#define PY_VERSION "2.8.5" + /*--end constants--*/ + + /* Subversion Revision number of this file (not of the repository). Empty diff --git a/lang/tauthon/files/patch-setup.py b/lang/tauthon/files/patch-setup.py index 7dfa52909d59..351357173ad9 100644 --- a/lang/tauthon/files/patch-setup.py +++ b/lang/tauthon/files/patch-setup.py @@ -1,133 +1,86 @@ ---- setup.py.orig 2021-06-02 16:51:18.000000000 +0200 -+++ setup.py 2023-06-09 19:32:17.812240000 +0200 +--- setup.py.orig 2024-07-06 14:55:44 UTC ++++ setup.py @@ -15,6 +15,7 @@ from distutils.command.build_ext import build_ext from distutils.command.install import install from distutils.command.install_lib import install_lib +from distutils.command.build_scripts import build_scripts from distutils.spawn import find_executable cross_compiling = "_PYTHON_HOST_PLATFORM" in os.environ @@ -33,7 +34,7 @@ COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS")) # This global variable is used to hold the list of modules to be disabled. -disabled_module_list = [] +disabled_module_list = [%%DISABLED_MODULES%%] - def add_dir_to_list(dirlist, dir): - """Add the directory 'dir' to the list 'dirlist' (at the front) if -@@ -886,7 +887,10 @@ - missing.append('_ssl') + exit_status = 0 - # find out which version of OpenSSL we have -+ openssl_major = -1 - openssl_ver = 0 -+ openssl_major_re = re.compile( -+ '^\s*#\s*define\s+OPENSSL_VERSION_MAJOR\s+([0-9]+)' ) - openssl_ver_re = re.compile( - '^\s*#\s*define\s+OPENSSL_VERSION_NUMBER\s+(0x[0-9a-fA-F]+)' ) - -@@ -900,17 +904,22 @@ - try: - incfile = open(name, 'r') - for line in incfile: -+ m = openssl_major_re.match(line) -+ if m: -+ openssl_major = int(m.group(1)) - m = openssl_ver_re.match(line) - if m: -- openssl_ver = eval(m.group(1)) -+ openssl_ver = int(m.group(1), 0) - except IOError, msg: - print "IOError while reading opensshv.h:", msg - pass - -+ min_openssl_major = 1 - min_openssl_ver = 0x00907000 - have_any_openssl = ssl_incs is not None and ssl_libs is not None - have_usable_openssl = (have_any_openssl and -- openssl_ver >= min_openssl_ver) -+ (openssl_ver >= min_openssl_ver or -+ openssl_major >= min_openssl_major)) - - if have_any_openssl: - if have_usable_openssl: -@@ -935,7 +944,9 @@ - depends = ['md5.h']) ) - - min_sha2_openssl_ver = 0x00908000 -- if COMPILED_WITH_PYDEBUG or openssl_ver < min_sha2_openssl_ver: -+ if COMPILED_WITH_PYDEBUG or \ -+ (openssl_ver < min_sha2_openssl_ver and -+ openssl_major < min_openssl_major): - # OpenSSL doesn't do these until 0.9.8 so we'll bring our own hash - exts.append( Extension('_sha256', ['sha256module.c']) ) - exts.append( Extension('_sha512', ['sha512module.c']) ) -@@ -1284,7 +1295,7 @@ +@@ -1308,7 +1309,7 @@ sysroot = macosx_sdk_root() f = os.path.join(sysroot, f[1:]) - if os.path.exists(f) and not db_incs: + if os.path.exists(f): data = open(f).read() m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data) if m is not None: -@@ -1669,9 +1680,10 @@ +@@ -1693,9 +1694,10 @@ else: missing.append('linuxaudiodev') - if (host_platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6', - 'freebsd7', 'freebsd8') - or host_platform.startswith("gnukfreebsd")): +# Initial backport of https://hg.python.org/cpython/rev/50f1922bc1d5 + + if any(sys.platform.startswith(prefix) + for prefix in ("linux", "freebsd", "gnukfreebsd")): exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) ) else: missing.append('ossaudiodev') -@@ -2294,6 +2306,22 @@ +@@ -2294,6 +2296,22 @@ def is_chmod_supported(self): return hasattr(os, 'chmod') +class PyBuildScripts(build_scripts): + def copy_scripts(self): + outfiles = build_scripts.copy_scripts(self) + fullversion = '{0[0]}.{0[1]}'.format(sys.version_info) + newoutfiles = [] + for filename in outfiles: + if filename.endswith('2to3'): + newfilename = filename + '-' + fullversion + else: + newfilename = filename + fullversion + log.info('renaming {} to {}'.format(filename, newfilename)) + os.rename(filename, newfilename) + newoutfiles.append(newfilename) + return newoutfiles + + SUMMARY = """ Python is an interpreted, interactive, object-oriented programming language. It is often compared to Tcl, Perl, Scheme or Java. -@@ -2343,7 +2371,9 @@ +@@ -2343,7 +2361,9 @@ platforms = ["Many"], # Build info - cmdclass = {'build_ext':PyBuildExt, 'install':PyBuildInstall, + cmdclass = {'build_ext':PyBuildExt, + 'build_scripts':PyBuildScripts, + 'install':PyBuildInstall, 'install_lib':PyBuildInstallLib}, # The struct module is defined here, because build_ext won't be # called unless there's at least one extension module defined. -@@ -2351,8 +2381,7 @@ +@@ -2351,8 +2371,7 @@ # Scripts to install scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle', - 'Tools/scripts/2to3', - 'Lib/smtpd.py'] + 'Tools/scripts/2to3'] ) + sys.exit(exit_status) - # --install-platlib