Sage FreeBSD 8.x build notes for Sage 4.6.1-alpha2

Note that this is a work-in-progress and not currently complete. If you wish to assist, please contact me via [email protected]


Overall build environment differences

Preparatory work

It's possible there are other dependencies, I haven't tried building sage in a clean (tinderbox) environment.

Building Sage

On FreeBSD 8.x

FreeBSD 7.x hasn't been tested with Sage 4.6.1 but is expected to work, though additional work will be required on cephes.

Note that the LD_LIBRARY_PATH is needed to work around configuration errors in the FreeBSD port of gcc45 - see

The gmake to make symlink is necessary to compile (eg) eclib - which is documented as requiring GNU make, and has this symlink as a suggested workaround.

Current Status

Porting still in progress and sage does not fully compile.

Notes on spkgs and attached patches



FreeBSD does not yet include a full C99 libm so cephes is also used on FreeBSD. The overall approach used on the FreeBSD is for cephes to create complex.h, math.h and which are installed under $SAGE_LOCAL and contain the missing C99 functions then fall back to the FreeBSD base versions for functions existing in FreeBSD. This mean that references to <math.h>, <complex.h> or -lm will appear to reference a complete set of C99 functions, split over two physical locations.

Other changes:

(tgammal and lgammal are required by sage/symbolic/pynac.cpp)

Areas still needing work:

Trac ticket: #9543


TonelliShanks.h references int32_t but does not directly include <stdint.h>. On FreeBSD using gcc45 (but not the base gcc), this causes compilation to fail with:

g++ -ansi -c TonelliShanks.cpp -o TonelliShanks.o -I/tank/obj/sage/sage-4.5/local/include -Wall -Wno-sign-compare -fomit-frame-pointer -O2
In file included from TonelliShanks.cpp:31:0:
TonelliShanks.h:41:8: error: 'int32_t' does not name a type
TonelliShanks.h:43:51: error: 'int32_t' has not been declared
TonelliShanks.cpp:67:1: error: 'int32_t' does not name a type
TonelliShanks.cpp:136:54: error: 'int32_t' has not been declared
TonelliShanks.cpp: In function 'void sqrtmodpk(__mpz_struct*, __mpz_struct*, __mpz_struct*, __mpz_struct*, int)':
TonelliShanks.cpp:140:11: error: 'int32_t' was not declared in this scope
TonelliShanks.cpp:140:19: error: expected ';' before 'i'
TonelliShanks.cpp:140:25: error: 'i' was not declared in this scope
make[2]: *** [TonelliShanks.o] Error 1
make[2]: Leaving directory `/tank/obj/sage/sage-4.5/spkg/build/flintqs-20070817.p5/src'
Error building William Hart's Quadratic Sieve

As a work-around, make TonelliShanks.h idempotent on FreeBSD (it probably should be on all architectures but making the patch FreeBSD-specific simplifies testing).

Trac ticket: #9545


Trac ticket: #7831


Patch sage-spkg to apply local patches. This patch also disables deletion of the spkg/build/FOO temporary directories - which was useful during porting. This latter patch can be safely removed.

freebsd/sage-4.6.1 (last edited 2010-11-18 18:54:06 by PeterJeremy)