[cygport - the Cygwin packaging tool] branch master, updated. 0.37.1

Jon Turney via Cygwin-apps-cvs <[email protected]> Sun, 6 Jul 2025 15:48:05 +0000 (GMT)
Newsgroups gmane.os.cygwin.cvs.apps
Message-ID <[email protected]>



Diff:
---
 NEWS                           |  5 +++++
 bin/cygport.in                 |  2 +-
 cygclass/bzr.cygclass          |  4 ++--
 cygclass/cvs.cygclass          |  4 ++--
 cygclass/fossil.cygclass       |  4 ++--
 cygclass/git.cygclass          |  4 ++--
 cygclass/hg.cygclass           |  2 +-
 cygclass/mtn.cygclass          |  4 ++--
 cygclass/ocaml-dune.cygclass   | 14 +++++++++++++-
 cygclass/python-wheel.cygclass | 10 +---------
 cygclass/python.org.cygclass   | 16 ++++++++++++++++
 cygclass/svn.cygclass          |  4 ++--
 cygport.spec                   |  4 ++--
 data/sample.cygport            |  2 +-
 lib/pkg_pkg.cygpart            | 33 ++++++++++++++++++++++++---------
 lib/src_fetch.cygpart          | 13 +++++++++++++
 meson.build                    |  2 +-
 17 files changed, 90 insertions(+), 37 deletions(-)

diff --git a/NEWS b/NEWS
index de15a906..9ce6ab68 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+0.37.1:
+	* python.org: Form PyPI URLs using PEP 625 project name normalization
+	* ocaml-dune: Allow customized arguments to dune install
+	* The archive compressor is configurable for all VCS cygclasses
+	* python-wheel: Always use 'pip wheel'
 0.37.0:
 	* Include arch tag in output archive/hint filenames
 	* Define CMAKE_SYSTEM_PROCESSOR when cross-compiling with cmake
diff --git a/bin/cygport.in b/bin/cygport.in
index 368c5994..86df5906 100755
--- a/bin/cygport.in
+++ b/bin/cygport.in
@@ -249,7 +249,7 @@ unset _myprog;
 
 if check_prog pbzip2
 then
-	readonly _tar_bz2_flag="-I pbzip2 -"
+	readonly _tar_bz2_flag="-I pbzip2"
 else
 	# bzip2 is required, no need to check
 	readonly _tar_bz2_flag="-j"
diff --git a/cygclass/bzr.cygclass b/cygclass/bzr.cygclass
index fcaf8b6c..61a66ddd 100644
--- a/cygclass/bzr.cygclass
+++ b/cygclass/bzr.cygclass
@@ -44,7 +44,7 @@
 # is this truly needed?
 BZR_MODULE=${BZR_MODULE:-${ORIG_PN:-${PN}}}
 
-bzr_tarball="${BZR_MODULE}-bzr-${PV}.tar.bz2"
+bzr_tarball="${BZR_MODULE}-bzr-${PV}.tar.${VCS_COMPRESSION_EXT}"
 
 SRC_URI="${bzr_tarball} "
 SRC_DIR="${BZR_MODULE}"
@@ -87,7 +87,7 @@ bzr_fetch() {
 	cd ${T}
 	verbose bzr branch ${BZR_URI} ${BZR_MODULE} ${bzr_rev}
 
-	tar ${_tar_bz2_flag}cf ${top}/${bzr_tarball} --exclude-vcs ${BZR_MODULE}
+	tar $(__tar_compress_opt ${VCS_COMPRESSION_EXT}) -cf ${top}/${bzr_tarball} --exclude-vcs ${BZR_MODULE}
 }
 
 readonly -f bzr_fetch
diff --git a/cygclass/cvs.cygclass b/cygclass/cvs.cygclass
index 729d4f1e..17194848 100644
--- a/cygclass/cvs.cygclass
+++ b/cygclass/cvs.cygclass
@@ -44,7 +44,7 @@
 
 CVS_MODULE=${CVS_MODULE:-${ORIG_PN:-${PN}}}
 
