File wildmagic5.spec of Package wildmagic5

#
# spec file for package wildmagic5
#
# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

%{!?__global_ldflags: %global __global_ldflags -Wl,-z,relro}

Name:           wildmagic5
Version:        5.17
Release:        0
Summary:        Wild Magic libraries
Group:          Development/Libraries/C and C++
License:        BSL-1.0
URL:            https://www.geometrictools.com
Source:         https://www.geometrictools.com/Downloads/WildMagic5p17.zip
# PATCH-FIX-OPENSUSE - Use CWD for sample output instead of readonly data dir
Patch0:         %{name}-fix-SimplePendulum_output_files.patch
# PATCH-FIX-OPENSUSE - Use CWD for sample output instead of readonly data dir
Patch1:         %{name}-fix-DistancePointEllipseEllipsoid.patch
# PATCH-FIX-OPENSUSE - Add LDFLAGS when linking sample apps
Patch2:         %{name}-fix_ldflags.patch
# PATCH-FIX-OPENSUSE
Patch3:         0001-Add-default-for-WM5_PATH.patch
BuildRequires:  dos2unix
BuildRequires:  gcc-c++
BuildRequires:  libX11-devel
BuildRequires:  libXext-devel
BuildRequires:  libstdc++-devel
BuildRequires:  make
BuildRequires:  pkgconfig(gl)
BuildRequires:  pkgconfig(glu)
BuildRequires:  unzip
BuildRequires:  fdupes

%description
A library of source code for computing in the fields of graphics,
mathematics, physics, and image analysis.
Web page documentation:
geometrictools.com/Documentation/Documentation.html

%package devel
Summary:        Development files for WildMagic5
Requires:       %{name} = %{version}

%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.

%package samples
Summary:        Samples files for %{name}
Requires:       %{name}-data = %{version}

%description samples
Graphics, Physics, Imagics and Mathematics
directories containing sample files.
Execute the sample files in a dedicated directory because
they generate their own output files.
Web page documentation:
geometrictools.com/Documentation/Documentation.html

%package data
Summary:        WildMagic5 data files
BuildArch:      noarch

%description data
This package provides the %{name} data files.
They are generally required when either using the library
or developing with it or developing it.

%prep
%autosetup -n GeometricTools -N

dos2unix WildMagic5/SamplePhysics/SimplePendulum/SimplePendulum.cpp
dos2unix WildMagic5/SampleMathematics/DistancePointEllipseEllipsoid/DistancePointEllipseEllipsoid.cpp
dos2unix WildMagic5/SampleGraphics/makeapp.wm5
dos2unix WildMagic5/SamplePhysics/makeapp.wm5
dos2unix WildMagic5/SampleImagics/makeapp.wm5
dos2unix WildMagic5/SampleMathematics/makeapp.wm5
dos2unix WildMagic5/Documentation/ImFileFormat.txt
dos2unix WildMagic5/Documentation/StreamingChanges.txt
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1

sed -i 's|CFLAGS += -O2 -DNDEBUG|CFLAGS += %{optflags} -pthread -DNDEBUG|g' WildMagic5/LibGraphics/Renderers/GlxRenderer/makerend.wm5
sed -i 's|CFLAGS += -O2 -DNDEBUG|CFLAGS += %{optflags} -pthread -DNDEBUG|g' WildMagic5/SamplePhysics/makeapp.wm5
sed -i 's|@@LDFLAGS@@|%{__global_ldflags}|g' WildMagic5/SamplePhysics/makeapp.wm5
sed -i 's|CFLAGS += -O2 -DNDEBUG|CFLAGS += %{optflags} -pthread -DNDEBUG|g' WildMagic5/SampleGraphics/makeapp.wm5
sed -i 's|@@LDFLAGS@@|%{__global_ldflags}|g' WildMagic5/SampleGraphics/makeapp.wm5
sed -i 's|CFLAGS += -O2 -DNDEBUG|CFLAGS += %{optflags} -pthread -DNDEBUG|g' WildMagic5/SampleImagics/makeapp.wm5
sed -i 's|@@LDFLAGS@@|%{__global_ldflags}|g' WildMagic5/SampleImagics/makeapp.wm5
sed -i 's|CFLAGS += -O2 -DNDEBUG|CFLAGS += %{optflags} -pthread -DNDEBUG|g' WildMagic5/SampleMathematics/makeapp.wm5
sed -i 's|@@LDFLAGS@@|%{__global_ldflags}|g' WildMagic5/SampleMathematics/makeapp.wm5

