# Tests by default. No tests: rpm -ba --define 'dotests 0' *.spec
%{!?dotests: %define dotests 0}

%global __tar /opt/freeware/bin/tar
%global name gtest
%global version	1.15.2
%global release	1
%global _libdir64 %{_prefix}/lib64
%global soversion 1.15.2

Summary:        Google C++ testing framework
Name:           gtest
Version:        %{version}
Release:        %{release}
License:        BSD 
URL:            https://github.com/google/googletest
Source0:	https://github.com/google/googletest/archive/refs/tags/v%{version}.tar.gz
Source1: 	libgtest.so.1.14.0-aix64
Source2: 	libgtest_main.so.1.14.0-aix64
Source3: 	libgmock.so.1.14.0-aix64
Source4: 	libgmock_main.so.1.14.0-aix64
Source100: 	libgtest.so.1.14.0-aix32
Source101: 	libgtest_main.so.1.14.0-aix32
Source102: 	libgmock.so.1.14.0-aix32
Source103: 	libgmock_main.so.1.14.0-aix32

Patch1: gtest-1.15.2-cmakelists.patch

BuildRequires:	gcc >= 10.3.0
BuildRequires:	gcc-c++ >= 10.3.0
BuildRequires:	cmake
BuildRequires:	libstdc++-devel >= 10.3.0

%if %{toolchain} == "gcc"
Requires:	libstdc++ >= 10.3.0
%endif
%if %{toolchain} == "gcc"
Requires:	libgcc >= 10.3.0
%endif

%description
Framework for writing C++ tests on a variety of platforms (GNU/Linux,
Mac OS X, Windows, Windows CE, and Symbian). Based on the xUnit
architecture. Supports automatic test discovery, a rich set of
assertions, user-defined assertions, death tests, fatal and non-fatal
failures, various options for running the tests, and XML test report
generation.

%package     -n gtest-devel
Summary:        Development files for %{name}
Requires:       %{name} = %{version}-%{release}
Requires:       gmock = %{version}-%{release}
%description -n gtest-devel
This package contains development files for %{name}.

%package     -n gmock
Summary:        Google C++ Mocking Framework
Requires:       %{name} = %{version}-%{release}
%if %{toolchain} == "gcc"
Requires:	libstdc++ >= 10.3.0
%endif
%if %{toolchain} == "gcc"
Requires:	libgcc >= 10.3.0
%endif
%description -n gmock
Inspired by jMock, EasyMock, and Hamcrest, and designed with C++s
specifics in mind, Google C++ Mocking Framework (or Google Mock for
short) is a library for writing and using C++ mock classes.

Google Mock:

 o lets you create mock classes trivially using simple macros,
 o supports a rich set of matchers and actions,
 o handles unordered, partially ordered, or completely ordered
   expectations,
 o is extensible by users, and
 o works on Linux, Mac OS X, Windows, Windows Mobile, minGW, and
   Symbian.

%package     -n gmock-devel
Summary:        Development files for gmock
Requires:       gmock = %{version}-%{release}
Requires:       gtest = %{version}-%{release}
%description -n gmock-devel
This package contains development files for gmock.

%prep
%setup -n googletest-%{version}
%patch1 -p1

rm -rf   /tmp/%{name}-%{version}-32bit
cp -pr . /tmp/%{name}-%{version}-32bit
rm -fr *
mv       /tmp/%{name}-%{version}-32bit 32bit
cp -pr 32bit 64bit

%build
#64bit Build
cd 64bit
export OBJECT_MODE=64
export CC="%{__cc__} "
export CFLAGS=" -maix64 -pthread  -I/opt/freeware/include -fPIC -O2 -I/usr/include"
export CXX="%{__cxx__} "
export CXXFLAGS=" -maix64 -pthread  -I/opt/freeware/include -fPIC -O2 -I/usr/include"
export LDFLAGS="-Wl,-bbigtoc"

cmake . -B build -DBUILD_SHARED_LIBS=ON \
      	-Dgtest_build_samples=ON \
       	-Dgtest_build_tests=ON \
       	-DCMAKE_INSTALL_LIBDIR=lib64 \
        -DCMAKE_AIX_SHARED_LIBRARY_ARCHIVE=ON \
	-DCMAKE_INSTALL_PREFIX=%{_prefix} 

