rpm depuis giac_xx.deb

Librairie C++ de calcul formel/ C++ symbolic computation library

Modérateur : xcasadmin

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: rpm depuis giac_xx.deb

Message par frederic han » mer. oct. 24, 2012 1:27 pm

pour savoir les valeurs des macros %configure et %optflags et ... dans rpm vous pouvez aussi essayer:

rpm --eval "{%optflags}"

et

rpm --eval "{%configure}"

et
rpm --eval "%__global_cflags"

nbon courage
Frederic

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » ven. nov. 09, 2012 8:04 pm

J'ai installé une opensuse dans un virtualbox, du coup voici quelques infos sur la création du rpm.
D'abord gcc 4.7.1 ne compile pas xcas avec les flags -O2, prog.cc et usual.cc provoquent une erreur interne, par contre ça passe avec -g tout seul. Il faut aussi changer l'ordre des fichiers objets et modifier tous les Makefile.am en remplaçant $(prefix) par $(DATADIR)/$(prefix) (je mettrai le source modifié en ligne la semaine prochaine).
Voici mon fichier de specs (je suppose que le "bon" fltk est installé, je n'ai pas modifié CXXFLAGS, on suppose que gcc va fixer son bug un jour... en attendant je crée les rpm en faisant successivement rpmbuild -bp/-bc/-bi/-bb --short-circuit giac.specs et en compilant prog et usual quand ça plante en enlevant temporairement le -O2 du Makefile, et donc on ne peut installer le rpm qu'en ajoutant --nodeps à cause du short-circuit).

Code : Tout sélectionner

%define name giac
%define version 1.0.0
%define release 1

Name: %{name} 
Summary: Computer Algebra System
Version: %{version} 
Release: %{release} 
License: see /usr/share/doc/giac/COPYING
Source0: giac-1.0.0.tar.bz2
URL: http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
Group: Sciences/Mathematics
Vendor: Bernard Parisse
BuildRoot: %{_tmppath}/%{name}-buildroot 
BuildRequires: gcc-c++
BuildRequires: gmp-devel, gsl-devel

%description
CAS

%package devel
Summary: Development files for libgiac
Requires: %{name}

%description devel
Development files for libgiac.

%prep 
##rm -rf $RPM_BUILD_ROOT/
%setup -q

%build 
LDFLAGS+=-lX11
export LDFLAGS
##export LIBS='/usr/local/lib/libpari.a /usr/local/lib/libgsl.a /usr/local/lib/libgslcblas.a'

%configure
%__make

%install
%__rm -rf $RPM_BUILD_ROOT
%__make DESTDIR=$RPM_BUILD_ROOT install

%clean
%__rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%{_bindir}/*
%{_libdir}/libgiac.so*
%{_libdir}/libgiac.la
%{_datadir}/giac
%{_datadir}/doc/giac
%{_datadir}/info/giac_*.info.gz
%{_datadir}/locale/*/LC_MESSAGES/giac.mo
##%{_datadir}/info/dir
%{_datadir}/applications/xcas.desktop
%{_datadir}/application-registry/xcas.applications
%{_datadir}/pixmaps/xcas.xpm
##%{_datadir}/man/man1/*

%files devel
%defattr(-,root,root)
%{_includedir}/giac
%{_libdir}/libgiac.a

%changelog 
* Thu Nov 08 2012 Bernard Parisse <parisse@fourier.ujf-grenoble.fr> 1.0.0
Alpha release

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: rpm depuis giac_xx.deb

Message par frederic han » sam. nov. 10, 2012 10:57 am

Avec mageia c'est un peu different, je viens de faire des essais.

les paquets n'ont pas tout a fait les memes noms, en revanche c'est gcc 4.6 donc ca devrait passer.

J'ai modifie le spec, maintenant giac compile pendant un bon moment, mais ca bloque car la compilation ne passe pas avec l'option:

-Werror=format-security


Est ce que ca te serait difficile de modifier les sources pour que ca compile avec cette option?

Fred

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » sam. nov. 10, 2012 12:00 pm

le problème c'est que comme je ne comprend pas les erreurs, je ne vois vraiment pas comment modifier... On dirait des checks pour des appels a des fonctions genre printf alors que les erreurs ne correspondent pas du tout à ce type d'appel (et je ne vois pas comment appeler mes fonctions autrement de toute façon).

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: rpm depuis giac_xx.deb

Message par frederic han » dim. nov. 11, 2012 10:09 pm

Bon donc j'ai du forcer la variable CXXFLAGS et ne pas utiliser %configure car ca ajoutait toujours cette option.

J'ai reussi a faire des rpm pour mageia x86_64 ils sont la ainsi que le spec:

http://www.math.jussieu.fr/~han/xcas/mageia

