
%define		_libdir64 %{_prefix}/lib64

Summary: 	GNU libraries and utilities for producing multi-lingual messages.
Name: 		gettext
Version: 	0.21
Release:        2
License: 	GPLv3 and LGPLv2+
Group: 		Development/Tools
URL: 		http://www.gnu.org/software/%{name}/
Source0:        http://ftp.gnu.org/gnu/gettext/gettext-%{version}.tar.xz
Source1:	libintl.so.1-aix32
Source2:	libintl.so.1-aix64
Source3:	libgettextlib-0.19.7.so-aix32
Source4:        libgettextlib-0.19.7.so-aix64
Source5:	libgettextsrc-0.19.7.so-aix32
Source6:	libgettextsrc-0.19.7.so-aix64
Source7:        libgettextlib-0.19.8.1.so-aix32
Source8:        libgettextlib-0.19.8.1.so-aix64
Source9:        libgettextsrc-0.19.8.1.so-aix32
Source10:       libgettextsrc-0.19.8.1.so-aix64
Source11:      libgettextlib-0.20.2.so-aix32
Source12:      libgettextlib-0.20.2.so-aix64
Source13:      libgettextsrc-0.20.2.so-aix32
Source14:      libgettextsrc-0.20.2.so-aix64

Patch0:		gettext-0.19.7-aixconf.patch

# Below patch is needed because packages like sudo_ids requires /usr/lib first in the LIBPATH
# And AIX has it's own libiconv in /usr/lib which conflicts with /opt/freeware/lib/libiconv.a
Patch1:         gettext-0.20.2-hardcode-libiconv.patch

# In 32bit with -Wl,-bmaxdata, configure programs about getline and getdelim will succeed
# even if they should and must fail. Therefore, this patch force the use of GNU provided
# getline and getdelim.
Patch2:         gettext-0.20.1-configure-force-GNU-getline-and-getdelim.patch

Patch3:		%{name}-0.21-aixAddCast.patch

Patch4:         gettext-0.21-disable-nameless-locales.patch


Requires: libiconv >= 1.16
Requires: ncurses >= 6.2
Requires: libunistring >= 0.9.9-2
Requires: libgomp >= 8.3.0
Requires: libgcc >= 8.3.0
Requires: libstdc++ >= 8.3.0

Requires: libtextstyle = %{version}-%{release}

# Below "Requires" are needed since the older libraries (libgettextsrc, libgettextlib, libintl) links to it.
# And we are shipping those libraries inside the archives for compatiblity

Requires: libxml2 >= 2.9.9
Requires: glib2 >= 2.56.1

%description
The GNU gettext package provides a set of tools and documentation for
producing multi-lingual messages in programs. Tools include a set of
conventions about how programs should be written to support message
catalogs, a directory and file naming organization for the message
catalogs, a runtime library which supports the retrieval of translated
messages, and stand-alone programs for handling the translatable and
the already translated strings. Gettext provides an easy to use
library and tools for creating, using, and modifying natural language
catalogs and is a powerful and simple method for internationalizing
programs.

The library is available as 32-bit and 64-bit.


%package devel
Summary:	Development files for %{name}
Group:		Development/Tools
License:	LGPLv2+
Requires:	%{name} = %{version}-%{release}

%description devel
This package contains all development related files necessary for
developing or compiling applications/libraries that needs
internationalization capability. You also need this package if you
want to add gettext support for your project.

%package -n libtextstyle
Summary: Text styling library
License: GPLv3+

Requires: libgcc >= 8.3.0
Requires: ncurses >= 6.2
Requires: libiconv >= 1.16

%description -n libtextstyle
Library for producing styled text to be displayed in a terminal
emulator.


%package -n libtextstyle-devel
Summary: Development files for libtextstyle
License: GPLv3+
Requires: libtextstyle = %{version}-%{release}

%description -n libtextstyle-devel
This package contains all development related files necessary for
developing or compiling applications/libraries that needs text
styling.

%prep
export PATH=/opt/freeware/bin:$PATH
%setup -q
%patch0 -p1 -b .aixconf
%patch1 -p1 -b .hardcode
%patch2 -p1
%patch3 -p1 -b .aixAddCast
%patch4 -p1 -b .nameless-locales

# Duplicate source for 32 & 64 bits
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
# setup environment for 32-bit and 64-bit builds
export CPPFLAGS="-I/opt/freeware/include"

