public inbox for cygwin-apps@cygwin.com
 help / color / mirror / Atom feed
From: Yaakov Selkowitz <yselkowitz@cygwin.com>
To: cygwin-apps@cygwin.com
Subject: Re: cygport patches for consideration
Date: Mon, 06 Apr 2020 20:52:02 -0400	[thread overview]
Message-ID: <e2016d868a992869b08791c199fcb6b34386348b.camel@cygwin.com> (raw)
In-Reply-To: <87k12tbw5u.fsf@Rainer.invalid>

[-- Attachment #1: Type: text/plain, Size: 5544 bytes --]

On Sun, 2020-04-05 at 20:54 +0200, Achim Gratz wrote:
> I've prepared a branch on top of current master for your perusal:
> 
> https://repo.or.cz/cygport/rpm-style.git/shortlog/refs/heads/to-upstream
> 
> As you can see they've been battle-tested by me for quite some time already:
> 
> commit 779a7dd2fc834d45fb0f46cded647557ece17d8f (to-upstream)
> Date:   Sat Apr 20 20:02:33 2013 +0200
> 
>     switch submodule gnuconfig to HTTPS protocol
>     
>     Live more easily with stupid firewalls...

Pushed to master.

> commit fd17952c457b808e360e5ed75ffae8d9571283ad
> Date:   Sun Dec 6 13:32:38 2015 +0100
> 
>     lib/pkg_pkg.cygpart: uniquify requirements after the version has been stripped off
>     
>     * lib/pkg_pkg.cygpart: Move the "sort -fu" command to after the
>       stripping of the version part.  Otherwise some dependencies might
>       get listed twice (perl_base does this sometimes).

Please no CVS style commit messages, I haven't done that in cygport for
over a decade.  Code itself looks okay though.

> commit 40296640fdd0951d72ae0c107f2a46bbf8111ca3
> Date:   Wed Oct 3 08:56:42 2012 +0200
> 
>     support subdirectories in CPAN download URL
>     
>     * cygclass/perl.cygclass: Allow CPAN_AUTHOR to have an /... suffix.
>       This is necessary for some modules that put the distribution files
>       in some subdirectory.  Only upcase the actual author name (up until
>       the first "/") and preserve case for the suffix part.  By request of
>       Reini Urban, also add a variable CPAN_DIR that alternately, if set,
>       will be used to concatenate as ${CPAN_AUTHOR}/${CPAN_DIR} before
>       determining the CPAN download URL.  Neither variable should have a
>       slash ("/") at the beginning or the end.

There is no need for two variables to do the same thing.  I like
Reini's idea but let's call it CPAN_SUBDIR instead.  What about the
attached patch 0001?

> commit 22b3f22b92c472df80be0fdcfd3854bfd19e16f8
> Date:   Sun May 18 17:52:10 2014 +0200
> 
>     pkg_info.cygport: correct search order for Perl dependencies
>     
>     * lib/pkg_info.cygpart: Correct search order for Perl dependencies and
>       suppress auto-generation of Perl dependencies when NO_PERL_DEPS is
>       defined.
>     
>     Dependency generation for Perl at least is too simplistic and doesn't
>     take into account that some modules required or used might actually be
>     optional.  It tends to generate too long dependency lists that vary
>     with the Perl distributions already installed.
>     
>     For starters, the search order should be the reverse of
>     @INC to skip dependencies that are built-in to perl already, but that
>     doesn't pick up those modules that are needed with a higher version
>     since only the presence of the module is detected.  Files in site_perl
>     shoud never be searched since these are local installs.  Files in
>     vendor_perl might be useful to check, however due to the version
>     problem it is better to inject the module dpenedencies from the
>     cygport file.  So skip those searches when NO_PERL_DEPS is defined,
>     which it will be for auto-generated cygport files for Perl
>     distributions (the information is pulled from CPAN/MetaCPAN).

Let's improve the auto-detection instead.  What about the attached
patch 0002?

> commit 2e61b06df6bd5a742f92c25b50d335945e17a34b
> Date:   Sat Aug 18 12:43:23 2018 +0200
> 
>     bin/cygport.in: provide all-test / almostall-test commands on CLI for symmetry with package-test / pkg-test

Nak.  almostall is a deprecated alias of all, there is no need for
symmetry here.

> commit 34e6e1f2dcdf45ac4a3f9e70cae1a8290d860cd9
> Date:   Fri Nov 3 21:47:54 2017 +0100
> 
>     Automatically create a test release if the release string starts with a literal "0"
>     
>     * lib/pkg_pkg.cygpart: Test for a literal "0" as the first character
>       in the release string and make a test release if true.

Nak.  There is not necessarily any correlation between a -0.* release
and whether it should be test or not.

> commit 7f6fb93eaa9e4afe9e12bd57ebb3e8a4daa135ff
> Date:   Sat Apr 8 17:00:34 2017 +0200
> 
>     Show pkg_tag in chatter
>     
>     lib/pkg_pkg.cygpart: inform when creating hint files for a test
>     release

Pushed a slightly different approach to master.  Not sure what the
second part of that patch is supposed to be, however, as there is no
$pkg_testrelease variable in cygport.

> commit 01e199380e32f214c2809d3dcc76f51b61de6d01
> Date:   Sat Sep 17 10:07:10 2016 +0200
> 
>     lib/src_install.cygpart: correct test in make_etc_defaults, possibly show diff
>     
>     * lib/src_install.cygpart (make_etc_defaults): The preremove script
>       only removes plain files when they match the default, so the
>       postinstall script must not install files if _anything_ with the
>       same name already exists.  Change the test from '-f' to '-e'.  If
>       /usr/bin/diff is installed and the target is a plain file, show the
>       diff to the default so the user can decide more easily what to do.

The first part is ok once the commit is reworded.  But when would a
user see the output of a postinstall script?  What would make more
sense is to have a utility akin to "rpmconf -a" on RPM-based systems
which allows the user to compare existing files with their
/etc/defaults and choose if and how to merge the differences.

--
Yaakov


[-- Attachment #2: 0001-perl-cpan-subdir.patch --]
[-- Type: text/x-patch, Size: 1260 bytes --]

diff --git a/cygclass/perl.cygclass b/cygclass/perl.cygclass
index 54cd97b..c226432 100644
--- a/cygclass/perl.cygclass
+++ b/cygclass/perl.cygclass
@@ -139,6 +139,11 @@ esac
 #  before inherit()ing perl.cygclass to have any effect.  If set, the package
 #  HOMEPAGE and SRC_URI are set to their usual locations on CPAN.
 #****
+#****v* perl.cygclass/CPAN_SUBDIR
+#  DESCRIPTION
+#  An optional directory component in the CPAN URL.  Some packages have an
+#  additional subdirectory component, which can be specified with this variable.
+#****
 #****v* perl.cygclass/CPAN_VERSION
 #  DESCRIPTION
 #  The published version of the Perl module on CPAN.  It is sometimes
@@ -190,7 +195,7 @@ HOMEPAGE="https://metacpan.org/release/${ORIG_PN}"
 #****
 cpan_author_ftp=${CPAN_AUTHOR^^}
 cpan_author_ver=${CPAN_VERSION:-${VERSION}}
-SRC_URI="mirror://cpan/authors/id/${cpan_author_ftp:0:1}/${cpan_author_ftp:0:2}/${cpan_author_ftp}/${ORIG_PN}-${cpan_author_ver}.${CPAN_TARBALL_SUFFIX:-tar.gz}"
+SRC_URI="mirror://cpan/authors/id/${cpan_author_ftp:0:1}/${cpan_author_ftp:0:2}/${cpan_author_ftp}${CPAN_SUBDIR+/}${CPAN_SUBDIR}/${ORIG_PN}-${cpan_author_ver}.${CPAN_TARBALL_SUFFIX:-tar.gz}"
 SRC_DIR="${ORIG_PN}-${cpan_author_ver}"
 unset cpan_author_ftp cpan_author_ver
 

[-- Attachment #3: 0002-cygport-perl-dep.patch --]
[-- Type: text/x-patch, Size: 1008 bytes --]

diff --git a/lib/pkg_info.cygpart b/lib/pkg_info.cygpart
index 4d6f598..6901571 100644
--- a/lib/pkg_info.cygpart
+++ b/lib/pkg_info.cygpart
@@ -383,14 +383,14 @@ __list_deps() {
 
 	if check_prog perl
 	then
-		pldirs=($(perl -e 'print join(" ",@INC)'))
+		pldirs=($(perl -e 'print join(" ",reverse grep !/site_perl/,@INC)'))
 		pldirs+=" ${DEPS_PATH//:/ }"
 		for pldep in $(find "${@//^_^/ }" -path 'usr/share/doc/*' -prune \
 				${deps_prune} \
 				-o -path 'usr/share/help/*' -prune \
 				-o \( -name '*.pl' -o -name '*.pm' \) -print \
 				-o -type f ! -name '*.*' -executable -exec sed -sne '1{/^#!.*perl.*/F}' '{}' + \
-				| xargs -r sed -ne "s/^[^#]*use \(base\|parent\) ['\"]*\(qw( *\)*\([A-Z][^-)'\";]*\).*/\3/gp;s/^[^#]*\(use\|require\) ['\"]*\([A-Z][^ '\";]*\).*/\2/gp" \
+				| xargs -r sed -ne "s/^use \(base\|parent\) ['\"]*\(qw( *\)*\([A-Z][^-)'\";]*\).*/\3/gp;s/^\(use\|require\) ['\"]*\([A-Z][^ '\";]*\).*/\2/gp" \
 				| sort -u)
 		do
 			for d in ${pldirs[*]/\//${D}/} ${pldirs[*]}

  parent reply	other threads:[~2020-04-07  0:52 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-05 18:54 Achim Gratz
2020-04-06 14:46 ` Brian Inglis
2020-04-07  0:52 ` Yaakov Selkowitz [this message]
2020-04-07 16:52   ` Achim Gratz
2020-04-07 17:14     ` Jon Turney
2020-04-07 17:37     ` Yaakov Selkowitz
2020-04-07 18:11       ` Achim Gratz
2020-05-10  8:58   ` Achim Gratz
2020-05-10 20:46     ` Yaakov Selkowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e2016d868a992869b08791c199fcb6b34386348b.camel@cygwin.com \
    --to=yselkowitz@cygwin.com \
    --cc=cygwin-apps@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).