voici le spec (pas tres joli, mais qui marche avec:

rpmbuild -bb

Code : Tout sélectionner

Name: giac
Summary: Computer algebra system
Version: 1.0.0
Release: 1
License: see /usr/share/doc/giac/copyright
Group: Applications/Engineering
# Other versions of fltk often give problems with giac 
Source0: http://www-fourier.ujf-grenoble.fr/~parisse/giac/fltk-1.3.0.tar.gz
Source1: http://www-fourier.ujf-grenoble.fr/~parisse/giac/%{name}-%{version}.tar.bz2
URL: http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
Vendor: Bernard Parisse
BuildRequires: gcc-c++
BuildRequires: readline-devel, mpfr-devel, gmp-devel, gsl-devel, libmesagl1-devel, libxorg-x11-devel, libxorg-x11-static-devel, ntl-devel, libpari-devel, libpng-devel, libjpeg-devel, texlive 


%description
Giac Is A Cas (computer algebra system). It is under active development and
consists of:
   - a C++ library (libgiac)
   - a command line interpreter (icas)
   - a FLTK-based GUI (xcas)
Bernard Parisse is the main author of the CAS of HP40G and HP49G calculators.

%package devel
Summary: Development files for libgiac
Requires: %{name}

%description devel
Development files for libgiac.

%prep
%setup -b 1
cd %_builddir/%{name}-%{version} && autoreconf
%__sed -i 's|$(prefix)|$(DESTDIR)$(prefix)|' `find . -name Makefile.in`
%__sed -i 's|$(includedir)/giac|$(DESTDIR)$(includedir)/giac|' Makefile.in
TMPFLTK=%_builddir/fltk-1.3.0
export TMPFLTK
cd $TMPFLTK &&./configure --prefix=$TMPFLTK && make
%build
TMPFLTK=%_builddir/fltk-1.3.0
export TMPFLTK


CPPFLAGS+=-I$TMPFLTK
export CPPFLAGS


LDFLAGS+="-L$TMPFLTK/lib -lX11 -lpng -ljpeg"
export LDFLAGS
export CXXFLAGS="-g -O2"
#cd %_builddir/%{name}-%{version} && ./configure --prefix=/usr
CONFIGURE_TOP="${CONFIGURE_TOP:-.}"; 
/usr/lib/rpm/mageia/force-as-needed-for-shared-lib-in-libtool ; 
/usr/lib/rpm/mageia/drop-ld-no-undefined-for-shared-lib-modules-in-libtool ; 
/usr/lib/rpm/mageia/fix-libtool-ltmain-from-overlinking ; 
/usr/lib/rpm/mageia/fix-libtool-from-moving-options-after-libs $CONFIGURE_TOP ; 
/usr/lib/rpm/mageia/fix-dlsearch-path-in-libtool-for-multilib $CONFIGURE_TOP lib64 ; 
  [ -f $CONFIGURE_TOP/configure.in -o -f $CONFIGURE_TOP/configure.ac ] && 
  CONFIGURE_XPATH="--x-includes=/usr/include --x-libraries=/usr/lib64" 
  $CONFIGURE_TOP/configure x86_64-mageia-linux-gnu \
	--program-prefix= \
 	--prefix=/usr \
	--exec-prefix=/usr \
	--bindir=/usr/bin \
	--sbindir=/usr/sbin \
	--sysconfdir=/etc \
	--datadir=/usr/share \
	--includedir=/usr/include \
	--libdir=/usr/lib64 \
	--libexecdir=/usr/lib64 \
	--localstatedir=/var \
	--sharedstatedir=/usr/com \
	--mandir=/usr/share/man \
	--infodir=/usr/share/info \
    $CONFIGURE_XPATH


%__make 

%install
%__rm -rf $RPM_BUILD_ROOT
%__make DESTDIR=$RPM_BUILD_ROOT install

%clean
%__rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%{_bindir}/*
%{_datadir}/doc/giac
%{_datadir}/giac
%{_datadir}/info/giac_*.info.xz
%{_datadir}/locale/*/LC_MESSAGES/giac.mo
##%{_bindir}/x*
%{_datadir}/applications/xcas.desktop
%{_datadir}/application-registry/xcas.applications
%{_datadir}/pixmaps/xcas.xpm
##%{_datadir}/man/man1/*

%files devel
%defattr(-,root,root)
%{_includedir}/giac
%{_libdir}/libgiac.a
%{_libdir}/libgiac.la
%{_libdir}/libgiac.so*

%changelog
* Sat Nov 10 2012 Frederic Han <han@math.jussieu.fr> 
-adapt from the fedora file of Huaren Zhong <huaren.zhong@gmail.com> - 0.9.8
-add the gui support with fltk.
-uptate to 1.0.0
 

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » lun. nov. 12, 2012 12:18 pm

Bon, j'ai une idee pour contourner le bug de gcc, on lance le rpm -ba sans rien specifier pour les CXXFLAGS, et apres que le systeme a fait configure, on fait ctrl-z pour stopper, on compile a la main prog.cc et usual.cc:

Code : Tout sélectionner

/bin/sh ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -DIN_GIAC -I. -I.. -I. -I..       -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -c -o prog.lo prog.cc
/bin/sh ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -DIN_GIAC -I. -I.. -I. -I..       -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -c -o usual.lo usual.cc
puis on fait fg pour relancer. On va voir si ca fait un rpm OK ou pas...

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » lun. nov. 12, 2012 1:10 pm


parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » sam. nov. 17, 2012 8:11 am

Bon, j'ai fini par comprendre pour les format-security, il faut mettre des "%s" en 1er argument de fl_ask, fl_message, fl_alert. Si en plus on enlève le deprecated dans la déclaration de fl_ask dans FL/fl_ask.h alors on se retrouve avec une compilation beaucoup plus clean. Je mettrai à jour le source lundi.

leo
Messages : 18
Inscription : lun. oct. 22, 2012 3:34 pm

Re: rpm depuis giac_xx.deb

Message par leo » lun. nov. 19, 2012 7:21 pm

Je viens de tester le rpm pour mageia en 64 bits proposé par frederic han dans un post du 11 novembre.
J'ai dû forcer l'installation car "libgiac.so.0 est nécessaire mais absente".

Et en fait, une fois linstalation forcée faite, xcas réclame bien sûr sa libgiac.so.0, qui n'est pas présente dans le rpm.

Je n'ai pas encore testé la construction du rpm.

Edit : ce rpm ne fait que 16.5 Mo, ce qui est au moins surprenant.
Dernière modification par leo le lun. nov. 19, 2012 7:40 pm, modifié 1 fois.

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » lun. nov. 19, 2012 7:38 pm

Et celui de mon site pour opensuse, marche-t-il pour mageia?

leo
Messages : 18
Inscription : lun. oct. 22, 2012 3:34 pm

Re: rpm depuis giac_xx.deb

Message par leo » lun. nov. 19, 2012 7:42 pm

Oui je viens juste de tester ; au moins avec les essais basiques (Addition, .. , dérivée, intégration).
L'installation s'est faite sans problème.

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: rpm depuis giac_xx.deb

Message par frederic han » mar. nov. 20, 2012 5:04 am

Oui les scripts sous mageia ont cree 3 rpm automatiquement, la libgiac est dans un autre rpm.

Il faut donc installer au moins ces 2 la, mais je n'ai teste qu'avec les 3 en meme temps.
giac-1.0.0-1.x86_64.rpm
giac-devel-1.0.0-1.x86_64.rpm
celui ci doit etre plutot les sources.
giac-debug-1.0.0-1.x86_64.rpm

Frederic

leo
Messages : 18
Inscription : lun. oct. 22, 2012 3:34 pm

Re: rpm depuis giac_xx.deb

Message par leo » mar. nov. 20, 2012 11:57 am

Je ne l'avais pas compris comme ça. Les rpms de Mageia (ou mandriva) avec les suffixes devel sont en fait les fichiers sources, non compilés du logiciel. Et c'est ce que j'ai cru. Du Wiki mandriva :
Différencier version exécutable et version compilation des fichiers:
Les paquetages qui contiennent des bibliothèques de programmes possèdent une version exécutable et une version de développement pour la compilation. Le nom du paquetage de la version de développement contient toujours la mention : devel. Si vous ne compilez pas de programme vous n'avez pas besoin d'installer les paquetages devel. Vous pouvez aussi les installer quand vous avez à compiler un logiciel et les supprimer ensuite.
Je testerai plus tard.

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: rpm depuis giac_xx.deb

Message par parisse » mar. nov. 20, 2012 12:08 pm

Sous debian aussi, les packages devel contiennent les headers (fichiers *.h), pas les librairies. Je pense que Frederic devrait modifier un peu son fichier spec et deplacer l'install des lib de %files devel vers %files

leo
Messages : 18
Inscription : lun. oct. 22, 2012 3:34 pm

Re: rpm depuis giac_xx.deb

Message par leo » mar. nov. 20, 2012 4:44 pm

J'ai réussi à construire un rpm correct et un xcas fonctionnel pour mageia2 avec ce spec, inspiré de celui de frederic han :

Code : Tout sélectionner

Name: giac
Summary: Computer algebra system
Version: 1.0.0
Release: 1
License: see /usr/share/doc/giac/copyright
Group: Applications/Engineering
# Other versions of fltk often give problems with giac 
Source0: http://www-fourier.ujf-grenoble.fr/~parisse/giac/fltk-1.3.0.tar.gz
Source1: http://www-fourier.ujf-grenoble.fr/~parisse/giac/%{name}-%{version}.tar.bz2
URL: http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
Vendor: Bernard Parisse
BuildRequires: gcc-c++
BuildRequires: readline-devel, mpfr-devel, gmp-devel, gsl-devel, lib64mesagl1-devel,  ntl-devel, lib64pari2-devel, lib64png-devel, lib64jpeg-devel, texlive 
#BuildRequires: readline-devel, mpfr-devel, gmp-devel, gsl-devel, lib64mesagl1-devel, libxorg-x11-devel, libxorg-x11-static-devel, ntl-devel, lib64pari-devel, libpng-devel, libjpeg-devel, texlive
BuildArch: x86_64

%description
Giac Is A Cas (computer algebra system). It is under active development and
consists of:
   - a C++ library (libgiac)
   - a command line interpreter (icas)
   - a FLTK-based GUI (xcas)
Bernard Parisse is the main author of the CAS of HP40G and HP49G calculators.

%package devel
Summary: Development files for libgiac
Requires: %{name}

%description devel
Development files for libgiac.

%prep
%setup -b 1
cd %_builddir/%{name}-%{version} && autoreconf
%__sed -i 's|$(prefix)|$(DESTDIR)$(prefix)|' `find . -name Makefile.in`
%__sed -i 's|$(includedir)/giac|$(DESTDIR)$(includedir)/giac|' Makefile.in
TMPFLTK=%_builddir/fltk-1.3.0
export TMPFLTK
cd $TMPFLTK &&./configure --prefix=$TMPFLTK && make
%build
TMPFLTK=%_builddir/fltk-1.3.0
export TMPFLTK


CPPFLAGS+=-I$TMPFLTK
export CPPFLAGS


LDFLAGS+="-L$TMPFLTK/lib -lX11 -lpng -ljpeg"
export LDFLAGS
export CXXFLAGS="-g -O2"
#cd %_builddir/%{name}-%{version} && ./configure --prefix=/usr
CONFIGURE_TOP="${CONFIGURE_TOP:-.}"; 
/usr/lib/rpm/mageia/force-as-needed-for-shared-lib-in-libtool ; 
/usr/lib/rpm/mageia/drop-ld-no-undefined-for-shared-lib-modules-in-libtool ; 
/usr/lib/rpm/mageia/fix-libtool-ltmain-from-overlinking ; 
/usr/lib/rpm/mageia/fix-libtool-from-moving-options-after-libs $CONFIGURE_TOP ; 
/usr/lib/rpm/mageia/fix-dlsearch-path-in-libtool-for-multilib $CONFIGURE_TOP lib64 ; 
  [ -f $CONFIGURE_TOP/configure.in -o -f $CONFIGURE_TOP/configure.ac ] && 
  CONFIGURE_XPATH="--x-includes=/usr/include --x-libraries=/usr/lib64" 
  $CONFIGURE_TOP/configure x86_64-mageia-linux-gnu \
	--program-prefix= \
 	--prefix=/usr \
	--exec-prefix=/usr \
	--bindir=/usr/bin \
	--sbindir=/usr/sbin \
	--sysconfdir=/etc \
	--datadir=/usr/share \
	--includedir=/usr/include \
	--libdir=/usr/lib64 \
	--libexecdir=/usr/lib64 \
	--localstatedir=/var \
	--sharedstatedir=/usr/com \
	--mandir=/usr/share/man \
	--infodir=/usr/share/info \
    $CONFIGURE_XPATH


%__make 

%install
%__rm -rf $RPM_BUILD_ROOT
%__make DESTDIR=$RPM_BUILD_ROOT install

%clean
%__rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%{_bindir}/*
%{_datadir}/doc/giac
%{_datadir}/giac
%{_datadir}/info/giac_*.info.xz
%{_datadir}/locale/*/LC_MESSAGES/giac.mo
##%{_bindir}/x*
%{_datadir}/applications/xcas.desktop
%{_datadir}/application-registry/xcas.applications
%{_datadir}/pixmaps/xcas.xpm
##%{_datadir}/man/man1/*
%{_libdir}/libgiac.la
%{_libdir}/libgiac.so*

%files devel
%defattr(-,root,root)
%{_includedir}/giac
%{_libdir}/libgiac.a


%changelog
* Sat Nov 10 2012 Frederic Han <han@math.jussieu.fr> 
-adapt from the fedora file of Huaren Zhong <huaren.zhong@gmail.com> - 0.9.8
-add the gui support with fltk.
-uptate to 1.0.0
 
Comme je suis sur une machine 64 bits, j'ai rectifié les dépendances réclamées (lib64mesagl1-devel, .... ). J'ai commenté la ligne originelle.
Et il semblerait que je puisse me passer des libxorg*.

Répondre