-cvs_tarball="${CVS_MODULE//\//-}-${PV}.tar.bz2"
+cvs_tarball="${CVS_MODULE//\//-}-${PV}.tar.${VCS_COMPRESSION_EXT}"
 
 SRC_URI="${cvs_tarball} "
 SRC_DIR=${SRC_DIR:-${CVS_MODULE}}
@@ -101,7 +101,7 @@ cvs_fetch() {
 	cd ${T}
 	verbose cvs -d ${CVS_URI} checkout ${cvs_branch} ${cvs_date} ${CVS_MODULE}
 
-	tar ${_tar_bz2_flag}cf ${top}/${cvs_tarball} --exclude-vcs ${SRC_DIR}
+	tar $(__tar_compress_opt ${VCS_COMPRESSION_EXT}) -cf ${top}/${cvs_tarball} --exclude-vcs ${SRC_DIR}
 }
 
 readonly -f cvs_fetch
diff --git a/cygclass/fossil.cygclass b/cygclass/fossil.cygclass
index 294fc0cb..8dd96a13 100644
--- a/cygclass/fossil.cygclass
+++ b/cygclass/fossil.cygclass
@@ -42,7 +42,7 @@
 # is this truly necessary?
 FOSSIL_MODULE=${FOSSIL_MODULE:-${ORIG_PN:-${PN}}}
 
-fossil_tarball="${FOSSIL_MODULE}-${PV}_fossil.tar.bz2"
+fossil_tarball="${FOSSIL_MODULE}-${PV}_fossil.tar.${VCS_COMPRESSION_EXT}"
 
 SRC_URI="${fossil_tarball} "
 SRC_DIR="${FOSSIL_MODULE}"
@@ -89,7 +89,7 @@ fossil_fetch() {
 	popd
 
 	# manifest and manifest.uuid may be used in sources (e.g. fossil itself)
-	tar ${_tar_bz2_flag}cf ${top}/${fossil_tarball} --exclude=.fslckout --exclude=_FOSSIL_ ${FOSSIL_MODULE}
+	tar $(__tar_compress_opt ${VCS_COMPRESSION_EXT}) -cf ${top}/${fossil_tarball} --exclude=.fslckout --exclude=_FOSSIL_ ${FOSSIL_MODULE}
 }
 
 readonly -f fossil_fetch
diff --git a/cygclass/git.cygclass b/cygclass/git.cygclass
index 3cb2c0d5..fb0a87a7 100644
--- a/cygclass/git.cygclass
+++ b/cygclass/git.cygclass
@@ -60,7 +60,7 @@ then
 	GIT_MODULE=${GIT_MODULE%.git}
 fi
 
-git_tarball="${GIT_MODULE}-${PV}.tar.bz2"
+git_tarball="${GIT_MODULE}-${PV}.tar.${VCS_COMPRESSION_EXT}"
 
 SRC_URI="${git_tarball} "
 SRC_DIR="${GIT_MODULE}${GIT_SUBDIR+/}${GIT_SUBDIR}"
@@ -144,7 +144,7 @@ git_fetch() {
 	fi
 
 	cd ${T}/
-	tar ${_tar_bz2_flag}cf ${top}/${git_tarball} --exclude-vcs ${GIT_MODULE}/${GIT_SUBDIR}
+	tar $(__tar_compress_opt ${VCS_COMPRESSION_EXT}) -cf ${top}/${git_tarball} --exclude-vcs ${GIT_MODULE}/${GIT_SUBDIR}
 }
 
 readonly -f git_fetch
diff --git a/cygclass/hg.cygclass b/cygclass/hg.cygclass
index a7afff2d..aec290b1 100644
--- a/cygclass/hg.cygclass
+++ b/cygclass/hg.cygclass
@@ -80,7 +80,7 @@ hg_fetch() {
 
 	verbose hg clone ${hg_rev} ${HG_URI} ${HG_MODULE}
 
-	tar ${_tar_bz2_flag}cf ${top}/${hg_tarball} --exclude-vcs ${HG_MODULE}
+	tar ${_tar_bz2_flag} -cf ${top}/${hg_tarball} --exclude-vcs ${HG_MODULE}
 }
 
 readonly -f hg_fetch
