Пакет Singular: Specfile

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
%global singulardir	%_libdir/Singular
%global upstreamver	4-2-1
%global downstreamver	%(tr - . <<< %upstreamver)
%global py3_slim_version    %(rpm --eval %_python3_version | tr -d .)
#%%global patchver	p3

%def_with python
%def_with emacs

%if_with python
# Singular installs python files into nonstandard places
%global _python_bytecompile_extra 0
%endif

Name: Singular
Version: 4.2.1
Release: alt2

Summary: Computer Algebra System for polynomial computations
# License analysis:
# - factory/readcf.cc, Singular/grammar.cc, and Singular/grammar.h are
#   nominally GPLv3+, but they are generated by bison, so the bison special
#   exception applies
# - The following files are BSD, which is subsumed by both GPLv2 and GPLv3:
#   o Singular/links/ndbm.cc
#   o Singular/links/ndbm.h
#   o Singular/svd/*.{c,h}
# - Everything else is marked either "GPLv2 or GPLv3" or "GPLv2 or later", with
#   the former more strict than the latter
License: GPL-2.0 or GPL-3.0
Group: Sciences/Mathematics

Url: https://www.singular.uni-kl.de/
# Java sources omitted from the source tarball.  To recreate this:
# - git clone https://github.com/Singular/Singular.git
# - cd Sources
# - git checkout spielwiese
# - git reset --hard 0dabbb616c7d95f0c9e81e9f51b857e3a0bb9e7c
# - tar cJf surfex.tar.xz Singular/LIB/surfex
#Source1: surfex.tar.xz
Source: http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/SOURCES/%upstreamver/singular-%version.tar.gz

BuildRequires: 4ti2
BuildRequires: bison
BuildRequires: boost-program_options-devel
%if_with python
BuildRequires: boost-python3-devel
%endif
BuildRequires: desktop-file-utils
BuildRequires: doxygen
%if_with emacs
BuildRequires: emacs
%endif
BuildRequires: environment-modules
BuildRequires: flex
BuildRequires: libflint2-devel
BuildRequires: gcc-c++
BuildRequires: libgmp-devel
BuildRequires: graphviz
BuildRequires: java-devel
BuildRequires: javapackages-tools
BuildRequires: libxml2-devel
BuildRequires: libncurses-devel
BuildRequires: libreadline-devel
BuildRequires: tbb-devel
BuildRequires: zlib-devel
BuildRequires: libmemtailor-devel
%if_with python
BuildRequires: python3-devel
%endif
# Need uudecode for documentation images in tarball
BuildRequires: sharutils
#BuildRequires: surf-geometry
BuildRequires: texlive-dist
BuildRequires: texlive-collection-basic
#BuildRequires: TOPCOM
Requires: %name-libs = %version-%release
Requires: environment-modules
Requires: less
#Requires: surf-geometry

# fedora patches
# Support ARM and S390(x) architectures
Patch0: %name-arches.patch
# Fix both underlinking and overlinking
Patch1: %name-link.patch
# Fix the desktop files
Patch2: %name-desktop.patch
# Adapt to new template code in NTL 8
Patch3: %name-ntl8.patch
# Fix code that can overflow a character buffer with sprintf
Patch4: %name-format.patch
# Add missing parentheses that can change code meaning in a macro
Patch5: %name-parens.patch
# Unbundle gfanlib
Patch6: %name-gfanlib.patch
# Fix code that violates the strict aliasing rules
Patch7: %name-alias.patch
# Let ESingular read a compressed singular.hlp file
Patch8: %name-emacs.patch
# Adapt to Java 11
Patch9: %name-javac.patch
# alt patches
# Fix build errors with gcc11
Patch10: %name-gcc11.patch

%description
Singular is a computer algebra system for polynomial computations, with
special emphasis on commutative and non-commutative algebra, algebraic
geometry, and singularity theory.

%package libs
Summary: Singular library
Group: System/Libraries

%description libs
This package contains the main Singular library.

%package devel
Summary: Singular development files
Group: Development/Other
Requires: %name-libs = %version-%release
Requires: libpolys-devel = %version-%release

%description devel
This package contains the Singular development files.

%package doc
Summary: Singular documentation files
Group: Documentation
BuildArch: noarch

%description doc
This package contains the Singular documentation files.

%package emacs
Summary: Emacs interface to Singular
Group: Editors
Requires: emacs-common

%description emacs
Emacs interface to Singular.

%package -n libfactory4
Summary: C++ class library for multivariate polynomial data
Group: System/Libraries
Requires: libfactory-gftables = %version-%release

%description -n libfactory4
Factory is a C++ class library that implements a recursive
representation of multivariate polynomial data.  It handles sparse
multivariate polynomials over different coefficient domains, such as Z,
Q and GF(q), as well as algebraic extensions over Q and GF(q) in an
efficient way.  Factory includes algorithms for computing univariate and
multivariate gcds, resultants, chinese remainders, and algorithms to
factorize multivariate polynomials and to compute the absolute
factorization of multivariate polynomials with integer coefficients.

