-
Notifications
You must be signed in to change notification settings - Fork 230
Building M2 from source using Autotools
After downloading the dependencies for your system (see below), do the following:
git clone https://github.com/Macaulay2/M2
cd M2/M2
make
cd BUILD
../configure --enable-download
make
sudo make install
Note: On macOS and BSD systems, use gmake
instead of make
.
Here are some dependencies you may have to install on your system to build Macaulay2:
sudo pacman -S 4ti2 autoconf automake bison boost cddlib coin-or-csdp eigen fflas-ffpack flex flint gc gcc gcc-fortran gfan git givaro glpk gtest icu libtool libxml2 lrs make mpfi nauty normaliz ntl onetbb patch pkgconf python singular texinfo time topcom which
Note:
- Add
--with-gtest-source-path=/usr/src/googletest
to the call toconfigure
so that it can find GoogleTest. - cohomCalg, Frobby, Mathic, Mathicgb, Memtailor, MPSolve, and Frobby are not available as packages on Arch Linux and will be downloaded and built. Alternatively, Frobby is available in the Arch User Repository.
sudo apt install 4ti2 autoconf automake bison ca-certificates cohomcalg coinor-csdp fflas-ffpack flex g++ gfan gfortran git install-info libboost-dev libboost-regex-dev libboost-stacktrace-dev libcdd-dev libeigen3-dev libffi-dev libflint-dev libfrobby-dev libgc-dev libgdbm-dev libgivaro-dev libglpk-dev libgmp-dev libgtest-dev liblzma-dev libmathic-dev libmathicgb-dev libmemtailor-dev libmpfi-dev libmpfr-dev libmps-dev libnauty2-dev libncurses-dev libnormaliz-dev libntl-dev libopenblas-dev libpython3-dev libreadline-dev libsingular-dev libtbb-dev libtool-bin libxml2-dev lrslib make nauty normaliz patch pkgconf python3 singular-data time topcom wget zlib1g-dev
Note:
- On Ubuntu 18.04 (Bionic Beaver) and Ubuntu 20.04 (Focal Fossa) run the following first, as several of the above dependencies are missing from the official Ubuntu archives:
sudo add-apt-repository ppa:macaulay2/macaulay2
sudo dnf install 4ti2 TOPCOM autoconf automake bison boost-devel cddlib-devel cohomCalg csdp-tools diffutils eigen3-devel factory-devel fflas-ffpack-devel flex flint-devel g++ gc-devel gcc-gfortran gdbm-devel gfan git glpk-devel gmp-devel lapack-devel libffi-devel libfrobby-devel libnauty-devel libnormaliz-devel libtool libxml2-devel lrslib-utils make mathic-devel mathicgb-devel memtailor-devel mpfi-devel mpfr-devel mpsolve-devel nauty ncurses-devel normaliz ntl-devel patch python3-devel readline-devel tbb-devel which xz-devel zlib-devel
Note:
- Add
CPPFLAGS=-I/usr/include/frobby
to the call toconfigure
so that it can find Frobby. - Fedora's GoogleTest package does not include some necessary files, so it will be downloaded and built.
sudo dnf install autoconf automake bison boost-devel diffutils eigen3 flex gc-devel gcc-c++ gcc-gfortran gdbm-devel git glpk-devel gmp-devel lapack-devel libffi-devel libtool libxml2-devel make mpfr-devel ncurses-devel patch python3-devel readline-devel tbb-devel which xz-devel zlib-devel
Note: You must have the EPEL enabled in order to install several of these packages.
The current development version of the source code can be obtained with this command, assuming you have installed "git" on your machine:
git clone https://github.com/Macaulay2/M2
A directory called M2, which you can move or rename, will be created, and this INSTALL file is in the subdirectory "M2" of it. By default, the "master" branch of the M2 repository will be checked out.
The "release" tags tend to be more stable, and if you compile from one of those, you'll have the same functionality as those who download our binary releases. So, after cloning, you can switch to the tag containing version 1.6, for example, with the following command:
git checkout release-1.6
Instead of release-1.6 you should, of course, use the most recent one.
The following command shows the list of release tags:
git tag | grep release
However, if some time has passed since the most recent release and your system has newer versions of some of Macaulay2's dependencies than were available at the time of the release, you may have more success building the "master" branch.
The following commands, run from the top level of this source tree (the parent of the directory this file is in) will download the latest changes to the source code:
git pull
git submodule sync
git submodule update
To obtain the latest, but potentially unstable, changes to the Macaulay2 source code, switch to the "development" branch:
git checkout development
Here are some libraries you may have to install on your system to build Macaulay2. If your operating system distinguishes between development versions and run-time versions of the libraries, you will need the development version.
Some libraries (gc, mathic, mathicgb, and memtailor) are built from source by default. If you would prefer to use the versions of these libraries already available on your system, then add the option "--with-system-X" to the "configure" command line below, where X is the corresponding library, e.g., "--with-system-memtailor".
Here are commands that will get you a good development environment under various modern operating systems:
Install packages as root with:
apt-get install -y -q sudo 4ti2 autoconf bison cohomcalg curl emacs fflas-ffpack flex g++ gcc gfortran install-info libboost-dev libboost-math-dev libboost-regex-dev libboost-stacktrace-dev libc6-dev libcdd-dev libffi-dev libgdbm-dev libgivaro-dev libglpk-dev libgmp3-dev libgtest-dev liblapack-dev liblzma-dev libmpc-dev libmpfi-dev libmpfr-dev libmps-dev libncurses-dev libncurses5-dev libntl-dev libreadline-dev libsingular-dev libtool libxml2-dev libz-dev lrslib lsb-release make normaliz npm openssh-server patch pinentry-curses pkg-config singular-data time topcom unzip xbase-clients yasm zlib1g-dev polymake git dpkg-dev gfan libeigen3-dev libtool-bin frobby libfrobby-dev nauty nauty-doc coinor-csdp coinor-csdp-doc libflint-dev libtbb-dev
note: libz-dev seems to have been replaced by zlib1g-dev
note: libncurses-dev seems to have been replaced by libncurses5-dev
note: libreadline-gplv2-dev is an older GPL v2 version of libreadline
note: cohomcalg is available only starting with Ubuntu 19.04 and Debian 10; it's okay to skip it
note: libflint-dev will work starting with Ubuntu 20.10 and Debian 11 (version >= 2.6.0 is required)
note: libmps-dev is available only starting with Ubuntu 21.04 and Debian 11
note: topcom is available only starting with Ubuntu 20.10 and Debian 11
Dependencies that aren't available in the official Ubuntu repositories on older systems may be available in the Macaulay2 PPA:
sudo apt install software-properties-common
sudo add-apt-repository ppa:macaulay2/macaulay2
Then proceed with installing the missing dependencies as above.
If configuring with "--with-system-X", then also install the following packages for each value of X:
- gc: libgc-dev
- mathic: libmathic-dev
- mathicgb: libmathicgb-dev
- memtailor: libmemtailor-dev
On some systems, you may have to add FC=gfortran
to the environment or to the "configure" command line below, if the "make" default fortran compiler "/usr/bin/f77" is not available.
On a 32-bit system, add --with-mpir-config-options="ABI=32 --build=i686-pc-linux-gnu"
to the "configure" command line below. (The --build option is necessary only to enable distribution of the resulting binaries to users of other hardware.)
(To upgrade to a new release of Ubuntu, if desired, run "update-manager" if you want a GUI, or run "do-release-upgrade -d" for a command line interface. For Debian, run "apt-get update ; apt-get dist-upgrade".
Install packages with:
sudo apt-get install -y -q autoconf bison curl emacs flex g++ gcc gfortran libc6-dev libcdd-dev libgc-dev libgdbm-dev libglpk-dev libgmp3-dev liblapack-dev libmpfr-dev libncurses-dev libntl-dev libreadline-dev libxml2-dev libz-dev make openssh-server subversion xbase-clients time libtool libmpc-dev yasm
On a 32-bit system, add --with-mpir-config-options="ABI=32 --build=i686-pc-linux-gnu"
to the "configure" command line below. (The --build option is necessary only to enable distribution of the resulting binaries to users of other hardware.)
The Raspberry Pi comes with 512MB of RAM and a swapfile /var/swap of size 100MB. It's a good idea to increase the swap size to 1000MB by editing /etc/dphys-swapfile .
Install packages with:
sudo dnf -y install autoconf bison boost-devel boost-stacktrace cddlib-devel cohomCalg csdp csdp-tools eigen3-devel emacs factory-devel factory-gftables fflas-ffpack-devel flex flint-devel frobby gcc-c++ gc-devel gdbm-devel git givaro-devel glpk-devel gmp-devel gtest gtest-devel kernel-devel lapack-devel libgfortran-static libmpc-devel libtool libxml2-devel mpfi-devel mpfr-devel mpsolve nauty ncurses-devel ntl-devel patch pkgconf polymake qd readline-devel rpm-build rpmdevtools rpm-sign strace time which yasm rpmlint
If configuring with --with-system-X
, then also install the following packages for each value of X:
- gc: gc-devel
- mathic: mathic-devel
- mathicgb: mathicgb-devel
- memtailor: memtailor-devel
We have found that git 1.7.1 is too old, but have succeeded with these modules:
module purge
module load -f make/4.3
module load -f yasm/1.3.0
module load -f automake/1.15
module load -f gcc/4.9.0
module load -f libtool/2.4.3
module load -f autoconf/2.69
module load -f git/2.13.4
Install packages with:
- from the standard repository:
sudo dnf install -y autoconf bison blas boost-devel emacs flex gc gcc-c++ gcc-gfortran gdbm-devel git-all gmp-devel lapack libmpc libtool libxml2-devel make mpfr-devel ncurses-devel readline-devel redhat-lsb rpm-build rpm-sign time wget xz-devel zlib-devel
- from the PowerTools repository
sudo dnf config-manager --set-enabled PowerTools sudo dnf install -y eigen3-devel gtest texinfo yasm
This distribution is obsolete.
Install packages with:
sudo yum install -y autoconf bison boost-devel emacs flex gc-devel gcc-c++ gcc-gfortran gdbm-devel glpk-devel gmp-devel lapack-devel libtool libxml2-devel mpfr-devel ncurses-devel readline-devel rpm-build rpm-sign git-all zlib-devel xz-devel libmpc-devel time blas blas-devel texinfo redhat-lsb wget
Note: Scientific Linux 7.1 has a modern version of gcc (version 4.8.3). By contrast, Scientific Linux 6.5 has an old version (4.4.7) of gcc that may not work with a future version of Macaulay2. However, one can install newer compilers (4.8.2) from the repository of the "Scientific Linux CERN 6" distribution, (see http://linux.web.cern.ch/linux/devtoolset/) using the following commands. sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo sudo yum install devtoolset-2-gcc devtoolset-2-gcc-g++ devtoolset-2-gcc-gfortran devtoolset-2-binutils Then use . /opt/rh/devtoolset-2/enable to update the environment of your currently running shell. The latter command will also work in your shell initialization file, ".profile". Alternatively, see the instructions at https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/. Download yasm from http://yasm.tortall.net/Download.html and install it in /usr/local, the usual way (untar, configure, make, make install).
sudo zypper -n install man man-pages emacs-x11 gcc git screen autoconf bison createrepo emacs flex gc-devel gcc gcc-c++ gcc-fortran gdbm-devel gmp-devel lapack-devel libxml2-devel make mpfr-devel ncurses-devel patch readline-devel subversion zlib-devel libtool libmpir-devel mpfr-devel ntl-devel flint-devel glpk-devel cddlib-devel givaro-devel boost-devel rpm-build mpc-devel yasm tbb-devel eigen3-devel
Add
--enable-rpm --build=x86_64-suse-gnu
to the configure command line, to make RPM files for distribution to generic hardware.
To prepare for compiling it yourself:
sudo pacman --sync --needed archlinux-keyring
sudo pacman-key --populate archlinux
sudo pacman --sync --needed autoconf automake bison boost cddlib emacs flex flint gc gcc gcc-fortran gdbm gfan git givaro glpk gmp gtest lapack make mpfr nauty ntl pkg-config readline texinfo time unzip yasm gtest wget patch eigen fflas-ffpack
To upgrade the system:
sudo pacman-key --refresh-keys
sudo pacman --sync --refresh --sysupgrade
To install generally needed packages, run this command as root:
emerge --ask -n sudo xauth git emacs
Note: for emacs, set the USE variables (package.use), so emacs will use X11 when available:
app-editors/emacs X
app-emacs/emacs-common-gentoo X
To install packages needed by Macaulay2, run this command:
emerge --ask -n yasm sys-process/time
To install packages potentially usable by Macaulay2, run this command:
emerge --ask -n 4ti2 blas-reference lapack-reference boehm-gc boost cddlib coinor-csdp flint fplll frobby gdbm gfan glpk gmp gtest lrslib mpc mpfr mpir nauty normaliz ntl topcom
Note: various variables, licenses, and options will have to be set
The steps described below are combined in the page Building M2 from source on macOS, which you could follow instead.
Install the Xcode Command Line Tools using the following command.
xcode-select --install
(Starting with Mac OS X version 10.15 (Catalina), /usr/include does not exist and cannot be
made to exist, so our previous instructions for getting it no longer apply and have been removed.)
(Mac OS X version 10.14 (Mojave), one must run an additional command:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
An alternative to the command above is to use the finder to navigate to the directory
/Library/Developer/CommandLineTools/Packages
and then to "open" the package file to get it installed.
Note: After upgrading the OS, if /usr/include is again missing, simply repeat.)
Optionally install a good version of emacs, such as the one available from
http://emacsformacosx.com/, which is a native Mac OS X port of emacs. To
run it from the command line, create an executable shell script called
"emacs" with this line in it:
exec /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
Install "homebrew", available from http://brew.sh/. (Experts who want to install
homebrew somewhere other than in /usr/local may prefer to point a browser
at https://github.com/Homebrew/homebrew/tarball/master, which will download
a tar file that can be untarred anywhere and renamed.)
Install the programs and libraries needed for building:
brew update |cat
brew install autoconf automake bdw-gc boost ccache cddlib cmake ctags eigen flint gdbm glpk gmp gnu-tar libmpc libomp libtool make mpfi mpfr mpir ncurses ninja ntl pkg-config tbb wget xz yasm texinfo |cat
If you have previously installed homebrew, will be distributing your
Macaulay2 binaries to other people, and perhaps not used the option
--build-bottle when installing packages, then use the command
find /usr/local/Cellar -name INSTALL_RECEIPT.json | xargs grep built_as_bottle..false
to find packages that aren't bottled, and then use commands like
brew remove --ignore-dependencies FOO && brew install --build-bottle FOO
to reinstall them.
Periodically upgrade the programs and libraries to the latest versions with
brew update
brew upgrade
brew cleanup
Now remember to add
--enable-build-libraries="readline"
to the "configure" command line below in the section on compiling
Macaulay2. This works around a bug in the library: CTRL-A doesn't go all
the way to the beginning of the line after typing r e s o TAB C-a.
Note: software installed by "fink", if not kept up to date, can interfere
with the Macaulay2 build process. To test, for example, whether the
correct version of "automake" is available, run the shell command
type automake
and expect to see /usr/local/bin/automake, as opposed to
/sw/bin/automake. Since homebrew suffices for most purposes, it's
probably best to just remove fink entirely, with the command
sudo rm -rf /sw
Note: adding "--enable-strip" to the configure script command line may not be a good idea,
as stripping the M2 binary seems to cause the program to crash unpredictably.
Note: starting with Mac OS X 10.14 (Mojave) the "binutils" package of
homebrew includes versions of the programs 'ar' and 'ranlib' that are not
compatible with the native (clang) Mac OS X compilers, so either remove
or unlink the package, add "AR=/usr/bin/ar RANLIB=/usr/bin/ranlib" as
options to the 'configure' command line, or arrange for /usr/local/bin to
occur later in the value of the environment variable PATH than /usr/bin
does.
It may happen that you need a modern version of the GNU C compiler, but you have no way to download a binary distribution of it, or you have no way to use "brew" or "fink" to download and compile it for you. In that case, you may download, compile, and install the GNU C compiler (without necessariy having root access) as follows. Change "$HOME/local" below to the path to the directory where you want to install the files; if it's a directory not owned by you, prefix the "make install" command below with "sudo".
wget ftp://ftp.gnu.org/gnu/gcc/gcc-7.1.0/gcc-7.1.0.tar.bz2
tar xjf gcc-7.1.0.tar.bz2
cd gcc-7.1.0
./contrib/download_prerequisites
cd ..
mkdir gcc-7.1.0-build
cd gcc-7.1.0-build
../gcc-7.1.0/configure --prefix=$HOME/local --program-suffix=-7.1.0 --enable-languages=c,c++,fortran --disable-multilib
make
make install
Do not omit the language "fortran" from the list, even if the package
"lapack-devel" is installed, as "gfortran" is consulted for the locations
of its libraries, and it would be bad to have a mismatch.
It might be possible to add --disable-libstdcxx to the "configure"
command line above, allowing the resulting binaries to depend on the
version of libstdc++ already installed on your system.
The resulting compiler executables will be named gcc-7.1.0 and g++-7.1.0.
Now put the following lines in your file $HOME/.profile :
export PATH=$HOME/local/bin:$PATH
export MANPATH=$HOME/local/share/man:$MANPATH
export INFOPATH=$HOME/local/share/info:$INFOPATH
export LD_LIBRARY_PATH=$HOME/local/lib:$HOME/local/lib64:$LD_LIBRARY_PATH
export CC=gcc-7.1.0
export CXX=g++-7.1.0
export FC=gfortran-7.1.0
and then log out and log in again (or source the file into your
environment and continue in the same process or in daughter processes).
Under Scientific Linux 6.4, if you run "sudo yum install -y glibc-devel.i686"
first, then you can omit --disable-multilib above and get a 32 bit
compiler, too. To see quickly which glibc architectures are installed,
run "ls /usr/include/gnu/stubs-*.h". (Parenthetically, we observe that to
make /usr/bin/gcc successfully compile 32 bit binaries, one should also
run "yum install -y libgcc.i686".)
Any other libraries you may want to use may also be installed with
$HOME/local as the install prefix, as gcc-4.8.2 will automatically search
in there for include files and libraries.
Installing multiple software in the same directory, such as in $HOME/local
(as described above), makes it hard to remove or upgrade packages. To
solve that problem, use the program "epkg", available from
https://github.com/DanGrayson/epkg.
A typical Macaulay2 build directory can use up 1.5GB of disk space, and in an institutional environment your home directory is probably backed up to tape. (You may do something similar on your own computers.) Thus you can avoid an unnecessary burden on your system administrator if you put the repository (or at least the build directories) on a locally mounted scratch drive, where the files are not backed up. For your changes to Macaulay2 source code, github.com will serve as your backup.
It may be desirable when building Macaulay2 on multiple systems to create a "fat" tarfile containing all of our source code as well as all of the source code of the submodules and libraries that might later be used, to prevent later access to the internt to obtain that source code. To achieve that, do the following:
- Add the option "--recurse-submodules" to the 'git clone' command above. This populates the submodules' subdirectories with their source code.
- Run : ./configure --enable-download make -C libraries fetch-all make distclean This fetches tar files containing the source code of all the libraries and deposits them in BUILD/tarfiles/.
- When satisfied with the result, remove our git source repository with rm -rf ../.git Alternatively, tar up just this directory and not its parent directory. Everything needed to build Macaulay2 will be included.
The "Python" package embeds a Python interpreter inside Macaulay2. For this to work, the Macaulay2 binary needs to be linked against the Python shared library. To do this, add the option "--with-python" to the "configure" command line below. Optionally, you may specify the Python version, e.g., "--with-python=3.10". Otherwise, the system's default version is used.
Make sure that Python header files and shared library are available on your system. On Debian/Ubuntu systems, do this by running "apt install python3-dev".
If the Python shared library is not in a standard location, then add its path
to LDFLAGS. For example, if Python has been installed using brew, then add
the following to LDFLAGS, replacing X with the appropriate minor version:
"-Lbrew --prefix python
/Frameworks/Python.framework/Versions/3.X/lib".
Use of the "ForeignFunctions" package requires linking the Macaulay2 binary against libffi (https://sourceware.org/libffi/). This has been known to cause issues on Apple silicon machines, and so it is possible to opt out of this feature by adding the "--without-libffi" option to the "configure" command line below.
It seems now, for a 64 bit build in a virtual machine with no swap space, using gcc 7, that 1024MB of RAM is not enough, so try something like 1400MB.
Now the directory to be in is the one containing this file in the source distribution -- it is called "M2", and is a subdirectory of the top level directory of the source tree. If you are reading this file on the web, it may be more convenient to switch now to reading it in its location in the source tree.
Begin with this command:
make
The "make" command above runs the commands "autoconf" and "autoheader", which create the "configure" script and the "include/config.h.in" file, needed in the next steps. Once those files are created, it is not necessary to make them again. The "make" command on your system should be a recent version of GNU make.
Now continue building the program this way:
./configure --enable-download --prefix=/foo/bar
make
make check # optional
make install
Remember to add any options specified above, in the section for your particular operating system, to the "configure" command line.
Files will then be installed in the following directories:
/foo/bar/bin
/foo/bar/share/Macaulay2
/foo/bar/share/doc/Macaulay2
/foo/bar/share/man/man1
/foo/bar/share/emacs/site-lisp
/foo/bar/lib/Macaulay2
The Macaulay2 program itself will be located at /foo/bar/bin/M2.
Choose an appropriate directory path, instead of /foo/bar, as the installation prefix, or omit the option entirely for installation in /usr/local.
Note: the "make" program in the commands above should be at least version 4. Under Mac OS X, one encounters an old version of "make", so it is better to use the "gmake" program, as provided by "brew", and installed according to the instructions above.
To take advantage of parallelism when running "make", append an option of the form "-jN" to the command line, where "N" is replaced by the number of processors you wish to devote to the task. (Our makefiles are just beginning to take advantage of this.)
To enable the running of the NTL "wizard", which conducts time consuming experiments to optimize the speed of its code, before compiling it, add the option --enable-ntl-wizard to the "configure" command line above.
To use a different prefix, say $HOME/local, for finding libraries and include files installed in a nonstandard location, add the following options to the "configure" command line: LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" That step is unnecessary if the compiler was compiled from sources and installed with that prefix.
To use a different compiler suite, such as gcc version 4.8.2 as compiled above, add something like the following to the "configure" command line: CC=gcc-4.8.2 CXX=g++-4.8.2 FC=gfortran-4.8.2 That step is unnecessary if the environment variables CC and CXX are set as described above.
To specify libraries to link against during configuration, use the LIBS environment variable, as described in documentation for autoconf. For example, to link with libfoo, add the following option to the "configure" command line:
LIBS=-lfoo
To see descriptions of all the environment variables that influence configuration, run this command and look at the section of the output entitled "Some influential environment variables":
./configure --help
The only one of these variables with a nonempty default value is CFLAGS, and its default value is "-g -O2". That will be supplanted if you override it.
To specify a different installation location for the "make install" command you may add an option to the "make install" line, as follows:
make install prefix=/foo/bar
To make an encapsulated directory tree or distribution tarball suitable for use with the program "epkg" (see https://github.com/DanGrayson/epkg), add the option
--enable-encap
to the "configure" command above.
The effect is to insert one more component into the path names used at installation time, so that in response to
make prefix=/foo/bar install
files will be installed in the following directories:
/foo/bar/Macaulay2-*/bin
/foo/bar/Macaulay2-*/share/Macaulay2
/foo/bar/Macaulay2-*/share/doc/Macaulay2
/foo/bar/Macaulay2-*/share/man/man1
/foo/bar/Macaulay2-*/share/emacs/site-lisp
/foo/bar/Macaulay2-*/lib/Macaulay2
Each * above is replaced by the current version number. There will also be a few extra files placed in the directory /foo/bar/Macaulay2-* which instruct epkg how to make appropriate symbolic links to install our program, and how to initialize the dumped data file, if present:
/foo/bar/Macaulay2-*/encapinfo
/foo/bar/Macaulay2-*/postinstall
/foo/bar/Macaulay2-*/preremove
By default, Macaulay2 will compile in such a way that it is adapted to the architectural features of the CPU being used to do the compilation. This is especially true for the library mpir, which exploits many of the advanced features of your CPU, determining them by running a small program and uses the output from that to determine which optimization options (of the form '-mtune=' and '-march=') to pass to gcc.
If you expect the Macaulay2 binary you build to run on other machines (for example, if you are making a binary distribution to hand to others), then you must prevent that from happening.
One way to do that is to pass an explicit "build target" to the configure script, as in this example under Mac OS X:
./configure --build=x86_64-apple-darwin
The build target will be provided to the configure scripts of the libraries needed, and, at least in the case of the mpir library, will prevent it from optimizing further.
To find a suitable target, run :
config/config.guess
To combine those two steps, run :
./configure --build=config/config.guess
To validate all our HTML files, run:
make validate-html
This depends on the installation of the validator (the Python utility html5validator, available using pip), so we don't run it automatically.
Some packages cache their example output in the source code tree, since they depend on the presence of external programs not included with Macaulay2. Here we briefly summarize them and the software they depend on:
gfanInterface StatePolytope need polymake, builds OK
http://polymake.org/lib/exe/fetch.php/download/polymake-2.13-1.tar.bz2
(Make 3.81 has a problem with their makefile, so use 4.0)
Polymake can be installed under Ubuntu with the following command:
sudo apt-get install polymake
Bertini needs bertini:
http://www.nd.edu/~sommese/bertini/
which needs gmp and mpfr:
https://gmplib.org/
http://www.mpfr.org/
PHCpack needs PHCpack, download the binary:
http://homepages.math.uic.edu/~jan/download.html
AdjointIdeal ConvexInterface MapleInterface Parametrization need Maple.
ConvexInterface also needs the maple package "convex" installed. See the
package documentation for hints about installing it.
http://www.math.uwo.ca/~mfranz/convex/files/current/convex.m
- warning: -jN forced in submake: disabling jobserver mode
This message can be ignored, if the previous recursive make command
had -j1 as an option, as -j1 implies the use of just one processor,
anyway. (We use -j1 as an option when compiling third party libraries
whose makefiles are not known to support parallelism.)
If you get any mysterious error messages involving autoconf, autoreconf, libtool, etc., try running
make -f Makefile get-tools
in the top level. This command will install versions of those tools known to work with Macaulay2.
Suppose you encounter error messages like this one when compiling in libraries/mpir:
tmp-mul_1.s:94: Error: no such instruction: `mulx (%rsi),%r9,%r8'
Then try adding --build=./config/config.guess
to the command line of the
'configure' command. This will tell mpir to build itself using just machine
instructions common to all the architectures in the same class as the
architecture of your machine, instead of optimizing itself for speed according
to your system. Mpir seems overconfident that the assembler on the machine
knows about all the machine instructions on the machine.
Homepage | Projects | Packages | Documentation | Events | Google Group