diff --git a/cygclass/mtn.cygclass b/cygclass/mtn.cygclass
index ea448a68..15ff12d3 100644
--- a/cygclass/mtn.cygclass
+++ b/cygclass/mtn.cygclass
@@ -74,7 +74,7 @@ then
 	MTN_BRANCH+="${MTN_MODULE}"
 fi
 
-mtn_tarball="${MTN_MODULE}-mtn-${PV}.tar.bz2"
+mtn_tarball="${MTN_MODULE}-mtn-${PV}.tar.${VCS_COMPRESSION_EXT}"
 
 SRC_URI="${mtn_tarball} "
 SRC_DIR="${MTN_MODULE}"
@@ -107,7 +107,7 @@ mtn_fetch() {
 	[ -d ${MTN_MODULE} ] && rm -fr ${MTN_MODULE}/
 	verbose mtn -d ${MTN_MODULE}.mtn checkout -b ${MTN_BRANCH} ${mtn_rev} ${MTN_MODULE}
 
-	tar ${_tar_bz2_flag}cf ${top}/${mtn_tarball} --exclude=_MTN --exclude=.mtn-ignore ${MTN_MODULE}
+	tar $(__tar_compress_opt ${VCS_COMPRESSION_EXT}) -cf ${top}/${mtn_tarball} --exclude=_MTN --exclude=.mtn-ignore ${MTN_MODULE}
 }
 
 readonly -f mtn_fetch
diff --git a/cygclass/ocaml-dune.cygclass b/cygclass/ocaml-dune.cygclass
index 3ea2a373..d2941382 100644
--- a/cygclass/ocaml-dune.cygclass
+++ b/cygclass/ocaml-dune.cygclass
@@ -54,15 +54,27 @@ ocaml_dune_compile() {
 	dune build --display=verbose --profile=release ${OCAML_DUNE_BUILD_ARGS} ${@} || error "dune build failed"
 }
 
+#****v* ocaml-dune.cygclass/OCAML_DUNE_INSTALL_ARGS
+#  DESCRIPTION
+#  Arguments, usually install targets, to be passed to "dune install"
+#  by ocaml_dune_install.
+#****
+
 #****I* ocaml-dune.cygclass/ocaml_dune_install
 #  DESCRIPTION
 #  Runs "dune install" with a destdir of $D.
 #****
 ocaml_dune_install() {
 	DUNE_BUILD_DIR=${B} \
-	dune install --display=verbose --destdir ${D} || error "dune install failed"
+	dune install --display=verbose --destdir ${D} ${OCAML_DUNE_INSTALL_ARGS} ${@} || error "dune install failed"
 }
 
+#****v* ocaml-dune.cygclass/OCAML_DUNE_TEST_TARGETS
+#  DESCRIPTION
+#  Arguments, usually test targets, to be passed to "dune runtest"
+#  by ocaml_dune_test.
+#****
+
 #****T* ocaml-dune.cygclass/ocaml_dune_test
 #  DESCRIPTION
 #  Runs "dune runtest" with any given test directories.
