Blob Blame History Raw
# Architectures currently not supported
# http://xcas.e.ujf-grenoble.fr/XCAS/viewtopic.php?f=19&t=1723
ExcludeArch: aarch64 ppc64 ppc64le s390x

%global subversion 75

Name:          giac
Summary:       Computer Algebra System, Symbolic calculus, Geometry
Version:       1.2.2
Release:       7.%{subversion}%{?dist}
# LGPLv3+: src/Fl_GDI_Printer.cxx, src/Flv_List.cc, src/Flv_Table.cc
# BSD: src/tinymt32*
License:       GPLv3+
Group:         Applications/Engineering
URL:           http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
## Source package is downloaded from
## http://www-fourier.ujf-grenoble.fr/~parisse/debian/dists/stable/main/source/
## and re-package without non-free FR documentation by giac-makesrc script.
Source0:       %{name}-%{version}.%{subversion}.tar.gz
Source1:       %{name}-makesrc.sh
Source2:       xcas-appdata.xml

# Fix cSolveorder check
Patch0:        %{name}-cSolveorder-check.patch

BuildRequires: readline-devel
BuildRequires: gettext-devel
BuildRequires: gcc-c++
BuildRequires: mpfr-devel
BuildRequires: gmp-devel
BuildRequires: gsl-devel
BuildRequires: ntl-devel
BuildRequires: pari-devel
BuildRequires: lapack-devel
BuildRequires: mpfi-devel
BuildRequires: mesa-libGL-devel
BuildRequires: libpng-devel
BuildRequires: libjpeg-devel
BuildRequires: fltk-devel
BuildRequires: libXinerama-devel
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
BuildRequires: tex(latex), texinfo, texinfo-tex

Requires(post): info
Requires(preun): info

Provides: bundled(tinymt32)

%description
Giac is a Computer Algebra System made by Bernard Parisse. It  provides 
features from the C/C++ libraries PARI, NTL (arithmetic), GSL (numerics), 
GMP (big integers), MPFR (bigfloats) and also
  - Efficient algorithms for multivariate polynomial operations 
        (product, GCD, factorization, groebner bases),
  - Symbolic computations: solver, simplifications, limits/series, integration,
  - Linear algebra with numerical or symbolic coefficients.
  - Partial Maple and TI compatibility.
  - It has interfaces in texmacs and sagemath.

It consists of:
   - a C++ library (libgiac)
   - a command line interpreter (icas/giac)
   - an FLTK-based GUI (xcas) with interactive geometry and formal spreadsheets.

####################
%package devel
Summary: C++ development files for libgiac
Group:   Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}

%description devel
Development files for libgiac.

####################
%package doc
Summary: Detailled html documentation for Giac/Xcas
BuildArch: noarch
BuildRequires: hevea

# Javascript provided
Provides: bundled(CodeMirror)
Provides: bundled(FileSaver.js)

License:   GPLv3+ and GFDL
%description doc
The detailled html documentation and examples for giac and xcas. It is directly
accessible from xcas in many ways (browser, context search, thematic indexes).
It is strongly recommended for xcas usage. Note that the french part has been 
removed from the original source due to non free Licence.

####################
%package xcas
# The name Xcas is better known than the name giac itself, 
#     so many users will search for the name xcas instead of giac or giac-gui. 
Summary: GUI application for Giac
Provides: xcas = %{version}-%{release}
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: hicolor-icon-theme

%description xcas
Xcas is the Fltk graphic user interface to the computer algebra system giac. 
It supports formal computations, interactive 2D geometry, 3D plotting, 
spreadsheets with formal calculus and a Logo mode. There is also a programming 
editor, and many ways to consult the html help.

####################
%package -n pgiac
Summary:   Perl script for the computer algebra system Giac
URL:       http://melusine.eu.org/syracuse/giac/pgiac
BuildArch: noarch
Requires:  %{name} = %{version}-%{release}
Requires:  perl

%description -n pgiac
The pgiac command is a perl script to mix Latex documents
with Giac computations.

%prep
%setup -q
%patch0 -p0

