Re: [PATCH cygport] bin/cygport.in: Allow `-fdebug-prefix-map` to be selected instead of `-ffile-prefix-map`

2024-05-27 Thread Jon Turney via Cygwin-apps

On 25/05/2024 08:25, Daisuke Fujimura via Cygwin-apps wrote:

Having seen this commit (
https://cygwin.com/git/?p=cygwin-apps/cygport.git;a=commit;h=9e82685e32f6717675e9f6bf55dd1336e3fc3831
),
I understand that this is problematic from a reproducibility point of
view, but I would like to be able to specify a `-fdebug-prefix-map`
because C sources with code like `#include __FILE__` cannot be
compiled.

https://github.com/cygwin/scallywag/actions/runs/9002845391/job/24732313857#step:6:1302

```
/cygdrive/d/a/scallywag/ruby/ruby-3.3.1-1.x86_64/src/ruby-3.3.1/debug_counter.h:359:10:
fatal error: /usr/src/debug/ruby-3.3.1-1/debug_counter.h: No such file
or directory
359 | #include __FILE__
| ^~~~
compilation terminated.
```

The patch is as follows.


Thanks very much for the patch.

Yeah, I tripped over this when I was testing your previous patch.

This seems like a generic problem which everyone is going to have with 
ruby, though.  And from a brief look at the debug_counter.h header, it 
does seem like a case of excessive cleverness - on first glance, it 
looks like this could just be written using a separate header, rather 
than recursively including itself with some define set...