diff --git a/cygclass/python-wheel.cygclass b/cygclass/python-wheel.cygclass
index 3f274b98..522f4795 100644
--- a/cygclass/python-wheel.cygclass
+++ b/cygclass/python-wheel.cygclass
@@ -170,15 +170,7 @@ python_wheel_compile() {
 		[ ! -d build/lib ] || find build/lib -delete
 		if [ ! -f dist/*-py2.py3*-none-any.whl -a ! -f dist/*py${ver:0:1}-none-any.whl ]
 		then
-			# for the moment, we retain the historical behaviour of
-			# building projects which have a setup.py using setuptools
-			if [ ! -e setup.py ]
-			then
-				pip${ver} wheel --no-deps -w dist . || error "pip${ver} wheel failed"
-			else
-				# setuptools.launch imports setuptools hooks regardles of setup.py
-				/usr/bin/python${ver} -msetuptools.launch setup.py bdist_wheel "${@}" || error "setup.py bdist_wheel failed"
-			fi
+			pip${ver} wheel --no-deps -w dist . || error "pip${ver} wheel failed"
 		fi
 	done
 }
diff --git a/cygclass/python.org.cygclass b/cygclass/python.org.cygclass
index 51434ba6..402e76e7 100644
--- a/cygclass/python.org.cygclass
+++ b/cygclass/python.org.cygclass
@@ -40,6 +40,21 @@
 
 PYTHON_ORG_NAME=${ORIG_PN:-${PN}}
 
+#****o* python.org.cygclass/PYPI_NO_NORMALIZE
+#  DESCRIPTION
+#  If set, disable normalization of the Python project name.
+#
+#  By default, the project name is normalized according to PEP 625 rules (which
+#  transforms all uppercase letters to lowercase, and replaces all contiguous
+#  runs of ._- characters with a single underscore).
+#****
+
+if [ ! -v PYPI_NO_NORMALIZE ]
+then
+	PYTHON_ORG_NAME=$(echo "${PYTHON_ORG_NAME}" | tr -s '._-' '_')
+	PYTHON_ORG_NAME=${PYTHON_ORG_NAME,,}
+fi
+
 #****o* python.org.cygclass/HOMEPAGE (python.org)
 #  DESCRIPTION
 #  Default homepage of the Python module on the Python Package Index.
@@ -50,4 +65,5 @@ HOMEPAGE="https://pypi.org/project/${PYTHON_ORG_NAME}"
 #  DESCRIPTION
 #  Download location of the Python module on the Python Package Index.
 #****
+
 SRC_URI="https://files.pythonhosted.org/packages/source/${PYTHON_ORG_NAME:0:1}/${PYTHON_ORG_NAME}/${PYTHON_ORG_NAME}-${PV}.tar.gz"
diff --git a/cygclass/svn.cygclass b/cygclass/svn.cygclass
index 47f242bf..56e122db 100644
--- a/cygclass/svn.cygclass
+++ b/cygclass/svn.cygclass
@@ -105,7 +105,7 @@ case ${SVN_URI} in
 esac
 
 SVN_MODULE=${SVN_MODULE:-${SVN_URI##*/}}
-svn_tarball="${SVN_MODULE}-${PV}.tar.bz2"
+svn_tarball="${SVN_MODULE}-${PV}.tar.${VCS_COMPRESSION_EXT}"
 
 SRC_URI="${svn_tarball} "
 SRC_DIR="${SVN_MODULE}"
@@ -128,7 +128,7 @@ svn_fetch() {
 	cd ${T}
 	verbose svn export ${svn_uri} ${svn_rev} ${SVN_MODULE}
 
-	tar ${_tar_bz2_flag}cf ${top}/${svn_tarball} --exclude-vcs ${SVN_MODULE}
+	tar $(__tar_compress_opt ${VCS_COMPRESSION_EXT}) -cf ${top}/${svn_tarball} --exclude-vcs ${SVN_MODULE}
 }
 
 readonly -f svn_fetch
diff --git a/cygport.spec b/cygport.spec
index bcdc1250..49597364 100644
--- a/cygport.spec
+++ b/cygport.spec
@@ -1,8 +1,8 @@
 %define debug_package %{nil}
 
 Name:           cygport
-Version:        0.37.0
-Release:        2%{?dist}
+Version:        0.37.1
+Release:        1%{?dist}
 Summary:        Cygwin package building tool
 
 License:        GPLv3+
diff --git a/data/sample.cygport b/data/sample.cygport
index 639c4b23..7cc03a1d 100644
--- a/data/sample.cygport
+++ b/data/sample.cygport
@@ -1,7 +1,7 @@
 inherit meson
 
 NAME="cygport"
-VERSION=0.37.0
+VERSION=0.37.1
 RELEASE=1
 CATEGORY="Devel"
 SUMMARY="Cygwin source packaging tool"
