# Prevent accidental soname bumps.
%global sover 0
# Conditionals controlling the build.
%global with_guile 1
%global with_octave 1
%global with_py3 1
# Guile version
%if 0%{?fedora}
%global guile_ver 2.2
%endif
%global guile_pkg %(echo guile%{?guile_ver} | sed -e 's!\\\.!!g')
Name: NLopt
Version: 2.7.1
Release: 18%{?dist}
Summary: Open-Source library for nonlinear optimization
# Get a lowercase name for virtual provides.
%global lc_name %{lua:print(string.lower(rpm.expand("%{name}")))}
# The detailed license-breakdown of the sources is:
#
# BSD (2 clause)
# --------------
# util/mt19937ar.c
#
#
# BSD (3 clause)
# --------------
# slsqp/*
#
#
# LGPL (v2 or later)
# ------------------
# luksan/*
#
# MIT/X11 (BSD like)
# ------------------
# api/* auglag/* bobyqa/* cdirect/* cobyla/*
# cquad/* crs/* direct/* esch/* isres/*
# mlsl/* mma/* neldermead/* newuoa/* octave/*
# stogo/* tensor/* test/* util/* (ex. util/mt19937ar.c)
#
#
# Public Domain
# -------------
# praxis/* subplex/*
#
License: BSD and LGPLv2+ and MIT and Public Domain
URL: http://ab-initio.mit.edu/%{lc_name}
Source0: https://github.com/stevengj/%{lc_name}/archive/v%{version}/%{lc_name}-%{version}.tar.gz
# Kill RPATH.
Patch0: nlopt-2.6.2-kill_rpath.patch
# Fix guile detection
# https://github.com/stevengj/nlopt/pull/428
Patch1: 0001-CMake-Fix-guile-detection-in-Fedora.patch
# Fix build with CMake 3.27.0
Patch2: nlopt-2.7.1-cmake_327.patch
BuildRequires: cmake3
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: gcc-gfortran
BuildRequires: make
BuildRequires: ncurses-devel
# The "gnulib" is a copylib and has a wildcard-permission from FPC.
# See: https://fedorahosted.org/fpc/ticket/174
Provides: bundled(gnulib)
Provides: %{lc_name} = %{version}-%{release}
Provides: %{lc_name}%{?_isa} = %{version}-%{release}
%description
NLopt is a library for nonlinear local and global optimization, for
functions with and without gradient information. It is designed as
as simple, unified interface and packaging of several free/open-source
nonlinear optimization libraries.
It features bindings for GNU Guile, Octave and Python. This build has
been made with C++-support enabled.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: %{lc_name}-devel = %{version}-%{release}
Provides: %{lc_name}-devel%{?_isa} = %{version}-%{release}
%description devel
This package contains development files for %{name}.
%package doc
Summary: Documentation files for %{name}
BuildArch: noarch
Provides: %{lc_name}-doc = %{version}-%{release}
%description doc
This package contains documentation files for %{name}.
%if 0%{?with_guile}
%package -n guile-%{name}
%{!?guile_pkgconf: %global guile_pkgconf %(%___build_pre; pkg-config --list-all | grep guile%{?guile_ver:-%{guile_ver}} | sed -e 's! .*$!!g')}
%{!?guile_sitedir: %global guile_sitedir %(%___build_pre; pkg-config --variable=sitedir %{guile_pkgconf})}
%{!?guile_extdir: %global guile_extdir %(%___build_pre; pkg-config --variable=extensiondir %{guile_pkgconf})}
Summary: Guile bindings for %{name}
BuildRequires: %{guile_pkg}-devel
BuildRequires: pkgconfig
BuildRequires: swig
Requires: %{guile_pkg}%{?_isa}
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: guile-%{lc_name} = %{version}-%{release}
Provides: guile-%{lc_name}%{?_isa} = %{version}-%{release}
%description -n guile-%{name}
This package contains Guile bindings for %{name}.
%endif
%if 0%{?with_octave}
%package -n octave-%{name}
%global octpkg %{name}
Summary: Octave bindings for %{name}
BuildRequires: octave-devel
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: octave(api) = %{octave_api}
Requires(post): octave
Requires(postun): octave
Provides: octave-%{lc_name} = %{version}-%{release}
Provides: octave-%{lc_name}%{?_isa} = %{version}-%{release}
%description -n octave-%{name}
This package contains the Octave bindings for %{name}.
%endif
%if 0%{?with_py3}
%package -n python%{python3_pkgversion}-%{name}
Summary: Python3 bindings for %{name}
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: python%{python3_pkgversion}-numpy
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: python%{python3_pkgversion}-%{lc_name} = %{version}-%{release}
Provides: python%{python3_pkgversion}-%{lc_name}%{?_isa} = %{version}-%{release}
%description -n python%{python3_pkgversion}-%{name}
This package contains Python3 bindings for %{name}.
%endif
%prep
%autosetup -p 1 -n %{lc_name}-%{version}
# Move all %%doc to topdir and append their belonging.
[[ -f README.md ]] && \
mv -f README.md README
_topdir="`pwd`"
for _dir in `find . -type d | \
sed -e "/\.libs/d" -e "s/\.\///g" -e "/\./d" | sort -u`
do
pushd ${_dir}
for _file in 'AUTHOR*' 'COPY*' 'README*' '*[Pp][Dd][Ff]'
do
for _doc in `find . -maxdepth 1 -name "${_file}"`
do
mv -f ${_doc} ${_topdir}/${_doc}.`echo ${_dir} | sed -e "s/\//_/g"`
done
done
popd
done
%build
%cmake3 \
-DNLOPT_CXX=ON \
-DNLOPT_FORTRAN=ON \
-DNLOPT_PYTHON=ON \
-DNLOPT_OCTAVE=ON \
-DNLOPT_MATLAB=OFF \
-DNLOPT_GUILE=ON \
-DNLOPT_SWIG=ON \
-DNLOPT_TESTS=ON \
-DBUILD_SHARED_LIBS=ON \
-DPYTHON_EXECUTABLE=%{__python3} \
-DINSTALL_PYTHON_DIR=%{python3_sitearch} \
-DINSTALL_M_DIR=%{octpkgdir} \
-DINSTALL_OCT_DIR=%{octpkglibdir}
%cmake3_build
%install
%cmake3_install
# We don't want these static-libs and libtool-dumplings
find %{buildroot} -depth -name '*.*a' -print0 | xargs -0 rm -f
%if 0%{?with_octave}
# Setup octave stuff properly.
mkdir -p %{buildroot}%{octpkgdir}/packinfo
chmod 0755 %{buildroot}%{octpkglibdir}/*.oct
install -pm 0644 COPYING %{buildroot}%{octpkgdir}/packinfo
cat > %{buildroot}%{octpkgdir}/packinfo/DESCRIPTION << EOF
Name: %{name}
Version: %{version}
Date: %(date +%Y-%m-%d)
Author: Steven G. Johnson <stevenj@alum.mit.edu>
Maintainer: Björn Esser <besser82@fedoraproject.org>
Title: Open-Source library for nonlinear optimization
Description: NLopt is a library for nonlinear local and global
optimization, for functions with and without gradient information.
It is designed as as simple, unified interface and packaging of
several free/open-source nonlinear optimization libraries.
Url: %{url}
EOF
cat > %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m << EOF
function on_uninstall (desc)
error ('Can not uninstall %s installed by the redhat package manager', desc.name);
endfunction
EOF
%endif
%check
%ctest3
%ldconfig_scriptlets
%if 0%{?with_octave}
%post -n octave-%{name}
%octave_cmd pkg rebuild
%preun -n octave-%{name}
%octave_pkg_preun
%postun -n octave-%{name}
%octave_cmd pkg rebuild
%endif
%files
%doc ChangeLog NEWS.md
%license COPY*
%{_libdir}/lib%{lc_name}.so.%{sover}*
%files devel
%doc %{_mandir}/man3/*
%{_includedir}/*
%{_libdir}/cmake/nlopt/
%{_libdir}/lib%{lc_name}.so
%{_libdir}/pkgconfig/%{lc_name}.pc
%files doc
%doc AUTHOR* ChangeLog NEWS.md README* TODO *.[Pp][Dd][Ff].*
%license COPY*
%if 0%{?with_guile}
%files -n guile-%{name}
%{guile_extdir}/*nlopt_guile.so
%{guile_sitedir}/*
%endif
%if 0%{?with_octave}
%files -n octave-%{name}
%{octpkglibdir}
%{octpkgdir}
%endif
%files -n python%{python3_pkgversion}-%{name}
%{python3_sitearch}/*.so*
%{python3_sitearch}/*.py*
%{python3_sitearch}/__pycache__/*.py*
%changelog
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 2.7.1-15
- Rebuilt for Python 3.12
* Sat Jun 10 2023 Björn Esser <besser82@fedoraproject.org> - 2.7.1-14
- Fix build with CMake 3.27.0
* Sat Apr 08 2023 Orion Poplawski <orion@nwra.com> - 2.7.1-13
- Rebuild with octave 8.1.0
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 2.7.1-10
- Rebuilt for Python 3.11
* Wed Jun 01 2022 Orion Poplawski <orion@nwra.com> - 2.7.1-9
- Rebuild for octave 7.1
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Tue Dec 14 2021 Björn Esser <besser82@fedoraproject.org> - 2.7.1-7
- Also use ctest3 in %%check
* Tue Dec 14 2021 Björn Esser <besser82@fedoraproject.org> - 2.7.1-6
- Use cmake3 for build
* Tue Dec 14 2021 Björn Esser <besser82@fedoraproject.org> - 2.7.1-5
- Use unversioned system-provided guile for non-Fedora builds
* Thu Dec 09 2021 Kalev Lember <klember@redhat.com> - 2.7.1-4
- Backport upstream PR to fix guile detection in Fedora
* Sun Dec 05 2021 Björn Esser <besser82@fedoraproject.org> - 2.7.1-3
- Build against guile22
Fixes rhbz#2008436
* Sun Dec 05 2021 Björn Esser <besser82@fedoraproject.org> - 2.7.1-2
- Explicitly set configuration options
- Enable Fortran code
- Drop "-fpermissive" compiler flag
* Sat Dec 04 2021 Björn Esser <besser82@fedoraproject.org> - 2.7.1-1
- Update to 2.7.1
Fixes rhbz#1899511
* Wed Aug 11 2021 Orion Poplawski <orion@nwra.com> - 2.6.2-11
- Rebuild for octave 6.3.0
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.2-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Mon Jun 21 2021 Björn Esser <besser82@fedoraproject.org> - 2.6.2-9
- Use out-of-tree-build cmake macros
- More spec file modernizations
* Mon Jun 21 2021 Björn Esser <besser82@fedoraproject.org> - 2.6.2-8
- Fix build by kiling RPATH (#1967199)
- Some spec file modernizations
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 2.6.2-7
- Rebuilt for Python 3.10
* Mon Jan 25 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.2-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Thu Oct 01 2020 Jitka Plesnikova <jplesnik@redhat.com> - 2.6.2-5
- Make the package build with updated %%cmake macro (#1863081)
* Thu Aug 20 2020 Jan Beran <jaberan@redhat.com> - 2.6.2-4
- Fix flatpak build
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.2-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Sun May 31 2020 Björn Esser <besser82@fedoraproject.org> - 2.6.2-1
- Update to 2.6.2
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 2.6.1-7
- Rebuilt for Python 3.9
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.1-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Nov 07 2019 Orion Poplawski <orion@nwra.com> - 2.6.1-5
- Rebuild with octave 64bit indexes
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 2.6.1-4
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 2.6.1-3
- Rebuilt for Python 3.8
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.6.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Jun 16 2019 Orion Poplawski <orion@cora.nwra.com> - 2.6.1-1
- Update to 2.6.1
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.5.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Tue Nov 13 2018 Orion Poplawski <orion@cora.nwra.com> - 2.5.0-1
- Update to 2.5.0, uses cmake
- Rebuild for octave 4.4
* Mon Sep 17 2018 Miro Hrončok <mhroncok@redhat.com> - 2.4.2-18
- Remove Python 2 subpackage on Fedora 30+ (#1627303)
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.2-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 2.4.2-16
- Rebuilt for Python 3.7
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.2-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.4.2-14
- Python 2 binary package renamed to python2-nlopt
See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.2-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.2-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.2-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Mon Dec 19 2016 Miro Hrončok <mhroncok@redhat.com> - 2.4.2-10
- Rebuild for Python 3.6
* Wed Dec 07 2016 Orion Poplawski <orion@cora.nwra.com> - 2.4.2-9
- Rebuild for octave 4.2
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.2-8
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.2-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Tue Nov 10 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.2-6
- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5
* Tue Jul 07 2015 Orion Poplawski <orion@cora.nwra.com> - 2.4.2-5
- Rebuild for octave 4.0
- Add patch for octave 4.0 support
* Tue Jun 16 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Fri Aug 15 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Thu Jul 17 2014 Björn Esser <bjoern.esser@gmail.com> - 2.4.2-2
- disable octave-subpkg on el7
* Thu Jul 17 2014 Björn Esser <bjoern.esser@gmail.com> - 2.4.2-1
- new upstream release (#1116586)
- adapted spec to use named conditionals for packages
* Fri Jun 06 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Wed May 28 2014 Kalev Lember <kalevlember@gmail.com> - 2.4.1-6
- Rebuilt for https://fedoraproject.org/wiki/Changes/Python_3.4
* Tue Jan 14 2014 Björn Esser <bjoern.esser@gmail.com> - 2.4.1-5
- fixed description-file for octave-NLopt (#1048510)
* Tue Jan 14 2014 Björn Esser <bjoern.esser@gmail.com> - 2.4.1-4
- fixed nlopt.pc to reflect the correct lib to link against
* Sat Dec 28 2013 Kevin Fenzi <kevin@scrye.com> - 2.4.1-3
- Rebuild to fix broken deps
* Sat Dec 28 2013 Björn Esser <bjoern.esser@gmail.com> - 2.4.1-2
- rebuild for octave-3.8.0-rc2
* Fri Dec 20 2013 Björn Esser <bjoern.esser@gmail.com> - 2.4.1-1
- new upstream release: v2.4.1
- adapted %%{source0} to match %%{name}
- changed `%%global lc_name` to `%%define lc_name`, because of globbing problems
- use `tr` instead of shell-builtin for `%%define lc_name`
- move `README.md` only if existing
- create an empty Makefile on el5 instead of modifying top-level Makefile.am
- do not autoreconf on el5
- append `-fpermissive` to C[XX]FLAGS on Fedora 19+
* Fri Dec 20 2013 Björn Esser <bjoern.esser@gmail.com> - 2.4-3.git20130903.35e6377
- made %%clean-target conditional on el5
- restructured spec-file for quick switching between snapshot and release
- moved package-specific macros to the corresponding subpackage
* Wed Oct 02 2013 Björn Esser <bjoern.esser@gmail.com> - 2.4-2.git20130903.35e6377
- adaptions for new Python-guidelines
* Thu Sep 19 2013 Björn Esser <bjoern.esser@gmail.com> - 2.4-1.git20130903.35e6377
- Initial rpm release (#1004209)