A patch for setup providing command line switches (-I, --include-source) to automatically include source packages associated with any selected binary packages when downloading/installing.
The first version is targeted at source revision 2.774 (can obtain as -D20120430) from cvs, which seems to match the binary setup.exe available for download at cygwin.com in early June 2013. It will almost apply to head around 20130619, but a second version is provided to do that cleanly. It may not be suitable for release, but am sending here in case it would be found and useful to others. ===================================================================== file: include_source_D20120430_R2.774.patch.diff ===================================================================== Index: install.cc =================================================================== RCS file: /cvs/cygwin-apps/setup/install.cc,v retrieving revision 2.101 diff -u -r2.101 install.cc --- install.cc 25 Jul 2011 14:36:24 -0000 2.101 +++ install.cc 10 Jun 2013 08:45:50 -0000 @@ -68,6 +68,8 @@ extern ThreeBarProgressPage Progress; +extern BoolOption IncludeSource ; + static int total_bytes = 0; static int total_bytes_sofar = 0; static int package_bytes = 0; @@ -675,8 +677,9 @@ } } - if (pkg.desired.sourcePackage ().picked()) + if (pkg.desired.sourcePackage ().picked() || IncludeSource) { + bool skiprequested = false ; try { md5_one (*pkg.desired.sourcePackage ().source ()); @@ -684,9 +687,12 @@ catch (Exception *e) { if (yesno (owner, IDS_SKIP_PACKAGE, e->what()) == IDYES) + { + skiprequested = true ; //(err occurred,) skip pkg desired pkg.desired.sourcePackage ().pick (false, &pkg); + } } - if (pkg.desired.sourcePackage().picked()) + if (pkg.desired.sourcePackage().picked() || (IncludeSource && !skiprequested) ) { md5sum_total_bytes_sofar += pkg.desired.sourcePackage ().source()->size; total_bytes += pkg.desired.sourcePackage ().source()->size; Index: download.cc =================================================================== RCS file: /cvs/cygwin-apps/setup/download.cc,v retrieving revision 2.55 diff -u -r2.55 download.cc --- download.cc 29 Apr 2011 12:43:59 -0000 2.55 +++ download.cc 10 Jun 2013 08:45:50 -0000 @@ -57,6 +57,8 @@ extern ThreeBarProgressPage Progress; +BoolOption IncludeSource (false, 'I', "include-source", "Automatically include source download"); + static bool validateCachedPackage (const std::string& fullname, packagesource & pkgsource) { @@ -223,7 +225,7 @@ if (!check_for_cached (*i)) total_download_bytes += i->size; } - if (sourceversion.picked ()) + if (sourceversion.picked () || IncludeSource) { for (vector<packagesource>::iterator i = sourceversion.sources ()->begin(); @@ -262,7 +264,7 @@ i != version.sources ()->end(); ++i) e += download_one (*i, owner); } - if (sourceversion && sourceversion.picked()) + if (sourceversion && (sourceversion.picked() || IncludeSource) ) { for (vector<packagesource>::iterator i = sourceversion.sources ()->begin(); =========================================================================== file: include_source_patch_HEAD_circa20130612.diff =========================================================================== Index: install.cc =================================================================== RCS file: /cvs/cygwin-apps/setup/install.cc,v retrieving revision 2.106 diff -u -r2.106 install.cc --- install.cc 14 Mar 2013 09:21:06 -0000 2.106 +++ install.cc 12 Jun 2013 11:00:58 -0000 @@ -73,6 +73,7 @@ static long long int total_bytes_sofar = 0; static int package_bytes = 0; +extern BoolOption IncludeSource ; static BoolOption NoReplaceOnReboot (false, 'r', "no-replaceonreboot", "Disable replacing in-use files on next " "reboot."); @@ -704,8 +705,9 @@ } } - if (pkg.desired.sourcePackage ().picked()) + if (pkg.desired.sourcePackage ().picked() || IncludeSource) { + bool skiprequested = false ; try { md5_one (*pkg.desired.sourcePackage ().source ()); @@ -713,9 +715,12 @@ catch (Exception *e) { if (yesno (owner, IDS_SKIP_PACKAGE, e->what()) == IDYES) + { + skiprequested = true ; //(err occurred,) skip pkg desired pkg.desired.sourcePackage ().pick (false, &pkg); + } } - if (pkg.desired.sourcePackage().picked()) + if (pkg.desired.sourcePackage().picked() || (IncludeSource && !skiprequested) ) { md5sum_total_bytes_sofar += pkg.desired.sourcePackage ().source()->size; total_bytes += pkg.desired.sourcePackage ().source()->size; Index: download.cc =================================================================== RCS file: /cvs/cygwin-apps/setup/download.cc,v retrieving revision 2.56 diff -u -r2.56 download.cc --- download.cc 8 Nov 2012 19:12:16 -0000 2.56 +++ download.cc 12 Jun 2013 11:00:58 -0000 @@ -56,6 +56,8 @@ extern ThreeBarProgressPage Progress; +BoolOption IncludeSource (false, 'I', "include-source", "Automatically include source download"); + static bool validateCachedPackage (const std::string& fullname, packagesource & pkgsource) { @@ -222,7 +224,7 @@ if (!check_for_cached (*i)) total_download_bytes += i->size; } - if (sourceversion.picked ()) + if (sourceversion.picked () || IncludeSource) { for (vector<packagesource>::iterator i = sourceversion.sources ()->begin(); @@ -261,7 +263,7 @@ i != version.sources ()->end(); ++i) e += download_one (*i, owner); } - if (sourceversion && sourceversion.picked()) + if (sourceversion && (sourceversion.picked() || IncludeSource) ) { for (vector<packagesource>::iterator i = sourceversion.sources ()->begin(); =============================================================================