diff --git a/lib/pkg_pkg.cygpart b/lib/pkg_pkg.cygpart
index fb0805eb..ccf432a6 100644
--- a/lib/pkg_pkg.cygpart
+++ b/lib/pkg_pkg.cygpart
@@ -41,31 +41,46 @@
 TAR_COMPRESSION_EXT="${TAR_COMPRESSION_EXT:-xz}"
 #****
 
-__tar() {
-	local TAR_COMPRESSION_OPT TAR_SOURCE_DATE_OPTS;
+__tar_compress_opt() {
+	local _COMPRESSION_OPT _COMPRESSION_EXT;
+
+	if [ $# -eq 0 ]; then
+		# Assume .xz as default compression engine
+		_COMPRESSION_EXT="xz"
+	else
+		_COMPRESSION_EXT="$1"
+	fi
 
 	# We could use --auto-compress, but this also constrains the extension
 	# to the currently valid set. We could probe if tar supports the
 	# compression and/or use an external compressor.
-	case ${TAR_COMPRESSION_EXT} in
+	case ${_COMPRESSION_EXT} in
 		bz2)
-			TAR_COMPRESSION_OPT="-j"
+			_COMPRESSION_OPT="${_tar_bz2_flag}"
 			;;
 		gz)
-			TAR_COMPRESSION_OPT="-z"
+			_COMPRESSION_OPT="-z"
 			warning "gzip compression for packages is considered obsolete"
 			;;
 		xz)
-			TAR_COMPRESSION_OPT="-J"
+			_COMPRESSION_OPT="-J"
 			;;
 		zst)
-			TAR_COMPRESSION_OPT="--zstd"
+			_COMPRESSION_OPT="--zstd"
 			;;
 		*)
-			error "tar option for TAR_COMPRESSION_EXT='${TAR_COMPRESSION_EXT}' unknown"
+			error "tar compressor '${_COMPRESSION_EXT}' is unknown"
 			;;
 	esac
 
+	echo -n ${_COMPRESSION_OPT}
+}
+
+__tar() {
+	local TAR_COMPRESSION_OPT TAR_SOURCE_DATE_OPTS;
+
+	TAR_COMPRESSION_OPT=$(__tar_compress_opt ${TAR_COMPRESSION_EXT})
+
 	if [ -n "${SOURCE_DATE_EPOCH}" ]
 	then
 		# Ensure reproducible sort order and last modification times <= SOURCE_DATE_EPOCH
@@ -1079,4 +1094,4 @@ __pkg_repro_finish() {
 # protect functions
 readonly -f __pkg_binpkg __pkg_diff __gpg_sign __pkg_srcpkg __pkg_dist \
 	 __pkg_repro_build __pkg_repro_diff __pkg_repro_finish \
-	 __squeeze_whitespace __tar
+	 __squeeze_whitespace __tar __tar_compress_opt
diff --git a/lib/src_fetch.cygpart b/lib/src_fetch.cygpart
index 20661ab7..5d784b38 100644
--- a/lib/src_fetch.cygpart
+++ b/lib/src_fetch.cygpart
@@ -205,4 +205,17 @@ __src_fetch() {
 	done
 }
 
+#****v* Downloading//VCS_COMPRESSION_EXT
+#  SYNOPSIS
+#  VCS_COMPRESSION_EXT="bz2"
+#  DESCRIPTION
+#  The compression to be used for source tarballs created from a VCS.
+#  Defaults to 'bz2'.
+#  DEFINITION
+VCS_COMPRESSION_EXT="${VCS_COMPRESSION_EXT:-bz2}"
+#  SEE ALSO
+#  bzr.cygclass, cvs.cygclass, fossil.cygclass, git.cygclass, hg.cygclass,
+#  mtn.cygclass, svn.cygclass, Mirrors.
+#****
+
 readonly -f fetch __mirror_fetch __src_fetch
diff --git a/meson.build b/meson.build
index 37a7af71..1adfa397 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project('cygport',
-        version: '0.37.0')
+        version: '0.37.1')
 
 bindir = join_paths(get_option('prefix'), get_option('bindir'))
 datadir = join_paths(get_option('prefix'), get_option('datadir'))