# Remove local intl (already bundled in fedora)
rm -rf intl/*.h
rm -rf intl/*.cc
# NB: Problem with autoreconf: missing config/test-driver . If needed the 
#     following worked
# aclocal
# autoconf
# automake --add-missing

# Remove unecessary files and force the rebuild of info. 
rm -f doc/pari/gphtml
rm -f doc/*/texinfo.tex
rm -f doc/*/giac_*.info

# Some files in the upstream source have unnecessary executable rights
chmod -x src/*.h
chmod -x src/*.cc
find examples -type f -name '*.xws' -exec chmod -x '{}' \;
find examples -type f -name '*.cas' -exec chmod -x '{}' \;
find examples -type f -name '*.cxx' -exec chmod -x '{}' \;
chmod -x examples/lewisw/fermat*
# Clean backups in doc
find doc -name *~ -delete

# Unbundle texinfo file
sed -i 's|config/texinfo.tex|%{_datadir}/texmf/tex/texinfo/texinfo.tex|g' Makefile.in
rm -f config/texinfo.tex

# Remove hidden files
rm -f examples/Exemples/demo/._*
rm -f examples/Exemples/analyse/._*

%build
export LDFLAGS="%{__global_ldflags} -Wl,--as-needed"
%configure --enable-static=no --with-included-gettext=no --enable-nls=yes \
 --enable-tommath=no --enable-debug=no --enable-gc=no --enable-sscl=no \
 --enable-dl=yes --enable-gsl=yes --enable-lapack=yes --enable-pari=yes \
 --enable-ntl=yes --enable-gmpxx=yes --enable-cocoa=autodetect \
 --enable-gui=yes --disable-rpath

# The --disable-rpath option of configure was not enough to get rid of the hardcoded libdir
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool

# Fix unused-direct-shlib-dependency with libgslcblas.so.0 and libgfortran.so.3
sed -i -e 's! -shared ! -Wl,--as-needed\0!g' libtool

make %{?_smp_mflags}

# Rebuild giac_*.info and Convert info file to utf-8
(cd doc ; make)
for i in doc/*/giac_*.info doc/en/html_* ; do 
   iconv -f ISO-8859-1 -t UTF-8 -o $i.new $i && \
   touch -r $i $i.new && \
   mv $i.new $i
done
#

%install
make DESTDIR=%{buildroot} install

cp -p src/tinymt32_license.h LICENSE.tinymt32

# Remove unwanted files.
rm -f %{buildroot}%{_infodir}/dir
rm -rf %{buildroot}%{_datadir}/application-registry
# The .la is still built despite the built of libgiac.a has been disabled
rm -f %{buildroot}%{_libdir}/libgiac.la 
# I have tried to remove the empty files in the setup stage, it was not a good idea
#   because make install will then require hevea as an extra (and big) dependancy and I guess
#   that it will recreate those empty files, so it's better to delete them here.
find %{buildroot} -size 0 -delete
find %{buildroot} -name *~ -delete
# Obsolete symbolic link
rm -f %{buildroot}%{_bindir}/xcasnew
#
# Mime package was not installed.
install -pm 644 -D debian/giac.sharedmimeinfo \
                     %{buildroot}%{_datadir}/mime/packages/giac.xml
#