# first build the 64-bit version
cd 64bit
export OBJECT_MODE=64
export CC="gcc -maix64 -O2"
export CXX="g++ -maix64 -O2"
export CFLAGS="-O2 -I/opt/freeware/include"
export CXXFLAGS="-O2 -I/opt/freeware/include"
export LDFLAGS="-Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib"

./configure \
    --prefix=%{_prefix} \
    --infodir=%{_infodir} \
    --libdir=%{_libdir64} \
    --mandir=%{_mandir} \
    --enable-shared --disable-static \
    --with-included-gettext \
    --with-included-libxml \
    --with-libiconv-prefix=/opt/freeware

gmake %{?_smp_mflags}

# now build the 32-bit version
cd ../32bit
export OBJECT_MODE=32
export CC="gcc -maix32"
export CXX="g++ -maix32"
export CFLAGS="-O2 -D_LARGE_FILES -I/opt/freeware/include"
export CXXFLAGS="-O2 -D_LARGE_FILES -I/opt/freeware/include"
export LDFLAGS="-Wl,-blibpath:/opt/freeware/lib:/usr/lib -Wl,-bmaxdata:0x80000000"

./configure \
    --prefix=%{_prefix} \
    --infodir=%{_infodir} \
    --libdir=%{_libdir} \
    --mandir=%{_mandir} \
    --enable-shared --disable-static \
    --with-included-gettext \
    --with-included-libxml \
    --with-libiconv-prefix=/opt/freeware

gmake %{?_smp_mflags}


%install
[ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT}

#Install on 64bit mode
export OBJECT_MODE=64
cd 64bit
make DESTDIR=${RPM_BUILD_ROOT} install

