wiki:CygwinPort

Version 130 (modified by kcrisman, 9 years ago) (diff)

--

Information for the port to Cygwin

  • Below are the list of prerequisites, bug fixes/upgrades needed for Cygwin to build, and doctest tickets for Cygwin
  • This is as of Sage version 4.7.2.alpha3
  • Closed tickets and some other information, like how to mark Cygwin-specific parts in C, are at the end
  • Although below it compares Windows 7 and Windows XP, it is conceivable that the Cygwin version also sometimes has something to do with the problems listed

Cygwin Notes

Prerequisites

These Cygwin packages need to be installed in order for the Sage build to complete. Eventually, these should be added to prereq, but that would be for when Cygwin is actually supported.

Also, many of these require things like zlib and other included Sage packages, so it would probably be possible to remove a lot of those from a Sage Cygwin tarball (with effort).

  • file, liblapack, liblapack0, liblapack-devel, patch
  • also libiconv and openssl, openssl-devel
  • (to use, not build) we may also need libgc-devel - see #9167
  • Windows 7 additional requirements
    • libncurses-devel (to build Singular)
  • Reminders for compilers
    • Don't forget fortran
    • Make sure you download all gcc and g++ so the versions match
  • Useful other things to install, especially on a minimal install of Cygwin
    • gcc, make, m4, perl are needed
    • not needed but very useful are ssh and scp
    • similarly and nano or vim or something to edit files with

Rebasing

At any point in the build process (or after), changes in Windows (such as antivirus upgrades) can lead to forking problems, and you may need to rebase.

  • See these build notes of William's for a fairly effective strategy to deal with this.
  • In order to implement this, you may need to use the 'ash' shell from the Windows command line.
    • This may require doing C:\cygwin\bin\ash.exe or something similar instead of just ash.
    • For ash to actually find any commands, you may need to follow the tips at this blog post for setting the CYGWIN_HOME variable and prepending the Cygwin binary directory (usually C:\cygwin\bin) to the Path variable.
    • You may also have problems with permissions (getting a message about "is not writable"). This cyg-apt thread seems to have several solutions for this.

Porting!

Also, don't forget to export SAGE_PORT=yes before starting.

Build Tickets

  • #6743: A metaticket for exactly this, which also points here. Can be closed when Sage builds out of the box with the prerequisites above. Be aware that exactly what tickets/spkgs are needed depends on which alpha or release you use; read carefully to make sure the spkgs coincide.

Win 7 only

  • #11245: on Win7 tar does not unpack cddlib and networkx spkg's right.
  • Issue with Python 2.6.4 building. Relevant comments:
    • Comment 0 - Original report, from March 2010, at http://groups.google.com/group/sage-windows/browse_thread/thread/88499b995a22ecc1 - but note the fix should be __CYGWIN__, not CYGWIN
    • Comment 1 - I had no problems with that thus far in Vista Premium 32-bit - Alec Mihailovs
    • Comment 2 - Alec - Win7 has a newer codebase, so this is not really a proof that we need not worry --- I think we really need to. Dmitrii
    • Comment 3 (from somebody) "obsolete, as Cygwin now has Python 2.6.5 as the standard" - true, but apparently still a problem for us
    • Comment 4 - Python spkg builds fine on XP - kcrisman
    • Comment 5 - Rebasing everything in $SAGE_ROOT seemed to fix it on Windows 7. See the section about rebasing above.
    • Comment 6 - Sometimes sage-gdb does not work. install.log reports that Python failed to find necessary bits to build
      • _bsddb and bsddb185
      • gdbm and spwd and nis
      • _tkinter
      • several *audiodev ones
      • and apparently failed to build _curses and _curses_panel, though not the "bits" message

Win XP only or both

  • in some cases, untarring the Sage source needs to be done with options xopf, not just xf (observed on Win7)
  • #11119: ECL 11.1.1 fails on Cygwin
  • #11497: Twisted sometimes doesn't build
  • Maxima - fixed by #11884: ECL doesn't build on OS X Lion - this upgrade to ECL changes and avoids forking on ECL
    • Older tickets on this:
      • #11260: ECL-11.1.1 fails to compile maxima on Windows 7 / Cygwin 1.7.9
      • #11502: Maxima fails to build on Cygwin 1.7.3 on XP (sometimes)