# Install/check appdata file.
install -pm 644 -D %{SOURCE2} \
                     %{buildroot}%{_datadir}/appdata/xcas.appdata.xml
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/appdata/*.appdata.xml
#

# Add extra pdf docs. (NB: make dvi gives only the same doc in dvi format)
install -pm 644 -t %{buildroot}%{_datadir}/giac/doc doc/en/cas*.pdf
install -pm 644 -t %{buildroot}%{_datadir}/giac/doc/en doc/en/*.pdf
install -pm 644 -t %{buildroot}%{_datadir}/giac/doc/el doc/el/*.pdf
install -pm 644 -t %{buildroot}%{_datadir}/giac/doc/es doc/es/*.pdf

#
# DOC Files (1-4):
#   1) Man: 
# 
mkdir -p %{buildroot}%{_mandir}/man1
install -pm 644 debian/giac.1 %{buildroot}%{_mandir}/man1
install -pm 644 debian/cas_help.1 %{buildroot}%{_mandir}/man1
install -pm 644 debian/pgiac.1 %{buildroot}%{_mandir}/man1

#      Add a link for FR env users to have the english help instead of a page 
#      not found.
mkdir -p %{buildroot}%{_datadir}/giac/doc/fr
(cd %{buildroot}%{_datadir}/giac/doc/fr ; ln -s ../en/cascmd_en cascmd_fr )

%find_lang %{name} 
desktop-file-install --vendor="" --dir=%{buildroot}%{_datadir}/applications/\
                       %{buildroot}%{_datadir}/applications/xcas.desktop

# Create a list of files non required at runtime by icas nor xcas
#      that are under %%{_datadir}/giac/doc for packaging in giac-doc
#      a) The non required files at runtime in %%{_datadir}/giac/doc/[a-z]{2}
find  %{buildroot}%{_datadir}/giac/doc -maxdepth 2 -type f| \
             grep  -E "%{_datadir}/giac/doc/[a-z]{2}/" | \
             grep  -v -E "%{_datadir}/giac/doc/[a-z]{2}/keywords$" | \
             grep  -v -E "%{_datadir}/giac/doc/[a-z]{2}/xcasmenu$" | \
             grep  -v -E "%{_datadir}/giac/doc/[a-z]{2}/xcasex$" | \
             sed -e "s:%{buildroot}::" >giacdoclist
#      b) Add the files under doc
find  %{buildroot}%{_datadir}/giac/doc -maxdepth 1 -type f| \
             grep  -v -E "%{_datadir}/giac/doc/aide_cas$" | \
             sed -e "s:%{buildroot}::" >>giacdoclist

#      c) Add the dir under %%{_datadir}/giac/doc/[a-z]{2}
find  %{buildroot}%{_datadir}/giac/doc -maxdepth 2 -type d| \
             grep  -E "%{_datadir}/giac/doc/[a-z]{2}/" | \
             grep  -v -E "%{_datadir}/giac/doc$" | \
             grep  -v -E "%{_datadir}/giac/doc/[a-z]{2}$" | \
             sed -e "s:%{buildroot}::" | \
             sed -e "s:$:/:" >>giacdoclist
#      d) Add all the doc subdir different from %%{_datadir}/giac/doc/[a-z]{2}
find  %{buildroot}%{_datadir}/giac/doc -maxdepth 1 -type d| \
             grep  -v -E "%{_datadir}/giac/doc$" | \
             grep  -v -E "%{_datadir}/giac/doc/[a-z]{2}$" | \
             sed -e "s:%{buildroot}::" | \
             sed -e "s:$:/:" >>giacdoclist
#      e) Add all the links but aide_cas
find  %{buildroot}%{_datadir}/giac/doc -maxdepth 2 -type l| \
             grep  -v -E "%{_datadir}/giac/doc/aide_cas$" | \
             sed -e "s:%{buildroot}::" >>giacdoclist

%post
/sbin/ldconfig
/sbin/install-info %{_infodir}/%{name}_us.info %{_infodir}/dir || :
/sbin/install-info %{_infodir}/%{name}_es.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}_us.info %{_infodir}/dir || :
/sbin/install-info --delete %{_infodir}/%{name}_es.info %{_infodir}/dir || :
fi

%postun -p /sbin/ldconfig

%post xcas
if [ $1 -eq 0 ] ; then
    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
fi
/bin/touch --no-create %{_datadir}/mime/packages &>/dev/null || :
/usr/bin/update-desktop-database &> /dev/null || :

%postun xcas
touch --no-create %{_datadir}/icons/hicolor
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
  %{_bindir}/gtk-update-icon-cache -q %{_datadir}/icons/hicolor;
fi
if [ $1 -eq 0 ] ; then
  /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || :
fi
/usr/bin/update-desktop-database &> /dev/null || :

%posttrans xcas
/usr/bin/update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || :
/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :

%check
export LD_LIBRARY_PATH=../src/.libs
make -C check check

%files -f %{name}.lang
%license COPYING
%license LICENSE.tinymt32
%{_bindir}/icas
%{_bindir}/giac
%{_bindir}/*_help
%{_libdir}/libgiac.so.*
#    The following files are required at runtime by icas AND xcas. 
#       (Ex: if LANG is fr, alea(5) should give an INT)
#       Moreover, without aide_cas the keywords files are not found in icas 
#       and xcas. Additionally xcas uses it for tab completions.
%{_datadir}/giac/doc/*/keywords
%{_datadir}/giac/aide_cas
%{_datadir}/giac/doc/aide_cas
# The dirs shared
%dir %{_datadir}/giac
%dir %{_datadir}/giac/doc
#
%dir %{_datadir}/giac/doc/de
%dir %{_datadir}/giac/doc/el
%dir %{_datadir}/giac/doc/en
%dir %{_datadir}/giac/doc/es
%dir %{_datadir}/giac/doc/fr
%dir %{_datadir}/giac/doc/pt
%dir %{_datadir}/giac/doc/zh
#
%{_infodir}/giac_*.info.gz
%{_mandir}/man1/giac*
%{_mandir}/man1/*_help*

# The gui files
%files xcas
%{_bindir}/xcas
# The dirs shared
%dir %{_datadir}/giac
%dir %{_datadir}/giac/doc
#
%dir %{_datadir}/giac/doc/de
%dir %{_datadir}/giac/doc/el
%dir %{_datadir}/giac/doc/en
%dir %{_datadir}/giac/doc/es
%dir %{_datadir}/giac/doc/fr
%dir %{_datadir}/giac/doc/pt
%dir %{_datadir}/giac/doc/zh
#
# Required at runtime. (additional menu)
%{_datadir}/giac/doc/*/xcasmenu
%{_datadir}/giac/doc/*/xcasex

#    Files under dirs shared with other packages
%{_datadir}/applications/xcas.desktop
%{_datadir}/appdata/xcas.appdata.xml
%{_datadir}/mime/packages/giac.xml
%{_datadir}/pixmaps/xcas.xpm
%{_datadir}/icons/hicolor/*/apps/xcas.png
%{_datadir}/icons/hicolor/*/mimetypes/application-x-xcas.png

%files -n pgiac
%{_bindir}/pgiac
%{_mandir}/man1/pgiac*

%files devel
%{_includedir}/giac/
%{_libdir}/libgiac.so

# DOC Files
%files doc -f giacdoclist
#   3) As we have removed the FR doc, more than 2/3 of the following files are 
#      for the EN doc, so it is meaningfull to put all the GPL doc together.   
#
# a GPLv3  COPYING file
%doc README
%license COPYING
#    4) Warning about *.xws:
#     - All the .xws files are examples of sessions saved from xcas. They are
#       not text files and they *must not* be converted to UTF-8 or any other
#       character encoding.
#     - The .cas and .cxx files are giac code and function. They are text files
#
#   NB: %%{_docdir}/giac is in  the -filsystem package 
%{_docdir}/giac/*
#     Add all the files that are in %%{_datadir}/giac but not giac/aide_cas 
#     and not those in giac/doc/
%dir %{_datadir}/giac
%dir %{_docdir}/giac
%dir %{_datadir}/giac/doc
# The dirs shared
#
%dir %{_datadir}/giac/doc/de
%dir %{_datadir}/giac/doc/el
%dir %{_datadir}/giac/doc/en
%dir %{_datadir}/giac/doc/es
%dir %{_datadir}/giac/doc/fr
%dir %{_datadir}/giac/doc/pt
%dir %{_datadir}/giac/doc/zh
#
%{_datadir}/giac/examples/

%changelog
* Fri Jul 15 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-7.75
- Update to subversion 75

* Thu Jul 07 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-6.63
- Exclude s390x

* Sat Jul 02 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-5.63
- Fix directories ownership
- Exclude PPC and aarch64

* Thu Jun 30 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-4.63
- Update to subversion 63
- Add libXinerama BR
- Fix co-owning of documentation sub-directories
- Fix appdata file
- Add Provides tags

* Thu May 19 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-3.45
- Source tarball repacked without non-free docs
- Licenses combined in GPLv3+ only

* Fri May 13 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-2
- Fix required package of pgiac

* Fri May 13 2016 Antonio Trande <sagitterATfedoraproject.org>  1.2.2-1
- Update to 1.2.2
- pgiac script packaged separately
- Fix cSolveorder check
- Update scriptlets
- Add appdata file
- Excluded PPC and aarch64
- Drop the filesystem sub-package

* Sun Jul  6 2014  Frederic Han <han@math.jussieu.fr>  1.1.1-1
- Update to current stable upstream version. Remove obsolete patches.
- Add mpfi-devel dependency. (New feature in 1.1.1)
- Add requires of hicolor-icon-theme instead of owning dirs.
 
* Sun Apr 27 2014 Frederic Han <han@math.jussieu.fr>  1.1.0-1
- Let the doc package be independent of the binary packages. So create 
  a filesystem package containing the shared directories

* Wed Apr 16 2014 Frederic Han <han@math.jussieu.fr>  1.1.0-1
- Dont delete  intl/Makefile to avoid Makefile and configure modif/rebuilt
- Create a file list: giacdocfile for giac/doc files that are not needed
  at runtime
- Remove %%dir %%{_datadir}/mime and %%dir %%{_datadir}/mime/packages from 
  giac-xcas package list

* Mon Apr 14 2014 Frederic Han <han@math.jussieu.fr>  1.1.0-1
- Add tinymt32 License in %%doc, and LGPLv2+ tag 
- Add gettext-devel in BR and disable included intl
- removed doc/*/texinfo.tex, add BR texinfo, and rebuild *.info with 
  the system texinfo.tex file for License clarity, also convert them to utf-8
- Add missing %%dir in %%files xcas  and %%files
- Fix unused-direct-shlib-dependency for libgiac
- Remove x perms in examples, clean backup files
- Move the mime and desktop updates to %%post xcas and %%postun xcas
- Add a warning to *not* try to convert .xws files to UTF-8

* Fri Apr 11 2014 Frederic Han <han@math.jussieu.fr>  1.1.0-1
- Initial version 
- Found GPLv3 and v2 files in 1.1.0 sources. So package the GPLv3 LICENSE.
- Put GPLv3+ tag on the -doc package according to 1.1.1.
- Rename the package giac-gui to giac-xcas.
- Add a check patch and make check.
- Some files of %%{_datadir}/giac are need at runtime. So, 
  add them in the main or -xcas package filelist.
- Move all the %%{_docdir}/giac files except LICENSE to the -doc package
- Add extra pdf doc found in source archive.
- Untabify spec file.
- remove the README patch to keep the original 1.1.0 unchanged. add a README.fedora
  to explain the License evolution of giac non FR doc.
- Improve giac.1 manpage.