Jon Turney [Fri, 8 Jul 2022 14:56:59 +0000 (15:56 +0100)]
Drop group change while running postinstall scripts
Drop group change while running postinstall scripts. This was only for
the benefit of mkgroup/mkpasswd being run by the postinstall script,
which we don't do any more.
Jon Turney [Tue, 28 Jun 2022 19:36:43 +0000 (20:36 +0100)]
Handle self-destruct packages
These are sometimes useful in situations where a package is obsoleted,
but doesn't have a simple replacement.
The parser can't currently handle "libsolv-self-destruct-pkg()" (the
magic provide name which triggers this behaviour in libsolv) appearing
as a provide, because (i) brackets aren't a valid character in a package
name, and (ii) empty braces isn't permitted for a versioncriteria
following a package name.
For backwards-compatibility (to allow old versions of setup to parse a
setup.ini containing this instruction) and terseness, accept
'_self-destruct' as equivalent to that magic package name.
Jon Turney [Mon, 27 Jun 2022 18:02:38 +0000 (19:02 +0100)]
Suppress bogus free-nonheap-object warning in iniparse.cc
This warning bogusly occurs with -O0 in bison generated code. The
free() is not reachable when the pointer references a non-heap object.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98753
iniparse.cc: In function ‘int yyparse()’:
iniparse.cc:1789:18: warning: ‘void free(void*)’ called on unallocated object ‘yyssa’ [-Wfree-nonheap-object]
iniparse.cc:1148:16: note: declared here
Jon Turney [Fri, 24 Jun 2022 12:20:32 +0000 (13:20 +0100)]
Lower autoconf requirement to 2.69
We don't actually use LIBLEX, so the change in AC_PROG_LEX() behaviour
in autoconf 2.70 isn't particularly relevant, and this let's us still
build using the x86 w/ SJLJ exceptions toolchain in Fedora 31.
Jon Turney [Fri, 17 Jun 2022 14:51:15 +0000 (15:51 +0100)]
De-clutter the mirror selection listbox
Mirrors can now appear up to three times in this list (with ftp://,
http:// and https:// protocols).
We can't just stop announcing ftp:// and http:// sites in the mirror
list, as that will lead to setup warning that those mirrors have been
dropped and may be out of date.
So instead: Process site list for an optional 4th semi-colon delimited
string, to be used for flags. Recognize and store 'noshow' flag.
Hide mirror URLs with this noshow flag from the mirror selection
listbox, unless they have been already selected in a previous run.
We will use this to hide ftp://, and http:// (where https: also exists)
URLs.
This assumes that: (i) all future mirrors will provide http:// service
and (ii) nobody has a good reason for using ftp:// instead of http://
anymore. But those seem reasonable assumptions!
Also: drop explicit copy constructor and assignment operator for
site_list_type, which just do what the default would.
Jon Turney [Thu, 16 Jun 2022 21:05:05 +0000 (22:05 +0100)]
Add French translations of option help-text
Also make some minor adjustments to help-texts for consistency:
* --no-warn-deprecated-windows should start "Don't"
* --categories doesn't need to say "entire"
* --download and --local-install no longer say "seulement"
Jon Turney [Thu, 16 Jun 2022 12:57:38 +0000 (13:57 +0100)]
Add command-line option help-text localization
Change libgetopt++ Option class to store an unsigned int message catalog
identifer for the help-text, rather than a std::string of the help-text.
ParameterUsage (the function which produces the help output) now takes a
lookup function as a parameter, which translates that message identifer
to a localized std::string.
Move existing help-text to a stringtable resource, and then wire up
ParameterUsage to use LoadString.
Jon Turney [Mon, 13 Jun 2022 13:54:50 +0000 (14:54 +0100)]
Fix '-t -P package-with-only-a-test-version'
Fix how 'install any version' operates in that case.
Also make '-t' have an effect when used with '-P' but without '-g'.
Future work: The language around '-t' perhaps needs refining, since it's
absence just lowers the priority of test packages, not prohibiting their
use (so in this particular case, package-with-only-a-test-version will
be installed, even without '-t')
Jon Turney [Wed, 9 Sep 2020 13:39:26 +0000 (14:39 +0100)]
Use a .pot translation template
Add a res.pot file, created with rc2po.
Add rule to generate a .po file containing current translations using rc2po.
Add rule to incorporate updated translations from .po file using po2rc.
Both tools are part of the python translate toolkit [1]
Jon Turney [Mon, 6 Jun 2022 16:59:33 +0000 (17:59 +0100)]
Adjustment to dialog layout for translation
To enable the english resource to be used as a template, adjust the size
of the IDD_SOURCE.IDC_SOURCE_NETINST control so it's large enough for
translated text.
Jon Turney [Thu, 10 Feb 2022 15:38:56 +0000 (15:38 +0000)]
Handle tar type flag 'K' (GNU long link extension)
Handle tar type flag'K' (GNU long link extension)
Also report unexpected filename in headers with long name extension type
Also clean up some cruft in archive_tar.cc
Currently, the only existing package which contains type flag 'K'
entries is f21-backgrounds-extras.
This also now correctly handles tar archive header linknames of exactly
100 characters (even when not preceeded by a 'K' type header), where the
linkname field is not null terminated as it should be, rather than
allowing the 'ustar\0' magic immediately following it to be interpreted
as part of the linkname.
Jon Turney [Mon, 7 Feb 2022 14:52:26 +0000 (14:52 +0000)]
Show overall progress for checking packages in package cache
Show overall progress for testing presence and validating packages in
package cache.
This gives a better sense of progress when installing many packages
which are already cached (e.g. a fresh install, but all required
packagea are already in the package cache, so this step, rather than the
download one, dominates).
Jon Turney [Thu, 27 Jan 2022 22:07:28 +0000 (22:07 +0000)]
Unconditionally fixup source package ids
In the case when a given package version appears in setup.ini first
with, then without an install: line, the source package is recreated by
packagemeta::add_version() to add the additional package source site,
but the install package is not - so it now contains a stale source
package id.
Unconditionally fixup source package ids, so that install package points
to the correct source package.
Also internalize libsolv attributes after doing fixup, the changes it
makes are visible (so this was probably never working right).
Jon Turney [Mon, 24 Jan 2022 17:07:15 +0000 (17:07 +0000)]
Don't create install package if there's no install: line
Don't erroneously create an install package if there's no install: line
for that version.
If it's for the latest version and something depends on this package,
the solver will produce a solution containing that package & version,
so we'll try to download it without having a path to fetch it from,
leading to download errors which are impossible to resolve.
Jon Turney [Sun, 19 Dec 2021 21:22:55 +0000 (21:22 +0000)]
When in unattended mode, ignore attempts to close via GUI
Perhaps this should be controlled by a separate option, but making setup
non-interactive seems like a reasonable fit with the intent of
'--quiet-mode'.
This doesn't stop the installer being killed by TerminateProcess().
Jon Turney [Fri, 7 Jan 2022 15:18:02 +0000 (15:18 +0000)]
Further fix symlinks to absolute paths made for ' --symlink-type native'
After using 'to' with NtOpenFile(), convert it back to Win322
filenamespace form before using it with CreateSymbolicLinkW(), so that
the symlink works with native tools.
Jon Turney [Thu, 2 Dec 2021 22:28:32 +0000 (22:28 +0000)]
Push some dynamic download/install dialog text into IDD_LOCAL_DIR DIALOG resource
Move the localizable dialog text which is dynamically modified depending
on install or download mode into the IDD_LOCAL_DIR DIALOG resource, and
show or hide it as appropriate.
After some staring at the code, it looks like it's possible that the
cause of this report is the linked list containing log entries to be
damaged if multiple threads call endLog() simultaneously.
Currently 'Changing gid to Administrators' is logged by the call to
nt_sec.setAdminGroup() just after the WM_APP_POSTINSTALL_THREAD_COMPLETE
message is been sent.
'Ending cygwin install' is logged just before main exits.
Make sending the WM_APP_POSTINSTLL_THREAD_COMPLETE message the last
thing that the postinstall thread does This should avoid the potential
for endLog() becing called by multiple threads simultaenously.
Logging is still lousy with race conditions as the std::stringbuf all
threads are writing to is global (leading to messages from multiple
threads being concatenated here), and appending to the linked list isn't
thread-safe, but this should at least avoid this particular infinite
loop.
Jon Turney [Thu, 15 Apr 2021 19:12:27 +0000 (20:12 +0100)]
Add an option to set the GUI language
Add an option to set the GUI language, primarily for testing purposes.
We need to call SetThreadUILanguage() not only in the main thread, but
in every thread which might access localized resources (directly or
indirectly).
Jon Turney [Mon, 10 May 2021 22:15:30 +0000 (23:15 +0100)]
Use generic formatting mbox wrapper
Use generic formatting mbox wrapper for some:
- message boxes whose contents are currently hand-made using a format string.
- message boxes whose contents can be put into a string resource.
This also makes the various captions used by these messageboxes
consistent.
Future work: Aim to phase out remaining uses of the existing mbox()
wrapper:
- via note(), fatal(), yesno()
- where we a need to use a fully dynamic string (e.g. from ini parser)
Jon Turney [Thu, 11 Nov 2021 22:17:12 +0000 (22:17 +0000)]
Fix uses of MessageBox() which could be problematic in unattended mode
Direct uses of MessageBox should be avoided, as they need special
attention to check that they are avoided in unattended mode (as they
could cause setup to stop and wait for user interaction).
Fix a few remaining uses that aren't guarded by checks of
unattended_mode, by using mbox() instead.
(These are new or slightly non-trivial uses which didn't get changed in a123de66).
Jon Turney [Mon, 10 May 2021 18:42:13 +0000 (19:42 +0100)]
Push some dynamic download/install dialog text into IDD_DESKTOP DIALOG resource
Move the localizable dialog text which is dynamically modified depending
on install or download mode into the IDD_DESKTOP DIALOG resource, and
show or hide it as appropriate.
Jon Turney [Mon, 10 May 2021 18:01:38 +0000 (19:01 +0100)]
Push some dynamic download/install dialog text into IDD_CHOOSE DIALOG resource
Move the localizable dialog text which is dynamically modified depending
on install or download mode into the IDD_CHOOSE DIALOG resource, and
show or hide it as appropriate.
Jon Turney [Fri, 1 Oct 2021 14:34:53 +0000 (15:34 +0100)]
Make '--quiet' imply 'download and install packages'
Make '--quiet' imply 'download and install packages', rather than
'whatever source mode was chosen in the last run'. This aligns
behaviour with the help text about installation type.
This can be overriden with '--download' or '--local-install'. Specifying
both already has the meaning 'download and install packages', but let's
not require than in combination with '--quiet' to get definite
behaviour.
Jon Turney [Sun, 18 Jul 2021 14:11:39 +0000 (15:11 +0100)]
Factor out StringChoiceOption
Factor out logic for 'a string option which is one of a set of choices'
from CompactOsStringOption as StringChoiceOption.
v2:
Allow different behaviour for option without a choice, and option absent.
Future work: This doesn't say anything other that "Error during option
processing" if you've given an invalid choice string, or left it out
when it's required, because libgetopt++ doesn't output anything, just
returns success or failure after processing the command line arguments.
Jon Turney [Sun, 25 Jul 2021 14:58:30 +0000 (15:58 +0100)]
Add separate symlink-creation phase when extracting archive
Add a separate symlink-creation phase when extracting an archive, by
ignoring symlinks on the first pass, rewinding the archive, and
then extracting only symlinks on the second pass.
This helps a lot with native symlinks (which require the destination to
exist when created, so we can determine if it is a file or directory).
Alternative implementations:
We could collect symlinks, and defer making them until the end of
extracting the archive. We'd also need to report errors if making those
symlinks failed.
We could close and re-open the archive, rather than rewinding it. Error
handling if the archive isn't accessible the second time could be
complex.
Jon Turney [Sat, 17 Jul 2021 12:56:31 +0000 (13:56 +0100)]
Only build for x86_64 in github workflow
Only build for x86_64 in github workflow, since the requirements for
i686 are now impossible to obtain (Fedora <=31 for non-DW2 EH compiler,
but coprs for EOL'ed Fedoras have been expired)
Christian Franke [Fri, 14 May 2021 07:50:12 +0000 (09:50 +0200)]
Add new option '--compact-os ALGORITHM'.
If specified, selected Compact OS compression algorithm is applied
to files below /bin, /sbin and /usr. Most DLL files are excluded
because rebase will open these files again for writing.