Getting Sage to start

  • #11635: Also copy "libntl.dll.a -> libntl.dll" (see ticket for why this was split off from the previous one) - #12104 is a dup, as it turns out
  • #11551: Pari segfault on startup (use sage -gdb to see more info)
    • This happens while defining Pynac's I, but the final trace is moving an mpfr number to pari, where the segfault seems to be in allocating space to a real. This is never fixed by rebasing, and always is the same place.
    • If one comments out this and the initialization of qqbar, then Sage starts. However, then all doctests related to "I" and Maxima (see #9167) fail.

Doctest Tickets

  • #9162 -- pynac.pyx use double precision special functions instead of long double (REVISITED)
  • #9165 -- lcalc does not work for elliptic curves on cygwin
  • #9167 -- importing sage.libs.ecl yields a "no such process" error
  • #9168 -- ratpoints does not work correctly
  • #9169 -- a cachefunc.py doctest hangs seemingly forever
  • #9170 -- get_memory_usage isn't implemented, e.g., because there's no top
  • #9171 -- some test failures in sagedoc.py
  • #9172 -- numerical noise in sage/rings/integer.pyx
  • #9173 -- BSD.py tests behave differently on cygwin, so need to be written to reflect that
  • #9174 -- robert miller's 2-descent is completely broken on cygwin
  • #9176 -- various heegner_index errors involving interval arithmetic on cygwin

Closed

  • #11504: Tachyon fails to build due to same failure that was fixed in #7335. See also #11706.
  • #11744: real interval absolute needs gmp as a dependency
  • #11727: Flint needs a very minor Cygwin fix due to a carriage return mistakenly placed in it
  • #11499: sage/rings/factorint needs gmp as a dependency
  • #11550: Singular does not build
  • #11547: The following files need to be copied "libcliquer.dll -> libcliquer.so", "libflint.dll -> libflint.so"
  • #8269: Maxima doesn't build on XP
  • #10240: pari-2.4.3.svn-12577.p9 incorrectly checks for the shared library on Cygwin (should be fixed by #11130)
  • #11494: libblas.dll.a is not copied to $SAGE_LOCAL/lib when ATLAS is "installed" (breaks linbox) (should be fixed by #10226)
  • #11232: patch spkg should not be installed, use Cygwin's
  • #11246: flint-1.5.0.p5 extraneous #includes break typedef ulong
  • #9845: lcalc doesn't build on cygwin due to missing time.h include
  • #9776: Cygwin: GLPK extension module needs to be more explicit in its linking (positive review)
  • #9146: cygwin: gd doesn't correctly link in libpng with sage-4.4.3.
  • #8257: gd needs a better version of expr
  • #7319: gdmodule fails
  • #7321: numpy fails to build on cygwin due to not using the correct fortran compiler
  • #8780: Add cephes spkg for Cygwin (provides complex.h amongst other things)
  • #8192: PolyBoRi needs png12 and z to build on Cygwin.
  • #8782: pari does not work under Cygwin
  • #8907: Python should be build with enable-shared
  • #9050: libntl.dll should be libntl.dll.a
  • #8542 / #8903: Pynac needs to use a function pointer table.
  • #7337: PolyBoRi fails to build on cygwin
  • libflint.dll needs to be libflint.so, or polynomial_integer_dense_flint.pyx needs to know to use the .dll (maybe not a real issue, let's wait an see on this one).
  • #8642: port detection for the notebook does not work in Cygwin
  • #8855: sage-env needs to be updated for Cygwin
  • #8853: fix M_PI_4 in complex_double on Cygwin
  • #8852: minor doctest fix in fast_eval.pyx for Cygwin
  • #8850: Cython should link against BLAS instead of ATLAS on Cygwin
  • #8849: the palp interface throws a (harmless?) OSError on Cygwin
  • #8848, #8847, #8846, #8845, #8844, #8843
  • #9067: boehm_gc (still) fails to build on Cygwin
  • #9166 -- sympow does not work on cygwin (This should be fixed by the patches made for Solaris x86 - see #9703)
  • #9154: BoehmGC again!
  • #10247: Sage 4.6 has PARI problems on Cygwin
  • #11167: Sage 4.7.alpha3 library doesn't build under Cygwin
  • #9163 -- output of a subtle test in expect.py differs slightly on cygwin

how to mark CYGWIN-specific parts in code

gcc on CYGWIN defines a variable __CYGWIN__. So you can use it to #if(n)def stuff.

old Cygwin binaries

(Old) Cygwin prebuilt sage binaries for cygwin are here: http://sage.math.washington.edu/home/wstein/binaries/cygwin/