README
This directory contains the source code for the Setup program
for the Cygwin net releases.
HOW TO BUILD:
-------------
Cygwin
------
Setup should build out-of-the-box on any Cygwin environment that has all the
required packages and their dependencies installed:
- autoconf
- automake
- bison
- flex
- libtool
- make
- mingw64-${arch}-bzip2
- mingw64-${arch}-gcc-g++
- mingw64-${arch}-headers
- mingw64-${arch}-libgcrypt
- mingw64-${arch}-libsolv
- mingw64-${arch}-xz
- mingw64-${arch}-zlib
- mingw64-${arch}-zstd
- upx (optional, for compressing)
The ${arch} needs to be replaced with either "i686" or "x86_64"
depending on the target architecture to build for.
Fedora
------
Setup should also build out-of-the-box in a Fedora environment that has all the
required packages and their dependencies installed:
- automake
- bison
- flex
- libtool
- make
- mingw${arch}-bzip2-static
- mingw${arch}-gcc-c++
- mingw${arch}-libgcrypt-static
- mingw${arch}-libgnurx-static
- mingw${arch}-libsolv-static (*)
- mingw${arch}-winpthreads-static
- mingw${arch}-xz-libs-static
- mingw${arch}-zlib-static
- mingw${arch}-zstd-static (**)
- openssl-pkcs11 (optional, for signing) (***)
- osslsigncode (optional, for signing)
- upx (optional)
The ${arch} needs to be replaced with either "32" or "64"
depending on the target architecture to build for.
(*) Requires 'dnf copr enable jturney/mingw-libsolv'
(**) Requires 'dnf copr enable jturney/mingw-zstd'
(***) Plus the package containing the pkcs11 module for your HSM (e.g. yubico-piv-tool for a YubiKey)
Build commands:
---------------
0) Obtain this project's source code:
$ git clone git://sourceware.org/git/cygwin-apps/setup.git
$ cd setup
1) Configure using this option
$ /path/to/setup/bootstrap.sh
This will automatically rebuild configure files and run configure
in the current directory. If you have installed toolchains for
both i686 and x86_64 architectures, then you need to select for
which architecture you want to build:
$ /path/to/setup/bootstrap.sh --host=i686-w64-mingw32
$ /path/to/setup/bootstrap.sh --host=x86_64-w64-mingw32
2) $ make
3) Wondering why your binary is so much bigger than the official releases?
This removes debugging symbols:
$ make strip
This additionally compresses it using UPX
(requires package upx to be installed):
$ make upx
CODING GUIDELINES:
------------------
setup has a number of different code formats in it. This is ok as long
as it stays readable. When submitting a patch, make sure that you use
the coding-style of the surrounding code.
For new code, use the GNU standards as much as possible. We understand
that this is not a precise fit for C++ code but you can use Cygwin itself
as a guide.
SUBMITTING A PATCH:
-------------------
Follow the general directions given in the Cygwin contributions document:
https://cygwin.com/contrib.html
The appropriate mailing list for this project is cygwin-apps
(rather than cygwin-patches). Thus an appropriate configuration is:
$ git config --local format.subjectprefix "PATCH setup"
$ git config --local sendemail.to "[email protected]"
Before sending patches with:
$ git format-patch [--cover-letter]
$ git send-email *.patch
TRANSLATIONS
------------
Translations of the gettext template res.pot can be made using PO file tools, or
online at https://hosted.weblate.org/projects/cygwin-setup/cygwin-setup/
To update the translations in the .res files from the .po files:
1) 'pip3 install translate-toolkit'
2) When adding a new language <LANG>:
- Add <LANG> to the LINGUAS variable in Makefile.am
- Add mapping from <LANG> to Windows LCID in langopts script
- Add inclusion of res/<LANG>/res.rc in top-level res.rc file
3) 'make po2rc' to regenerate the res/<LANG>/res.rc files
4) Build and run setup with --lang <LCID> to test translation
5) Commit the updated res.rc files
The res/en/res.rc file functions as a template, and po2rc replaces the
translatable strings in it with those from a given po/<LANG>/res.po file to
generate a res/<LANG>/res.rc file.
Cached version (4797s old)