Macaulay2 / M2

The primary source code repository for Macaulay2, a system for computing in commutative algebra, algebraic geometry and related fields.
https://macaulay2.com
343 stars 231 forks source link

Rogue files installed by make install #900

Open kmarius opened 5 years ago

kmarius commented 5 years ago

I am building macaulay2 on archlinux according to the following PKGBUILD: https://gist.github.com/kmarius/bf3c9344f90d8265a563a622507e1b2f#file-pkgbuild This boils down to

make

./configure --enable-download --prefix=/usr \
    --libexecdir='${prefix}'/lib/Macaulay2 \
    --enable-shared

make -j1

make DESTDIR="${pkgdir}" install

In the resulting package I will find most of the files correctly in /usr, but also some in /build, where M2 was compiled. Package contents: https://gist.github.com/kmarius/bf3c9344f90d8265a563a622507e1b2f#file-resulting-package

These files were make install'd to the wrong path, but I can't tell wether these files are supposed to be somewhere in usr (and --prefix was disrespected somwhere) or can be deleted.

Log of make install here: https://gist.github.com/kmarius/bf3c9344f90d8265a563a622507e1b2f#file-make-install-log

DanGrayson commented 5 years ago

It seems that our file M2/distributions/install/Makefile.in does refer to the make variable "DESTDIR", but I have never tested the functioning of the variable DESTDIR nor even of the make target "install".

I recommend trying this instead, as a temporary work-around:

make
./configure --enable-download --prefix="${pkgdir}" \
    --libexecdir='${prefix}'/lib/Macaulay2 \
    --enable-shared
make -j1
make install

and letting us know whether it works. I think there are no hard-wired paths in the files we build, so it ought to just work.

The reason I never use "make install" is that I either run it in place, for convenience of development, or I make package files directly, in various formats: .dmg, .tar.gz, .deb, or .rpm.

We should eventually fix the behavior of DESTDIR, whose usage is described in https://www.gnu.org/prep/standards/standards.txt .

kmarius commented 5 years ago

I have now compiled the package with

make
./configure --enable-download --prefix="${pkgdir}/usr" \
    --libexecdir='${prefix}'/lib/Macaulay2 \
    --enable-shared
make -j1
make install

Now the package only contains the folder usr. grepping recursively for ${pkgdir} results in

usr/share/info/Macaulay2/Macaulay2Doc.info:|acaulay2-git/pkg/macaulay2-git                                               |
usr/share/doc/Macaulay2/Macaulay2Doc/html/_version.html:               configure arguments =>  '--enable-download' '--prefix=/build/macaulay2-git/pkg/macaulay2-git/usr' '--libexecdir=${prefix}/lib/Macaulay2' '--enable-shared' 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt'
usr/share/doc/Macaulay2/Macaulay2Doc/example-output/_version.out:               configure arguments =>  '--enable-download' '--prefix=/build/macaulay2-git/pkg/macaulay2-git/usr' '--libexecdir=${prefix}/lib/Macaulay2' '--enable-shared' 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt'
Binary file usr/bin/M2-binary matches

Not sure if that is fine.

The finished package does not contain any of the files that were wrongly installed before:

> find . -name "*ffpack*"              
./usr/share/doc/Macaulay2/Macaulay2Doc/html/_fflas-ffpack.html                                                             
./usr/lib/Macaulay2/Macaulay2/program-licenses/fflas_ffpack
./usr/lib/Macaulay2/Macaulay2/bin/fflas-ffpack-config

(these are the same files that are found in /usr in my first attempt). Without DESTDIR I assume tthey were installed just where they were sitting in the build directory after compilation.

DanGrayson commented 5 years ago

Thank you for the further information.

mahrud commented 4 years ago

DESTDIR is a standard variable that should be respected by make install. For instance it is used by package builders or if you would like to use M2 with chroot.

When using CMake, ninja install and make install respect DESTDIR.