%package -n libfactory-devel
Summary: Development files for the Singular factory
Group: Development/Other
Requires: libfactory4 = %version-%release
Requires: libgmp-devel

%description -n libfactory-devel
Development files for the Singular factory.

%package -n libfactory-gftables
Summary: Singular factory addition tables
Group: Development/Other
BuildArch: noarch

%description -n libfactory-gftables
Factory uses addition tables to calculate in GF(p^n) in an efficient way.

%package -n libpolys4
Summary: C++ class library for polynomials in Singular
Group: System/Libraries
Requires: libfactory4 = %version-%release

%description -n libpolys4
Libpolys contains the data structures and basic algorithms for
polynomials in Singular.

%package -n libpolys-devel
Summary: Development files for libpolys
Group: Development/Other
Requires: %name-libs = %version-%release
Requires: libfactory-devel = %version-%release
Requires: libflint2-devel

%description -n libpolys-devel
Development files for libpolys.

%package surfex
Summary: Singular java interface
Group: Development/Java
Requires: %_bindir/java
Requires: %name = %version-%release

%description surfex
This package contains the Singular java interface.

%prep
%setup -n singular-%downstreamver
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
#%%patch6 -p1
%patch7 -p1
%patch8 -p1
#%%patch9 -p1
%patch10 -p1

%if_with python
# Fix the name of the boost_python library
sed -ri 's/(lboost_python)-\$\{PYTHON_VERSION\}/\1%{py3_slim_version}/' \
    Singular/dyn_modules/python/Makefile.am
%endif

# Do not force the use of c++11, since the polymake code requires c++14
sed -i 's/-std=c++11//' m4/ntl-check.m4

# Do not use the prebuilt surfex.jar
#rm -f Singular/LIB/surfex/surfex.jar

sed -i '/$(DESTDIR)$(datadir)\/info/d' \
    Makefile.am \
    Makefile.in

sed -i -e '1 s/^/#!\/usr\/bin\/python3\n\n/;' \
    Singular/dyn_modules/machinelearning/ml_python/common/constants.py

%build
export CPPFLAGS="-I%_includedir/flint -I%_includedir/gfanlib"
%if_with python
pyincdir=$(python3 -Esc "import sysconfig; print(sysconfig.get_paths()['include'])")
CPPFLAGS="$CPPFLAGS -I$pyincdir"
%endif
export CFLAGS="%optflags -fPIC -fno-delete-null-pointer-checks"
export CXXFLAGS="$CFLAGS"
# Cannot use RPM_LD_FLAGS, as -Wl,-z,now breaks lazy module loading
export LDFLAGS="-Wl,-z,relro"
#module load 4ti2-%_arch
#module load lrcalc-%_arch
./autogen.sh
%configure \
	--bindir=%singulardir \
	--infodir=%_datadir/info \
	--disable-silent-rules \
	--disable-optimizationflags \
	--disable-static \
	--enable-p-procs-dynamic \
	--enable-bigintm-module \
	--enable-gfanlib-module \
	--enable-Order-module \
%if_with polymake
	--enable-polymake-module \
%else
	--disable-polymake-module \
%endif
%if_with python
	--enable-python-module \
%else
	--disable-python-module \
%endif
	--enable-streamio \
	--with-gmp \
	--without-ntl \
	--with-flint \
	--without-mathicgb \
%if_with python
	--with-python=python3 \
%else
	--without-python \
%endif
	--with-readline \
	--disable-doc \
	--with-malloc=system \
#

%make_build
#%%make_build -C dox html
#pushd Singular/LIB/surfex
#./make_surfex
#popd

%install
%makeinstall_std

# Do not install gfanlib; it is packaged separately
#rm -fr %%buildroot%%_includedir/gfanlib
#rm -f %%buildroot%%_libdir/libgfan*

# Install surfex.jar
#mkdir %%buildroot%%_datadir/singular/LIB/surfex
#cp -p Singular/LIB/surfex/surfex.jar %%buildroot%_datadir/singular/LIB/surfex