%build
shopt -s extglob
pushd WildMagic5

mkdir -p SDK/Include
mkdir -p SDK/Library/releaseDynamic

export CFLAGS="%{optflags} -pthread -DNDEBUG"
export LDFLAGS="%{__global_ldflags} -Wl,--no-undefined -lpthread -LSDK/Library/releaseDynamic"

# Build all library objects, but skip linking ("AR=true")
for lib in LibCore LibMathematics LibPhysics LibImagics LibGraphics; do
    mkdir  ${lib}/releaseDynamic
    cp ${lib}/*.h SDK/Include/
    for d in ${lib}/[A-Z]*([A-Za-z23]); do
        if [ $d == "LibGraphics/Renderers" ]; then
          %make_build CC=g++ AR="/usr/bin/true" CFG=releaseDynamic -f makerend.wm5 -C $d/GlxRenderer
        else
          %make_build CC=g++ AR="/usr/bin/true" CFG=releaseDynamic -f ../makeprj.wm5 -C $d
        fi
    done
done

# Manually link each library with appropriate flags, and with correct object order to avoid underlinkage
/usr/bin/g++ ${LDFLAGS} -shared -fPIC -Wl,-soname,libWm5Core.so.5 LibCore/releaseDynamic/*.o -o SDK/Library/releaseDynamic/libWm5Core.so.5.17 -lpthread
ln -s libWm5Core.so.5.17 SDK/Library/releaseDynamic/libWm5Core.so.5; ln -s libWm5Core.so.5.17 SDK/Library/releaseDynamic/libWm5Core.so
/usr/bin/g++ ${LDFLAGS} -shared -fPIC -Wl,-soname,libWm5Mathematics.so.5 LibMathematics/releaseDynamic/*.o -o SDK/Library/releaseDynamic/libWm5Mathematics.so.5.17 -lWm5Core
ln -s libWm5Mathematics.so.5.17 SDK/Library/releaseDynamic/libWm5Mathematics.so.5; ln -s libWm5Mathematics.so.5.17 SDK/Library/releaseDynamic/libWm5Mathematics.so
/usr/bin/g++ ${LDFLAGS} -shared -fPIC -Wl,-soname,libWm5Physics.so.5 LibPhysics/releaseDynamic/*.o -o SDK/Library/releaseDynamic/libWm5Physics.so.5.17 -lWm5Core -lWm5Mathematics
ln -s libWm5Physics.so.5.17 SDK/Library/releaseDynamic/libWm5Physics.so.5; ln -s libWm5Physics.so.5.17 SDK/Library/releaseDynamic/libWm5Physics.so
/usr/bin/g++ ${LDFLAGS} -shared -fPIC -Wl,-soname,libWm5Imagics.so.5 LibImagics/releaseDynamic/*.o -o SDK/Library/releaseDynamic/libWm5Imagics.so.5.17 -lWm5Core -lWm5Mathematics
ln -s libWm5Imagics.so.5.17 SDK/Library/releaseDynamic/libWm5Imagics.so.5; ln -s libWm5Imagics.so.5.17 SDK/Library/releaseDynamic/libWm5Imagics.so
/usr/bin/g++ ${LDFLAGS} -shared -fPIC -Wl,-soname,libWm5Graphics.so.5 LibGraphics/releaseDynamic/*.o -o SDK/Library/releaseDynamic/libWm5Graphics.so.5.17 -lWm5Core -lWm5Mathematics -lGL -LGLU
ln -s libWm5Graphics.so.5.17 SDK/Library/releaseDynamic/libWm5Graphics.so.5; ln -s libWm5Graphics.so.5.17 SDK/Library/releaseDynamic/libWm5Graphics.so

%global WILD_OPT_FLAGS %(echo "-c -D__LINUX__ -DWM5_USE_OPENGL %{optflags} -fPIC -pthread -DNDEBUG")
%make_build CC=g++ AR="/usr/bin/true" CFG=releaseDynamic -f makefile.wm5 -C LibApplications CFLAGS="%{WILD_OPT_FLAGS}"
/usr/bin/g++ ${LDFLAGS} -shared -fPIC -Wl,-soname,libWm5Applications.so.5 LibApplications/releaseDynamic/*.o -o SDK/Library/releaseDynamic/libWm5Applications.so.5.17 -lWm5Core -lWm5Mathematics -lWm5Graphics -lX11

%make_build CC=g++ CFG=releaseDynamic -f makefile.wm5 -C SampleGraphics
%make_build CC=g++ CFG=releaseDynamic -f makefile.wm5 -C SamplePhysics
%make_build CC=g++ CFG=releaseDynamic -f makefile.wm5 -C SampleImagics
%make_build CC=g++ CFG=releaseDynamic -f makefile.wm5 -C SampleMathematics

%install
mkdir -p %{buildroot}%{_libdir}
mkdir -p %{buildroot}%{_includedir}/WildMagic
mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleImagics
mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleMathematics
mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleGraphics/BlendedAnimations
mkdir -p %{buildroot}%{_datadir}/WildMagic/SamplePhysics/SimplePendulum/Data
cp -a WildMagic5/SDK/Library/releaseDynamic/*.so* %{buildroot}%{_libdir}
cp -a WildMagic5/SDK/Include/* %{buildroot}%{_includedir}/WildMagic
cp -a WildMagic5/Data %{buildroot}%{_datadir}/WildMagic

mkdir -p %{buildroot}%{_libexecdir}/WildMagic/SampleGraphics
mkdir -p %{buildroot}%{_libexecdir}/WildMagic/SamplePhysics
mkdir -p %{buildroot}%{_libexecdir}/WildMagic/SampleImagics
mkdir -p %{buildroot}%{_libexecdir}/WildMagic/SampleMathematics

cp -a WildMagic5/SampleGraphics/BlendedAnimations/Data %{buildroot}%{_datadir}/WildMagic/BlendedAnimations
cp -a WildMagic5/SampleGraphics/BlendedTerrain/Shaders %{buildroot}%{_datadir}/WildMagic/BlendedTerrain
cp -a WildMagic5/SampleGraphics/BumpMaps/Shaders %{buildroot}%{_datadir}/WildMagic/BumpMaps
cp -a WildMagic5/SampleGraphics/Castle/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Castle
cp -a WildMagic5/SampleGraphics/Castle/Geometry %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Castle
cp -a WildMagic5/SampleGraphics/Castle/Textures %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Castle
cp -a WildMagic5/SampleGraphics/CubeMaps/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/CubeMaps
cp -a WildMagic5/SampleGraphics/CubeMaps/Data %{buildroot}%{_datadir}/WildMagic/SampleGraphics/CubeMaps
cp -a WildMagic5/SampleGraphics/GlossMaps/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/GlossMaps
cp -a WildMagic5/SampleGraphics/MorphControllers/Data %{buildroot}%{_datadir}/WildMagic/SampleGraphics/MorphControllers
cp -a WildMagic5/SampleGraphics/MorphFaces/Data %{buildroot}%{_datadir}/WildMagic/SampleGraphics/MorphFaces
cp -a WildMagic5/SampleGraphics/MultipleRenderTargets/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/MultipleRenderTargets
cp -a WildMagic5/SampleGraphics/ProjectedTextures/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/ProjectedTextures
cp -a WildMagic5/SampleGraphics/ShadowMaps/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/ShadowMaps
cp -a WildMagic5/SampleGraphics/SkinnedBiped/Data %{buildroot}%{_datadir}/WildMagic/SampleGraphics/SkinnedBiped
cp -a WildMagic5/SampleGraphics/Skinning/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Skinning
cp -a WildMagic5/SampleGraphics/SphereMaps/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/SphereMaps
mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Terrains/Data
cp -a WildMagic5/SampleGraphics/Terrains/Data/* %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Terrains/Data
cp -a WildMagic5/SampleGraphics/Terrains/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/Terrains
cp -a WildMagic5/SampleGraphics/VolumeFog/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/VolumeFog
cp -a WildMagic5/SampleGraphics/VolumeTextures/Shaders %{buildroot}%{_datadir}/WildMagic/SampleGraphics/VolumeTextures

cp -a WildMagic5/SampleImagics/GpuGaussianBlur2/Data %{buildroot}%{_datadir}/WildMagic/SampleImagics/GpuGaussianBlur2
cp -a WildMagic5/SampleImagics/GpuGaussianBlur2/Shaders %{buildroot}%{_datadir}/WildMagic/SampleImagics/GpuGaussianBlur2
cp -a WildMagic5/SampleImagics/GpuGaussianBlur3/Data %{buildroot}%{_datadir}/WildMagic/SampleImagics/GpuGaussianBlur3
cp -a WildMagic5/SampleImagics/GpuGaussianBlur3/Shaders %{buildroot}%{_datadir}/WildMagic/SampleImagics/GpuGaussianBlur3

cp -a WildMagic5/SampleMathematics/BSplineFitContinuous/Data %{buildroot}%{_datadir}/WildMagic/SampleMathematics/BSplineFitContinuous
mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleMathematics/DistancePointEllipseEllipsoid

mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleMathematics/NonlocalBlowup/Data
cp -a WildMagic5/SampleMathematics/NonlocalBlowup/Data/* %{buildroot}%{_datadir}/WildMagic/SampleMathematics/NonlocalBlowup/Data

mkdir -p %{buildroot}%{_datadir}/WildMagic/SampleMathematics/GeodesicHeightField/Data
cp -a WildMagic5/SampleMathematics/GeodesicHeightField/Data/* %{buildroot}%{_datadir}/WildMagic/SampleMathematics/GeodesicHeightField/Data

cp -a WildMagic5/SampleGraphics/BlendedAnimations/Data %{buildroot}%{_datadir}/WildMagic/SampleGraphics/BlendedAnimations
cp -p WildMagic5/SampleGraphics/BlendedTerrain/Shaders/BlendedTerrain.wmfx %{buildroot}%{_datadir}/WildMagic/Data/Im
cp -p WildMagic5/SampleGraphics/BumpMaps/Shaders/SimpleBumpMap.wmfx %{buildroot}%{_datadir}/WildMagic/Data/Im

pushd WildMagic5/SampleGraphics/BlendedAnimations/Data
find . -type f \( -name "*.bmp" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/Bmp \;
find . -type f \( -name "*.txt" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/Wmfx \;
find . -type f \( -name "*.wmtf" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/Wmtf \;
popd

pushd WildMagic5/SampleGraphics/BlendedTerrain/Shaders
find . -type f \( -name "*.fx" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/CgShaders \;
find . -type f \( -name "*.wmtf" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/Wmtf \;
popd
pushd WildMagic5/SampleGraphics/BumpMaps/Shaders
find . -type f \( -name "*.fx" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/CgShaders \;
find . -type f \( -name "*.wmtf" \) -exec cp -a '{}' %{buildroot}%{_datadir}/WildMagic/Data/Wmtf \;
popd

for bin in WildMagic5/Sample*/*/*.releaseDynamic ; do
  install -m 755 -D -T ${bin} %{buildroot}%{_bindir}/WM5_`basename ${bin} .releaseDynamic`
done

%fdupes %{buildroot}%{_datadir}/WildMagic/

%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig

%files
%license WildMagic5/License/LICENSE_1_0.txt
%doc WildMagic5/Documentation/WildMagic5Overview.pdf
%{_libdir}/*.so.*

%files devel
%{_includedir}/WildMagic/
%{_libdir}/*.so

%files samples
%{_bindir}/WM5_*

%files data
%doc WildMagic5/Documentation/*.txt
%doc WildMagic5/Documentation/Wm5InitTerm.pdf
%license WildMagic5/License/LICENSE_1_0.txt
%{_datadir}/WildMagic/

%changelog
openSUSE Build Service is sponsored by