/usr/bin/strip ${RPM_BUILD_ROOT}%{_bindir}/* || :

(
    cd  ${RPM_BUILD_ROOT}%{_prefix}/bin
    for fic in $(ls -1| grep -v -e _32 -e _64)
    do
	mv $fic "$fic"_64
    done
)

#Install on 32bit mode
export OBJECT_MODE=32
cd ../32bit
make DESTDIR=${RPM_BUILD_ROOT} install

/usr/bin/strip ${RPM_BUILD_ROOT}%{_bindir}/* || :

rm -f ${RPM_BUILD_ROOT}%{_infodir}/dir
gzip --best ${RPM_BUILD_ROOT}%{_infodir}/*info*

# own this directory for third-party *.its files
mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name}/its


# doc relocations
for i in gettext-runtime/man/*.html; do
	rm ${RPM_BUILD_ROOT}%{_datadir}/doc/gettext/`basename $i`
done
rm -r ${RPM_BUILD_ROOT}%{_datadir}/doc/gettext/javadoc*

rm -rf ${RPM_BUILD_ROOT}%{_datadir}/doc/gettext/examples

rm -rf htmldoc
mkdir htmldoc
mv ${RPM_BUILD_ROOT}%{_datadir}/doc/gettext/* ${RPM_BUILD_ROOT}/%{_datadir}/doc/libasprintf/* htmldoc
rm -r ${RPM_BUILD_ROOT}%{_datadir}/doc/libasprintf
rm -r ${RPM_BUILD_ROOT}%{_datadir}/doc/gettext

mkdir -p ${RPM_BUILD_ROOT}%{_docdir}
mv ${RPM_BUILD_ROOT}%{_datadir}/doc/libtextstyle ${RPM_BUILD_ROOT}%{_docdir}

(
    cd  ${RPM_BUILD_ROOT}/%{_prefix}/bin
    for fic in $(ls -1| grep -v -e _32 -e _64)
    do
	mv $fic "$fic"_32
	ln -sf "$fic"_64 $fic
    done
)

slibclean

(
	# Remove version in archives' name. It won't allow compatibility
	cd ${RPM_BUILD_ROOT}%{_libdir}
	mv libgettextlib-%{version}.a libgettextlib.a
	mv libgettextsrc-%{version}.a libgettextsrc.a
	cd ${RPM_BUILD_ROOT}%{_libdir64}
	mv libgettextlib-%{version}.a libgettextlib.a
	mv libgettextsrc-%{version}.a libgettextsrc.a
)

# Add 64bit shared libraries inside 32bit library archives
(
    cd ${RPM_BUILD_ROOT}%{_libdir64}
    for i in libasprintf libgettextlib libgettextpo libgettextsrc libintl libtextstyle
    do 
        /usr/bin/ar -X64 -x ${i}.a
    done

    /usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libasprintf.a libasprintf.so.0
    /usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a libgettextlib-%{version}.so
    /usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextpo.a libgettextpo.so.0
    /usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a libgettextsrc-%{version}.so
    /usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libintl.a libintl.so.8
    /usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libtextstyle.a libtextstyle.so.0

    rm ${RPM_BUILD_ROOT}%{_libdir64}/lib*.so.0
    rm ${RPM_BUILD_ROOT}%{_libdir64}/lib*.so
)

#libintl 32bit
cp %{SOURCE1}                                                             libintl.so.1
/usr/bin/strip -X32 -e                                                    libintl.so.1
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libintl.a                 libintl.so.1

#libintl 64bit
cp %{SOURCE2}                                                             libintl.so.1
/usr/bin/strip -X64 -e                                                    libintl.so.1
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libintl.a                 libintl.so.1
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libintl.a               libintl.so.1

#libgettextlib 32bit
cp %{SOURCE3}                                                             libgettextlib-0.19.7.so
/usr/bin/strip -X32 -e                                                    libgettextlib-0.19.7.so
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a           libgettextlib-0.19.7.so
cp %{SOURCE7}                                                             libgettextlib-0.19.8.1.so
/usr/bin/strip -X32 -e                                                    libgettextlib-0.19.8.1.so
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a           libgettextlib-0.19.8.1.so
cp %{SOURCE11}                                                            libgettextlib-0.20.2.so
/usr/bin/strip -X32 -e                                                    libgettextlib-0.20.2.so
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a           libgettextlib-0.20.2.so


#libgettextlib 64bit
cp %{SOURCE4}                                                             libgettextlib-0.19.7.so
/usr/bin/strip -X64 -e                                                    libgettextlib-0.19.7.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a           libgettextlib-0.19.7.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libgettextlib.a         libgettextlib-0.19.7.so
cp %{SOURCE8}                                                             libgettextlib-0.19.8.1.so
/usr/bin/strip -X64 -e                                                    libgettextlib-0.19.8.1.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a           libgettextlib-0.19.8.1.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libgettextlib.a         libgettextlib-0.19.8.1.so
cp %{SOURCE12}                                                            libgettextlib-0.20.2.so
/usr/bin/strip -X64 -e                                                    libgettextlib-0.20.2.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextlib.a           libgettextlib-0.20.2.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libgettextlib.a         libgettextlib-0.20.2.so

#libgettextsrc 32bit
cp %{SOURCE5}                                                             libgettextsrc-0.19.7.so
/usr/bin/strip -X32 -e                                                    libgettextsrc-0.19.7.so
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a           libgettextsrc-0.19.7.so
cp %{SOURCE9}                                                             libgettextsrc-0.19.8.1.so
/usr/bin/strip -X32 -e                                                    libgettextsrc-0.19.8.1.so
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a           libgettextsrc-0.19.8.1.so
cp %{SOURCE13}                                                            libgettextsrc-0.20.2.so
/usr/bin/strip -X32 -e                                                    libgettextsrc-0.20.2.so
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a           libgettextsrc-0.20.2.so

#libgettextsrc 64bit
cp %{SOURCE6}                                                             libgettextsrc-0.19.7.so
/usr/bin/strip -X64 -e                                                    libgettextsrc-0.19.7.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a           libgettextsrc-0.19.7.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libgettextsrc.a         libgettextsrc-0.19.7.so
cp %{SOURCE10}                                                            libgettextsrc-0.19.8.1.so
/usr/bin/strip -X64 -e                                                    libgettextsrc-0.19.8.1.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a           libgettextsrc-0.19.8.1.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libgettextsrc.a         libgettextsrc-0.19.8.1.so
cp %{SOURCE14}                                                            libgettextsrc-0.20.2.so
/usr/bin/strip -X64 -e                                                    libgettextsrc-0.20.2.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libgettextsrc.a           libgettextsrc-0.20.2.so
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libgettextsrc.a         libgettextsrc-0.20.2.so


%check
# Run testcases for 64bit
cd 64bit
export OBJECT_MODE=64
export LIBPATH=${RPM_BUILD_ROOT}%{_libdir64}
(gmake -k check || true)

# Run testcases for 32bit
cd ../32bit
export OBJECT_MODE=32
export LIBPATH=${RPM_BUILD_ROOT}%{_libdir}
(gmake -k check || true)


%pre
if test -e %{_libdir}/libintl.a.savgettext; then
        rm -f %{_libdir}/libintl.a.savgettext
fi

%post
/sbin/install-info %{_infodir}/gettext.info.gz %{_infodir}/dir || :

%preun
if [ "$1" = 0 ]; then
    /sbin/install-info --delete %{_infodir}/gettext.info.gz %{_infodir}/dir || :
fi

%post devel
/sbin/install-info %{_infodir}/autosprintf.info.gz %{_infodir}/dir || :


%preun devel
if [ "$1" = 0 ]; then
    /sbin/install-info --delete %{_infodir}/autosprintf.info.gz %{_infodir}/dir || :
fi

%post -n libtextstyle-devel
/sbin/install-info %{_infodir}/libtextstyle.info.gz %{_infodir}/dir || :


%preun -n libtextstyle-devel
if [ "$1" = 0 ]; then
    /sbin/install-info --delete %{_infodir}/libtextstyle.info.gz %{_infodir}/dir || :
fi

%posttrans
# Reinstate the LPP rpm.rte symlink, they have probably been replaced/removed
# Get the LPP rpm.rte version first and check for rpm.rte version because
# rpm.rte >= 4.13.0.4 ships files in "/usr/opt/rpm" path and
# rpm.rte below that level ships files in "/usr/opt/freeware"

ver=$(lslpp -Lc rpm.rte | /usr/bin/awk 'FNR==2' | /usr/bin/awk -F':' '{print $3}')
f1=$(echo $ver | /usr/bin/cut -d"." -f1)
f2=$(echo $ver | /usr/bin/cut -d"." -f2)
f4=$(echo $ver | /usr/bin/cut -d"." -f4)

# 3.0.5.x, 4.9.1.3, 4.13.0.x, 4.15.1.x are the various rpm.rte levels
# It's enough to compare First, Second & Fourth fields against 4.13.0.4

if [[ ( $f1 -gt 4 ) || ( $f1 -eq 4 && ( ( $f2 -gt 13 ) || ( ( $f2 -eq 13 ) && ( $f4 -ge 4 )))) ]]; then
    LINK_PATH="/usr/opt/rpm"
else
    LINK_PATH="/usr/opt/freeware"
fi
if ! test -e /usr/lib/libintl.a && ! test -h /usr/lib/libintl.a
then
  ln -sf ${LINK_PATH}/lib/libintl.a       /usr/lib/libintl.a
fi



%clean
[ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT}


%files
%defattr(-,root,system,-)
%doc 32bit/gettext-runtime/ABOUT-NLS 32bit/AUTHORS 32bit/gettext-runtime/BUGS
%doc 32bit/COPYING 32bit/gettext-tools/misc/DISCLAIM 32bit/README
%doc 32bit/NEWS 32bit/THANKS
%doc 32bit/gettext-runtime/man/*.1.html
%doc 32bit/gettext-runtime/intl/COPYING*
%{_bindir}/envsubst*
%{_bindir}/gettext*
%{_bindir}/msgattrib*
%{_bindir}/msgcat*
%{_bindir}/msgcmp*
%{_bindir}/msgcomm*
%{_bindir}/msgconv*
%{_bindir}/msgen*
%{_bindir}/msgexec*
%{_bindir}/msgfilter*
%{_bindir}/msgfmt*
%{_bindir}/msggrep*
%{_bindir}/msginit*
%{_bindir}/msgmerge*
%{_bindir}/msgunfmt*
%{_bindir}/msguniq*
%{_bindir}/ngettext*
%{_bindir}/recode-sr-latin*
%{_bindir}/xgettext*
%exclude %{_bindir}/gettextize*

%{_libdir}/%{name}
%{_libdir}/libintl.a
%{_libdir}/libasprintf.a
%{_libdir}/libgettextpo.a
%{_libdir}/libgettextlib.a
%{_libdir}/libgettextsrc.a

%{_libdir64}/%{name}
%{_libdir64}/libintl.a
%{_libdir64}/libasprintf.a
%{_libdir64}/libgettextpo.a
%{_libdir64}/libgettextlib.a
%{_libdir64}/libgettextsrc.a

%exclude %{_mandir}/man1/autopoint.1*
%exclude %{_mandir}/man1/gettextize.1*
%{_mandir}/man1/*
%{_infodir}/gettext*

%dir %{_datadir}/%{name}
%dir %{_datadir}/%{name}/its
%{_datadir}/%{name}/ABOUT-NLS
%{_datadir}/%{name}/po
%{_datadir}/%{name}/styles
%dir %{_datadir}/%{name}-%{version}
%{_datadir}/%{name}-%{version}/its

%{_datadir}/locale/*/LC_MESSAGES/*


%files devel
%defattr(-,root,system,-)
%doc 32bit/gettext-runtime/man/*.3.html 32bit/ChangeLog
%doc 32bit/gettext-runtime/intl-java/javadoc*
%{_bindir}/autopoint*
%{_bindir}/gettextize*
%{_includedir}/autosprintf.h
%{_includedir}/gettext-po.h
%{_includedir}/libintl.h
%{_mandir}/man1/autopoint.1
%{_mandir}/man1/gettextize.1
%{_mandir}/man3/*
%{_infodir}/autosprintf*
%{_datadir}/aclocal/*
%{_datadir}/%{name}/javaversion.class
%{_datadir}/%{name}/projects/
%{_datadir}/%{name}/config.rpath
%{_datadir}/%{name}/*.h
%{_datadir}/%{name}/msgunfmt.tcl
%{_datadir}/%{name}/archive.*.tar.xz

%files -n libtextstyle
%defattr(-,root,system,-)
%{_libdir}/libtextstyle.a
%{_libdir64}/libtextstyle.a

%files -n libtextstyle-devel
%defattr(-,root,system,-)
%{_docdir}/libtextstyle/
%{_includedir}/textstyle/
%{_includedir}/textstyle.h
%{_infodir}/libtextstyle*

%changelog
* Wed Oct 19  2022 Ayappan P <ayappap2@in.ibm.com> - 0.21-2
- Disable nameless locales

* Wed Apr 06 2022 Reshma V Kumar < reskumar@in.ibm.com> - 0.21-1
- Update to latest version

* Mon Mar 14 2022 Reshma V Kumar < reskumar@in.ibm.com> - 0.20.2-2
- Rebuild without gettext-0.20.2-missing-locale_t-aix.patch

* Fri Oct 09 2020 Ayappan P <ayappap2@in.ibm.com> - 0.20.2-1
- Update to 0.20.2
- Stop shipping files from /usr
- Patches from bull gettext
- Add posttrans script for /usr/lib/libintl.a

* Tue Jan 14 2020 Ayappan P <ayappap2@in.ibm.com> - 0.19.8.1-5
- Hardcode GNU libiconv in library search path 

* Wed Nov 19 2019 Ayappan P <ayappap2@in.ibm.com> - 0.19.8.1-4
- Link with GNU libiconv and remove .la files

* Wed Nov 21 2018 Ayappan P <ayappap2@in.ibm.com> 0.19.8.1-3
- Include the .la files needed for other packages build

* Fri Nov 02 2018 Ayappan P <ayappap2@in.ibm.com> 0.19.8.1-2
- Fix the overwriting of libintl.a by older version 0.19.7

* Tue Jun 20 2017 Reshma V Kumar <reskumar@in.ibm.com> 0.19.8.1-1
- Update to version 0.19.8.1

* Mon May 30 2016 Ayappan P <ayappap2@in.ibm.com> 0.19.7-1
- Update to version 0.19.7

* Wed Sep 11 2013 Gerard Visiedo <gerard.visiedo@bull.net> 0.18.3.1-1
- Update to version 0.18.3.1

* Mon Jan 30 2012 Patricia Cugny <patricia.cugny@bull.net> 0.17-7
- Add patch for building on aix 6.1

* Wed Aug 31 2011 Patricia Cugny <patricia.cugny@bull.net> 0.17-6
- Add installed libintl.so.1 to libintl.a lib

* Wed May 04 2011 Patricia Cugny <patricia.cugny@bull.net> 0.17-5
- Add 64bits library and older libintl.so.1

* Mon Mar 14 2011 Gerard Visiedo <gerard.visiedo@bull.net> 0.17-4
- Add patches for workaround bugs on aix6

* Thu Jan 27 2011 Jean-noel Cordenner <jean-noel.cordenner@bull.net> 0.17-3
- add missing files

* Thu Apr 23 2009 Jean-noel Cordenner <jean-noel.cordenner@bull.net> 0.17-2
- add %pre and %postun scripts to preserve previous version of libintl.a

* Wed Mar 18 2009 Jean-noel Cordenner <jean-noel.cordenner@bull.net> 0.17
- port to AIX