cmake --build build -j 4

#32bit Build
cd ../32bit
export OBJECT_MODE=32
export CC="%{__cc__} "
export CFLAGS="-maix32 -pthread -I/opt/freeware/include -fPIC -O2 -I/usr/include"
export CXX="%{__cxx__} "
export CXXFLAGS="-maix32 -pthread -I/opt/freeware/include -fPIC -O2 -I/usr/include"
export LDFLAGS="-Wl,-bbigtoc -Wl,-bmaxdata:0x80000000"

cmake . -B build -DBUILD_SHARED_LIBS=ON \
        -Dgtest_build_samples=ON \
        -Dgtest_build_tests=ON \
        -DCMAKE_INSTALL_LIBDIR=lib \
        -DCMAKE_AIX_SHARED_LIBRARY_ARCHIVE=ON \
        -DCMAKE_INSTALL_PREFIX=%{_prefix}

cmake --build build -j 4

%install
cd 64bit
export DESTDIR=$RPM_BUILD_ROOT
cmake  --install build

cd ../32bit
export DESTDIR=$RPM_BUILD_ROOT
cmake  --install build

#archive 64bit libs into 32bit archives.
cd %{buildroot}%{_libdir64}/
GTEST_LIBS="libgtest libgtest_main libgmock libgmock_main"
for file in $GTEST_LIBS
do
	/usr/bin/ar -X64 -xv $file.a
	/usr/bin/ar -X64 -q %{buildroot}%{_libdir}/$file.a  $file.so.%{soversion}
done
cd -

#archives previous release so
cd ${RPM_BUILD_ROOT}%{_libdir}
GTEST_VERSION="1.14.0"
cp %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} .
cp %{SOURCE100} %{SOURCE101} %{SOURCE102} %{SOURCE103} .
for file in $GTEST_LIBS
do
    
	cp $file.so.$GTEST_VERSION-aix64 $file.so.$GTEST_VERSION
	/usr/bin/strip -X64 -e $file.so.$GTEST_VERSION
	/usr/bin/ar -X64 -q $file.a $file.so.$GTEST_VERSION
    rm $file.so.$GTEST_VERSION
	cp $file.so.$GTEST_VERSION-aix32 $file.so.$GTEST_VERSION
	/usr/bin/strip -X32 -e $file.so.$GTEST_VERSION
	/usr/bin/ar -X32 -q $file.a $file.so.$GTEST_VERSION
done

#create link for 64bit lib which refers to 32bit shared archives
cd $RPM_BUILD_ROOT%{_prefix}/lib64
for file in $GTEST_LIBS
do 
    rm $file.a
    ln -s ../lib/$file.a $file.a
done

%check
cd 64bit/build
ctest || true
cd ../../32bit/build
ctest || true

%files
%doc 64bit/CONTRIBUTORS 64bit/README.md 64bit/LICENSE
%{_libdir64}/libgtest.a
%{_libdir64}/libgtest_main.a
%{_libdir}/libgtest.a
%{_libdir}/libgtest_main.a

%files -n gtest-devel
%doc 64bit/docs/
%doc 64bit/googletest/samples
%{_includedir}/gtest/
%{_libdir64}/pkgconfig/gtest.pc
%{_libdir64}/pkgconfig/gtest_main.pc
%{_libdir64}/cmake/GTest/
%{_libdir}/pkgconfig/gtest.pc
%{_libdir}/pkgconfig/gtest_main.pc
%{_libdir}/cmake/GTest/

%files -n gmock
%{_libdir64}/libgmock.a
%{_libdir64}/libgmock_main.a
%{_libdir}/libgmock.a
%{_libdir}/libgmock_main.a

%files -n gmock-devel
%doc 64bit/docs/
%{_includedir}/gmock/
%{_libdir64}/pkgconfig/gmock.pc
%{_libdir64}/pkgconfig/gmock_main.pc
%{_libdir}/pkgconfig/gmock.pc
%{_libdir}/pkgconfig/gmock_main.pc


%changelog
* Wed Aug 21 2024 Ranjit Ranjan <ranjit.ranjan@ibm.com> - 1.15.2-1 
- Update to version 1.15.2

* Tue Aug 22 2023 Ranjit Ranjan <ranjit.ranjan@ibm.com> - 1.14.0-1
- Port on AIX.