(and I guess it's actually a gcc bug, or at least misfeature, that you 
can make '#include __FILE__' do something other than it's plain meaning)


Nevertheless, I guess this is needed.


Shell variable names in the patch should be changed to appropriate ones.


Yeah, not sure what a good name for this is. Something like 
'DEBUGINFO_ONLY_DEBUG_PREFIX_MAP', maybe?


It needs to be mentioned in the documentation somewhere, as well.



Re: calm: SPDX licence list data update please

2024-05-27 Thread Jon Turney via Cygwin-apps

On 24/05/2024 17:08, Brian Inglis via Cygwin-apps wrote:

Hi folks,

Can we please get the SPDX licence list data updated in calm to 3.24 
sometime if possible as the licences complained about below have been in 


I thought I wrote about this the last time you asked, but obviously not.

This is not quite straightforward, as the system python on sourceware is 
currently python3.6, and the last supported nexB/license-expression on 
that is 30.0.0, and moving to a later one has some wrinkles, since 
various pieces of interconnected stuff aren't venv'd (yet?).



releases for nearly a year since 3.21:


[...]


If not, perhaps I could be of some help if I knew requirements?


So, there aren't any requirements here except "validate the SPDX license 
expression to detect maintainer mistakes and typos".


It looks like using that python module might have been a mistake.

I'm not sure why it needs to contain it's own version of the license 
data, ideally we'd have something that read the official SPDX data 
(ratelimited to once per day or something. It looks like maybe this 
would possible to do by feeding our own license list into the module 
rather than using it's built in one, but one could hope for this to be 
built in already...)


It would also be useful if it could also be taught to accept 
'LicenseRef-.*' identifiers.


So, suggestions on a different module to use, or patches to make this 
work better, or cogent arguments why we should just remove this 
validation are all welcome.



You can also now remove the exceptions in calm/fixes.py(licmap):


Thanks, will do so.



Re: Package import request from CTM

2024-05-27 Thread Jon Turney via Cygwin-apps

On 27/05/2024 20:39, Michal Feix via Cygwin-apps wrote:
Dear all, as suggested on https://cygwin.com/packaging/repos.html let me 
kindly ask for an import of a 'nasm' package history from CTM into GIT 
repository.


Sure, no problem.

History is now imported at: https://cygwin.com/cgit/cygwin-packages/nasm/

I've given it a brief look over and it seems reasonable, but please 
check that it's OK before you start using it.




Re: SSH key update

2024-05-27 Thread Jon Turney via Cygwin-apps

On 27/05/2024 20:20, Michal Feix via Cygwin-apps wrote:

 BEGIN SSH2 PUBLIC KEY 
Comment: "3072-bit RSA, converted by feixm@michal-pc from OpenSSH"
B3NzaC1yc2EDAQABAAABgQDjQ9jbOytPr/sPDwIbjtFeJqBuDymxzuicJ8NpIN
Osoxkagb0WOLPsSjTgDbftDTCw1QOvCrVP09KvLY76MK8zNIt/97N7w/OmB0iWv9v1LEuT
sFAqDlC4jRVMC4pabidTqDZy0nVC54POIwYd4N65k7fxwGGU77OaZeKpKRRYeTekVSSOoc
jmesIhl+StI8kkPPIZMNpNfsm7DisPoqwZdxxrpCir8xmOMOwU9Wt7CYS+hDqDXSky067O
jn0JVty4utXNv/JzVABmiiEpjnFQSwja0vgrbigOrrycJJuGwv4RiYTK63BHfoKgeX1Wqc
pxNsvCw7RYumGGXjhSGBicDTM9X81hxEJpzzKNkWsAbjed1HRZ8DgQmTzQPT/mUUB+hD/r
7NYoxzEDvDV0hYpuk89j+7XnqaAltEIkXy0sYGsWpp8AJGDkSlHJDGxzlQAqmgDXyijJpS
xgEUxl4nkj8ArBJaFW2mGZxdCDUqMJbYRh1mAfExc+EK2CrkgmlFk=
 END SSH2 PUBLIC KEY 



Name: Michal Feix
Updating ssh key for Michal Feix
Fingerprint: 3072 SHA256:Ie/gfi0gbgbawKADzR/9W2sroK40405A5UGhogoLB5o no comment 
(RSA)

Done. Thanks.



Re: [ITA] bash-completion/-devel

2024-05-21 Thread Jon Turney via Cygwin-apps

On 03/05/2024 14:40, Jon Turney via Cygwin-apps wrote:

On 29/04/2024 22:13, Brian Inglis via Cygwin-apps wrote:
I would like to co-maintain or adopt and revive the above package, 
which was adopted by Eric but not updated since Yaakov.


Thanks.

I added this to your packages.

I guess I need to ask eblake if he wants to orphan his packages, since 
he seems to be no longer active...

Excluding co-maintained packages, the list is:


$ grep 'Eric Blake' cygwin-pkg-maint | grep -v '/'
bashdb   Eric Blake
cppi Eric Blake
cvspsORPHANED (Eric Blake)
cvsutils Eric Blake
gperfEric Blake
libsigsegv   Eric Blake
sharutilsEric Blake




Re: calm: vaulting ancient unifont

2024-05-21 Thread Jon Turney via Cygwin-apps

On 06/05/2024 17:46, Brian Inglis via Cygwin-apps wrote:

On 2024-05-06 09:27, Jon Turney via Cygwin-apps wrote:

[...]
Anyhow, double checking that the "right thing" happened here, I notice 
that 'unifont' obsoletes 'unifont-debuginfo', which seems a bit weird, 
especially since it contains the expected .dbg files etc.


Brian,

Are you sure that's right?


It appears not!
My reasoning was that as unifont-viewer was split out from 
unifont-fonts, unifont-viewer-debuginfo would be generated, but it 
appears that is not how that works.
Is there any way to make that work, or should I just drop it in the next 
release, or a new -RELEASE?


There's only a single debuginfo package generated for each source 
package.  It's unclear to me that finer granularity would be very useful.


unifont-viewer seems to be just a script, anyhow, so wouldn't have any 
useful debug information.
 I don't think this is of any great importance, so fixing it in the 
next release seems fine.


Re: libtool can't build shared library unless -no-undefined specified

2024-05-21 Thread Jon Turney via Cygwin-apps

On 17/05/2024 05:50, Brian Inglis via Cygwin-apps wrote:

On 2024-05-16 15:45, Ken Brown via Cygwin-apps wrote:

On 5/16/2024 4:24 PM, Brian Inglis via Cygwin-apps wrote:

Hi folks,

Trying to update dateutils, autotools build fails with:

libtool: error: can't build x86_64-pc-cygwin shared library unless 
-no-undefined is specified


Suggestions for overrides or fixes?

Tried:

LDFLAGS="$LDFLAGS -Wl,--no-allow-shlib-undefined -Wl,--no-undefined"

CYGCONF_ARGS="
  --enable-contrib
  --enable-tzmap-fetch
  lt_no_undefined_flag=--no-undefined
  no_undefined_flag=--no-undefined


You and I discussed this a few years ago in connection with curl.  The 
solution there, and in most similar cases, is to add -no-undefined to 
the appropriate lib*_la_LDFLAGS variable(s) in Makefile.am.  See


Yeah, building stuff for Cygwin often requires adding this flag in the 
appropriate places, to say "yes, I really do want a shared library".


https://www.gnu.org/software/libtool/manual/html_node/Link-mode.html#Link-mode


-no-undefined

Declare that output-file does not depend on any libraries other than
the ones listed on the command line, i.e., after linking, it will not
have unresolved symbols. Some platforms require all symbols in shared
libraries to be resolved at library creation (see Inter-library
dependencies), and using this parameter allows libtool to assume that
this will not happen.


Note that because this flag doesn't do anything for non-PE targets, it's 
(a) always safe to upstream, and (b) doesn't actually prevent 
development from unwittingly introducing unresolved symbols.



This should probably be mentioned in the FAQ item on PE linkage 
peculiarities.




Re: [ITA] dateutils

2024-05-21 Thread Jon Turney via Cygwin-apps

On 17/05/2024 06:43, Brian Inglis via Cygwin-apps wrote:

Date manipulation utilities

[...]

I would like to adopt the above orphaned package.



Thanks.

I added this to your packages.


https://cygwin.com/cgit/cygwin-packages/dateutils/tree/dateutils.cygport?h=playground


Please cleanup all the commented out detritus.

What is the reasoning for changing SRC_URI to point to github?  The 
project homepage still points to bitbucket.org for downloads.


"*** Warning: DEPEND is deprecated, use BUILD_REQUIRES instead."


Scallywag runs:



https://cygwin.com/cgi-bin2/jobs.cgi?srcpkg=dateutils



The single test failure is not reproducible standalone, and appears to
be a Windows, Cygwin, or shell environment space limitation, due to
running 888 tests on a single command line?


Can you share the reasoning that lets your reach that conclusion from:


FAIL: tzmap_check_02.ctst


The build directory should be available as an artifact which may contain 
more detailed information on the failure.


Have you established that this failure is not a regression?



Re: calm: ncurses untest/vault previous version

2024-05-13 Thread Jon Turney via Cygwin-apps

On 13/05/2024 17:06, Brian Inglis via Cygwin-apps wrote:

On 2024-05-13 09:32, Jon Turney via Cygwin-apps wrote:

On 13/05/2024 06:25, Brian Inglis via Cygwin-apps wrote:

Hi folks,

Looks like after untest ncurses-6.5+20240427-1 calm decided the
previous version in the recommended format 6.4+20240330-1 was older
than prev:

6.4-20231230


So, this would be a bug, if that's actually what happened, because
6.4+20240330 is definitely greater than 6.4 (under the "if all 
comparison chunks are equal, the string with any suffix remaining is 
the greater" clause of the comparison rule).


What actually seems to have happened is that 6.4+20240330 was still
marked as 'test', and so removed by the "packages labelled test: are
expired when a superseding non-test version exists" logic.


Thanks Jon,

Missed that focusing on the versions not the labels in setup.ini.


(Yeah, calm should probably be a bit more verbose about the reasons why
it's vaulting things in the report)

I can vault the old versions but could someone please unvault 
6.4+20240330-1?


Sure, I'll do that.

Do you want me to remove the test label from 6.4+20240330, or turn on
keep-superseded-test for this package?


Sorry, I should have noticed and untest-ed that immediately before 6.5!
Please remove test label to unvault as "prev" not test.
I've been running with it since released as test, until 6.5, and it is 
the final 6.4 we made available, in case anyone has issues with 6.5.


OK. Done.

6.4-20231230 was vaulted to stay under the count of kept versions.



Re: calm: ncurses untest/vault previous version

2024-05-13 Thread Jon Turney via Cygwin-apps

On 13/05/2024 06:25, Brian Inglis via Cygwin-apps wrote:

Hi folks,

Looks like after untest ncurses-6.5+20240427-1 calm decided the
previous version in the recommended format 6.4+20240330-1 was older
than prev:

6.4-20231230


So, this would be a bug, if that's actually what happened, because
6.4+20240330 is definitely greater than 6.4 (under the "if all 
comparison chunks are equal, the string with any suffix remaining is the 
greater" clause of the comparison rule).


What actually seems to have happened is that 6.4+20240330 was still
marked as 'test', and so removed by the "packages labelled test: are
expired when a superseding non-test version exists" logic.

(Yeah, calm should probably be a bit more verbose about the reasons why
it's vaulting things in the report)

I can vault the old versions but could someone please unvault 
6.4+20240330-1?


Sure, I'll do that.

Do you want me to remove the test label from 6.4+20240330, or turn on
keep-superseded-test for this package?


Re: [PATCH] cygport/lib/src_prep.cygpart: use checksum files with packages

2024-05-06 Thread Jon Turney via Cygwin-apps

On 01/05/2024 17:48, Brian Inglis via Cygwin-apps wrote:

On 2024-04-30 23:32, ASSI via Cygwin-apps wrote:

Brian Inglis via Cygwin-apps writes:
Some package upstreams offer only checksums, for example .sha512sum, 
.sha256sum,
for verification rather than gpg signatures, for example .asc, .sig, 
.sign, etc;
use these checksum files when provided in a similar manner to gpg 
signatures;
these files are often provided with fixed names which may be renamed 
on download
to unique values using cygport URI fragment support like 
#/$NAME-VERSION.sha...sum;
use coreutils cksum as it supports all modern and legacy checksums 
and formats.



https://repo.or.cz/cygport/rpm-style.git/commitdiff/c956092ce8d90230b812fb05ad2b4da13df1e36d


Two similar independent implementations mean it would be a good idea to 
add the feature!


Mine preferred cksum as being the most general approach, while not 
worrying or knowing too much about ancient sums, although your 
implementation is better, that is, works properly on those.


Mine also preferred sha*sum file types, while still allowing prefixes 
only without sum, not enumerating them all in the unpack() case, and 
respecting the cksum crc default.


I guess this makes sense as a part of the fetch operation, in thsose 
cases where upstream provides signatures or checksums.



But as briefly discussed in [1], independently of that it would also be 
a good idea for cygport to specify it's own checksum file, which is 
incorporated into the source package, and verified at build prep time.


(Since this would protect against such screw ups, help with build 
reproducibility, and defend against supply chain attacks on upstream)


[1] https://cygwin.com/pipermail/cygwin-apps/2024-March/043540.html



Re: calm: vaulting ancient unifont

2024-05-06 Thread Jon Turney via Cygwin-apps

On 04/05/2024 20:21, Brian Inglis via Cygwin-apps wrote:

Thanks Jon? - yay!


Right, I deployed some changes to calm which will gradually let us get 
rid of the "old-style" of obsoletion (where, as here, the old name of a 
package (i.e. font-unifont-misc, font-unifont-ttf) continues to exist 
with a category of _obsolete and requires: its replacement)


(cygport stopped generating these some time ago (0.34.1, 2022), but 
they've been lingering around indefinitely, because in some cases it's 
only the existence of these packages which currently records the fact of 
the obsoletion)



Since someone's bound to get the wrong end of the stick: This doesn't 
mean package maintainers should change anything.


And just to reiterate: As a principle, every version of a package must 
contain complete instructions for upgrading to it. So, it is almost 
never correct to go "I'll remove these OBSOLETE instruction after one 
package release with them, since they've already happened everywhere..."


On 2024-05-04 09:48, 
cygwin-no-reply-rdbxbdvo6bxqt0dzr+a...@public.gmane.org wrote:

INFO: vaulting x86_64/release/unifont/unifont-8.0.01-1-src.hint
INFO: vaulting x86_64/release/unifont/unifont-8.0.01-1-src.tar.xz
INFO: vaulting 
x86_64/release/unifont/font-unifont-misc/font-unifont-misc-8.0.01-1.hint
INFO: vaulting 
x86_64/release/unifont/font-unifont-misc/font-unifont-misc-8.0.01-1.tar.xz
INFO: vaulting 
x86_64/release/unifont/font-unifont-ttf/font-unifont-ttf-8.0.01-1.hint
INFO: vaulting 
x86_64/release/unifont/font-unifont-ttf/font-unifont-ttf-8.0.01-1.tar.xz
INFO: vaulting 
x86_64/release/unifont/unifont-debuginfo/unifont-debuginfo-8.0.01-1.hint
INFO: vaulting 
x86_64/release/unifont/unifont-debuginfo/unifont-debuginfo-8.0.01-1.tar.xz

SUMMARY: 8 INFO(s)


Anyhow, double checking that the "right thing" happened here, I notice 
that 'unifont' obsoletes 'unifont-debuginfo', which seems a bit weird, 
especially since it contains the expected .dbg files etc.


Brian,

Are you sure that's right?



Re: [PATCH cygport] pkg_info.cygpart: Do not detect dependencies on itself in ruby package

2024-05-06 Thread Jon Turney via Cygwin-apps

On 03/04/2024 15:18, Daisuke Fujimura via Cygwin-apps wrote:

Thank you for reviewing this.


Can you clarify what the "failure" is here?



[...]


/usr/share/rubygems/rubygems.rb:8:in `require': cannot load such file
-- rbconfig (LoadError)


[...]

Thanks very much for the detailed explanation.

So this is an error (or warning?) generated by invoking the 
not-yet-properly installed, just-built ruby in ${D}.


I applied your patch.


On Sun, Mar 10, 2024 at 10:34 PM Jon Turney  wrote:


On 16/02/2024 12:51, Daisuke Fujimura via Cygwin-apps wrote:

Attempting to create a package for ruby-3.3, but it fails when trying
to detect a dependency on itself.


Thanks for this patch.

Can you clarify what the "failure" is here?


To avoid this, skip them if the target is `ruby`.


The second hunk seems like a removes the dependency on ruby_xy for the
ruby package, which also provides ruby_xy.

Historically, we've allowed self-dependencies like this, because they
seem to be benign, although it seems like we could do with some generic
code to suppress them


... except I added something to generically prevent a packages provides: 
appearing it it's requires:




Re: [ITA] bash-completion/-devel

2024-05-03 Thread Jon Turney via Cygwin-apps

On 29/04/2024 22:13, Brian Inglis via Cygwin-apps wrote:
I would like to co-maintain or adopt and revive the above package, which 
was adopted by Eric but not updated since Yaakov.


Thanks.

I added this to your packages.

I guess I need to ask eblake if he wants to orphan his packages, since 
he seems to be no longer active...


Below are links to existing source packages, build repos, scallywag 
runs, and updated package info.


I would like to further improve the sdesc and ldesc provided to reflect 
that completions are provided for thousands of commands and their 
options and arguments.



Bash Completions and development

Existing source package:

https://cygwin.com/packages/summary/bash-completion-src.html

Updated cygport:

https://cygwin.com/cgit/cygwin-packages/bash-completion/tree/bash-completion.cygport?h=playground


A few comments:


DEPEND="automake dejagnu make screen" # tcllib
BUILD_REQUIRES="$DEPEND"


Just set BUILD_REQUIRES.

I assume the comment about tcllib means something to someone. :)


src_test() {
cd $B
# For some tests involving non-ASCII filenames
export LANG=C.UTF-8
export -f cygtest
# This stuff borrowed from dejagnu-1.4.4-17 (tests need a terminal)
tmpfile=$(mktemp bash-completion.screen.XX.tmp)
#   cygtest


At first glance, because this is commented out, I thought "so this 
doesn't run tests at all"


Maybe remove the commented out line, and write a comment saying 
something like "run tests under screen, since they need a terminal"



screen -D -m bash -c '( cygtest ; echo $? ) >'$tmpfile
cat $tmpfile

> result=$(tail -n 1 $tmpfile)

This cleverness to propagate the exit code is probably also worthy of 
comment, since I had to think about it for a few minutes before I 
realized what it was doing...


Perhaps should remove tmpfile here?


return $result
}


Re: [PATCH cygport] Increase _FORTIFY_SOURCE level from 2 to 3 in CFLAGS

2024-04-30 Thread Jon Turney via Cygwin-apps

On 28/04/2024 13:21, Christian Franke via Cygwin-apps wrote:

ASSI via Cygwin-apps wrote:

Christian Franke via Cygwin-apps writes:

_FORTIFY_SOURCE=3 is supported by Cygwin 3.5.0 headers and Cygwin gcc
13.2.1 test release.

Silently falls back to level 2 if level 3 is unsupported (older
headers or gcc) or to level 0 if unsupported at all (C++, clang).

Well, if only that was the case…

--8<---cut here---start->8---
  from /usr/include/w32api/windows.h:9,
  from 
/mnt/share/cygpkgs/libarchive/libarchive.x86_64/src/libarchive-3.7.4/test_utils/test_common.h:88,
  from 
/mnt/share/cygpkgs/libarchive/libarchive.x86_64/src/libarchive-3.7.4/tar/test/test.h:38,
  from 
/mnt/share/cygpkgs/libarchive/libarchive.x86_64/src/libarchive-3.7.4/tar/test/test_extract_tar_lrz.c:25:
/usr/include/w32api/_mingw_mac.h:319:8: warning: #warning Using 
_FORTIFY_SOURCE=2 (level 3 requires __builtin_dynamic_object_size 
support) [-Wcpp]
   319 | #  warning Using _FORTIFY_SOURCE=2 (level 3 requires 
__builtin_dynamic_object_size support)

--8<---cut here---end--->8---

Can't we conditiohnalize this to depend on the actual compiler support?


This is a bogus warning. Sorry, my bad.

In my contribution of _FORTIFY_SOURCE support to MinGW-w64 from 2019, I 
didn't realize that these warnings also appear if only Win32 API 
includes (windows.h, ...) are used. The related internal macros have 
only an effect if MinGW-w64 runtime includes (stdio.h, string.h, ...) 
are used.


Meantime this has been fixed upstream:
https://sourceforge.net/p/mingw-w64/mingw-w64/ci/f8e088e


I guess that means we need an updated w32api-header package, with this 
patch added, if it's not yet in a release...




Re: Cygwin - rsync / new release 3.2.7 => 3.3.0

2024-04-30 Thread Jon Turney via Cygwin-apps

On 29/04/2024 15:10, Jari Aalto wrote:

On 2024-04-28 21:41, Chad Dougherty wrote:

Hello Jari,

On 4/27/24 05:12, Jari Aalto wrote:

Hi Chad, you seemed to take care of rsync while I was unavailable.  If
you still want to maintain rsync, would you update it to latest
version.

I checked and it compiles ok.

... but you might want to also apply the Debian patches to the latest
version


It's good to hear from you.  I'd be happy for you to resume maintainership
of this package if you're willing.  I no longer actively use Cygwin so it
would make more sense for someone else to do it.


Chad,

I guess that means that your other packages are orphaned?

$ grep 'Chad Dougherty' cygwin-pkg-maint
lz4  Chad Dougherty
mingw64-i686-lz4 Chad Dougherty
mingw64-x86_64-lz4   Chad Dougherty
minisign Chad Dougherty
passwdqc Chad Dougherty

Thanks for your work on these as a maintainer.


Thanks Chad, I have the latest ready, so I can continue maintaining.

Jon, would someone update the Cygwin Porters file in order to proceed
with the upload.


Jari,

Done.

I set your rsync-3.3.0-1 upload to be retried, which seems to have 
succeeded.




Re: cygport may not create debug info if top directory contains a symlink

2024-04-29 Thread Jon Turney via Cygwin-apps

On 18/09/2023 18:24, Brian Inglis via Cygwin-apps wrote:

On 2023-09-18 04:41, Christian Franke via Cygwin-apps wrote:

Brian Inglis wrote:

On 2023-09-17 08:01, Jon Turney via Cygwin-apps wrote:

On 16/09/2023 15:17, Christian Franke via Cygwin wrote:

Found during tests of busybox package:
If the path of the top build directory contains a symlink and the 
project's build scripts normalize pathnames, no debug info is 
created by cygport.


This is because options like
  -fdebug-prefix-map=${B}=/usr/src/debug/${PF}
have no effect because ${B} contains a symlink but the compiler is 
run with the real source path.



[...]


Sidenote: we should probably also be using file-prefix-map, now 
we're on a gcc which supports it.


... also macro-prefix-map, although it looks like changing to 
-ffile-prefix-map is equivalent to -f*-prefix-map which future proofs 
the options!


So I updated to using -ffile-prefix-map in cygport 0.36.8, since that 
seems like the "Right Thing(TM)"


I discovered today that, amazingly, this breaks compiling ruby, since in 
one place it does:


#include __FILE__

(yeah, that's pretty jaw dropping...)



Re: [PATCH cygport] Add customization support for announce command

2024-04-29 Thread Jon Turney via Cygwin-apps

On 10/03/2024 16:33, Christian Franke via Cygwin-apps wrote:

Jon Turney wrote:

On 23/02/2024 11:23, Christian Franke via Cygwin-apps wrote:

Christian Franke wrote:
The email generated by the cygport announce command is useful, but 
actual use cases are somewhat limited due to the hard-coded email 
submission.


The attached patch adds more flexibility. The patch is on top of the 
"Use correct wording if only one package is announced" patch.


Slightly changed patch attached. Also adjusted to new version of "Use 
correct wording if only one package is announced" patch.




[...]

Thanks for this.


Possible (better?) alternative names for the new settings:
ANNOUNCEMENT_EDITOR
ANNOUNCEMENT_MAILER


Hmmm... I think "ANNOUNCE_EDITOR" and "ANNOUNCE_MAILER" would be
the best for clarity and conciseness.


New patch attached. Is still on top of "Use correct wording ..." patch.

I also added HOMEPAGE to the propagated variables as this should be 
included in an announcement.


Thanks.


+   /bin/bash -c "cd ${top} || exit 1
+${HOMEPAGE+HOMEPAGE=${HOMEPAGE@Q}}
+P=${P@Q}; PF=${PF@Q}; PN=${PN@Q}; PR=${PR@Q}; PV=(${PV[*]@Q})
+${SMTP_SENDER+SMTP_SENDER=${SMTP_SENDER@Q}}
+${SMTP_SERVER+SMTP_SERVER=${SMTP_SERVER@Q}}
+${SMTP_SERVER_PORT+SMTP_SERVER_PORT=${SMTP_SERVER_PORT@Q}}
+${SMTP_ENCRYPTION+SMTP_ENCRYPTION=${SMTP_ENCRYPTION@Q}}
+${SMTP_USER+SMTP_USER=${SMTP_USER@Q}}
+${SMTP_PASS+SMTP_PASS=${SMTP_PASS@Q}}
+${cmd}
+" $0 ${msg} || error "Command '\${${cmdvar}} ${msg}' (cwd=${top}) 
failed"
+}


Sorry I didn't notice this before, and I am terrible at writing shell, 
but perhaps you could share the reasoning behind writing this as above, 
and not as, e.g.


(cd ${top} && env BLAH ${cmd})

avoiding all the verbiage in the description of ANNOUNCE_EDITOR about it 
being fed into 'bash -c' (and hence getting evaluated twice??) rather 
than just run?




Re: [PATCH cygport] Add repro-finish command

2024-04-29 Thread Jon Turney via Cygwin-apps

On 11/03/2024 11:41, Christian Franke via Cygwin-apps wrote:
Thanks for accepting the repro-check patch. A minor enhancement is 
attached.


Applied. Thanks!

The function is in pkg_pkg.cygpart instead of pkg_cleanup.cygpart 
because then it is easier to keep it in sync with the other __repro_* 
functions.


PS: I have a local script which checks SPDX Identifiers and expressions. 
Any interest to add this to cygport and then check LICENSE settings?


Oh, yes please. That sounds like a good idea.



Re: [PATCH cygport] dodoc: Skip a file if a compressed version already exists

2024-04-29 Thread Jon Turney via Cygwin-apps

On 10/03/2024 15:44, Christian Franke via Cygwin-apps wrote:

Jon Turney wrote:

On 01/03/2024 13:13, Christian Franke via Cygwin-apps wrote:
It IMO makes sense to compress large and rarely viewed doc files like 
change logs. This seems to be common practice on Debian etc.


With current cygport, the following results in ChangeLog and 
ChangeLog.gz in the docdir:


src_install()
{
   ...
   dodoc ChangeLog
   gzip -9 -n "${D}/usr/share/doc/${PN}/ChangeLog"
}


Uh, I don't quite see how this patch will change the behavior of this 
fragment.




Yes, it actually doesn't change the behavior of this fragment itself.


Even more confusing, why isn't this already doing what you want? 
Unless you specify -k/--keep to gzip, the input file is removed, right?


Yes - but after this src_install() the file will be re-added by 
__predoc() unless _CYGPORT_RESTRICT_postinst_doc_ is set. The patch 
avoids this because __predoc() also uses dodoc().


Ah, I get it.

Applied with a bit of rewording of the commit commentary for dullards 
like myself.


Thanks.



Fwd: Howto request an upgrade for keychain package

2024-04-24 Thread Jon Turney via Cygwin-apps



Hi Jari,

There do seem to be some incompatibilities between our current keychain 
package and current gpg/gpg2.


Is it possible to get an update of keychain? Or let me know if you want 
to orphan that package.


TIA.

 Forwarded Message 
Subject: Howto request an upgrade for keychain package
Date: Thu, 18 Apr 2024 20:10:43 +0200
From: J M via Cygwin 
Reply-To: J M 
To: cyg...@cygwin.com
Newsgroups: gmane.os.cygwin

Hi,

I'm having some problems (gpg2, and some for ssh management) with keychain
package: https://www.cygwin.com/packages/summary/keychain.html

It version is 2.7.1, can be upgraded to, by example the last 2.8.5?

It is here: https://github.com/funtoo/keychain/tree/2.8.5

Regards



Re: Let's Encrypt Dropping Cross-Signed Root and Intermediates; Issuing New Intermediates; New Cert Chains

2024-04-19 Thread Jon Turney via Cygwin-apps

On 17/04/2024 04:48, Brian Inglis via Cygwin-apps wrote:

Hi folks,


Is this FYI, or are you suggesting there is some specific action we need 
to take?



https://letsencrypt.org/2023/07/10/cross-sign-expiration
Shortening the Let's Encrypt Chain of Trust
"On Thursday, Feb 8th, 2024, we stopped providing the cross-sign by 
default in requests made to our /acme/certificate API endpoint.
On Thursday, June 6th, 2024, we will stop providing the longer 
cross-signed chain entirely.

On Monday, September 30th, 2024, the cross-signed certificate will expire."

https://letsencrypt.org/2024/03/19/new-intermediate-certificates
New Intermediate Certificates
"Let’s Encrypt generated 10 new Intermediate CA Key Pairs, and issued 15 
new Intermediate CA Certificates containing the new public keys."


https://letsencrypt.org/2024/04/12/changes-to-issuance-chains
Deploying Let's Encrypt's New Issuance Chains
"On Thursday, June 6th, 2024, we will be switching issuance to use our 
new intermediate certificates. Simultaneously, we are removing the DST 
Root CA X3 cross-sign from our API, aligning with our strategy to 
shorten the Let’s Encrypt chain of trust. We will begin issuing ECDSA 
end-entity certificates from a default chain that just contains a single 
ECDSA intermediate, removing a second intermediate and the option to 
issue an ECDSA end-entity certificate from an RSA intermediate."




Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-04-19 Thread Jon Turney via Cygwin-apps

On 18/04/2024 07:01, Ake Rehnman wrote:

Den tors 28 mars 2024 kl 18:50 skrev Jon Turney :


On 24/03/2024 17:46, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:

I assume you are OK with the removal of python 3.5 (EOL Sept 2020)
and 3.6 (EOL Dec 2021)?

(I'm still dealing with cleaning up the final pieces of python27
detritus, but these should hopefully be much smaller tasks)


nothing should depend from 3.5
not sure for 3.6


I've automated some of the analysis I was doing for python2 packages and
the results are now available at [1].

So yeah, it looks like nothing uses 3.5.

There are just a couple of packages using 3.6, I guess I'll ping the
maintainers about those.

[1] https://cygwin.com/packages/reports/python_rebuilds.html


Ake,


Hi Jon, sorry for the late reply.


No problem.


Is it possible to update/rebuild libftdi1, which only publishes python
bindings for the soon-to-be removed python36?


I am not sure, I have not looked at it for so many years, I have not
even used cygwin since I don't remember...


(Or indicate that you are no longer interested in maintaining this
package, which will probably lead to it's removal).


Do you have any stats on how many installs it was last year?


I'm afraid we don't collect that information.

If you are not using it anymore, it seems like the logical thing to do 
is orphan this package (and libconfuse, it's dependency, your only other 
package).


Thanks for your work in the past.



Re: calm: ERROR: Upload failed: cd: Access failed: No such file (/x86_64/release)

2024-04-17 Thread Jon Turney via Cygwin-apps

On 17/04/2024 20:26, Brian Inglis via Cygwin-apps wrote:

Hi folks,

Fairly straightforward upgrade of packages.
Is anything demented about my setup:

$ cygport GeoIP.cygport upload
 >>> Uploading GeoIP-1.7.0-1.x86_64
 >>> Running lftp sftp://cygwin:@cygwin.com
cd: Access failed: No such file (/x86_64/release)
*** ERROR: Upload failed


Thanks for reporting this.

When I connect using `lftp sftp://cygwin` I now seem to be logged in to 
the sftp *root* instead of /home/Brian\ Inglis!


But in future, if you are ever reporting "I think I have access to stuff 
on sourceware I shouldn't have access to", you may, exceptionally in 
that situation only, send me a private mail.


Or is this just a way to allow my GeoIP... updates to be fixed up before 
I can do anything more?


This was the result of a sshd configuration error which has been 
rectified by sourceware overseers.




Re: [ITA] GeoIP, GeoIP-database, geoipupdate

2024-04-17 Thread Jon Turney via Cygwin-apps

On 17/04/2024 00:39, Brian Inglis via Cygwin-apps wrote:

On 2024-04-16 13:31, Jon Turney via Cygwin-apps wrote:

On 13/04/2024 14:09, Brian Inglis via Cygwin-apps wrote:
I would like to adopt and revive the above packages with the last 
("unofficial") version of the legacy code committed noted in the 
ChangeLog as 1.7.0, and a new upstream source for legacy format free 
databases converted when the official current upstream databases are 
updated.


My very limited, vague understanding was that GeoIP is obsolete and 
users should move to something newer? What packages do we have that 
actually depend on this? Are there other ways to update them?


$ cygcheck-dep -nqS libGeoIP1 libmaxminddb0
  libGeoIP1: is needed for ( GeoIP libdns1104 libdns1105 libdns166 
libdns169 libGeoIP-devel )
  libmaxminddb0: is needed for ( bind libdns1106 libmaxminddb-devel 
lighttpd-mod_maxminddb )


Looks like older bind used free legacy GeoIP databases, "current" bind 
uses current library and current GeoIP2 databases which require free 
registration to get an API key with limits.
The new upstream source for free legacy GeoIP databases converts 
upstream GeoIP2 databases and makes them available under its CC-by-4.0 
licence.


The most recent bind package was built with '--without-geoip'.  Does 
this need to change back again?


$ cpm-sum libdns1{6{6,9},10{4,5,6}} | grep 
'dns\|bind\|maxmind\|GeoIP\|depends:\|ackage:$'

Package: libdns166
    depends:
    cygwin, libGeoIP1, libgssapi_krb5_2, libisc160, libjson-c2, libkrb5_3,
    rdepends:
    dnsperf, libbind9_160, libirs160, libisccfg160
    source package:
    bind


I guess there's another thread to pull on here.

The code which looks for "old soversions we don't need to keep anymore" 
isn't smart enough currently to realize that it can get rid of all of 
these old libdns soversions.


Assuming that gets fixed (...), do we still have users?



Re: calm: ERROR: package 'geoipupdate' is at paths geoipupdate and GeoIP-database/geoipupdate

2024-04-17 Thread Jon Turney via Cygwin-apps

On 17/04/2024 15:17, Brian Inglis via Cygwin-apps wrote:
On 2024-04-17 07:08, 
cygwin-no-reply-rdbxbdvo6bxqt0dzr+a...@public.gmane.org wrote:
ERROR: package 'geoipupdate' is at paths geoipupdate and 
GeoIP-database/geoipupdate


This is the "change things to that the geoipupdate package belongs to 
GeoIP-database source" I previously mentioned.


I've done that, and the upload seems to have succeeded.

I also fixed a typo I noticed in the geoipupdate DESCRIPTION:

- THe geoipupdate database updater script downloads the latest available
+ The geoipupdate database updater script downloads the latest available




Re: [ITA] GeoIP, GeoIP-database, geoipupdate

2024-04-16 Thread Jon Turney via Cygwin-apps

On 13/04/2024 14:09, Brian Inglis via Cygwin-apps wrote:
I would like to adopt and revive the above packages with the last 
("unofficial") version of the legacy code committed noted in the 
ChangeLog as 1.7.0, and a new upstream source for legacy format free 
databases converted when the official current upstream databases are 
updated.


My very limited, vague understanding was that GeoIP is obsolete and 
users should move to something newer? What packages do we have that 
actually depend on this? Are there other ways to update them?



Is there any easy way of overridding package version from
ac_init_version without patching configure.ac?


Generally, no.

As part of this upgrade, the geoipupdate source and databases are no 
longer available, so the new upstream database source update script 
becomes a new database subpackage and script geoipupdate, and the old 
geoipupdate source, binary, and debuginfo packages should become obsolete.


Is there anything special required to replace a source package and 
binaries with a binary subpackage?


Uh... I had to reread that several times (and compare with the cygport) 
before it this question made sense.


So: when you come to upload, I'll need to change things to that the 
geoipupdate package belongs to GeoIP-database source.


geoipupdate should probably obsolete geoipupdate-debuginfo, if it's now 
empty.


Reviewing the cygports, everything looks OK.

I'd make the comment that the text about scheduling geoipupdate to run 
should be in geoipupdate_DESCRIPTION, rather than in GeopIP-database's 
description.


I added GeoIP and GeoIP-database to your packages.



Re: package uploads not being processed again - calm failed or stuck?

2024-04-14 Thread Jon Turney via Cygwin-apps

On 14/04/2024 22:01, Brian Inglis via Cygwin-apps wrote:

On 2024-04-14 13:53, Brian Inglis via Cygwin-apps wrote:
Not seeing any progress hours after package upload - master setup.ini 
not updated and no calm emails received - has calm failed or is it stuck?


`ssh` commands /help/, /alive/, /info/ work okay - could do with a 
/status/ command to show us what calm is doing!


Sorry, this isn't going to happen for various reasons.

Achim - none of your announced releases appear to have been processed 
yet!


Thanks to whoever got the process going again a half hour ago!
I could see from curl -I the setup.ini last-modified date updated.


No problem.  sourceware overseers have re-arranged things so it won't be 
automatically killed by systemd for lols, and I am assured it should 
carry on running now...


Some emails reporting uploads that had been processed have been lost 
during the confusion.


We apologize for the inconvenience.



Re: package uploads not being processed - calm failed or stuck?

2024-04-13 Thread Jon Turney via Cygwin-apps

On 13/04/2024 21:12, Brian Inglis via Cygwin-apps wrote:

Hi folks,

Not seeing any progress hours after package upload - master setup.ini 
not updated and no calm emails received - has calm failed or is it stuck?


Thanks for the report.

Not sure what went wrong there, but I've restarted it and it seems to 
have processed all the pending uploads.




Re: python2 removal

2024-04-11 Thread Jon Turney via Cygwin-apps

On 10/04/2024 20:19, Hamish McIntyre-Bhatty via Cygwin-apps wrote:

On 19/01/2024 18:23, Hamish McIntyre-Bhatty via Cygwin-apps wrote:

On 18/01/2024 19:40, Jon Turney wrote:

On 18/01/2024 19:31, Jon Turney via Cygwin-apps wrote:
[...]
python-wx-devel    wxWidgets C++ application framework (Python 
bindings)

[...]


python-wx-devel is the last remnant of python2 bindings for wx (the 
python3 binding comes from a different, irregularly named source 
package python3-wx), so can also be removed.


Cc:ing Hamish as a note that if/when python3-wx is updated, we should 
see if it's now possible to rename the source package to python-wx.



[...]


Okay, I'd be happy to try renaming the package to python-wx the next 
time I update python3-wx.



[...]


I realise I forgot to ask, but how could I go about renaming python3-wx 
to python-wx when I update? I also maintained python-wx, so I shouldn't 
need any extra permissions I don't think.


Uh, yeah, this is made more complex as we had a 'python-wx' source 
package (for the python2 bindings, now removed), and a separate 
'python3-wx' source package (for python3 bindings).


I guess what wants to happen is:

* (If you care about such things) Merge the python3-wx history into the 
python-wx packaging git repo (git merge --allow-unrelated-histories 
seems like it might be the right voodoo runes).


* Rename python3-wx.cygport to python-wx.cygport and update version or 
bump release.
 * When it comes to uploading the rebuilt packages, there's 
unfortunately (currently) a manual step involved (for me to) adjust the 
"allegiance" of the 'python3n-wx' install packages from the 'python3-wx' 
source package to 'python-wx', but I'll do that when needed (or maybe 
even get around to automating it this time...)




Re: Where have svt-av1 1.8.0-2 gone?

2024-04-05 Thread Jon Turney via Cygwin-apps

On 17/03/2024 01:43, Takashi Yano via Cygwin-apps wrote:

On Sun, 17 Mar 2024 10:06:31 +0900
Takashi Yano wrote:

On Sat, 16 Mar 2024 17:49:30 +
Jon Turney wrote:

On 16/03/2024 00:48, Takashi Yano via Cygwin-apps wrote:

On Sat, 16 Mar 2024 09:39:33 +0900
Takashi Yano wrote:

[...]


This expected:
1.8.0-1 -> 1.8.0-2 -> 2.0.0-1
libsvtav1(1.8.0-1) -> libsvtav1enc1(1.8.0-2) + libsvtav1dec0(1.8.0-2)
-> libsvt1enc1(1.8.0-2) + libsvtav1dec0(2.0.0-2)

However, this does not seem to work as I expected.


What unexpected thing happens?

I guess you only get one of libsvtav1enc1 or libsvtav1dec0 (since if
these both are marked "obsoletes: libsvtav1", to the dependency solver
that mean that either of can replace libsvtav1, and provides everything
that it provides.

So maybe the best solution is:

libsvtav1dec0_OBSOLETES=libsvtav1
libsvtav1dec0_REQUIRES=libsvtav1enc1

So libsvtav1 is replaced by both libsvtav1dec0 and libsvtav1enc1


Looks great!


My expectation was that both libsvtav1enc1(1.8.0-2) and libsvtav1dec0(1.8.0-2)
are installed for upgrading libsvtav1(1.8.0-1).

Instead, I found

1.8.0-2:
libsvtav1_CATEGORY="_obsolete"
libsvtav1_REQUIRES="libsvtav1enc1 libsvtav1dec0"
libsvtav1enc1_CONTENTS="usr/bin/cygSvtAv1Enc-1.dll"
libsvtav1dec0_CONTENTS="usr/bin/cygSvtAv1Dec-0.dll"


Yeah, this should work, but is not longer preferred because you end up
with an empty libsvtav1 hanging around forever...


works as expected.
Is it possible to change it like this now?


I've tweaked the existing dependencies based on my reasoning above.
Please let me know if this still isn't working right.


Thanks you very much!

Could you please also remove:
libsvtav1enc1_OBSOLETES=libsvtav1
because it seems that this conflicts with
libsvtav1dec0_OBSOLETES=libsvtav1
?


Oops. I obviously needed to do that, but forget. Then I did it, and 
forget to tell you that I'd done it.


Hopefully, that resolves the misbehavior you describe below.



I noticed that the following happen even with obove if
the package which requires libsvtav1 is installed.
At the first upgrade,
Uninstall libsvt1v1 1.8.0-1
Install libsvtav1dec0 1.8.0-2
Install libsvtav1enc1 1.8.0-2
that is as expected except for libsvtav1dec0 is not latest.

However, at the next upgrade (just run setup again),
Uninstall libsvtav1dec0 1.8.0-2
Install libsvtav1 1.8.0-1
Install libsvtav1dec0 2.0.0-1
happens. This causes conflict:
$ cygcheck -f /usr/bin/cygSvtAv1Dec-0.dll
libsvtav1-1.8.0-1
libsvtav1dec0-2.0.0-1

Im not sure why this happens.

Contrary to your idea,
libsvtav1enc1_OBSOLETES="libsvtav1"
libsvtav1enc1_REQUIRES="libsvtav1dec0"
the followings happen as expected.
Uninstall libsvtav1 1.8.0-1
Install libsvtav1dec0 2.0.0-1
Install libsvtav1enc1 1.8.0-2

Of cource,
libsvtav1dec0_OBSOLETES=libsvtav1
should be removed in this case.

What do you think?




Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-04-05 Thread Jon Turney via Cygwin-apps

On 02/04/2024 15:58, Takashi Yano via Cygwin-apps wrote:

On Tue, 2 Apr 2024 15:38:25 +0100
Jon Turney wrote:

On 01/04/2024 18:16, David Rothenberger via Cygwin-apps wrote:

On 3/30/2024 8:25 AM, Jon Turney wrote:

On 29/03/2024 18:32, David Rothenberger via Cygwin-apps wrote:

On 3/28/2024 10:50 AM, Jon Turney via Cygwin-apps wrote:

[...]

David,

Is it possible to update/rebuild rdiff-backup, which replies upon
the soon-to-be removed python36?

(Or indicate that you are no longer interested in maintaining this
package, which will probably lead to it's removal).


Please remove me as the maintainer from that package. I no longer use
it, and no longer have an environment for building packages for Cygwin.


No problem. Thanks for maintaining it in the past.

Is the same true for your other packages?

$ grep Rothenberger cygwin-pkg-maint | grep -v ORPHANED
cyrus-sasl   David Rothenberger
flac David Rothenberger
libao    David Rothenberger
libapr1  David Rothenberger
libaprutil1  David Rothenberger
libkate  David Rothenberger
libogg   David Rothenberger
librsync David Rothenberger
libtheora    David Rothenberger
libvorbis    David Rothenberger
rdiff-backup David Rothenberger
speex    David Rothenberger
speexdsp David Rothenberger
vorbis-tools David Rothenberger
which    David Rothenberger
whois    David Rothenberger


Yes, I'm afraid it is.


Done.  Thanks for all your work on these in the past.


Hi, I would like to take over the maintenance of:

flac David Rothenberger
libao    David Rothenberger
libogg   David Rothenberger
libtheora    David Rothenberger
libvorbis    David Rothenberger
speex    David Rothenberger
speexdsp David Rothenberger
vorbis-tools David Rothenberger

if anyone would not.



Thanks. I added these to your packages.

I generated missing packaging history repos for some of these from the 
CTM history.  Please let me know if there's any errors or if you'd like 
those removed.


I didn't check, but if any of these are no longer carried by recent 
linux distros, maybe think about if it's actually useful to keep on 
having a package for it...




Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-04-02 Thread Jon Turney via Cygwin-apps

On 01/04/2024 18:16, David Rothenberger via Cygwin-apps wrote:

On 3/30/2024 8:25 AM, Jon Turney wrote:

On 29/03/2024 18:32, David Rothenberger via Cygwin-apps wrote:

On 3/28/2024 10:50 AM, Jon Turney via Cygwin-apps wrote:

[...]

David,

Is it possible to update/rebuild rdiff-backup, which replies upon 
the soon-to-be removed python36?


(Or indicate that you are no longer interested in maintaining this 
package, which will probably lead to it's removal).


Please remove me as the maintainer from that package. I no longer use 
it, and no longer have an environment for building packages for Cygwin.


No problem. Thanks for maintaining it in the past.

Is the same true for your other packages?

$ grep Rothenberger cygwin-pkg-maint | grep -v ORPHANED
cyrus-sasl   David Rothenberger
flac David Rothenberger
libao    David Rothenberger
libapr1  David Rothenberger
libaprutil1  David Rothenberger
libkate  David Rothenberger
libogg   David Rothenberger
librsync David Rothenberger
libtheora    David Rothenberger
libvorbis    David Rothenberger
rdiff-backup David Rothenberger
speex    David Rothenberger
speexdsp David Rothenberger
vorbis-tools David Rothenberger
which    David Rothenberger
whois    David Rothenberger


Yes, I'm afraid it is.


Done.  Thanks for all your work on these in the past.

Please accept this virtual gold-plated solid 1/10th-scale pocket watch 
as a token of our appreciation!




Re: calm now runs on-demand

2024-04-01 Thread Jon Turney via Cygwin-apps

On 01/07/2017 15:22, Jon Turney wrote:

On 01/07/2017 15:14, Marco Atzeri wrote:

On 01/07/2017 15:54, Jon Turney wrote:

On 01/07/2017 06:18, Marco Atzeri wrote:

On 17/04/2017 13:34, Jon Turney wrote:


If you have shell access on sourceware, and make such changes, you can
force calm to run with '~cygwin-admin/bin/calm 
scan-(uploads|relarea)'.


calm now (finally) detects when changes have been made in the relarea 
via inotify, so this manual step is no longer required.


So, if you have shell access, and you make changes directly in the 
relarea, calm should now notice, reread it, and update the setup.ini 
package manifest automatically, without you needing to explicitly 
request that (or wait until the next scheduled rescan, if you can't 
request it due to the permission problem identified below...)



Jon,
I have shell access but I do not find calm anywhere.
I assume "~cygwin-admin" is more restricted than shell access.

As I did change to the relarea for gcc test, how to force the
update of setup.ini's ?


I think I have fixed the permissions, so this should work for you now.

Thanks for pointing out this problem.


May be I misunderstood how I should use it

matzeri@sourceware ~
$  /home/cygwin/bin/calm scan-relarea
/home/cygwin/bin/calm: line 13: kill: (14958) - Operation not permitted


No, that's me being dumb.  I guess I need to think some more about how 
to make this work for other users...




Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-04-01 Thread Jon Turney via Cygwin-apps

On 24/03/2024 17:46, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:

I assume you are OK with the removal of python 3.5 (EOL Sept 2020) 
and 3.6 (EOL Dec 2021)?


(I'm still dealing with cleaning up the final pieces of python27 
detritus, but these should hopefully be much smaller tasks)




nothing should depend from 3.5
not sure for 3.6


I've automated some of the analysis I was doing for python2 packages and 
the results are now available at [1].


So yeah, it looks like nothing uses 3.5.


I've removed some 3.4 detritus, and 3.5

Perhaps you can clarify the situation with python-pip: python-pip 
19.0.3-1, 19.1.1-1 and 19.2.3-1 are not evaluated are being removable, 
despite python35-pip being not needed anymore, as that source also 
produces python-pip-wheel, which is depended upon by 
python3{6,7,8,9}-virtualenv.


A similar situation exists with python-setuptools, python35-setuptools 
and python-setuptools-wheel.


(virtualenv also depends on python-wheel-wheel, but that tracks the 
latest version)


There are just a couple of packages using 3.6, I guess I'll ping the 
maintainers about those.


[1] https://cygwin.com/packages/reports/python_rebuilds.html


It looks like the situation with 3.6 is a bit more complex, as some 
things have a generic python3 dependency, rather than python36 as they 
should, so that report isn't complete.


I have some tools to correct those dependencies, so the situation should 
become clearer after I run those...




Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-30 Thread Jon Turney via Cygwin-apps

On 29/03/2024 18:32, David Rothenberger via Cygwin-apps wrote:

On 3/28/2024 10:50 AM, Jon Turney via Cygwin-apps wrote:

[...]

David,

Is it possible to update/rebuild rdiff-backup, which replies upon the 
soon-to-be removed python36?


(Or indicate that you are no longer interested in maintaining this 
package, which will probably lead to it's removal).


Please remove me as the maintainer from that package. I no longer use 
it, and no longer have an environment for building packages for Cygwin.


No problem. Thanks for maintaining it in the past.

Is the same true for your other packages?

$ grep Rothenberger cygwin-pkg-maint | grep -v ORPHANED
cyrus-sasl   David Rothenberger
flac David Rothenberger
libaoDavid Rothenberger
libapr1  David Rothenberger
libaprutil1  David Rothenberger
libkate  David Rothenberger
libogg   David Rothenberger
librsync David Rothenberger
libtheoraDavid Rothenberger
libvorbisDavid Rothenberger
rdiff-backup David Rothenberger
speexDavid Rothenberger
speexdsp David Rothenberger
vorbis-tools David Rothenberger
whichDavid Rothenberger
whoisDavid Rothenberger




Re: [PATCH setup] Fix Chinese Help Message fall in dead loop .

2024-03-29 Thread Jon Turney via Cygwin-apps

On 29/03/2024 01:40, 赵伟 via Cygwin-apps wrote:

---
  libgetopt++/include/getopt++/DefaultFormatter.h | 1 +
  1 file changed, 1 insertion(+)

diff --git a/libgetopt++/include/getopt++/DefaultFormatter.h 
b/libgetopt++/include/getopt++/DefaultFormatter.h
index ee2397f5..43c253a5 100644
--- a/libgetopt++/include/getopt++/DefaultFormatter.h
+++ b/libgetopt++/include/getopt++/DefaultFormatter.h
@@ -64,6 +64,7 @@ class DefaultFormatter {
 {
   // TODO: consider using a line breaking strategy here.
   int pos = helpmsg.substr(0,h_len).find_last_of(" ");
+ if(!pos)break; /*In Chinese Helpmsg,may has no space,so pos ==0,and 
code will fall in dead loop here*/
   theStream  helpmsg.substr(0,pos)
  std::endl  std::string (o_len, ' ');
   helpmsg.erase (0,pos+1);
--
2.43.0


Thanks very much for bug report, and the patch!

Did you actually try this?  When I tested this it didn't help, as 
std::string::substr() returns std::string::npos (numerically, -1), not 0 
when it cannot find a match.


So, I applied a slightly modified version of the patch.

Please try https://cygwin.com/setup/setup-2.931-1-g0ee13c.x86_64.exe



Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-28 Thread Jon Turney via Cygwin-apps

On 24/03/2024 17:46, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:

I assume you are OK with the removal of python 3.5 (EOL Sept 2020) 
and 3.6 (EOL Dec 2021)?


(I'm still dealing with cleaning up the final pieces of python27 
detritus, but these should hopefully be much smaller tasks)



nothing should depend from 3.5
not sure for 3.6


I've automated some of the analysis I was doing for python2 packages and 
the results are now available at [1].


So yeah, it looks like nothing uses 3.5.

There are just a couple of packages using 3.6, I guess I'll ping the 
maintainers about those.


[1] https://cygwin.com/packages/reports/python_rebuilds.html

David,

Is it possible to update/rebuild rdiff-backup, which replies upon the 
soon-to-be removed python36?


(Or indicate that you are no longer interested in maintaining this 
package, which will probably lead to it's removal).


Thanks.



Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-28 Thread Jon Turney via Cygwin-apps

On 24/03/2024 17:46, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:

I assume you are OK with the removal of python 3.5 (EOL Sept 2020) 
and 3.6 (EOL Dec 2021)?


(I'm still dealing with cleaning up the final pieces of python27 
detritus, but these should hopefully be much smaller tasks)



nothing should depend from 3.5
not sure for 3.6


I've automated some of the analysis I was doing for python2 packages and 
the results are now available at [1].


So yeah, it looks like nothing uses 3.5.

There are just a couple of packages using 3.6, I guess I'll ping the 
maintainers about those.


[1] https://cygwin.com/packages/reports/python_rebuilds.html


Ake,

Is it possible to update/rebuild libftdi1, which only publishes python 
bindings for the soon-to-be removed python36?


(Or indicate that you are no longer interested in maintaining this 
package, which will probably lead to it's removal).


Thanks.





Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-28 Thread Jon Turney via Cygwin-apps

On 27/03/2024 21:18, Brian Inglis via Cygwin-apps wrote:

On 2024-03-27 14:07, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 18:51, Brian Inglis via Cygwin-apps wrote:

On 2024-03-24 11:46, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:

[...]


Are they supposed to migrate to some alternate bindings maybe 
available from a separate repo? Or are they just out of luck?


SOL! Dropped them in 1.52, probably why 1.31.0..1.51.0 are hanging around.


Nice :S

Feel free to purge as appropriate, or tell me what to add to cygport, 
hints, etc!


So, the long list of source versions will hopefully be reduced in the 
fullness of time...


Could I just add to nghttp2.cygport that nghttp2 obsoletes 
python{2{,7},3{,6,7,8,9}}-nghttp2?
Does this have to remain in the cygport forever to avoid keeping nghttp2 
vx.x.x around?


You could, but that's probably not the correct thing to do unless you 
really, really want to forcibly uninstall those packages for anyone who 
has installed them, which seems like unnecessary breakage.


I don't think you have to do anything.  There's nothing "wrong" here.

If it really offends your sense of aesthetics, I suggest you just expire 
some subset of the old versions using the vault command [1].


[1] https://cygwin.com/package-upload.html#deleting


Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-27 Thread Jon Turney via Cygwin-apps

On 24/03/2024 18:51, Brian Inglis via Cygwin-apps wrote:

On 2024-03-24 11:46, Jon Turney via Cygwin-apps wrote:

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:


[...]


Not sure why my source package nghttp2 shows python install packages, 
when they were dropped after 1.43 IIRC: build deps no longer include 
python/-devel?


If you haven't taken any specific action to retire the python-3x-nghttp2 
packages, the existing ones will continue to be available indefinitely.


Firstly, it seems there's a question here about what are upstream's 
plans for the users of the python bindings for this library.


Are they supposed to migrate to some alternate bindings maybe available 
from a separate repo? Or are they just out of luck?


And why does that nghttp2 source package show a dozen archived source 
versions, when its installed packages have only three?


The simple answer to that is we retain the source package for all 
available install packages.  This seems essential for an open-source 
project.


Now, as to why there are so many installable packages, this is the 
intersection of a couple of unfortunate issues.


1. 'python3-nghttp2' is an "old-style" obsoletion package, where the 
package exists, but is of category _obsolete, and requires the 
replacement package.


These are terrible, because we can't remove the obsolete package because 
that's what records the fact of obsoletion.


I actually have some code for calm to internally convert that to a 
"new-style" obsoletion, where the replacement package itself records the 
obsoletion (i.e. python36-nghttp2 obsoletes: python3-nghttp2), which it 
continues to remember about even after the package which contains that 
obsoleting is expired.


Once that's done, all those "old-style" obsoletion packages lingering in 
our package repository can be removed (along with their corresponding 
source).


But I still need to do some testing before that can be deployed.

(However, all that's probably not what's actually wanted with python 
packages: it's preferable to have python3-foo be a virtual package which 
pulls in python3x-foo, where python3x is the current python, so that 
scripted installs can be written which ask for python3 and python3-foo 
and continue to work while x changes...)


2. We haven't purged old python versions for a long time, so e.g the 
python36 binding packages are still lingering.


As you can see, I'm just now getting around to looking at expiring 
python36, which eventually should lead to python36-nghttp2 being expired 
(insert some observations about how it doesn't have to be me doing these 
things here)...


Feel free to purge as appropriate, or tell me what to add to cygport, 
hints, etc!


So, the long list of source versions will hopefully be reduced in the 
fullness of time...




Re: Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-24 Thread Jon Turney via Cygwin-apps

On 24/03/2024 17:31, Marco Atzeri via Cygwin-apps wrote:

On 24/03/2024 15:07, Jon Turney wrote:

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:

I assume you are OK with the removal of python 3.5 (EOL Sept 2020) and 
3.6 (EOL Dec 2021)?


(I'm still dealing with cleaning up the final pieces of python27 
detritus, but these should hopefully be much smaller tasks)




nothing should depend from 3.5
not sure for 3.6


I've automated some of the analysis I was doing for python2 packages and 
the results are now available at [1].


So yeah, it looks like nothing uses 3.5.

There are just a couple of packages using 3.6, I guess I'll ping the 
maintainers about those.


[1] https://cygwin.com/packages/reports/python_rebuilds.html



Python 3.5 and 3.6 removal (was Re: Bonfire of the Packages)

2024-03-24 Thread Jon Turney via Cygwin-apps

On 24/09/2023 13:32, Jon Turney via Cygwin-apps wrote:


Generally, we have a large number of old, unmaintained packages.

The policy [1] has always been "Packages without an active maintainer 
may be pulled from the distribution.", but not actively enforced (in 
fact prior to 2022, this used to say "are pulled", but I moderated the 
statement, just to reflect reality).


I guess this needs to also mention upstream EOL status as a criteria.

[...]


Here's my personal list:

* python

After python27 (the last python2 version, which has been sun-setted 
since 2020), both python36 and python37 should be removed (after 
rebuilding any python-* package which don't currently provide 3.8, 3.9 
versions)

 Marco,

I assume you are OK with the removal of python 3.5 (EOL Sept 2020) and 
3.6 (EOL Dec 2021)?


(I'm still dealing with cleaning up the final pieces of python27 
detritus, but these should hopefully be much smaller tasks)




Re: Fwd: Updating cygwin "libnfs" package ?

2024-03-22 Thread Jon Turney via Cygwin-apps

On 22/03/2024 16:08, Roland Mainz via Cygwin-apps wrote:

Hi!



I'd like to take ownership of the Cygwin "libnfs" package (see email
below, the package is old and has bugs related to NFSv4.*) ...
... how do we proceed ? Should I send a patch here, or what do I have to do ?


[1] should explain this (could probably be improved).

A patch against the packaging repo would be a good place to start.

[1] https://cygwin.com/packaging-contributors-guide.html#adopt



Re: [ITP] afflib 3.7.20-1

2024-03-21 Thread Jon Turney via Cygwin-apps

On 21/03/2024 09:04, Christian Franke via Cygwin-apps wrote:

On Wed, 6 Mar 2024 23:26:05 +0100, Christian Franke wrote:

Jon Turney wrote:
...


be added only when needed for new not backward compatible releases. 
The upstream afflib project is mostly idling, so I don't expect any 
new major lib versions in the near future.


If course, I could rename it to libafflib0 if desired.


As far as I know, there is no cost for doing this, and it saves grief 
if upstream ever bumps the soversion.


Also, it's probably best to explicitly list the filename with 
soversion in the CONTENTS, so that if upstream ever does change the 
soversion, it will be detected as a packaging failure, rather than 
producing a package with a mismatch between the soversion in it's 
name and in it's contents.


Good point, new cygport file is attached.


Any further issues with this ITP?


Seems good.

I added this to your packages.



Re: Where have svt-av1 1.8.0-2 gone?

2024-03-16 Thread Jon Turney via Cygwin-apps

On 16/03/2024 00:48, Takashi Yano via Cygwin-apps wrote:

On Sat, 16 Mar 2024 09:39:33 +0900
Takashi Yano wrote:

[...]


This expected:
1.8.0-1 -> 1.8.0-2 -> 2.0.0-1
libsvtav1(1.8.0-1) -> libsvtav1enc1(1.8.0-2) + libsvtav1dec0(1.8.0-2)
-> libsvt1enc1(1.8.0-2) + libsvtav1dec0(2.0.0-2)

However, this does not seem to work as I expected.


What unexpected thing happens?

I guess you only get one of libsvtav1enc1 or libsvtav1dec0 (since if 
these both are marked "obsoletes: libsvtav1", to the dependency solver 
that mean that either of can replace libsvtav1, and provides everything 
that it provides.


So maybe the best solution is:

libsvtav1dec0_OBSOLETES=libsvtav1
libsvtav1dec0_REQUIRES=libsvtav1enc1

So libsvtav1 is replaced by both libsvtav1dec0 and libsvtav1enc1


My expectation was that both libsvtav1enc1(1.8.0-2) and libsvtav1dec0(1.8.0-2)
are installed for upgrading libsvtav1(1.8.0-1).

Instead, I found

1.8.0-2:
libsvtav1_CATEGORY="_obsolete"
libsvtav1_REQUIRES="libsvtav1enc1 libsvtav1dec0"
libsvtav1enc1_CONTENTS="usr/bin/cygSvtAv1Enc-1.dll"
libsvtav1dec0_CONTENTS="usr/bin/cygSvtAv1Dec-0.dll"


Yeah, this should work, but is not longer preferred because you end up 
with an empty libsvtav1 hanging around forever...



works as expected.
Is it possible to change it like this now?


I've tweaked the existing dependencies based on my reasoning above. 
Please let me know if this still isn't working right.




Re: Where have svt-av1 1.8.0-2 gone?

2024-03-15 Thread Jon Turney via Cygwin-apps

On 15/03/2024 13:31, Takashi Yano via Cygwin-apps wrote:

On Fri, 15 Mar 2024 13:14:49 +
Jon Turney wrote:

On 15/03/2024 09:15, Takashi Yano via Cygwin-apps wrote:

I uploaded svt-av1 1.8.0-2 few hours ago, however
it does not appear on the mirror servers so far.

Was anything wrong?


Sorry, things will be a little slower than usual (uploads may take up to
4 hours to get processed) until I get around to fixing up things for
some changes made on sourceware to provide better isolation.

I see that this upload was declined because svt-av1 2.0.0 already exists.

I guess you really want to upload it, as it provides a different set of
shared libraries to 2.0.0. Please let me know.


1.8.0-2 is necessary for changing packaging.


I see. I configured the necessary exception, sot his should be all 
uploaded now.



1.8.0-1: cygSvtAv1Enc-1.dll and cygSvtAv1Dec-0.dll are in libsvtav1,
However,
2.0.0-1: cygSvtAv1Enc-2.dll and cygSvtAv1Dec-0.dll are built.
So, I made
1.8.0-2: cygSvtAv1Enc-1.dll is in libsvtav1enc1 and cygSvtAv1Dec-0 is in 
libsvtav1dec0
  both obsolete libsvtav1
for migration.


Hmm... maybe your thinking here is not quite clear.

You cannot assume that an installation is upgraded often enough that it 
receives every version of every package.


(And in this case, where 1.8.0-2 appears in the repository after 2.0.0 
does, it's not going to get automatically installed anywhere)


So, as a principle, every version of a package must contain complete 
instructions for upgrading to it.



In this particular case, that means the cygport should contain

libsvtav1dec0_OBSOLETES=libsvtav1

for as long as the package produces libsvtav1dec0.


(In fact, I think this all happens to work as desired because libsvtav1 
is also obsoleted by the non-longer produced libsvtav1enc1, but I just 
point this out for completeness)



The first step I did was wrong, i.e. I should not have package which
includes dlls whose versions are different. Sorry.


No problem.  Mistakes happen.



Re: Unable to 'git push' to /git/cygwin-packages/*

2024-03-15 Thread Jon Turney via Cygwin-apps

On 15/03/2024 09:00, Mark Geisert via Cygwin-apps wrote:

On 3/14/2024 9:07 AM, Jon Turney via Cygwin-apps wrote:

On 14/03/2024 15:39, Mark Geisert via Cygwin-apps wrote:

On 3/14/2024 2:42 AM, Jon Turney via Cygwin-apps wrote:

On 14/03/2024 05:45, Mark Geisert via Cygwin-apps wrote:

Hi folks,
I'm getting the error:

fatal: remote error: service not enabled: /git/cygwin-packages/sshfs

when I attempt 'git push' to that repository.  The same happens 
with all the repositories for my packages.  It's been this way for 
a couple days at least.


Have I forgotten some step in the connection at my end?  I'm 
running ssh-agent.



[...]

What is the repository URL you are trying to push to (git remote -v)?


/usr/src/upstaging/sshfs git remote -v
origin git://cygwin.com/git/cygwin-packages/sshfs (fetch)
origin git://cygwin.com/git/cygwin-packages/sshfs (push)


This maybe looks like pilot error.

We don't allow pushing using the git:// protocol (since this protocol 
doesn't do any authorization, pushes with a it are very rarely enabled)



I suggest you need to do

   git push 
ssh://cygwin-rdbxbdvo6bxqt0dzr+a...@public.gmane.org:git/cygwin-packages/sshfs


to push successfully.

If that works, I suggest you memorialize that by doing

   git remote set-url origin --push 
ssh://cygwin-rdbxbdvo6bxqt0dzr+a...@public.gmane.org:git/cygwin-packages/sshfs


which will cause git to automatically use the ssh URL with a simple 
'git push'.


With a minor correction ("/git" instead of "git" in the URL) this works 
fine.  I've made the git config change for all my projects.


Oops. Yes. Of course that's right, my mistake.

Glad to hear that things are working again for you!



Re: Where have svt-av1 1.8.0-2 gone?

2024-03-15 Thread Jon Turney via Cygwin-apps

On 15/03/2024 09:15, Takashi Yano via Cygwin-apps wrote:

I uploaded svt-av1 1.8.0-2 few hours ago, however
it does not appear on the mirror servers so far.

Was anything wrong?


Sorry, things will be a little slower than usual (uploads may take up to 
4 hours to get processed) until I get around to fixing up things for 
some changes made on sourceware to provide better isolation.


I see that this upload was declined because svt-av1 2.0.0 already exists.

I guess you really want to upload it, as it provides a different set of 
shared libraries to 2.0.0. Please let me know.




Re: Unable to 'git push' to /git/cygwin-packages/*

2024-03-14 Thread Jon Turney via Cygwin-apps

On 14/03/2024 15:39, Mark Geisert via Cygwin-apps wrote:

On 3/14/2024 2:42 AM, Jon Turney via Cygwin-apps wrote:

On 14/03/2024 05:45, Mark Geisert via Cygwin-apps wrote:

Hi folks,
I'm getting the error:

fatal: remote error: service not enabled: /git/cygwin-packages/sshfs

when I attempt 'git push' to that repository.  The same happens with 
all the repositories for my packages.  It's been this way for a 
couple days at least.


Have I forgotten some step in the connection at my end?  I'm running 
ssh-agent.


This is probably due to some recent changes made on sourceware. 
Apologies for the inconvenience.


I forget to ask when was the last time this worked for you, so maybe 
assuming this is related is premature.



What is the repository URL you are trying to push to (git remote -v)?


/usr/src/upstaging/sshfs git remote -v
origin git://cygwin.com/git/cygwin-packages/sshfs (fetch)
origin git://cygwin.com/git/cygwin-packages/sshfs (push)


This maybe looks like pilot error.

We don't allow pushing using the git:// protocol (since this protocol 
doesn't do any authorization, pushes with a it are very rarely enabled)



I suggest you need to do

  git push ssh://cyg...@cygwin.com:git/cygwin-packages/sshfs

to push successfully.

If that works, I suggest you memorialize that by doing

  git remote set-url origin --push 
ssh://cyg...@cygwin.com:git/cygwin-packages/sshfs


which will cause git to automatically use the ssh URL with a simple 'git 
push'.




You might like to review the last time we discussed this at [1]

(Note that's slightly different, as to push to cygwin-apps repositories 
you must present the key as yourusern...@cygwin.com, whereas for 
cygwin-packages repositories, you can present the key as 
cyg...@cygwin.com. There are just different due to historical reasons.)


[1] https://cygwin.com/pipermail/cygwin-apps/2021-September/041539.html



Re: Unable to 'git push' to /git/cygwin-packages/*

2024-03-14 Thread Jon Turney via Cygwin-apps

On 14/03/2024 05:45, Mark Geisert via Cygwin-apps wrote:

Hi folks,
I'm getting the error:

fatal: remote error: service not enabled: /git/cygwin-packages/sshfs

when I attempt 'git push' to that repository.  The same happens with all 
the repositories for my packages.  It's been this way for a couple days 
at least.


Have I forgotten some step in the connection at my end?  I'm running 
ssh-agent.


This is probably due to some recent changes made on sourceware. 
Apologies for the inconvenience.


What is the repository URL you are trying to push to (git remote -v)?



Re: [cygport] enabling a replacement for "objdump -d -l"

2024-03-12 Thread Jon Turney via Cygwin-apps

On 11/03/2024 19:35, ASSI via Cygwin-apps wrote:

Jon Turney via Cygwin-apps writes:

[...]



Fifty lines of perl with no comments! This is just line noise to me
unless I spend lots of time staring at it :)


That's what you get from an experiment that went rather more well than
planned.


Seriously, this should at least say "I'm running objdump -Wl to dump
out the .debug_line section containing DWARF XYZ information.

Then maybe some comments about what assumptions it's making about the
human-readable output it's parsing.


So you're asking for a manpage, really.  Should be doable with enough
round tuits.


Well, that would be nice too, but there is is difference between 
describing what it does and describing how it does what it does.


But I'm not being oblique here. I really do want comments.

I'm not sure what's so astounding about the suggestion that a fifty line 
script should have some comments in it that you can't believe I mean 
that literally...


[...]

What this line is doing is obvious, the rest of this block, not so much.


Nothing to see here, move along… :-P


...

[...]

Since the helper script will be installed, it could be made a boolean.


Out of habit grown over decades, I always keep an escape hatch for using
local (modified) copies in such scripts.


Well, OK.  This is less useful to people who actually want to use it, 
though, requiring them to know that 
"DWARF_PARSE=/usr/share/cygport/tools/dwarf-parse.pl" is the right 
incantation.


Perhaps "DWARF_PARSE=1" could be a shorthand for that?



Re: [PATCH cygport] Use correct wording if only one package is announced

2024-03-10 Thread Jon Turney via Cygwin-apps

On 23/02/2024 11:16, Christian Franke via Cygwin-apps wrote:

Brian Inglis via Cygwin-apps wrote:

On 2024-02-21 07:25, Christian Franke via Cygwin-apps wrote:

Change variable name from $s to $has or $s_have as variable $s usually 
implies only the plural letter s or nothing; e.g.

...
+    local has="s have"
+
+    [ $pkg_count != 1 ] || has=" has"
...
+The following package${has} been uploaded to the Cygwin distribution:
...


Agree - new patch attached.


Applied. Thanks!



Re: [PATCH cygport] Fix variable expansion in error message of embedded SMTP perl script

2024-03-10 Thread Jon Turney via Cygwin-apps

On 23/02/2024 12:09, Christian Franke via Cygwin-apps wrote:

Harmless bug ...



Applied. Thanks.



Re: [PATCH cygport] Add repro-check command

2024-03-10 Thread Jon Turney via Cygwin-apps

On 01/03/2024 19:16, Christian Franke via Cygwin-apps wrote:

Christian Franke wrote:
This could be used to check whether a package is possibly 
reproducible. Then it could make sense to add a reasonable 
SOURCE_DATE_EPOCH value to the cygport file.



[...]


An enhanced version of the patch is attached. The build and diff could 
now be run also individually and the diff report includes individual 
files from the packages.


As a side effect, this enables another use case: Check whether changes 
to cygport only change the expected files.


$ cygport project.cygport all repro-check
...
*** Info: Rebuild produced identical packages



Applied. Thanks!


Re: [PATCH cygport] dodoc: Skip a file if a compressed version already exists

2024-03-10 Thread Jon Turney via Cygwin-apps

On 01/03/2024 13:13, Christian Franke via Cygwin-apps wrote:
It IMO makes sense to compress large and rarely viewed doc files like 
change logs. This seems to be common practice on Debian etc.


With current cygport, the following results in ChangeLog and 
ChangeLog.gz in the docdir:


src_install()
{
   ...
   dodoc ChangeLog
   gzip -9 -n "${D}/usr/share/doc/${PN}/ChangeLog"
}


Uh, I don't quite see how this patch will change the behavior of this 
fragment.


Even more confusing, why isn't this already doing what you want? Unless 
you specify -k/--keep to gzip, the input file is removed, right?



The attached patch fixes this and also adds some missing documentation.


I applied the documentation change as that is obviously needed.



Re: [PATCH cygport] Modify origsrc timestamp in patch files if SOURCE_DATE_EPOCH is used

2024-03-10 Thread Jon Turney via Cygwin-apps

On 28/02/2024 15:54, Christian Franke via Cygwin-apps wrote:
Found during testing of 'repro-check' patch with getent-2.18.90-5 source 
package.


This patch also removes the requirement to set TZ=UTC before patches are 
generated.




Applied, but the commentary could stand to be clearer about the issue.

I guess this we now fix both the orig file and modified file timestamps 
in the patch file, as the orig timestamp may also vary.




Re: [PATCH cygport] Add customization support for announce command

2024-03-10 Thread Jon Turney via Cygwin-apps

On 23/02/2024 11:23, Christian Franke via Cygwin-apps wrote:

Christian Franke wrote:
The email generated by the cygport announce command is useful, but 
actual use cases are somewhat limited due to the hard-coded email 
submission.


The attached patch adds more flexibility. The patch is on top of the 
"Use correct wording if only one package is announced" patch.


Slightly changed patch attached. Also adjusted to new version of "Use 
correct wording if only one package is announced" patch.




[...]

Thanks for this.


Possible (better?) alternative names for the new settings:
ANNOUNCEMENT_EDITOR
ANNOUNCEMENT_MAILER


Hmmm... I think "ANNOUNCE_EDITOR" and "ANNOUNCE_MAILER" would be
the best for clarity and conciseness.


-From: ${SMTP_SENDER}
-To: cygwin-annou...@cygwin.com
+${SMTP_SENDER:+From: ${SMTP_SENDER}
+}To: cygwin-annou...@cygwin.com
 Date: $(date -R --date=${msgat})
-Message-Id: <$(date "+%Y%m%d%H%M%S.$$" --date=${msgat})-1-$(echo ${SMTP_SENDER} | sed 
's|.*<\(.*\)>.*|\1|')>
+Message-Id: <$(date "+%Y%m%d%H%M%S.$$" --date=${msgat})-1-$(echo 
${SMTP_SENDER:-cygport} | sed 's|.*<\(.*\)>.*|\1|')>
 Subject: ${NAME} ${PVR}


Can you also explain what this is doing in the commit message, since 
it's not immediately apparent.




Re: [PATCH cygport] Add more checks of SOURCE_DATE_EPOCH

2024-03-10 Thread Jon Turney via Cygwin-apps

On 26/02/2024 19:53, Christian Franke via Cygwin-apps wrote:



Would it not make more sense to just re-export it if set?


If the cygport file decides to set but not export it, there is possibly 
no need to do it. An example is smartmontools.cygport which passes the 
unexported variable as a parameter to configure.


Ok, but exporting it is harmless there, right?

(so that commands like "SOURCE_DATE_EPOCH=something cygport foo" work 
as expected?)




Would make no difference as the 'VAR=val CMD...' syntax already exports 
the variable to the CMD:


$ unset FOO; FOO=bar sh -c 'sh -c "sh -c printenv\ FOO"'
bar


Ah, right.

So you seem to be saying that the only situation where it's set but not 
exported is where it's set in the cygport.


So we're just making people (need to remember to) explicitly write 
"export SOURCE_DATE_EPOCH" in their cygport where needed?




Re: [PATCH cygport] pkg_info.cygpart: Do not detect dependencies on itself in ruby package

2024-03-10 Thread Jon Turney via Cygwin-apps

On 16/02/2024 12:51, Daisuke Fujimura via Cygwin-apps wrote:

Attempting to create a package for ruby-3.3, but it fails when trying
to detect a dependency on itself.


Thanks for this patch.

Can you clarify what the "failure" is here?


To avoid this, skip them if the target is `ruby`.


The second hunk seems like a removes the dependency on ruby_xy for the 
ruby package, which also provides ruby_xy.


Historically, we've allowed self-dependencies like this, because they 
seem to be benign, although it seems like we could do with some generic 
code to suppress them


(e.g. cygport also ends up generating cygwin-debuginfo with a dependency 
on itself, which is harmless but could be suppressed)




Re: Problem with git on cygwin.com?

2024-03-09 Thread Jon Turney via Cygwin-apps

On 09/03/2024 16:15, Marco Atzeri via Cygwin-apps wrote:

On 09/03/2024 17:10, Jon Turney wrote:

On 09/03/2024 15:55, Marco Atzeri via Cygwin-announce wrote:

I start to see

$ git pull
cygwin-rdbxbdvo6bxqt0dzr+a...@public.gmane.org: Permission denied 
(publickey).

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


Has the configuration been modified ?


Probably.

What is the repository URL you are trying to fetch from (git remote -v)



last one
ssh://cygwin-rdbxbdvo6bxqt0dzr+a...@public.gmane.org/git/cygwin-packages/xxhash.git


Thanks.

Overseers have fixed this issue. Thanks for reporting it!



Re: Problem with git on cygwin.com?

2024-03-09 Thread Jon Turney via Cygwin-apps

On 09/03/2024 15:55, Marco Atzeri via Cygwin-announce wrote:

I start to see

$ git pull
cyg...@cygwin.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


Has the configuration been modified ?


Probably.

What is the repository URL you are trying to fetch from (git remote -v)



[PATCH setup 16/16] Add beginnings of a command line installation tool

2024-03-08 Thread Jon Turney via Cygwin-apps
At the moment, all this can do is retrieve setup.ini from a selected
mirror and parse it.
---
 Makefile.am|  22 +-
 cli/cyclops.cc | 186 +
 2 files changed, 207 insertions(+), 1 deletion(-)
 create mode 100644 cli/cyclops.cc

diff --git a/Makefile.am b/Makefile.am
index 6ae5dd6..5813e1a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -35,7 +35,10 @@ AM_CPPFLAGS = -D__USE_MINGW_ANSI_STDIO=1 
-D_FILE_OFFSET_BITS=64 -DLZMA_API_STATI
 inilex_CXXFLAGS:=-Wno-sign-compare
 iniparse_CXXFLAGS:=-Wno-free-nonheap-object
 
-noinst_PROGRAMS = @SETUP@$(EXEEXT) inilint
+noinst_PROGRAMS = \
+   @SETUP@$(EXEEXT) \
+   inilint \
+   cyclops
 
 noinst_LTLIBRARIES = \
libsetupcore.la
@@ -214,6 +217,23 @@ IOSTREAM_PROVIDERS = \
io_stream_file.cc \
io_stream_file.h
 
+cyclops_SOURCES = \
+   $(IOSTREAM_PROVIDERS) \
+   cli/CliParseFeedback.cc \
+   cli/CliGetNetAuth.cc \
+   cli/CliGetUrlFeedback.cc \
+   cli/CliHashCheckFeedback.cc \
+   cli/CliFeedback.h \
+   cli/cyclops.cc \
+   res.rc
+
+cyclops_LDADD = \
+   libsetupcore.la \
+   libgetopt++/libgetopt++.la \
+   $(WININET)
+
+cyclops_LDFLAGS = -mconsole -Wc,-static -static-libtool-libs
+
 @SETUP@_LDADD = \
libsetupcore.la \
libgetopt++/libgetopt++.la \
diff --git a/cli/cyclops.cc b/cli/cyclops.cc
new file mode 100644
index 000..549b65a
--- /dev/null
+++ b/cli/cyclops.cc
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2020 Jon Turney
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ */
+
+/*
+ * The one-eyed hippo sees all!
+ */
+
+#include "CliGetNetAuth.h"
+#include "CliFeedback.h"
+#include "ini.h"
+#include "LogFile.h"
+#include "resource.h"
+#include "setup_version.h"
+#include "state.h"
+
+#include "ConnectionSetting.h"
+#include "KeysSetting.h"
+#include "SiteSetting.h"
+#include "UserSettings.h"
+#include "netio.h"
+
+#include "getopt++/GetOption.h"
+#include "getopt++/BoolOption.h"
+
+BoolOption UnsupportedOption (false, '\0', "allow-unsupported-windows", 
IDS_HELPTEXT_ALLOW_UNSUPPORTED_WINDOWS);
+static BoolOption HelpOption (false, 'h', "help", IDS_HELPTEXT_HELP);
+
+static void
+main_cli ()
+{
+  // installation RootDir is already established by read_mounts()
+  ConnectionSetting ConnectionSettings;
+  ExtraKeysSetting ExtraKeys;
+  SiteSetting ChosenSites;
+
+  // check windows version and abort if too low unless UnsupportedOption
+
+  // announce myself
+  std::cout << "cyclops " << setup_version << std::endl;
+
+  // mode of operation
+  // XXX: probably only support download and install mode
+  source = IDC_SOURCE_NETINST;
+
+  // XXX: local package cache dir (from options or setup.rc)
+  // (fetched setp.ini is stored here)
+  char cwd[MAX_PATH];
+  GetCurrentDirectory (MAX_PATH, cwd);
+  local_dir = std::string (cwd);
+
+  // proxy
+
+  // interactive network auth getter
+  NetIO::auth_getter = new CliGetNetAuth();
+
+  // mirror site
+
+  // fetch and parse ini file(s)
+  CliFeedback feedback;
+  bool succeeded = do_ini_thread(feedback);
+  Log (LOG_PLAIN) << "do_ini_thread: " << succeeded << endLog;
+}
+
+static void
+main_wrap ()
+{
+  UserSettings Settings;
+  Settings.load (std::string());
+  main_cli ();
+  Settings.save (); // Clean exit. save user options.
+}
+
+int
+main (int argc, char **argv)
+{
+  LogSingleton::SetInstance (*LogFile::createLogFile ());
+
+  bool help_option = false;
+  bool invalid_option = false;
+
+  if (!GetOption::GetInstance ().Process (argc, argv, NULL))
+  help_option = invalid_option = true;
+else if (HelpOption)
+  help_option = true;
+
+  if (help_option)
+{
+  if (invalid_option)
+Log (LOG_PLAIN) << "\n" << LoadStringUtf8(IDS_HELPTEXT_ERROR) << "\n" 
<< endLog;
+
+  Log (LOG_PLAIN) << "\n" << LoadStringUtf8(IDS_HELPTEXT_HEADER) << "\n" 
<< endLog;
+  GetOption::GetInstance ().ParameterUsage (Log (LOG_PLAIN), 
LoadStringUtf8);
+
+  Logger ().exit (invalid_option ? 1 : 0, false);
+  return 1;
+}
+
+  LogSingleton::SetInstance (*LogFile::createLogFile ());
+
+  main_wrap();
+
+  return 0;
+}
+
+/* --- */
+
+#include 
+#include "String++.h"
+
+int
+mbox (HWND owner, const char *buf, const char *name, int type)
+{
+  Log (LOG_PLAIN) << "mbox " << name << ": " &

[PATCH setup 15/16] Put various shared subcomponents into a convenience library

2024-03-08 Thread Jon Turney via Cygwin-apps
* logging, settings, netio, iostream, decompressors, packagedb,
csu_util, hashes, signature checking, URL fetching, Exception class, ini
fetching and parsing, global state, version
---
 Makefile.am | 246 +++-
 1 file changed, 126 insertions(+), 120 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index def20a4..6ae5dd6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,6 +37,9 @@ iniparse_CXXFLAGS:=-Wno-free-nonheap-object
 
 noinst_PROGRAMS = @SETUP@$(EXEEXT) inilint
 
+noinst_LTLIBRARIES = \
+   libsetupcore.la
+
 EXTRA_DIST = \
CHANGES \
CONTRIBUTORS \
@@ -59,35 +62,15 @@ BUILT_SOURCES = \
 CLEANFILES = setup_version.c
 
 inilint_LDADD = \
-   libgetopt++/libgetopt++.la \
-   -lntdll -luuid
+   libsetupcore.la \
+   libgetopt++/libgetopt++.la
 
 inilint_SOURCES = \
-   filemanip.cc \
-   filemanip.h \
cli/CliParseFeedback.cc \
cli/CliGetUrlFeedback.cc \
cli/CliHashCheckFeedback.cc \
cli/CliFeedback.h \
-   LogSingleton.cc \
-   LogSingleton.h \
-   IniDBBuilder.h \
-   inilintmain.cc \
-   inilex.ll \
-   iniparse.yy \
-   io_stream.cc \
-   io_stream.h \
-   io_stream_file.cc \
-   io_stream_file.h \
-   mkdir.cc \
-   mkdir.h \
-   mklink2.cc \
-   mklink2.h \
-   PackageTrust.h \
-   String++.cc \
-   String++.h \
-   win32.cc \
-   win32.h
+   inilintmain.cc
 
 # Do not link directly with wininet, as it's vulnerable to sideloading/dll
 # hijacking. Instead we make and link with a delay-loading stub lib, so it's
@@ -116,19 +99,134 @@ WININET=wininet-delaylib.a
 EXTRA_@SETUP@_DEPENDENCIES=wininet-delaylib.a
 endif
 
-@SETUP@_LDADD = \
-   libgetopt++/libgetopt++.la \
+libsetupcore_la_SOURCES = \
+   ConnectionSetting.cc \
+   ConnectionSetting.h \
+   Exception.cc \
+   Exception.h \
+   IniDBBuilder.h \
+   IniDBBuilderPackage.cc \
+   IniDBBuilderPackage.h \
+   KeysSetting.cc \
+   KeysSetting.h \
+   LogFile.cc \
+   LogFile.h \
+   LogSingleton.cc \
+   LogSingleton.h \
+   PackageSpecification.cc \
+   PackageSpecification.h \
+   PackageTrust.h \
+   SiteSetting.cc \
+   SiteSetting.h \
+   SourceSetting.cc \
+   SourceSetting.h \
+   String++.cc \
+   String++.h \
+   UserSettings.cc \
+   UserSettings.h \
+   compactos.cc \
+   compactos.h \
+   compress.cc \
+   compress.h \
+   compress_bz.cc \
+   compress_bz.h \
+   compress_gz.cc \
+   compress_gz.h \
+   compress_xz.cc \
+   compress_xz.h \
+   compress_zstd.cc \
+   compress_zstd.h \
+   crypto.cc \
+   crypto.h \
+   csu_util/MD5Sum.cc \
+   csu_util/MD5Sum.h \
+   csu_util/rfc1738.cc \
+   csu_util/rfc1738.h \
+   csu_util/version_compare.cc \
+   csu_util/version_compare.h \
+   filemanip.cc \
+   filemanip.h \
+   geturl.cc \
+   geturl.h \
+   gpg-packet.cc \
+   gpg-packet.h \
+   ini.cc \
+   ini.h \
+   inilex.ll \
+   iniparse.yy \
+   io_stream.cc \
+   io_stream.h \
+   io_stream_memory.cc \
+   io_stream_memory.h \
+   libsolv.cc \
+   libsolv.h \
+   mkdir.cc \
+   mkdir.h \
+   mklink2.cc \
+   mklink2.h \
+   mount.cc \
+   netio.cc \
+   netio.h \
+   nio-ie5.cc \
+   nio-ie5.h \
+   package_db.cc \
+   package_db.h \
+   package_depends.cc \
+   package_depends.h \
+   package_meta.cc \
+   package_meta.h \
+   package_source.cc \
+   package_source.h \
+   package_version.h \
+   setup_version.c \
+   setup_version.h \
+   sha2.c \
+   sha2.h \
+   state.cc \
+   state.h \
+   win32.cc \
+   win32.h
+
+# warning: always link with mingwex (which gcc specs will cause us to link with
+# anyhow) before ntdll, to ensure we don't link with CRT functions (avaliable 
in
+# some versions of) the ntdll import lib which aren't available on XP.
+libsetupcore_la_LDFLAGS = \
$(LIBGCRYPT_LIBS) \
$(ZSTD_LIBS) \
$(LZMA_LIBS) \
$(BZ2_LIBS) \
$(ZLIB_LIBS) \
-   $(LIBSOLV_LIBS) -lregex \
+   $(LIBSOLV_LIBS) \
+   -lregex \
-lmingwex \
-   -lshlwapi -lcomctl32 -lole32 -lpsapi -luuid -lntdll $(WININET) -lws2_32 
\
+   -lshlwapi \
+   -luuid \
+   -lntdll \
+   -lws2_32
+
+# because of a totally unnecessary "private registration" by static
+# constructors, these sources are completely unsuitable for putting in a 
library
+# (as the providers are not referenced and so aren't included in the final
+# link), so everything with needs them must include these objects
+IOSTREAM_PROVIDERS = \
+   io_stream_cygfile.cc \
+   io_stream_cygfile.h \
+   io_stream_file.cc \
+   io_stream_file.h
+
+@SETUP@_LDADD = \

[PATCH setup 14/16] Push check_for_cached into package_source

2024-03-08 Thread Jon Turney via Cygwin-apps
This is kind of half-right. It helps make the package database code
self-contained (since that needs to use check_for_cached as part of
ScanDownloadedFiles), but also pulls apart the 'cache checking' and
'download file and put it in the cache'.  There's probably some scope
for an package_source interface for "where is the package cache download
location for this package from that site."
---
 download.cc   | 104 ++
 download.h|   6 ---
 package_meta.cc   |   3 +-
 package_source.cc |  95 ++
 package_source.h  |   4 ++
 5 files changed, 103 insertions(+), 109 deletions(-)

diff --git a/download.cc b/download.cc
index fbe36e5..4aba83e 100644
--- a/download.cc
+++ b/download.cc
@@ -19,7 +19,7 @@
 #include "csu_util/rfc1738.h"
 
 #include "download.h"
-  
+
 #include "win32.h"
 
 #include 
@@ -28,7 +28,6 @@
 #include 
 
 #include "resource.h"
-#include "msg.h"
 #include "dialog.h"
 #include "geturl.h"
 #include "state.h"
@@ -48,110 +47,13 @@
 
 extern ThreeBarProgressPage Progress;
 
-// Return true if selected checks pass, false if they don't and the
-// user chooses to delete the file; otherwise throw an exception.
-static bool
-validateCachedPackage (const std::string& fullname, packagesource & pkgsource,
-   Feedback , bool check_hash, bool check_size)
-{
-  try
-{
-  if (check_size)
-   pkgsource.check_size_and_cache (fullname);
-  if (check_hash)
-   pkgsource.check_hash (feedback);
-  return true;
-}
-  catch (Exception *e)
-{
-  pkgsource.set_cached ("");
-  const char *filename = fullname.c_str ();
-  if (strncmp (filename, "file://", 7) == 0)
-   filename += 7;
-  if (e->errNo() == APPERR_CORRUPT_PACKAGE
- && yesno (feedback.owner(), IDS_QUERY_CORRUPT, filename) == IDYES)
-   remove (filename);
-  else
-   throw e;
-}
-  return false;
-}
-
-/* 0 if not cached; may throw exception if validation fails.
- */
-int
-check_for_cached (packagesource & pkgsource, Feedback ,
-  bool mirror_mode, bool check_hash)
-{
-  /* If the packagesource doesn't have a filename, it can't possibly be in the
- cache */
-  if (!pkgsource.Canonical())
-{
-  return 0;
-}
-
-  /* Note that the cache dir is represented by a mirror site of 
file://local_dir */
-  std::string prefix = "file://" + local_dir + "/";
-  std::string fullname = prefix + pkgsource.Canonical();
-
-  if (mirror_mode)
-{
-  /* Just assume correctness of mirror. */
-  if (!pkgsource.Cached())
-   pkgsource.set_cached (fullname);
-  return 1;
-}
-
-  // Already found one, which we can assume to have the right size.
-  if (pkgsource.Cached())
-{
-  if (validateCachedPackage (pkgsource.Cached(), pkgsource, feedback,
-check_hash, false))
-   return 1;
-  // If we get here, pkgsource.Cached() was corrupt and deleted.
-  pkgsource.set_cached ("");
-}
-
-  /*
- 1) is there a legacy version in the cache dir available.
-  */
-  if (io_stream::exists (fullname))
-{
-  if (validateCachedPackage (fullname, pkgsource, feedback, check_hash, 
true))
-   return 1;
-  // If we get here, fullname was corrupt and deleted, but it
-  // might have been cached.
-  pkgsource.set_cached ("");
-}
-
-  /*
- 2) is there a version from one of the selected mirror sites available ?
-  */
-  for (packagesource::sitestype::const_iterator n = pkgsource.sites.begin();
-   n != pkgsource.sites.end(); ++n)
-  {
-std::string fullname = prefix + rfc1738_escape_part (n->key) + "/" +
-  pkgsource.Canonical ();
-if (io_stream::exists(fullname))
-   {
- if (validateCachedPackage (fullname, pkgsource, feedback, check_hash,
-true))
-   return 1;
- // If we get here, fullname was corrupt and deleted, but it
- // might have been cached.
- pkgsource.set_cached ("");
-   }
-  }
-  return 0;
-}
-
 /* download a file from a mirror site to the local cache. */
 static int
 download_one (packagesource & pkgsource, Feedback )
 {
   try
 {
-  if (check_for_cached (pkgsource, feedback))
+  if (pkgsource.check_for_cached(feedback))
 return 0;
 }
   catch (Exception * e)
@@ -295,7 +197,7 @@ do_download_thread (HINSTANCE h, HWND owner)
 
   try
 {
-  if (!check_for_cached (*version.source(), feedback))
+  if (!(version.source()->check_for_cached(feedback)))
 total_download_bytes += version.source()->size;
 }
   catch (Exception * e)
diff --git a/download.h b/download.h
index 3f65153..e887c92 100644
--- a/download.h
+++ b/download.h
@@ -16,10 +16,4 @@
 #ifndef SETUP_DOWNLOAD_H
 #define SETUP_DOWNLOAD_H
 
-#include "Feedback.h"
-
-class packagesource;
-int check_for_cached (packagesource & pkgsource, Feedback ,

[PATCH setup 12/16] Spit out GetNetAuth from NetIO

2024-03-08 Thread Jon Turney via Cygwin-apps
There's still all kinds of janky stuff here: The network proxy
configuration fetched by ConnectionSetting is stored into static members
of the NetIO class, rather than held there and accessed.

Again, define a virtual class as the interface through which user
interaction takes place, and implement that for GUI and CLI clients.

While we're at it, we arrange for the GUI dialogs for network auth to be
properly parented.
---
 GetNetAuth.h |  30 ++
 Makefile.am  |   2 +
 cli/CliGetNetAuth.cc |  45 ++
 cli/CliGetNetAuth.h  |  32 ++
 gui/GuiGetNetAuth.cc | 138 +++
 gui/GuiGetNetAuth.h  |  38 
 net.cc   |   5 ++
 netio.cc | 125 +--
 netio.h  |  19 ++
 nio-ie5.cc   |   4 +-
 10 files changed, 298 insertions(+), 140 deletions(-)
 create mode 100644 GetNetAuth.h
 create mode 100644 cli/CliGetNetAuth.cc
 create mode 100644 cli/CliGetNetAuth.h
 create mode 100644 gui/GuiGetNetAuth.cc
 create mode 100644 gui/GuiGetNetAuth.h

diff --git a/GetNetAuth.h b/GetNetAuth.h
new file mode 100644
index 000..0a26e85
--- /dev/null
+++ b/GetNetAuth.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2000, Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ * Written by DJ Delorie 
+ *
+ */
+
+#ifndef SETUP_GETNETAUTH_H
+#define SETUP_GETNETAUTH_H
+
+class GetNetAuth
+{
+public:
+  /* Helper functions for http/ftp protocols.  Both return nonzero for
+ "cancel", zero for "ok".  They set net_proxy_user, etc, in
+ state.h */
+  virtual int get_auth () = 0;
+  virtual int get_proxy_auth () = 0;
+  virtual int get_ftp_auth () = 0;
+};
+
+#endif /* SETUP_GETNETAUTH_H */
diff --git a/Makefile.am b/Makefile.am
index de066b7..f257e3a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -182,6 +182,8 @@ endif
gpg-packet.cc \
gpg-packet.h \
gui/GuiParseFeedback.cc \
+   gui/GuiGetNetAuth.cc \
+   gui/GuiGetNetAuth.h \
gui/GuiGetUrlFeedback.cc \
gui/GuiFeedback.h \
ini.cc \
diff --git a/cli/CliGetNetAuth.cc b/cli/CliGetNetAuth.cc
new file mode 100644
index 000..a1fde3b
--- /dev/null
+++ b/cli/CliGetNetAuth.cc
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2000, 2001, Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ */
+
+/* Query user for auth information required */
+
+#include "netio.h"
+#include "CliGetNetAuth.h"
+
+#include "LogFile.h"
+
+static int
+auth_common(const char *mode)
+{
+  Log (LOG_PLAIN) << mode << " not implemented" << endLog;
+  Logger ().exit (1);
+  return 1;
+}
+
+int
+CliGetNetAuth::get_auth ()
+{
+  return auth_common("get_auth");
+}
+
+int
+CliGetNetAuth::get_proxy_auth ()
+{
+  return auth_common("get_proxy_auth");
+}
+
+int
+CliGetNetAuth::get_ftp_auth ()
+{
+  return auth_common("get_ftp_auth");
+}
diff --git a/cli/CliGetNetAuth.h b/cli/CliGetNetAuth.h
new file mode 100644
index 000..7ff4520
--- /dev/null
+++ b/cli/CliGetNetAuth.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2000, Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ * Written by DJ Delorie 
+ *
+ */
+
+#ifndef SETUP_CLI_GETNETAUTH_H
+#define SETUP_CLI_GETNETAUTH_H
+
+#include "GetNetAuth.h"
+
+class CliGetNetAuth : public GetNetAuth
+{
+public:
+  /* Helper functions for http/ftp protocols.  Both return nonzero for
+ "cancel", zero for "ok".  They set net_proxy_user, etc, in
+ state.h */
+  int get_auth ();
+  int get_proxy_auth ();
+  int get_ftp_auth ();
+};
+
+#endif /* SETUP_CLI_GETNETAUTH_H */
diff --git a/gui/GuiGetNetAuth.cc b/gui/GuiGetNetAuth.cc
new file mode 100644
index 000..a6d4917
--- /dev/null
+++ b/gui/GuiGetNetAuth.cc
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2000, 2001, Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of 

[PATCH setup 08/16] Instantiate found_ini_list in ini.cc

2024-03-08 Thread Jon Turney via Cygwin-apps
This is the list of ini files found by fromcwd.cc:do_from_local_dir().

Maybe that should be unkinked by actually doing that scan inside ini.cc,
where we could have some progress feedback?

This makes it possible to build ini.cc without fromcwd.cc
---
 fromcwd.cc | 2 --
 ini.cc | 1 +
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/fromcwd.cc b/fromcwd.cc
index f58e955..c53eede 100644
--- a/fromcwd.cc
+++ b/fromcwd.cc
@@ -105,8 +105,6 @@ private:
   std::vector found_ini;
 };
 
-IniList found_ini_list;
-
 bool
 do_from_local_dir (HINSTANCE h, HWND owner, std::string _dir)
 {
diff --git a/ini.cc b/ini.cc
index 09dda13..2b2da10 100644
--- a/ini.cc
+++ b/ini.cc
@@ -56,6 +56,7 @@ std::string ini_setup_version;
 static const std::string setup_exts[] = { "zst", "xz", "bz2", "ini" };
 IniList setup_ext_list (setup_exts,
setup_exts + (sizeof(setup_exts) / 
sizeof(*setup_exts)));
+IniList found_ini_list;
 
 static BoolOption NoVerifyOption (false, 'X', "no-verify", 
IDS_HELPTEXT_NO_VERIFY);
 static BoolOption NoVersionCheckOption (false, '\0', "no-version-check", 
IDS_HELPTEXT_NO_VERSION_CHECK);
-- 
2.43.0



[PATCH setup 13/16] Split out hash checking progress reporting

2024-03-08 Thread Jon Turney via Cygwin-apps
---
 Feedback.h  |  4 
 Makefile.am |  2 ++
 choose.cc   |  4 +++-
 cli/CliFeedback.h   |  5 +
 cli/CliHashCheckFeedback.cc | 30 ++
 download.cc | 24 
 download.h  |  6 +++---
 gui/GuiFeedback.h   |  5 +
 gui/GuiHashCheckFeedback.cc | 34 ++
 install.cc  |  4 +++-
 package_db.cc   |  6 +++---
 package_db.h|  3 ++-
 package_meta.cc | 10 +-
 package_meta.h  |  5 +++--
 package_source.cc   | 33 ++---
 package_source.h|  8 +---
 16 files changed, 129 insertions(+), 54 deletions(-)
 create mode 100644 cli/CliHashCheckFeedback.cc
 create mode 100644 gui/GuiHashCheckFeedback.cc

diff --git a/Feedback.h b/Feedback.h
index 8f603a6..4db7c4a 100644
--- a/Feedback.h
+++ b/Feedback.h
@@ -47,6 +47,10 @@ public:
   virtual void fetch_finish (int total_bytes) = 0;
   virtual void fetch_fatal (const char *filename, const char *err) = 0;
 
+  // hash checking
+  virtual void hash_init (const char *hashalg, const std::string ) = 0;
+  virtual void hash_progress (int bytes, int total_bytes) = 0;
+
   //
   virtual HWND owner () = 0;
 };
diff --git a/Makefile.am b/Makefile.am
index f257e3a..def20a4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -67,6 +67,7 @@ inilint_SOURCES = \
filemanip.h \
cli/CliParseFeedback.cc \
cli/CliGetUrlFeedback.cc \
+   cli/CliHashCheckFeedback.cc \
cli/CliFeedback.h \
LogSingleton.cc \
LogSingleton.h \
@@ -186,6 +187,7 @@ endif
gui/GuiGetNetAuth.h \
gui/GuiGetUrlFeedback.cc \
gui/GuiFeedback.h \
+   gui/GuiHashCheckFeedback.cc \
ini.cc \
ini.h \
IniDBBuilder.h \
diff --git a/choose.cc b/choose.cc
index 8deab87..451b390 100644
--- a/choose.cc
+++ b/choose.cc
@@ -50,6 +50,7 @@
 #include "package_meta.h"
 
 #include "threebar.h"
+#include "gui/GuiFeedback.h"
 #include "Generic.h"
 #include "ControlAdjuster.h"
 #include "prereq.h"
@@ -317,9 +318,10 @@ void
 ChooserPage::OnActivate()
 {
   SetBusy();
+  GuiFeedback feedback(GetHWND());
 
   packagedb db;
-  db.prep();
+  db.prep(feedback);
 
   if (!activated)
 {
diff --git a/cli/CliFeedback.h b/cli/CliFeedback.h
index 3bcc23c..cb59650 100644
--- a/cli/CliFeedback.h
+++ b/cli/CliFeedback.h
@@ -48,6 +48,11 @@ private:
   unsigned int last_tics;
   unsigned int start_tics;
 
+  // hash checking
+public:
+  void hash_init (const char *hashalg, const std::string );
+  void hash_progress (int bytes, int total_bytes);
+
   // owner
 public:
   HWND owner () { return NULL; }
diff --git a/cli/CliHashCheckFeedback.cc b/cli/CliHashCheckFeedback.cc
new file mode 100644
index 000..f5df9fc
--- /dev/null
+++ b/cli/CliHashCheckFeedback.cc
@@ -0,0 +1,30 @@
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ */
+
+#include "cli/CliFeedback.h"
+#include "resource.h"
+#include "String++.h"
+#include 
+
+void
+CliFeedback::hash_init(const char *hashalg, const std::string )
+{
+  std::wstring fmt = LoadStringW(IDS_PROGRESS_CHECKING_HASH);
+  std::wstring s = format(fmt, hashalg, shortname.c_str());
+  std::cout << wstring_to_string(s) << std::endl;
+}
+
+void
+CliFeedback::hash_progress(int bytes, int total_bytes)
+{
+  std::cout << bytes << "/" << total_bytes << "\r";
+}
diff --git a/download.cc b/download.cc
index 02fd484..fbe36e5 100644
--- a/download.cc
+++ b/download.cc
@@ -52,14 +52,14 @@ extern ThreeBarProgressPage Progress;
 // user chooses to delete the file; otherwise throw an exception.
 static bool
 validateCachedPackage (const std::string& fullname, packagesource & pkgsource,
-  HWND owner, bool check_hash, bool check_size)
+   Feedback , bool check_hash, bool check_size)
 {
   try
 {
   if (check_size)
pkgsource.check_size_and_cache (fullname);
   if (check_hash)
-   pkgsource.check_hash ();
+   pkgsource.check_hash (feedback);
   return true;
 }
   catch (Exception *e)
@@ -69,7 +69,7 @@ validateCachedPackage (const std::string& fullname, 
packagesource & pkgsource,
   if (strncmp (filename, "file://", 7) == 0)
filename += 7;
   if (e->errNo() == APPERR_CORRUPT_PACKAGE
- && yesno (owner, IDS_QUERY_CORRUPT, filename) == IDYES)
+ && yesno (feedback.owner(), IDS_QUERY_CORRUPT, filename) == IDYES)
remove (filename);
   else
throw e;
@@ -80,8 +80,8 @@ validateCachedPackage (const 

[PATCH setup 09/16] Move is_64bit to state

2024-03-08 Thread Jon Turney via Cygwin-apps
Note this controls what we will install, not indicating how we are
built, so it's use in splash is questionable, and is downright wrong in
the messages from IniDbBuilderPackage giving URLs for an updated
version of setup.

This controls stuff all over the place!
---
 ini.h |  1 -
 main.cc   | 34 ++
 splash.cc |  2 +-
 state.cc  |  6 ++
 state.h   |  2 ++
 5 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/ini.h b/ini.h
index f1788e2..2ca4f5b 100644
--- a/ini.h
+++ b/ini.h
@@ -23,7 +23,6 @@
 typedef std::vector  IniList;
 extern IniList found_ini_list, setup_ext_list;
 
-extern bool is_64bit;
 extern bool is_new_install;
 extern std::string SetupArch;
 extern std::string SetupIniDir;
diff --git a/main.cc b/main.cc
index 2ce3b30..c359ba9 100644
--- a/main.cc
+++ b/main.cc
@@ -83,7 +83,6 @@
 extern char **_argv;
 #endif
 
-bool is_64bit;
 bool is_new_install = false;
 std::string SetupArch;
 std::string SetupIniDir;
@@ -263,26 +262,21 @@ WinMain (HINSTANCE h,
 else if (HelpOption)
   help_option = true;
 
-if (!((std::string) Arch).size ())
+if (((std::string) Arch).size ())
   {
-#ifdef __x86_64__
-   is_64bit = true;
-#else
-   is_64bit = false;
-#endif
-  }
-else if (((std::string) Arch).find ("64") != std::string::npos)
-  is_64bit = true;
-else if (((std::string) Arch).find ("32") != std::string::npos
-|| ((std::string) Arch).find ("x86") != std::string::npos)
-  is_64bit = false;
-else
-  {
-   char buff[80 + ((std::string) Arch).size ()];
-   sprintf (buff, "Invalid option for --arch:  \"%s\"",
-((std::string) Arch).c_str ());
-   fprintf (stderr, "*** %s\n", buff);
-   exit (1);
+if (((std::string) Arch).find ("64") != std::string::npos)
+  is_64bit = true;
+else if (((std::string) Arch).find ("32") != std::string::npos
+ || ((std::string) Arch).find ("x86") != std::string::npos)
+  is_64bit = false;
+else
+  {
+char buff[80 + ((std::string) Arch).size ()];
+sprintf (buff, "Invalid option for --arch:  \"%s\"",
+ ((std::string) Arch).c_str ());
+fprintf (stderr, "*** %s\n", buff);
+exit (1);
+  }
   }
 
 if (GuiLangOption.isPresent())
diff --git a/splash.cc b/splash.cc
index 40c1334..8b601db 100644
--- a/splash.cc
+++ b/splash.cc
@@ -19,7 +19,7 @@
 #include "setup_version.h"
 #include "resource.h"
 #include "splash.h"
-#include "ini.h"
+#include "state.h"
 
 #define SPLASH_URL "https://cygwin.com;
 #define SPLASH_COPYRIGHT "Copyright 2000-2023"
diff --git a/state.cc b/state.cc
index 111b890..ef14116 100644
--- a/state.cc
+++ b/state.cc
@@ -29,3 +29,9 @@ int root_menu;
 int root_desktop;
 
 LANGID langid;
+
+#ifdef __x86_64__
+bool is_64bit = true;
+#else
+bool is_64bit = false;
+#endif
diff --git a/state.h b/state.h
index b211de3..c4b88a4 100644
--- a/state.h
+++ b/state.h
@@ -48,4 +48,6 @@ extern int root_desktop;
 
 extern LANGID langid;
 
+extern bool is_64bit;
+
 #endif /* SETUP_STATE_H */
-- 
2.43.0



[PATCH setup 11/16] Drop hinstance global

2024-03-08 Thread Jon Turney via Cygwin-apps
We do not need to retain the hInstance value passed into WinMain(), as
it's always available as GetModuleHandle(NULL).

Note that DialogBox() accepts NULL meaning "the current executable" in
any case.

Future work: there's still some completely unnecessary storing it in
class Window and passing it around.
---
 dialog.h|  3 ---
 gui/SitePage.cc |  3 +--
 install.cc  |  2 +-
 main.cc |  5 +
 msg.cc  |  5 ++---
 netio.cc| 10 +-
 6 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/dialog.h b/dialog.h
index 63c98ee..ebbf661 100644
--- a/dialog.h
+++ b/dialog.h
@@ -20,9 +20,6 @@
 
 #include "win32.h"
 
-/* global instance for the application; set in main.cc */
-extern HINSTANCE hinstance;
-
 /* used by main.cc to select the next do_* function */
 extern int next_dialog;
 
diff --git a/gui/SitePage.cc b/gui/SitePage.cc
index 1cdb1bf..9dacebc 100644
--- a/gui/SitePage.cc
+++ b/gui/SitePage.cc
@@ -367,8 +367,7 @@ int check_dropped_mirrors (HWND h)
 {
   if (unattended_mode)
return CACHE_ACCEPT_WARN;
-  return DialogBox (hinstance, MAKEINTRESOURCE (IDD_DROPPED), h,
-   drop_proc);
+  return DialogBox (NULL, MAKEINTRESOURCE (IDD_DROPPED), h, drop_proc);
 }
   return CACHE_ACCEPT_NOWARN;
 }
diff --git a/install.cc b/install.cc
index 628dbd0..001529b 100644
--- a/install.cc
+++ b/install.cc
@@ -660,7 +660,7 @@ Installer::_installOne (packagemeta ,
 dlg_data.processlist = plm.c_str ();
 dlg_data.iteration = iteration;
 
-rc = DialogBoxParam(hinstance, MAKEINTRESOURCE 
(IDD_FILE_INUSE), owner, FileInuseDlgProc, (LPARAM)_data);
+rc = DialogBoxParam(NULL, MAKEINTRESOURCE 
(IDD_FILE_INUSE), owner, FileInuseDlgProc, (LPARAM)_data);
   }
 else
   {
diff --git a/main.cc b/main.cc
index 4c391f5..8a68232 100644
--- a/main.cc
+++ b/main.cc
@@ -86,8 +86,6 @@ extern char **_argv;
 bool is_new_install = false;
 std::string SetupIniDir;
 
-HINSTANCE hinstance;
-
 static StringChoiceOption::StringChoices symlink_types({
 {"native", SymlinkTypeNative},
 {"lnk", SymlinkTypeShortcut},
@@ -176,7 +174,7 @@ main_display ()
 }
 
   // Init window class lib
-  Window::SetAppInstance (hinstance);
+  Window::SetAppInstance (GetModuleHandle(NULL));
 
   // Create pages
   Splash.Create ();
@@ -221,7 +219,6 @@ int WINAPI
 WinMain (HINSTANCE h,
 HINSTANCE hPrevInstance, LPSTR command_line, int cmd_show)
 {
-  hinstance = h;
 
   // Make sure Windows DLLs only delay-load further DLLs from System32
   typedef BOOL (WINAPI *PFNSETDEFAULTDLLDIRECTORIES)(DWORD);
diff --git a/msg.cc b/msg.cc
index 8e344ff..b53df86 100644
--- a/msg.cc
+++ b/msg.cc
@@ -23,7 +23,6 @@
 
 #include 
 #include 
-#include "dialog.h"
 #include "state.h"
 #include "String++.h"
 #include "resource.h"
@@ -66,7 +65,7 @@ mbox (HWND owner, const char *buf, const char *name, int type)
 }
 
   char caption[32];
-  LoadString (hinstance, IDS_MBOX_CAPTION, caption, sizeof (caption));
+  LoadString (GetModuleHandle(NULL), IDS_MBOX_CAPTION, caption, sizeof 
(caption));
 
   return MessageBox (owner, buf, caption, type);
 }
@@ -76,7 +75,7 @@ mbox (HWND owner, const char *name, int type, int id, va_list 
args)
 {
   char buf[1000], fmt[1000];
 
-  if (LoadString (hinstance, id, fmt, sizeof (fmt)) <= 0)
+  if (LoadString (GetModuleHandle(NULL), id, fmt, sizeof (fmt)) <= 0)
 ExitProcess (0);
 
   vsnprintf (buf, 1000, fmt, args);
diff --git a/netio.cc b/netio.cc
index 631532a..d6bfc24 100644
--- a/netio.cc
+++ b/netio.cc
@@ -185,9 +185,9 @@ auth_proc (HWND h, UINT message, WPARAM wParam, LPARAM 
lParam)
 }
 
 static int
-auth_common (HINSTANCE h, int id, HWND owner)
+auth_common (int id, HWND owner)
 {
-  return DialogBox (h, MAKEINTRESOURCE (id), owner, auth_proc);
+  return DialogBox (NULL, MAKEINTRESOURCE (id), owner, auth_proc);
 }
 
 int
@@ -195,7 +195,7 @@ NetIO::get_auth (HWND owner)
 {
   user = _user;
   passwd = _passwd;
-  return auth_common (hinstance, IDD_NET_AUTH, owner);
+  return auth_common (IDD_NET_AUTH, owner);
 }
 
 int
@@ -203,7 +203,7 @@ NetIO::get_proxy_auth (HWND owner)
 {
   user = _proxy_user;
   passwd = _proxy_passwd;
-  return auth_common (hinstance, IDD_PROXY_AUTH, owner);
+  return auth_common (IDD_PROXY_AUTH, owner);
 }
 
 int
@@ -221,7 +221,7 @@ NetIO::get_ftp_auth (HWND owner)
 }
   user = _ftp_user;
   passwd = _ftp_passwd;
-  return auth_common (hinstance, IDD_FTP_AUTH, owner);
+  return auth_common (IDD_FTP_AUTH, owner);
 }
 
 const char *
-- 
2.43.0



[PATCH setup 07/16] Split out URL fetching progress reporting

2024-03-08 Thread Jon Turney via Cygwin-apps
lderPackage.h b/IniDBBuilderPackage.h
index 3e3a9e4..0f59257 100644
--- a/IniDBBuilderPackage.h
+++ b/IniDBBuilderPackage.h
@@ -24,13 +24,13 @@
 #include "String++.h"
 #include "libsolv.h"
 
-class IniParseFeedback;
+class Feedback;
 class packagesource;
 
 class IniDBBuilderPackage:public IniDBBuilder
 {
 public:
-  IniDBBuilderPackage (IniParseFeedback const &);
+  IniDBBuilderPackage (Feedback const &);
   ~IniDBBuilderPackage ();
 
   void buildTimestamp (const std::string& );
@@ -88,7 +88,7 @@ private:
   SolverPool::addPackageData cbpv;
   std::set  replace_versions;
 
-  IniParseFeedback const &_feedback;
+  Feedback const &_feedback;
   bool minimum_version_checked;
 };
 
diff --git a/IniParseFeedback.h b/IniParseFeedback.h
deleted file mode 100644
index c3c7803..000
--- a/IniParseFeedback.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2002 Robert Collins.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by Robert Collins 
- *
- */
-
-#ifndef SETUP_INIPARSEFEEDBACK_H
-#define SETUP_INIPARSEFEEDBACK_H
-
-
-#include 
-/* Strategy for feedback from IniParsing.
- * Used by the builder or parsing classes to send feedback that users need
- * but that should not interrupt parsing.
- * Fatal errors are thrown as exceptions.
- */
-class IniParseFeedback
-{
-public:
-  virtual void progress (unsigned long const, unsigned long const) = 0;
-  virtual void iniName (const std::string& ) = 0;
-  virtual void babble (const std::string& ) const = 0;
-  virtual void warning (const std::string& ) const = 0;
-  virtual void show_errors () const = 0;
-  virtual void note_error(int lineno, const std::string ) = 0;
-  virtual bool has_errors () const = 0;
-};
-
-#endif /* SETUP_INIPARSEFEEDBACK_H */
diff --git a/Makefile.am b/Makefile.am
index f753961..de066b7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -65,8 +65,9 @@ inilint_LDADD = \
 inilint_SOURCES = \
filemanip.cc \
filemanip.h \
-   CliParseFeedback.cc \
-   CliParseFeedback.h \
+   cli/CliParseFeedback.cc \
+   cli/CliGetUrlFeedback.cc \
+   cli/CliFeedback.h \
LogSingleton.cc \
LogSingleton.h \
IniDBBuilder.h \
@@ -181,6 +182,8 @@ endif
gpg-packet.cc \
gpg-packet.h \
gui/GuiParseFeedback.cc \
+   gui/GuiGetUrlFeedback.cc \
+   gui/GuiFeedback.h \
ini.cc \
ini.h \
IniDBBuilder.h \
@@ -188,7 +191,7 @@ endif
IniDBBuilderPackage.h \
inilex.ll \
iniparse.yy \
-   IniParseFeedback.h \
+   Feedback.h \
install.cc \
io_stream.cc \
io_stream.h \
diff --git a/CliParseFeedback.h b/cli/CliFeedback.h
similarity index 52%
rename from CliParseFeedback.h
rename to cli/CliFeedback.h
index a19659e..3bcc23c 100644
--- a/CliParseFeedback.h
+++ b/cli/CliFeedback.h
@@ -11,11 +11,14 @@
  *
  */
 
-#include "IniParseFeedback.h"
+#include "Feedback.h"
 
-class CliParseFeedback : public IniParseFeedback
+class CliFeedback : public Feedback
 {
+  // ini parse
 public:
+  virtual void parse_init ();
+  virtual void parse_finish ();
   virtual void progress (unsigned long const pos, unsigned long const max);
   virtual void iniName (const std::string& name);
   virtual void babble (const std::string& message) const;
@@ -25,4 +28,28 @@ public:
   virtual bool has_errors () const;
 private:
   int error_count = 0;
+
+  // URL fetch
+public:
+  void fetch_progress_disable (bool);
+  void fetch_init (const std::string , int length);
+  void fetch_set_length(int length);
+  void fetch_set_total_length(long long int total_length);
+  void fetch_progress (int bytes);
+  void fetch_total_progress ();
+  void fetch_finish (int total_bytes);
+  void fetch_fatal (const char *filename, const char *err);
+
+private:
+  int max_bytes;
+  long long int total_download_bytes = 0; // meaning ???
+  long long int total_download_bytes_sofar = 0;
+
+  unsigned int last_tics;
+  unsigned int start_tics;
+
+  // owner
+public:
+  HWND owner () { return NULL; }
+
 };
diff --git a/cli/CliGetUrlFeedback.cc b/cli/CliGetUrlFeedback.cc
new file mode 100644
index 000..1256118
--- /dev/null
+++ b/cli/CliGetUrlFeedback.cc
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2024 Jon Turney
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found 

[PATCH setup 06/16] Simplify invocation of UserSettings::open_settings()

2024-03-08 Thread Jon Turney via Cygwin-apps
Simplify how we check for a setup.rc settings file in the local cache
dir (Who knew that setup even did this?): pass the directory down to
UserSettings::open_settings() as a parameter, rather than by storing it
in an (otherwise unused) member.

Also: rename the 'cwd' parameter, because it's actually an arbitrary
directory, not the cwd.

(Archeology seems to indicate that at one stage we'd save settings in
the cwd if we needed to write them before the cygwin root was known, and
migrate that file to the cygwin root when it becomes known; then we
changed to keeping that file in the cache dir, then we forgot to migrate
it, so perhaps all this complexity isn't needed?)
---
 UserSettings.cc | 12 +++-
 UserSettings.h  |  4 +---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/UserSettings.cc b/UserSettings.cc
index c8ddd3d..3ec6798 100644
--- a/UserSettings.cc
+++ b/UserSettings.cc
@@ -65,14 +65,17 @@ UserSettings::extend_table (ssize_t i)
 }
 
 io_stream *
-UserSettings::open_settings (const char *filename, std::string )
+UserSettings::open_settings (const char *filename, std::string , 
std::string )
 {
+  // first look for a settings file in specified dir
   pathname = "file://";
-  pathname += cwd;
-  if (!isdirsep (cwd[cwd.size () - 1]) && !isdirsep (filename[0]))
+  pathname += dir;
+  if (!isdirsep (dir[dir.size () - 1]) && !isdirsep (filename[0]))
 pathname += "/";
   pathname += filename;
   io_stream *f = io_stream::open(pathname, "rt", 0);
+
+  // if not found, look in cygwin installation
   if (!f)
 {
   pathname = "cygfile:///etc/setup/";
@@ -92,8 +95,7 @@ UserSettings::UserSettings ()
 void
 UserSettings::load (std::string local_dir)
 {
-  cwd = local_dir;
-  io_stream *f = open_settings ("setup.rc", filename);
+  io_stream *f = open_settings ("setup.rc", local_dir, filename);
 
   if (!f)
 return;
diff --git a/UserSettings.h b/UserSettings.h
index 3de06e1..dc06ab2 100644
--- a/UserSettings.h
+++ b/UserSettings.h
@@ -27,7 +27,6 @@ private:
   ssize_t table_len;
 
   std::string filename;
-  std::string cwd;
 
 public:
   static class UserSettings *global;
@@ -44,8 +43,7 @@ public:
 
 private:
   void extend_table (ssize_t);
-  io_stream *open_settings (const char *, std::string&);
-
+  io_stream *open_settings (const char *, std::string &, std::string&);
 };
 
 #endif // SETUP_USERSETTINGS_H
-- 
2.43.0



[PATCH setup 10/16] Move setup.ini pathame components to ini.cc

2024-03-08 Thread Jon Turney via Cygwin-apps
Move SetupBaseNameOption to ini.cc
Eliminate SetupIniDir, it's just SetupArch + "/"
Change SetupArch() and SetupBaseName() into functions, to avoid having
to do global initialization at the right time.
---
 fromcwd.cc |  8 
 ini.cc | 22 +-
 ini.h  |  5 ++---
 main.cc|  8 
 4 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/fromcwd.cc b/fromcwd.cc
index c53eede..b1f1021 100644
--- a/fromcwd.cc
+++ b/fromcwd.cc
@@ -52,7 +52,7 @@ public:
 ext != setup_ext_list.end ();
 ext++, fi++)
  {
-   if (!casecompare (SetupBaseName + "." + *ext,  theFile->cFileName))
+   if (!casecompare (SetupBaseName() + "." + *ext,  
theFile->cFileName))
  *fi = true;
  }
   }
@@ -62,7 +62,7 @@ public:
   {
 if (level <= 0)
   return;
-inidir = !casecompare (SetupArch, aDir->cFileName);
+inidir = !casecompare (SetupArch(), aDir->cFileName);
 if (level == 1 && !inidir)
   return;
 Find aFinder (basePath + aDir->cFileName);
@@ -74,8 +74,8 @@ public:
  {
if (*fi)
  {
-   found_ini_list.push_back (basePath + SetupArch + "/"
- + SetupBaseName + "." + *ext);
+   found_ini_list.push_back (basePath + SetupArch() + "/"
+ + SetupBaseName() + "." + *ext);
/* 
 * Terminate the search after the first setup file
 * found, which shadows any setup files with
diff --git a/ini.cc b/ini.cc
index 2b2da10..42df6a3 100644
--- a/ini.cc
+++ b/ini.cc
@@ -44,6 +44,7 @@
 #include "io_stream_memory.h"
 
 #include "getopt++/BoolOption.h"
+#include "getopt++/StringOption.h"
 #include "IniDBBuilderPackage.h"
 #include "compress.h"
 #include "msg.h"
@@ -58,10 +59,21 @@ IniList setup_ext_list (setup_exts,
setup_exts + (sizeof(setup_exts) / 
sizeof(*setup_exts)));
 IniList found_ini_list;
 
+static StringOption SetupBaseNameOption ("setup", 'i', "ini-basename", 
IDS_HELPTEXT_INI_BASENAME, false);
 static BoolOption NoVerifyOption (false, 'X', "no-verify", 
IDS_HELPTEXT_NO_VERIFY);
 static BoolOption NoVersionCheckOption (false, '\0', "no-version-check", 
IDS_HELPTEXT_NO_VERSION_CHECK);
 
 
+std::string SetupArch()
+{
+  return is_64bit ? "x86_64" : "x86";
+}
+
+std::string SetupBaseName()
+{
+  return SetupBaseNameOption;
+}
+
 static io_stream*
 decompress_ini (io_stream *ini_file, std::string _ini_name)
 {
@@ -170,7 +182,7 @@ do_local_ini (Feedback )
   if (!ini_file || sig_fail)
{
  // no setup found or signature invalid
- note (myFeedback.owner(), IDS_SETUPINI_MISSING, SetupBaseName.c_str 
(),
+ note (myFeedback.owner(), IDS_SETUPINI_MISSING, SetupBaseName().c_str 
(),
"localdir");
  ini_error = true;
}
@@ -180,7 +192,7 @@ do_local_ini (Feedback )
  myFeedback.babble ("Found ini file - " + current_ini_name);
  myFeedback.iniName (current_ini_name);
  int ldl = local_dir.length () + 1;
- int cap = current_ini_name.rfind ("/" + SetupArch);
+ int cap = current_ini_name.rfind ("/" + SetupArch());
  aBuilder.parse_mirror =
rfc1738_unescape (current_ini_name.substr (ldl, cap - ldl));
  ini_init (ini_file, , myFeedback);
@@ -225,7 +237,7 @@ do_remote_ini (Feedback )
   ext++)
{
  current_ini_ext = *ext;
- current_ini_name = n->url + SetupIniDir + SetupBaseName + "." + 
current_ini_ext;
+ current_ini_name = n->url + SetupArch() + "/" + SetupBaseName() + "." 
+ current_ini_ext;
  current_ini_sig_name = current_ini_name + ".sig";
  ini_sig_file = get_url_to_membuf (current_ini_sig_name, myFeedback);
  ini_file = get_url_to_membuf (current_ini_name, myFeedback);
@@ -240,7 +252,7 @@ do_remote_ini (Feedback )
   if (!ini_file || sig_fail)
{
  // no setup found or signature invalid
- note (myFeedback.owner(), IDS_SETUPINI_MISSING, SetupBaseName.c_str 
(), n->url.c_str ());
+ note (myFeedback.owner(), IDS_SETUPINI_MISSING, SetupBaseName().c_str 
(), n->url.c_str ());
  ini_error = true;
}
   else
@@ -260,7 +272,7 @@ do_remote_ini (Feedback )
  /* save known-good setup.ini locally */
  const std::string fp = "file://" + local_dir + "/" +
  rfc1738_escape_part (n->url) +
- "/" + SetupIniDir + SetupBaseName + 
".ini";
+ "/" + SetupArch() + "/" + SetupBaseName() 
+ ".ini";
  io_stream::mkpath_p (PATH_TO_FILE, fp, 0);
  if (io_stream *out = io_stream::open (fp, "wb", 0))
{
diff --git a/ini.h b/ini.h
index 2ca4f5b..05b31e0 100644
--- a/ini.h
+++ b/ini.h
@@ -24,9 +24,8 @@ typedef std::vector  IniList;

[PATCH setup 03/16] Split GuiParseFeedback out from ini fetcher

2024-03-08 Thread Jon Turney via Cygwin-apps
This will ultimately make it possible to fetch and parse an ini file
without having a GUI.
---
 Makefile.am |   1 +
 gui/GuiParseFeedback.cc | 139 
 ini.cc  | 134 ++
 ini.h   |   2 +
 4 files changed, 149 insertions(+), 127 deletions(-)
 create mode 100644 gui/GuiParseFeedback.cc

diff --git a/Makefile.am b/Makefile.am
index 8a50cb0..82efbd8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -180,6 +180,7 @@ endif
geturl.h \
gpg-packet.cc \
gpg-packet.h \
+   gui/GuiParseFeedback.cc \
ini.cc \
ini.h \
IniDBBuilder.h \
diff --git a/gui/GuiParseFeedback.cc b/gui/GuiParseFeedback.cc
new file mode 100644
index 000..263fae1
--- /dev/null
+++ b/gui/GuiParseFeedback.cc
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2000,2007 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ * Written by DJ Delorie 
+ *
+ */
+
+#include "Exception.h"
+#include "IniParseFeedback.h"
+#include "ini.h"
+#include "msg.h"
+#include "resource.h"
+#include "state.h"
+#include "threebar.h"
+
+extern ThreeBarProgressPage Progress;
+
+class GuiParseFeedback : public IniParseFeedback
+{
+public:
+  GuiParseFeedback () : lastpct (0)
+{
+  Progress.SetText1 (IDS_PROGRESS_PARSING);
+  Progress.SetText2 ("");
+  Progress.SetText3 ("");
+  Progress.SetText4 (IDS_PROGRESS_PROGRESS);
+
+  yyerror_count = 0;
+  yyerror_messages.clear ();
+}
+  virtual void progress (unsigned long const pos, unsigned long const max)
+{
+  if (!max)
+/* length not known or eof */
+return;
+  if (lastpct == 100)
+/* rounding down should mean this only ever fires once */
+lastpct = 0;
+  if (pos * 100 / max > lastpct)
+{
+  lastpct = pos * 100 / max;
+  /* Log (LOG_BABBLE) << lastpct << "% (" << pos << " of " << max
+<< " bytes of ini file read)" << endLog; */
+}
+  Progress.SetBar1 (pos, max);
+
+  static char buf[100];
+  sprintf (buf, "%d %%  (%ldk/%ldk)", lastpct, pos/1000, max/1000);
+  Progress.SetText3 (buf);
+}
+  virtual void iniName (const std::string& name)
+{
+  Progress.SetText2 (name.c_str ());
+  Progress.SetText3 ("");
+  filename = name;
+}
+  virtual void babble (const std::string& message)const
+{
+  Log (LOG_BABBLE) << message << endLog;
+}
+  virtual void warning (const std::string& message)const
+{
+  mbox (Progress.GetHWND(), message.c_str (), "Warning", 0);
+}
+  virtual void note_error(int lineno, const std::string )
+{
+  char tmp[16];
+  sprintf (tmp, "%d", lineno);
+
+  std::string e = filename + " line " + tmp + ": " + error;
+
+  if (!yyerror_messages.empty ())
+yyerror_messages += "\n";
+
+  yyerror_messages += e;
+  yyerror_count++;
+}
+  virtual bool has_errors () const
+{
+  return (yyerror_count > 0);
+}
+  virtual void show_errors () const
+{
+  mbox (Progress.GetHWND(), yyerror_messages.c_str (), "Parse Errors", 0);
+}
+  virtual ~ GuiParseFeedback ()
+{
+  Progress.SetText2 ("");
+  Progress.SetText3 ("");
+  Progress.SetText4 (IDS_PROGRESS_PACKAGE);
+  Progress.SetBar1 (0);
+}
+private:
+  unsigned int lastpct;
+  std::string filename;
+  std::string yyerror_messages;
+  int yyerror_count;
+};
+
+static DWORD WINAPI
+do_ini_thread_reflector (void* p)
+{
+  HANDLE *context;
+  context = (HANDLE*)p;
+
+  SetThreadUILanguage(langid);
+
+  try
+  {
+GuiParseFeedback feedback;
+bool succeeded = do_ini_thread ((HINSTANCE)context[0], (HWND)context[1], 
feedback);
+
+// Tell the progress page that we're done downloading
+Progress.PostMessageNow (WM_APP_SETUP_INI_DOWNLOAD_COMPLETE, 0, succeeded);
+  }
+  TOPLEVEL_CATCH ((HWND) context[1], "ini");
+
+  ExitThread (0);
+}
+
+static HANDLE context[2];
+
+void
+do_ini (HINSTANCE h, HWND owner)
+{
+  context[0] = h;
+  context[1] = owner;
+
+  DWORD threadID;
+  CreateThread (NULL, 0, do_ini_thread_reflector, context, 0, );
+}
diff --git a/ini.cc b/ini.cc
index 112a0ad..95c9964 100644
--- a/ini.cc
+++ b/ini.cc
@@ -33,7 +33,6 @@
 #include 
 
 #include "resource.h"
-#include "state.h"
 #include "geturl.h"
 #include "dialog.h"
 #include "mount.h"
@@ -44,17 +43,13 @@
 #include "io_stream.h"
 #include "io_stream_memory.h"
 
-#include "threebar.h"
-
 #include "getopt++/BoolOption.h"
 #include "IniDBBuilderPackage.h"
 #include "compress.h"
-#include "Exception.h"
+#include "msg.h"
 #include "crypto.h"
 #include 

[PATCH setup 04/16] Split out site into SiteSettings and SitePage

2024-03-08 Thread Jon Turney via Cygwin-apps
Again, this will ultimately make it possible to specify, or store and
retrieve from settings a site, without having a GUI.
---
 Makefile.am|   6 +-
 SiteSetting.cc | 193 +
 site.h => SiteSetting.h|  57 +++
 site.cc => gui/SitePage.cc | 169 +---
 gui/SitePage.h |  45 +
 ini.cc |   2 +-
 main.cc|   3 +-
 threebar.cc|   2 +-
 8 files changed, 264 insertions(+), 213 deletions(-)
 create mode 100644 SiteSetting.cc
 rename site.h => SiteSetting.h (74%)
 rename site.cc => gui/SitePage.cc (77%)
 create mode 100644 gui/SitePage.h

diff --git a/Makefile.am b/Makefile.am
index 82efbd8..f753961 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -266,8 +266,10 @@ endif
setup_version.c \
sha2.h \
sha2.c \
-   site.cc \
-   site.h \
+   gui/SitePage.cc \
+   gui/SitePage.h \
+   SiteSetting.cc \
+   SiteSetting.h \
source.cc \
source.h \
SourceSetting.cc \
diff --git a/SiteSetting.cc b/SiteSetting.cc
new file mode 100644
index 000..be5f5d8
--- /dev/null
+++ b/SiteSetting.cc
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2000, Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ * Written by DJ Delorie 
+ *
+ */
+
+#include "io_stream.h"
+#include "SiteSetting.h"
+#include "UserSettings.h"
+#include "getopt++/StringArrayOption.h"
+#include "getopt++/BoolOption.h"
+#include "resource.h"
+
+#include 
+#include 
+#include 
+#include 
+
+StringArrayOption SiteOption('s', "site", IDS_HELPTEXT_SITE);
+extern BoolOption UnsupportedOption;
+
+/* Selected sites */
+SiteList site_list;
+
+/* Fresh mirrors + selected sites */
+SiteList all_site_list;
+
+SiteSetting::SiteSetting (): saved (false)
+{
+  std::vector SiteOptionStrings = SiteOption;
+  if (SiteOptionStrings.size())
+{
+  for (std::vector::const_iterator n = 
SiteOptionStrings.begin ();
+   n != SiteOptionStrings.end (); ++n)
+registerSavedSite (n->c_str ());
+}
+  else
+getSavedSites ();
+}
+
+const char *
+SiteSetting::lastMirrorKey ()
+{
+  if (UnsupportedOption)
+return "last-mirror-unsupported";
+
+  return "last-mirror";
+}
+
+void
+SiteSetting::save()
+{
+  io_stream *f = UserSettings::instance().open (lastMirrorKey ());
+  if (f)
+{
+  for (SiteList::const_iterator n = site_list.begin ();
+   n != site_list.end (); ++n)
+*f << n->url;
+  delete f;
+}
+  saved = true;
+}
+
+SiteSetting::~SiteSetting ()
+{
+  if (!saved)
+save ();
+}
+
+/* List of machines that should not be used by default when saved
+   in "last-mirror". */
+#define NOSAVE1 "ftp://sourceware.org/;
+#define NOSAVE1_LEN (sizeof (NOSAVE2) - 1)
+#define NOSAVE2 "ftp://sources.redhat.com/;
+#define NOSAVE2_LEN (sizeof (NOSAVE1) - 1)
+#define NOSAVE3 "ftp://gcc.gnu.org/;
+#define NOSAVE3_LEN (sizeof (NOSAVE3) - 1)
+
+void
+SiteSetting::registerSavedSite (const char * site)
+{
+  site_list_type tempSite(site, "", "", "", false);
+
+  /* Don't default to certain machines if they suffer from bandwidth
+ limitations. */
+  if (strnicmp (site, NOSAVE1, NOSAVE1_LEN) == 0
+  || strnicmp (site, NOSAVE2, NOSAVE2_LEN) == 0
+  || strnicmp (site, NOSAVE3, NOSAVE3_LEN) == 0)
+return;
+
+  site_list_insert (all_site_list, tempSite);
+  site_list.push_back (tempSite);
+}
+
+void
+SiteSetting::getSavedSites ()
+{
+  const char *buf = UserSettings::instance().get (lastMirrorKey ());
+  if (!buf)
+return;
+  char *fg_ret = strdup (buf);
+  for (char *site = strtok (fg_ret, "\n"); site; site = strtok (NULL, "\n"))
+registerSavedSite (site);
+  free (fg_ret);
+}
+
+site_list_type::site_list_type (const std::string &_url,
+const std::string &_servername,
+const std::string &_area,
+const std::string &_location,
+bool _from_mirrors_lst,
+bool _noshow /* default: false */)
+{
+  url = _url;
+  servername = _servername;
+  area = _area;
+  location = _location;
+  from_mirrors_lst = _from_mirrors_lst;
+  noshow = _noshow;
+
+  /* Canonicalize URL to ensure it ends with a '/' */
+  if (url.at(url.length()-1) != '/')
+url.append("/");
+
+  /* displayed_url is protocol and site name part of url */
+  std::string::size_type path_offset = url.find ("/", url.find ("//") + 2);
+  displayed_url = url.substr(0, path_offset);
+
+  /* the sorting key is hostname components in reverse order (to sort by 

[PATCH setup 05/16] Don't call Antivirus::AtExit() directly from Logger::exit()

2024-03-08 Thread Jon Turney via Cygwin-apps
The call to Antivirus::AtExit() needs to be take place before we write
the log, so we see in the log if it failed. But calling it directly from
Logger::exit() is a horrible layering violation, which makes it
impossible to use the logger in other executables...

Add LogFile::atexit() method, which registers atexit handlers which are
run by LogFile::exit() before the log is closed.

The real solution here is probably not to exit via Logger::exit() all
over the place. And also perhaps to switch logfile writing from
"defered" to "immediate" once the root directory has been selected
(which establishes where the logfile should be written).

Also update a comment, out of date since 5fa64c3c.
---
 AntiVirus.cc |  4 ++--
 LogFile.cc   | 18 +-
 LogFile.h|  8 ++--
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/AntiVirus.cc b/AntiVirus.cc
index cc416cc..cb8e8ee 100644
--- a/AntiVirus.cc
+++ b/AntiVirus.cc
@@ -16,8 +16,7 @@
 #include "AntiVirus.h"
 
 #include "getopt++/BoolOption.h"
-
-#include "LogSingleton.h"
+#include "LogFile.h"
 
 #include "win32.h"
 #include 
@@ -77,6 +76,7 @@ bool
 AntiVirusPage::Create ()
 {
 detect();
+Logger().atexit(AntiVirus::AtExit);
 return PropertyPage::Create (NULL, dialog_cmd, IDD_VIRUS);
 }
 
diff --git a/LogFile.cc b/LogFile.cc
index ab2e3ec..0022eff 100644
--- a/LogFile.cc
+++ b/LogFile.cc
@@ -28,7 +28,6 @@
 #include 
 #include 
 #include 
-#include "AntiVirus.h"
 #include "filemanip.h"
 #include "String++.h"
 #include "getopt++/BoolOption.h"
@@ -115,12 +114,21 @@ LogFile::getFileName (int level) const
   return "";
 }
 
+void
+LogFile::atexit(void (*func)(void))
+{
+  exit_fns.push_back(func);
+}
+
 void
 LogFile::exit (int exit_code, bool show_end_install_msg)
 {
-  AntiVirus::AtExit();
+  /* Execute any functions we want to run at exit (we don't use stdlib atexit()
+ because we want to allow them to potentially write to the log) */
+  for (auto i = exit_fns.rbegin(); i != exit_fns.rend(); ++i)
+  (*i)();
+
   static int been_here = 0;
-  /* Exitcode -1 is special... */
   if (been_here)
 ::exit (exit_code);
   been_here = 1;
@@ -132,8 +140,8 @@ LogFile::exit (int exit_code, bool show_end_install_msg)
   Log (LOG_PLAIN) << "note: " << wstring_to_string(buf) << endLog;
 }
 
-  /* ... in that it skips the boring log messages.  Exit code -1 is used when
- just printing the help output and when we're self-elevating. */
+  /* Skip the log messages when just printing the help/version output, and when
+ we're self-elevating. */
   if (show_end_install_msg)
 Log (LOG_TIMESTAMP) << "Ending cygwin install" << endLog;
 
diff --git a/LogFile.h b/LogFile.h
index ddbc2dc..8efa1b0 100644
--- a/LogFile.h
+++ b/LogFile.h
@@ -18,6 +18,7 @@
 
 #include "LogSingleton.h"
 #include 
+#include 
 
 // Logging class. Default logging level is PLAIN.
 class LogFile : public LogSingleton {
@@ -36,18 +37,21 @@ public:
* but doesn't call generic C++ destructors
*/
   virtual void exit (int exit_code, bool show_end_install_msg = true)
- __attribute__ ((noreturn));
+  __attribute__ ((noreturn));
+  virtual void atexit( void (*func)(void));
+
   virtual void flushAll ();
   virtual ~LogFile();
   // get a specific verbosity stream.
   virtual std::ostream () (enum log_level level);
-  
+
 protected:
   LogFile(std::stringbuf *aStream);
   LogFile (LogFile const &); // no copy constructor
   LogFile  = (LogFile const&); // no assignment operator
   virtual void endEntry(); // the current in-progress entry is complete.
   static int exit_msg;
+  std::vector  exit_fns;
 private:
   void log_save (int babble, const std::string& filename, bool append);
 };
-- 
2.43.0



[PATCH setup 02/16] Move setup_exts[] to the only place it's used

2024-03-08 Thread Jon Turney via Cygwin-apps
---
 ini.cc | 1 +
 ini.h  | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/ini.cc b/ini.cc
index 3ef1311..112a0ad 100644
--- a/ini.cc
+++ b/ini.cc
@@ -58,6 +58,7 @@ extern ThreeBarProgressPage Progress;
 unsigned int setup_timestamp = 0;
 std::string ini_setup_version;
 // TODO: use C++11x initializer lists instead and drop the literal array
+static const std::string setup_exts[] = { "zst", "xz", "bz2", "ini" };
 IniList setup_ext_list (setup_exts,
setup_exts + (sizeof(setup_exts) / 
sizeof(*setup_exts)));
 
diff --git a/ini.h b/ini.h
index d4eaf87..4088968 100644
--- a/ini.h
+++ b/ini.h
@@ -21,7 +21,7 @@
 
 typedef std::vector  IniList;
 extern IniList found_ini_list, setup_ext_list;
-const std::string setup_exts[] = { "zst", "xz", "bz2", "ini" };
+
 extern bool is_64bit;
 extern bool is_new_install;
 extern std::string SetupArch;
-- 
2.43.0



[PATCH setup 01/16] Drop forward declaration of non-existent class IniState

2024-03-08 Thread Jon Turney via Cygwin-apps
Also: move forward declaration of class io_stream after includes with
other forward declarations.
---
 ini.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ini.h b/ini.h
index ecc4b78..d4eaf87 100644
--- a/ini.h
+++ b/ini.h
@@ -16,7 +16,6 @@
 #ifndef SETUP_INI_H
 #define SETUP_INI_H
 
-class io_stream;
 #include 
 #include 
 
@@ -29,10 +28,11 @@ extern std::string SetupArch;
 extern std::string SetupIniDir;
 extern std::string SetupBaseName;
 
-class IniState;
+class io_stream;
 class IniDBBuilder;
 class IniParseFeedback;
 void ini_init (io_stream *, IniDBBuilder *, IniParseFeedback &);
+
 #define YYSTYPE char *
 
 /* When setup.ini is parsed, the information is stored according to
-- 
2.43.0



[PATCH setup 00/16] Groundwork for a GUI-less installation tool

2024-03-08 Thread Jon Turney via Cygwin-apps
This is patch sequence I started sometime in 2020, but only got around to
finishing off recently.

This includes various small tidy-ups, and then lays some groundwork for a
command line installation tool.

At the moment, all this can do is retrieve a (compressed) setup.ini from a
selected mirror and parse it. Package fetching and installation etc. remain
to be looked at.

Jon Turney (16):
  Drop forward declaration of non-existent class IniState
  Move setup_exts[] to the only place it's used
  Split GuiParseFeedback out from ini fetcher
  Split out site into SiteSettings and SitePage
  Don't call Antivirus::AtExit() directly from Logger::exit()
  Simplify invocation of UserSettings::open_settings()
  Split out URL fetching progress reporting
  Instantiate found_ini_list in ini.cc
  Move is_64bit to state
  Move setup.ini pathame components to ini.cc
  Drop hinstance global
  Spit out GetNetAuth from NetIO
  Split out hash checking progress reporting
  Push check_for_cached into package_source
  Put various shared subcomponents into a convenience library
  Add beginnings of a command line installation tool

 AntiVirus.cc  |   4 +-
 CliParseFeedback.h|  28 --
 Feedback.h|  58 
 GetNetAuth.h  |  30 ++
 IniDBBuilderPackage.cc|   4 +-
 IniDBBuilderPackage.h |   6 +-
 IniParseFeedback.h|  38 ---
 LogFile.cc|  18 +-
 LogFile.h |   8 +-
 Makefile.am   | 284 ++
 SiteSetting.cc| 193 
 site.h => SiteSetting.h   |  57 +---
 UserSettings.cc   |  12 +-
 UserSettings.h|   4 +-
 choose.cc |   4 +-
 cli/CliFeedback.h |  60 
 cli/CliGetNetAuth.cc  |  45 +++
 cli/CliGetNetAuth.h   |  32 ++
 cli/CliGetUrlFeedback.cc  |  91 ++
 cli/CliHashCheckFeedback.cc   |  30 ++
 .../CliParseFeedback.cc   |  28 +-
 cli/cyclops.cc| 186 
 crypto.cc |  18 +-
 crypto.h  |   9 +-
 dialog.h  |   3 -
 download.cc   | 121 +---
 download.h|   6 -
 fromcwd.cc|  11 +-
 geturl.cc | 130 ++--
 geturl.h  |  13 +-
 gui/GuiFeedback.h |  69 +
 gui/GuiGetNetAuth.cc  | 138 +
 gui/GuiGetNetAuth.h   |  38 +++
 gui/GuiGetUrlFeedback.cc  | 119 
 gui/GuiHashCheckFeedback.cc   |  34 +++
 gui/GuiParseFeedback.cc   | 149 +
 site.cc => gui/SitePage.cc| 191 +---
 gui/SitePage.h|  45 +++
 ini.cc| 178 +++
 ini.h |  19 +-
 inilex.ll |   6 +-
 inilintmain.cc|  10 +-
 install.cc|   6 +-
 main.cc   |  50 ++-
 msg.cc|   5 +-
 net.cc|   5 +
 netio.cc  | 125 +---
 netio.h   |  19 +-
 nio-ie5.cc|   4 +-
 package_db.cc |   6 +-
 package_db.h  |   3 +-
 package_meta.cc   |  11 +-
 package_meta.h|   5 +-
 package_source.cc | 126 ++--
 package_source.h  |  12 +-
 splash.cc |   2 +-
 state.cc  |   6 +
 state.h   |   2 +
 threebar.cc   |   2 +-
 59 files changed, 1853 insertions(+), 1063 deletions(-)
 delete mode 100644 CliParseFeedback.h
 create mode 100644 Feedback.h
 create mode 100644 GetNetAuth.h
 delete mode 100644 IniParseFeedback.h
 create mode 100644 SiteSetting.cc
 rename site.h => SiteSetting.h (74%)
 create mode 100644 cli/CliFeedback.h
 create mode 100644 cli/CliGetNetAuth.cc
 create mode 100644 cli/CliGetNetAuth.h
 create mode 100644 cli/CliGetUrlFeedback.cc
 create mo

Re: [ITP] afflib 3.7.20-1

2024-03-06 Thread Jon Turney via Cygwin-apps

On 06/03/2024 15:39, Christian Franke via Cygwin-apps wrote:

Jon Turney wrote:


Thanks!



libafflib_CONTENTS="
usr/bin/cygafflib-*.dll


Any reason why this package doesn't include the soversion, i.e. why 
not libafflib0?




Libtsk and libafflib are my first library packages, so I'm not sure what 
the policy is. My recent package libtsk has been accepted without 
soversion, so I omitted it also here. I assumed that the soversion will 


I'm going to suggest that was an oversight in the review.

be added only when needed for new not backward compatible releases. The 
upstream afflib project is mostly idling, so I don't expect any new 
major lib versions in the near future.


If course, I could rename it to libafflib0 if desired.


As far as I know, there is no cost for doing this, and it saves grief if 
upstream ever bumps the soversion.


Also, it's probably best to explicitly list the filename with soversion 
in the CONTENTS, so that if upstream ever does change the soversion, it 
will be detected as a packaging failure, rather than producing a package 
with a mismatch between the soversion in it's name and in it's contents.


(Cygport should perhaps and detect and warn about apparently soversioned 
libraries that aren't in appropriately named packages, but...)




Re: [ITP] afflib 3.7.20-1

2024-03-06 Thread Jon Turney via Cygwin-apps



Thanks!



libafflib_CONTENTS="
usr/bin/cygafflib-*.dll


Any reason why this package doesn't include the soversion, i.e. why not 
libafflib0?



rm -v usr/bin/affuse.exe usr/share/man/man1/affuse.1 # --disable-fuse


I guess this comment means something to someone.  But it doesn't tell me 
anything...




Re: mingw cross tests missing DLLs - CROSS_BINDIR not in PATH

2024-03-05 Thread Jon Turney via Cygwin-apps

On 04/03/2024 21:20, Brian Inglis via Cygwin-apps wrote:

On 2024-03-04 13:00, Jon Turney wrote:

On 03/03/2024 22:29, Brian Inglis via Cygwin-apps wrote:

On 2024-03-03 14:39, Jon Turney via Cygwin-apps wrote:

On 03/03/2024 16:48, Brian Inglis via Cygwin-apps wrote:
I am finding mingw package cross tests fail with missing DLLs - 
CROSS_BINDIR is not in the PATH.


I now have to define src_test to run cygtest adding CROSS_BINDIR in 
the PATH.


Is this likely to be upstream (e.g. gnulib) changes or cygport 
changes?


This is a shortcoming of cygport, in that you cannot just write "do 
the standard src_(compile|install|test), but do this extra thing 
first (like modifying PATH as you need in this case).


(One approach to this I've though about would be to have a hook 
function (or set of functions) which are called before each phase of 
operation, to allow this)


These test failures have been only in the latest upstream releases.
Previously no PATH fiddling was required.
For mingw64-x86_64-nghttp2 that was 2024-01-21.

Why I asked if anyone noticed any cross build changes as for example 
in autotools, gnulib, or cygport?


I assumed that you were talking about "PATH needs to be set so that 
dependencies of the built DLL can be loaded"


But, now I look, mingw64-x86_64-nghttp2 doesn't have any dependencies.

So, I'm not so sure. Maybe you just mean that the test harness can't 
locate the just built DLL? That could well be an upstream change.


Maybe you could show the actual error?


Sorry I was not clearer.
In previous release build checks there were no issues.


Have you tried rebuilding and running the tests for the previous release 
version of nghttp2? This might at least offer some clue as to if the 
change is in upstream, or in the toolchain or build environment?


In the latest release the test programs have a dependency on winpthreads 
and failed with popup dialogues:


I see.

Well, to reiterate, if the test genuinely depends on that DLL, this 
behavior is to be expected, because cygport (currently) lacks a feature 
to add CROSS_BINDIR to the PATH before running tests.



To me, the obvious theories to explore are that:

* the previous version of nghttp2 did not link it's tests with that DLL 
(e.g. an upstream change has been made to parallelize the tests, or add 
testing coverage for multithreaded use)


* the previous version of nghttp2 arranged to link it's tests statically 
with the required library, and no longer does so


* the MinGW cross winpthreads packages have stopped providing the static 
library (from a brief check, this does not seem to be the case)



Hope that's of some help.



Re: mingw cross tests missing DLLs - CROSS_BINDIR not in PATH

2024-03-04 Thread Jon Turney via Cygwin-apps

On 03/03/2024 22:29, Brian Inglis via Cygwin-apps wrote:

On 2024-03-03 14:39, Jon Turney via Cygwin-apps wrote:

On 03/03/2024 16:48, Brian Inglis via Cygwin-apps wrote:
I am finding mingw package cross tests fail with missing DLLs - 
CROSS_BINDIR is not in the PATH.


I now have to define src_test to run cygtest adding CROSS_BINDIR in 
the PATH.


Is this likely to be upstream (e.g. gnulib) changes or cygport changes?


This is a shortcoming of cygport, in that you cannot just write "do 
the standard src_(compile|install|test), but do this extra thing first 
(like modifying PATH as you need in this case).


(One approach to this I've though about would be to have a hook 
function (or set of functions) which are called before each phase of 
operation, to allow this)


These test failures have been only in the latest upstream releases.
Previously no PATH fiddling was required.
For mingw64-x86_64-nghttp2 that was 2024-01-21.

Why I asked if anyone noticed any cross build changes as for example in 
autotools, gnulib, or cygport?


I assumed that you were talking about "PATH needs to be set so that 
dependencies of the built DLL can be loaded"


But, now I look, mingw64-x86_64-nghttp2 doesn't have any dependencies.

So, I'm not so sure. Maybe you just mean that the test harness can't 
locate the just built DLL? That could well be an upstream change.


Maybe you could show the actual error?



Re: mingw cross tests missing DLLs - CROSS_BINDIR not in PATH

2024-03-03 Thread Jon Turney via Cygwin-apps

On 03/03/2024 16:48, Brian Inglis via Cygwin-apps wrote:

Hi folks,

I am finding mingw package cross tests fail with missing DLLs - 
CROSS_BINDIR is not in the PATH.


I now have to define src_test to run cygtest adding CROSS_BINDIR in the 
PATH.


Is this likely to be upstream (e.g. gnulib) changes or cygport changes?


This is a shortcoming of cygport, in that you cannot just write "do the 
standard src_(compile|install|test), but do this extra thing first (like 
modifying PATH as you need in this case).


(One approach to this I've though about would be to have a hook function 
(or set of functions) which are called before each phase of operation, 
to allow this)




Re: scallyweg: ‘strcasecmp’ was not declared in this scope

2024-03-03 Thread Jon Turney via Cygwin-apps

On 02/03/2024 17:01, Marco Atzeri via Cygwin-apps wrote:

On 29/02/2024 17:58, Jon Turney wrote:

On 29/02/2024 06:21, Marco Atzeri via Cygwin-apps wrote:

Hi Jon,

I have a strange case with nco

https://github.com/cygwin/scallywag/actions/runs/8060036334/job/22015501908

While Scallyweg complains about ‘strcasecmp’ scope,
local build runs fine.
I saw the same also on previous build

Can you check ?


I can reproduce the build failure locally.

 From a brief inspection, this seems to make sense: strcasecmp is 
unconditionally defined by strings.h, which doesn't seem to be 
included anywhere in antlr.


(There's maybe some way it gets indirectly included, maybe via 
string.h if __BSD_VISIBLE, but perhaps that's due to some local flags 
settings?)




thanks for double checking


No problem.


The problem was subtle; the original and ancient

  https://www.antlr2.org/download/antlr-2.7.7.tar.gz

need patching to work with recent compiler.
I had a different version, with the same name, on my computer
but I forgot to update the SRC_URI, so me locally and scallyweg were 
working on different source packages.


Further info on:
https://nco.sourceforge.net/#Source


Aha! Two archives with the same name but different contents, always great.

There really ought to be a list of hashes for SRC_URI files associated 
with a .cygport file, and cygport should verify them after downloading 
(which would avoid this problem, and related ones), but we've needed 
that feature for a while...




Re: scallyweg: ‘strcasecmp’ was not declared in this scope

2024-02-29 Thread Jon Turney via Cygwin-apps

On 29/02/2024 06:21, Marco Atzeri via Cygwin-apps wrote:

Hi Jon,

I have a strange case with nco

https://github.com/cygwin/scallywag/actions/runs/8060036334/job/22015501908

While Scallyweg complains about ‘strcasecmp’ scope,
local build runs fine.
I saw the same also on previous build

Can you check ?


I can reproduce the build failure locally.

From a brief inspection, this seems to make sense: strcasecmp is 
unconditionally defined by strings.h, which doesn't seem to be included 
anywhere in antlr.


(There's maybe some way it gets indirectly included, maybe via string.h 
if __BSD_VISIBLE, but perhaps that's due to some local flags settings?)




Re: [PATCH cygport] Add more checks of SOURCE_DATE_EPOCH

2024-02-26 Thread Jon Turney via Cygwin-apps

On 16/02/2024 12:29, Christian Franke via Cygwin-apps wrote:
Fail if it is out of range. Warn if it lies in the future. Inform 
whether it is set or set but not exported.


What is the valid range here?

Would it not make more sense to just re-export it if set? (so that 
commands like "SOURCE_DATE_EPOCH=something cygport foo" work as expected?)




Re: [cygport] enabling a replacement for "objdump -d -l"

2024-02-26 Thread Jon Turney via Cygwin-apps



Thanks, this is great!

On 18/02/2024 19:51, ASSI via Cygwin-apps wrote:



[...]

dwarf-parse.-pl


There should be some build system changes which install this file, 
probably in /usr/share/cygport/tools/, which it can then be run from.



--8<---cut here---start->8---


Please, please make a patch with git format-patch, which I can then just 
apply.



#!perl -w


Fifty lines of perl with no comments! This is just line noise to me 
unless I spend lots of time staring at it :)


Seriously, this should at least say "I'm running objdump -Wl to dump out 
the .debug_line section containing DWARF XYZ information.


Then maybe some comments about what assumptions it's making about the 
human-readable output it's parsing.



use common::sense;
use List::Util qw( sum );

my $filter = shift @ARGV
 or die "not enough arguments";
my $obj = shift @ARGV
 or die "not enough arguments";
my @objdump = qw( /usr/bin/objdump -WNl );


cygport goes to some lengths to identify the correct objdump to use when 
cross-building, so it should probably should be used here (passed in as 
an arg?), rather than assuming it's /usr/bin/objdump.



open my $DWARF, "-|", @objdump, $obj
 or die "can't invoke objdump\n$!";

my ( @dirs, @files, %fn, %rn );
while (<$DWARF>) {
 if (/^ The Directory Table/../^$/) {
if (/^  \d+/) {

my ( $entry, $dir ) = m/^  (\d+)\t.+: (.+)$/;
$dir = "$dirs[0]/$dir" if ($dir =~ m:\A[^/]:);
push @dirs, $dir;
}
 }
 if (/^ The File Name Table/../^$/) {
if (/^  \d+/) {
my ( $idx, $fn, undef ) = m/^  \d+\t(\d+)\t.+: (.+)$/;
$rn{"$dirs[$idx]/$fn"}++;
push @files, "$dirs[$idx]/$fn";
}
 }
 if (my $rc = /^ Line Number Statements/../^  Offset:/) {
$fn{"$files[0]"}++ if ($rc == 1);
$fn{"$files[$1]"}++ if m/ Set File Name to entry (\d+) in the File Name 
Table/;


What this line is doing is obvious, the rest of this block, not so much.

You might also like to touch on why we bother looking at the line number 
information at all, rather than just producing a (filtered) list of all 
the pathnames mentioned?



@files = () if ($rc =~ m/E0$/);
@dirs  = () if ($rc =~ m/E0$/);
 }
 if (/^ No Line Number Statements./../^$/) {
@files = ();
@dirs  = ();
 }
}
foreach my $fn (grep m:^$filter:, sort keys %fn) {
 say sprintf "%s", $fn;
}
say STDERR sprintf "\tLNS: %6d (%6d locations) <=> FNT: %6d ( %6d locations)",
 0+grep( m:^$filter:, keys %fn ), sum( values %fn ),
 0+grep( m:^$filter:, keys %rn ), sum( values %rn )
 if (0);


If you're going to keep this (which you probably should), perhaps it 
should be under some 'if (DEBUG)' conditional.




close $DWARF
 or die "failed to close objdump\n$!";
--8<---cut here---end--->8---

Integration into cygport is made configurable via a variable to be set
in .cygportrc for instance in order to easily revert back to the
original objdump invocation if necessary.  I've been producing packages


DWARF_PARSE should be mentioned in the documentation for cygport.conf

Since the helper script will be installed, it could be made a boolean.


with that setup for a while now and have not noticed any errors.  In
principle the new parser actually produces more complete output as there
can be multiple line number statements and hence source files per
location, but objdump only lists one of them in the disassembly (at
least sometimes).  In practise I haven't found a package until now where
the final list (after filtering) is different.

--8<---cut here---start->8---
lib/src_postinst.cygpart: use DWARF_PARSE optionally instead of objdump -dl
---

diff --git a/lib/src_postinst.cygpart b/lib/src_postinst.cygpart
index f06004e4..3dd6e893 100644
--- a/lib/src_postinst.cygpart
+++ b/lib/src_postinst.cygpart
@@ -1096,7 +1096,12 @@ __prepstrip_one() {
else
dbg="/usr/lib/debug/${exe}.dbg";
  
-		lines=$(${objdump} -d -l "${exe}" 2>/dev/null | sed -ne "s|.*\(/usr/src/debug/${PF}/.*\):[0-9]*$|\1|gp" | sort -u | tee -a ${T}/.dbgsrc.out.${oxt} | wc -l);

+   if defined DWARF_PARSE
+   then
+   lines=$(${DWARF_PARSE} /usr/src/debug/${PF}/ "${exe}" | 
tee -a ${T}/.dbgsrc.out.${oxt} | wc -l);
+   else
+   lines=$(${objdump} -d -l "${exe}" 2>/dev/null | sed -ne 
"s|.*\(/usr/src/debug/${PF}/.*\):[0-9]*$|\1|gp" | sort -u | tee -a ${T}/.dbgsrc.out.${oxt} | 
wc -l);
+   fi
  
  		# we expect --add-gnu-debuglink to fail if a

# .gnu_debuglink section already exists (e.g. binutils,
--8<---cut here---end--->8---




Re: Fwd: calm: cygwin package report for Ken Brown

2024-02-19 Thread Jon Turney via Cygwin-apps

On 19/02/2024 18:59, Ken Brown via Cygwin-apps wrote:

On 3/20/2023 7:17 PM, Jon Turney wrote:

On 20/03/2023 22:17, Ken Brown via Cygwin-apps wrote:
It looks like my plan for having scallywag deploy all the TeX Live 
packages won't work (see below).  calm would have to be more 
permissive and allow deploying a package that requires something that 
will be provided by a future package.


In this case, I made asymptote require tl_2023, which will be 
provided by the next texlive release.  But I don't want to deploy the 
latter until all the other packages for TeX Live 2023 have been 
deployed.


Unless this is easy to fix, I'll just forget about using scallywag 
and go back to my old method of uploading everything manually.


This is trivially fixable.

calm already has a list of 'provides which don't exist (yet)', so I 
think I just need to add tl_2023 and tl_basic_2023 to that list


Future work: make these regexes so we don't have same problem again in 
a years time.


Jon,

In preparation for TeX Live 2024, please add tl_2024 and tl_basic_2024 
to the list of provides which don't exist yet (unless you've already 
done the regex future work).


These are controlled by regex now, so these should already be permitted, 
and I don't need to do anything (yay!):


'tl_\d+'
'tl_basic_\d+'




Re: [PATCH cygport] git.cygclass: Suppress the depth option

2024-02-18 Thread Jon Turney via Cygwin-apps

On 16/02/2024 11:59, Daisuke Fujimura via Cygwin-apps wrote:

Thank you for merging.

I have confirmed that this modification has resulted in the intended behaviour.


[...]


$ head -3 agbsum-15-1bl1.cygport
HOMEPAGE="https://mandelbrot.dk/${PN};
GIT_URI="https://mandelbrot.dk/${PN};
GIT_TAG="${PV}"

$ cygport agbsum-15-1bl1.cygport fetch
*** Info: Trying to enable case sensitivity on /tmp/agbsum/agbsum-15-1bl1.x86_64
git clone --depth 1 --branch 15 --no-checkout
https://mandelbrot.dk/agbsum agbsum
Cloning into 'agbsum'...
fatal: dumb http transport does not support shallow capabilities
*** Warning: git clone failed, retrying without --depth option
git clone --branch 15 --no-checkout https://mandelbrot.dk/agbsum agbsum
Cloning into 'agbsum'...
Fetching objects: 251, done.
git checkout tags/15
HEAD is now at bef1780 Rename source directory: 'src' => 'source';
Update naming convention; Update copyright holder name; Update code
style;

```


Thank you very much for testing!



Re: [ITA] libid3tag

2024-02-18 Thread Jon Turney via Cygwin-apps

On 17/02/2024 13:43, Marco Atzeri via Cygwin-apps wrote:

On 17/02/2024 04:18, Takashi Yano via Cygwin-apps wrote:

I would like to adopt libid3tag.




$ git diff | grep ^+
+++ b/cygwin-pkg-maint
+libid3tag    Takashi Yano
+libmad   Takashi Yano
+taglib   Takashi Yano
+taglib-extras    Takashi Yano
+utf8cpp  Takashi Yano

Thanks
Marco



FWIW, I took a look at these cygports and couldn't find anything to 
comment on. Good job!


Thanks for adopting these.



Re: Tmux crashes on copy

2024-02-15 Thread Jon Turney via Cygwin-apps

On 14/02/2024 00:11, Yasuhiro Kimura via Cygwin-apps wrote:

Hello,

From: Jon Turney via Cygwin-apps 

Subject: Re: Tmux crashes on copy
Date: Wed, 31 Jan 2024 13:28:41 +


Thanks.

Since this is a crash bug, which renders the package more or less
useless, I made an NMU with these changes.


Michael,

Sorry about not pinging you before I made this change.

You don't seem to have been active for a few years. Are you still
interesting in maintaining this package?

IF so, do you want to get pinged if/when problems crop up?



Tmux 3.4 is released.

https://github.com/tmux/tmux/releases/tag/3.4

Just FYI.


Thanks.

I don't use tmux, so if I were to just bump the version, I'd just be 
deploying the updated package without any testing, which is something I 
try to avoid doing.


If an up-to-date and working tmux package is important to you, please 
consider if maybe you want to adopt it? (I'm assuming the existing 
maintainer has wandered off since he didn't reply, but our process 
requires me to wait a bit longer before that's assumed)


Even if you don't, maybe you would consider submitting an ssh key, so 
you can push to our package building playground, which would make it a 
bit less effort for me in future, if you submit other NMUs.




Re: [PATCH cygport] git.cygclass: Suppress the depth option

2024-02-11 Thread Jon Turney via Cygwin-apps

On 03/12/2023 21:53, Brian Inglis via Cygwin-apps wrote:

On 2023-12-03 13:34, Jon Turney via Cygwin-apps wrote:

On 30/11/2023 12:17, Daisuke Fujimura via Cygwin-apps wrote:

Implementations that conditionally branch on variables are simple.

The proposed retry implementation complicates git.cygclass, but I
think it reduces the maintainer's effort.

I have created a patch for a retry implementation.
Could you review it?




Thanks very much to Fujimura-san for all his work on this.


Attached is the patch after my edits.


I've applied a reheated version of this patch. Hopefully that works well 
enough, but obviously can be further refined if needed.


Looks like straight curl HEAD -I tells you about smart transport if you 
want a quick check rather than a dry run:


$ time curl -ILSs 
https://repo.or.cz/r/git.git/info/refs?service=git-upload-pack | grep 
-qi '^content-type:\sapplication/x-git-upload-pack'; echo $?


real    0m0.630s
user    0m0.077s
sys 0m0.123s
0
$ time curl -ILSs 
https://github.com/BrianInglis/apt-cyg.git/info/refs?service=git-upload-pack  | grep -qi '^content-type:\sapplication/x-git-upload-pack'; echo $?


real    0m0.440s
user    0m0.061s
sys 0m0.184s
1


Thanks for this.

Uh, but it seems like 'git clone --depth 1' works with both of these 
URLs, so... um... I'm not sure what's going on.




Re: [PATCH cygport] Increase _FORTIFY_SOURCE level from 2 to 3 in CFLAGS

2024-02-11 Thread Jon Turney via Cygwin-apps

On 04/02/2024 16:30, Christian Franke via Cygwin-apps wrote:

Jon Turney wrote:

On 02/02/2024 16:13, Christian Franke via Cygwin-apps wrote:
_FORTIFY_SOURCE=3 is supported by Cygwin 3.5.0 headers and Cygwin gcc 
13.2.1 test release.


Silently falls back to level 2 if level 3 is unsupported (older 
headers or gcc) or to level 0 if unsupported at all (C++, clang).


Thanks. I applied this.

I'm thinking I want to try to do another cygport release fairly 
soonish, so please feel free to remind me about any other patches by 
you (or others) which I need to look at before then.




Possibly some initial SOURCE_DATE_EPOCH support:
https://sourceware.org/pipermail/cygwin-apps/2023-August/043108.html


I've applied this (and I think I might have caught up on most of the 
pending patches...)


It would be nice to have some sort of test, since there's no coverage 
with SOURCE_DATE_EPOCH defined at the moment.


Even if we just verify that an existing test continues to build without 
problems with it defined, that would be a good start, let alone 
verifying that it actually sets timestamps as expected...




Re: cygport may not create debug info if top directory contains a symlink

2024-02-11 Thread Jon Turney via Cygwin-apps

On 30/10/2023 16:37, Christian Franke via Cygwin-apps wrote:

Jon Turney wrote:

On 20/09/2023 11:58, Christian Franke via Cygwin-apps wrote:

Brian Inglis wrote:

On 2023-09-18 04:41, Christian Franke via Cygwin-apps wrote:

Brian Inglis wrote:

On 2023-09-17 08:01, Jon Turney via Cygwin-apps wrote:

On 16/09/2023 15:17, Christian Franke via Cygwin wrote:

Found during tests of busybox package:
If the path of the top build directory contains a symlink and 
the project's build scripts normalize pathnames, no debug info 
is created by cygport.


This is because options like
  -fdebug-prefix-map=${B}=/usr/src/debug/${PF}
have no effect because ${B} contains a symlink but the compiler 
is run with the real source path.


I think that there was some historical bug with gcc where a 
relative path for the old path in this mapping wasn't correctly 
handled, which is why were using an absolute path here at all.


So changing it to something like [1] (if that works), might be 
better.


[1] 
https://github.com/jon-turney/cygport/commit/4175d456a9184c5cdebd8bfb4b5ba30583cedd66


Should bin/cygport.in:534: not have $B between the == as in line 531:

declare ${flags}+=" -fdebug-prefix-map=${B}=/usr/src/debug/${PF}"
...
declare ${flags}+=" -fdebug-prefix-map==/usr/src/debug/${PF}"

or be hoist above the condition if identical, unless that is some 
undocumented default for cwd?


I guess the == without ${B} is intentional because it makes the debug 
source path relative to ${B} as lines 535-536 also do.



[...]>
(It's unclear to me how gcc compares paths to apply this mapping. If 
it's a literal string prefix, rather than on some (semi-)canonicalized 
path, then we're maybe going to lose here sometimes, depending on the 
vagaries of the build-system, unless we list all of relative, 
absolute, and canonical absolute paths?)


(But then maybe we can push dealing with or indicating which of those 
is correct off onto the individual cygport?)




Adding this if "$(cd ${S} && pwd -P)" != "${S}" should IMO be safe:
   -fdebug-prefix-map=$(cd ${B} && pwd -P)=/usr/src/debug/${PF}
   -fdebug-prefix-map=$(cd ${S} && pwd -P)=/usr/src/debug/${PF}
(or use realpath)



So it seems there's a new flag '-fcanon-prefix-map' in GCC 13, which 
looks like it maybe solves this problem.




Re: [PATCH] In gcc 13, -Wall turns on -Woverloaded-virtual

2024-02-08 Thread Jon Turney via Cygwin-apps

On 07/02/2024 10:46, Corinna Vinschen via Cygwin-apps wrote:

Also fix ambiguous method declaration by dropping a default parameter.
---
Hi Jon,

I'm not sure removing virtual from all Create methods really fits the
bill in all cases, are you?

I had a go at fixing this while keeping the virtuality of the methods
intact.  While at it it also occured to me that there's a tricky problem
for the compiler to differentiate the method


This seems like overkill.

From auditing the code, as far as I can tell, we only ever instantiate 
PropPage-derived objects for each of the setup wizard pages, and one 
PropSheet object to contain them.


There are no instantiations of the Window class itself.

PropPage::Create() doesn't even call Window::Create(), so that method 
can actually be totally removed without problem...




[PATCH setup] Fix -Woverloaded-virtual warnings about Window::Create()

2024-02-06 Thread Jon Turney via Cygwin-apps
In gcc 13, -Wall turns on -Woverloaded-virtual
---

Notes:
I think despite being marked virtual, these methods aren't actually
callable on any derived object because they aren't declared for those
sublasses.

It seems that all calls to these in methods in derived objects use the
method name qualified by an explcit classname.

So we can simply fix this warning by removing the 'virtual' specifier.

But someone double-checking my reasoning here is probably a good idea.

 Makefile.am |  2 +-
 proppage.h  | 10 +-
 window.h|  7 +++
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index b459d16..22ad30c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,7 +22,7 @@ SUBDIRS := @subdirs@ tests
 BASECXXFLAGS = -Werror -Wall -Wpointer-arith -Wcomments \
   -Wcast-align -Wwrite-strings -fno-builtin-sscanf \
   -Wno-attributes
-AM_CXXFLAGS = $(BASECXXFLAGS) -std=gnu++11 ${$(*F)_CXXFLAGS}
+AM_CXXFLAGS = $(BASECXXFLAGS) -Woverloaded-virtual -std=gnu++11 
${$(*F)_CXXFLAGS}
 AM_CFLAGS = $(BASECXXFLAGS) -Wmissing-declarations -Winline \
-Wstrict-prototypes -Wmissing-prototypes
 AM_YFLAGS = -d
diff --git a/proppage.h b/proppage.h
index 64f822b..9db1a90 100644
--- a/proppage.h
+++ b/proppage.h
@@ -115,11 +115,11 @@ public:
 IsLast = false;
   };
 
-  virtual bool Create (int TemplateID);
-  virtual bool Create (DLGPROC dlgproc, int TemplateID);
-  virtual bool Create (DLGPROC dlgproc,
-  BOOL (*cmdproc) (HWND h, int id, HWND hwndctl,
-   UINT code), int TemplateID);
+  bool Create (int TemplateID);
+  bool Create (DLGPROC dlgproc, int TemplateID);
+  bool Create (DLGPROC dlgproc,
+   BOOL (*cmdproc) (HWND h, int id, HWND hwndctl,
+UINT code), int TemplateID);
 
   virtual void OnInit ()
   {
diff --git a/window.h b/window.h
index 1dfb2a9..dcc81c1 100644
--- a/window.h
+++ b/window.h
@@ -82,10 +82,9 @@ public:
   Window ();
   virtual ~ Window ();
 
-  virtual bool Create (Window * Parent = NULL,
-  DWORD Style =
-  WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN);
-  
+  bool Create (Window * Parent = NULL,
+   DWORD Style = WS_OVERLAPPEDWINDOW | WS_VISIBLE | 
WS_CLIPCHILDREN);
+
   static void SetAppInstance (HINSTANCE h)
   {
 // This only has to be called once in the entire app, before
-- 
2.43.0



Re: [PATCH cygport] Increase _FORTIFY_SOURCE level from 2 to 3 in CFLAGS

2024-02-04 Thread Jon Turney via Cygwin-apps

On 02/02/2024 16:13, Christian Franke via Cygwin-apps wrote:
_FORTIFY_SOURCE=3 is supported by Cygwin 3.5.0 headers and Cygwin gcc 
13.2.1 test release.


Silently falls back to level 2 if level 3 is unsupported (older headers 
or gcc) or to level 0 if unsupported at all (C++, clang).


Thanks. I applied this.

I'm thinking I want to try to do another cygport release fairly soonish, 
so please feel free to remind me about any other patches by you (or 
others) which I need to look at before then.




Re: ncurses version

2024-01-31 Thread Jon Turney via Cygwin-apps

On 31/01/2024 20:45, Brian Inglis via Cygwin-apps wrote:

On 2024-01-31 10:36, ASSI via Cygwin wrote:

Jon Turney via Cygwin writes:

If upstream really is making multiple releases called '6.4', which
we're supposed to distinguish by some other means, then there aren't
really any good answers...



There's only one official 6.4 release, but just about everyone packages
one of the roughly weekly snapshots inbetween releases (depending on
where you are looking they are also called beta versions), which are
named 6.4-mmdd upstream.  We can't have a "-" in the version number,
hence the suggestion to replace it with a "+".


[moving discussion to -apps]

Upstream developer is Thomas Dickey at invisible-island.net so no git.

My only concern is if 6.4+20240203-1 !> 6.4-20240120 as strvercmp test 
beds disagree, presumably about the effect of the delimiter, possibly 
because the + may be treated similarly to a prefix for an RC preceding 
the 6.4 release?


For guidance I have looked at:

 https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/

which states that ~ prefixes pre-stable "snapshot" releases and ^ 
prefixes post-stable "snapshot" releases where . or nothing prefixes 
upstream bugfix or patch level releases, so perhaps we should just use 
version suffix .mmdd?


So, this is notionally defined here [1].

The important point there "Non-alphanumeric separators for these 
contiguous chunks are ignored" (after identifying chunks)


So '1.2.3' '1+2+3' and '1_2_3' are all equal.

[1] https://cygwin.com/packaging-package-files.html#naming

Practically, this is controlled by the version comparison which libsolv 
does, which I am expecting to also work like that.


(Perhaps naively. All the details are paged-out at the moment. I think I 
remember there's a flag which you have to give it to turn on the special 
behaviour of tilde and caret, which in any case aren't currently in the 
character set permitted for a cygwin package name)


I have downloaded and locally installed Fedora rpmdevtools package but 
Cygwin python rpm module seems to lack labelCompare():


$ rpmdev-vercmp 6.4+20240203-1 6.4-20240120
/usr/local/lib/python3.9/site-packages/rpm.py:15: UserWarning: The RPM 
Python bindings are not currently available via PyPI.


This can't be cygwin's python rpm module if it's in /usr/local/, I think?

If you have calm installed, you can use:


$ calm-tool sort-versions 1.2.1 1.2.3 1+2+3 1_2_3 1.2.4
1.2.1
1.2.3 1+2+3 1_2_3
1.2.4


At this point it should be clear that 6.4+2024012 is greater than 6.4.

How are Cygwin pre-stable RC releases defined differently from 
post-stable snapshot releases and upstream patch releases?


Generally, I think that following [2], as linked from that, is a good 
idea. i.e.


for pre-release versions use R="0." followed by  something that's going 
to increase as prereleases do e.g. date or an incrementing ordinal and 
then a githash.


for post-releases you can increment R and add a similar identifier.

You can instead add things to V to indicate post-label snapshots, but 
there's there's a risk of coming unstuck unless the upstream versioning 
scheme is totally predicable (i.e. if you create 1.2+3 for a 
post-release fix to 1.2, and then upstream releases a 1.2a which you 
weren't expecting because they've never done it before, you're boned)


[2] https://fedoraproject.org/wiki/Package_Versioning_Examples



newlines in ldesc

2024-01-31 Thread Jon Turney via Cygwin-apps



We now have a few places where the long description (ldesc) for a 
package is used (in the package summary webpage, in the tooltip for the 
package description in setup, and now in any automatically generated 
announce email).


Unfortunately, it's underspecified exactly what a newline in ldesc 
means, and taking it literally causes problems when trying to render it 
nicely in those places. (Some heuristic hacks are already applied to it 
in the package summary webpage to try to make things look reasonable)


Therefore, I'm proposing to define that the following very minimal 
subset of MarkDown-compatible markup can be used in ldesc:


* A blank line separates paragraphs
* A line ending with two (or more spaces) is followed by a line break
* Lines starting with '-', '*', or '+' are bulleted lists
- Sublists are indented by four spaces


(Technically, all of this also applies to the message: hint, being the 
only other hint which can take a multi-line value, but since that's only 
used by one package currently, that's not much of a concern)


  1   2   3   4   5   6   7   8   9   10   >