# Validate the desktop files
desktop-file-validate %buildroot%_desktopdir/Singular.desktop
desktop-file-validate \
%buildroot%_desktopdir/Singular-manual.desktop
# We don't want the libtool files
rm -f %buildroot%_libdir/*.la
rm -f %buildroot%_libexecdir/singular/MOD/*.la

# Remove files we don't want in the installed tree
rm -f %buildroot%_datadir/singular/emacs/{ChangeLog,COPYING,NEWS}

# Move the config scripts
mkdir -p %buildroot%_bindir
mv %buildroot%singulardir/*-config %buildroot%_bindir

# Install documentation files
mkdir -p %buildroot%_man1dir
for cmd in ESingular Singular TSingular; do
  cp -p Singular/$cmd.man %buildroot%_man1dir/$cmd.1
done
cp -p doc/singular.idx %buildroot%_datadir/singular

# remove script that calls surf; we don't ship it
rm -f %buildroot%singulardir/singularsurf

# create a script also setting SINGULARPATH
cat > %buildroot%_bindir/Singular << EOF
#!/bin/sh

#. /etc/alternatives/packages.d/modules.sh_environment-modules
#module load surf-geometry-%_arch
export SINGULAR_DATA_DIR=%_datadir
exec %singulardir/Singular "\$@"
EOF
chmod 0755 %buildroot%_bindir/Singular

# TSingular
cat > %buildroot%_bindir/TSingular << EOF
#!/bin/sh

#. /etc/alternatives/packages.d/modules.sh_environment-modules
#module load surf-geometry-%_arch
exec %singulardir/TSingular --singular %_bindir/Singular "\$@"
EOF
chmod 0755 %buildroot%_bindir/TSingular

# surfex
#cat > %%buildroot%%_bindir/surfex << EOF
#!/bin/sh

#. /etc/alternatives/packages.d/modules.sh_environment-modules
#module load surf-geometry-%%_arch
#exec %%singulardir/surfex %%singulardir/LIB/surfex "\$@"
#EOF
#chmod 0755 %%buildroot%%_bindir/surfex

# ESingular
cat > %buildroot%_bindir/ESingular << EOF
#!/bin/sh

#. /etc/alternatives/packages.d/modules.sh_environment-modules
#module load surf-geometry-%_arch
export ESINGULAR_EMACS_DIR=%_datadir/singular/emacs
exec %singulardir/ESingular --singular %_bindir/Singular "\$@"
EOF
chmod 0755 %buildroot%_bindir/ESingular

%if_with python
## Byte compile the python files
#%%py_byte_compile python3 %%buildroot%%_datadir/singular/LIB
python3 -O -m compileall -q -f -d python3 %buildroot%_datadir/singular/LIB
%endif

chmod +x %buildroot%_datadir/ml_python/common/keyword_vector.py
chmod +x %buildroot%_datadir/ml_python/common/constants.py

%check
export LD_LIBRARY_PATH=%buildroot%_libdir
make check

%files
%doc README.md
%_bindir/Singular
%_bindir/TSingular
#%_infodir/singular.hlp*
%_man1dir/Singular.1*
%_man1dir/TSingular.1*
%_desktopdir/Singular.desktop
%_iconsdir/Singular.png
%_datadir/ml_python/
%_datadir/ml_singular/
%_datadir/singular/singular.idx
%_datadir/singular/singular.hlp
#%docdir %_datadir/singular/html/
%_datadir/singular/html/
%singulardir/Singular
%singulardir/TSingular

%files libs
%doc libpolys/README
%doc COPYING
%doc GPL2
%doc GPL3
%_libdir/libSingular-%version.so
%_libexecdir/singular/
%dir %_datadir/singular/
%_datadir/singular/LIB/
%exclude %_datadir/singular/LIB/surfex.lib
#%%exclude %%_datadir/singular/LIB/surfex

%files devel
%_bindir/libsingular-config
%_includedir/singular/kernel/
%_includedir/singular/Singular/
%_includedir/singular/singularconfig.h
%_libdir/libSingular.so
%_pkgconfigdir/Singular.pc

%files doc
%doc dox/*.html
%doc dox/*.png
%doc dox/*.css
%_desktopdir/Singular-manual.desktop

%if_with emacs
%files emacs
%doc emacs/COPYING
%doc emacs/BUGS
%_bindir/ESingular
%_man1dir/ESingular.1*
%_datadir/singular/emacs/
%singulardir/ESingular
%endif

%files surfex
#%%_bindir/surfex
%_datadir/singular/LIB/surfex.lib
#%%_datadir/singular/LIB/surfex/

%files -n libfactory4
%doc factory/COPYING
%doc factory/README
%_libdir/libfactory-%version.so
%_libdir/libomalloc-0.9.6.so
%_libdir/libsingular_resources-%version.so

%files -n libfactory-devel
%doc factory/examples
%_includedir/factory/
%_includedir/omalloc/
%_includedir/resources/
%_libdir/libfactory.so
%_libdir/libomalloc.so
%_libdir/libsingular_resources.so
%_pkgconfigdir/factory.pc
%_pkgconfigdir/omalloc.pc
%_pkgconfigdir/singular_resources.pc

%files -n libfactory-gftables
%_datadir/factory/

%files -n libpolys4
%doc libpolys/COPYING
%doc libpolys/README
%_libdir/libpolys-%version.so

%files -n libpolys-devel
%_bindir/libpolys-config
%dir %_includedir/singular/
%_includedir/singular/coeffs/
%_includedir/singular/libpolysconfig.h
%_includedir/singular/misc/
%_includedir/singular/polys/
%_includedir/singular/reporter/
%_libdir/libpolys.so
%_pkgconfigdir/libpolys.pc

%changelog
* Sat Jan 15 2022 Michael Shigorin <mike@altlinux.org> 4.2.1-alt2
- Introduced emacs knob (on by default)
- Minor spec cleanup

* Thu Oct 14 2021 Leontiy Volodin <lvol@altlinux.org> 4.2.1-alt1
- Initial build for ALT Sisyphus (thanks fedora for the spec).
- Build as require for libpynac and sagemath.