diff --git a/0003-Scl-utils-layout-patch-from-fedora-famillecollet.com.patch b/0003-Scl-utils-layout-patch-from-fedora-famillecollet.com.patch new file mode 100644 index 0000000..68f0615 --- /dev/null +++ b/0003-Scl-utils-layout-patch-from-fedora-famillecollet.com.patch @@ -0,0 +1,31 @@ +From c0315dd54bc94c2acf4e4dcf0a72ca42a1cfde60 Mon Sep 17 00:00:00 2001 +From: Lubos Kardos +Date: Wed, 9 Mar 2016 16:11:56 +0100 +Subject: [PATCH] Scl utils layout patch from fedora@famillecollet.com + (#1198693) + +--- + rpm/macros.scl | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/rpm/macros.scl b/rpm/macros.scl +index 1246fde..41c6be4 100644 +--- a/rpm/macros.scl ++++ b/rpm/macros.scl +@@ -69,10 +69,13 @@ package or when debugging this package. + %global _datadir %{_prefix}/share + %global _sysconfdir %{_scl_root}/etc + %{?nfsmountable: %global _sysconfdir %{_root_sysconfdir}%{_scl_prefix}/scls/%{scl}} ++%{?rh_layout: %global _sysconfdir %{_root_sysconfdir}%{_scl_prefix}/%{scl}} + %global _sharedstatedir %{_scl_root}/var/lib + %{?nfsmountable: %global _sharedstatedir %{_root_localstatedir}%{_scl_prefix}/scls/%{scl}/lib} ++%{?rh_layout: %global _sharedstatedir %{_root_localstatedir}%{_scl_prefix}/%{scl}/lib} + %global _localstatedir %{_scl_root}/var + %{?nfsmountable: %global _localstatedir %{_root_localstatedir}%{_scl_prefix}/scls/%{scl}} ++%{?rh_layout: %global _localstatedir %{_root_localstatedir}%{_scl_prefix}/%{scl}} + %global _libdir %{_exec_prefix}/%{_lib} + %global _includedir %{_prefix}/include + %global _infodir %{_datadir}/info +-- +1.9.3 + diff --git a/macros.scl-filesystem b/macros.scl-filesystem new file mode 100644 index 0000000..b64cba6 --- /dev/null +++ b/macros.scl-filesystem @@ -0,0 +1,342 @@ +%scl_files %{expand: +%defattr(-,root,root,-) +%dir %_scl_prefix +%dir %attr(555,root,root) %{_scl_root} +%dir %attr(555,root,root) %{_scl_scripts} +%{_scl_scripts}/enable +%{_root_sysconfdir}/scl/prefixes/%scl +%{_scl_root}/bin +%attr(555,root,root) %{_scl_root}/boot +%{_scl_root}/dev +%dir %{_sysconfdir} +%{_sysconfdir}/X11 +%{_sysconfdir}/xdg +%{_sysconfdir}/opt +%{_sysconfdir}/pm +%{_sysconfdir}/xinetd.d +%{_sysconfdir}/skel +%{_sysconfdir}/sysconfig +%{_sysconfdir}/pki +%{_scl_root}/home +%{_scl_root}/lib +%ifarch x86_64 ppc ppc64 ppc64le aarch64 sparc sparc64 s390 s390x +%{_scl_root}/%{_lib} +%endif +%{_scl_root}/media +%dir %{_scl_root}/mnt +%dir %{_scl_root}/opt +%attr(555,root,root) %{_scl_root}/proc +%attr(550,root,root) %{_scl_root}/root +%{_scl_root}/run +%{_scl_root}/sbin +%{_scl_root}/srv +%{_scl_root}/sys +%attr(1777,root,root) %{_scl_root}/tmp +%dir %{_scl_root}/usr +%attr(555,root,root) %{_scl_root}/usr/bin +%{_scl_root}/usr/etc +%{_scl_root}/usr/games +%{_scl_root}/usr/include +%dir %attr(555,root,root) %{_scl_root}/usr/lib +%ifarch x86_64 ppc ppc64 ppc64le aarch64 sparc sparc64 s390 s390x +%attr(555,root,root) %{_scl_root}/usr/%{_lib} +%endif +%{_scl_root}/usr/libexec +%{_scl_root}/usr/local +%attr(555,root,root) %{_scl_root}/usr/sbin +%dir %{_scl_root}/usr/share +%{_scl_root}/usr/share/aclocal +%{_scl_root}/usr/share/applications +%{_scl_root}/usr/share/augeas +%{_scl_root}/usr/share/backgrounds +%{_scl_root}/usr/share/desktop-directories +%{_scl_root}/usr/share/dict +%{_scl_root}/usr/share/doc +%attr(555,root,root) %dir %{_scl_root}/usr/share/empty +%{_scl_root}/usr/share/games +%{_scl_root}/usr/share/ghostscript +%{_scl_root}/usr/share/gnome +%{_scl_root}/usr/share/icons +%{_scl_root}/usr/share/idl +%{_scl_root}/usr/share/info +%dir %{_scl_root}/usr/share/licenses +%dir %{_scl_root}/usr/share/locale +%dir %{_scl_root}/usr/share/man +%{_scl_root}/usr/share/mime-info +%{_scl_root}/usr/share/misc +%{_scl_root}/usr/share/omf +%{_scl_root}/usr/share/pixmaps +%{_scl_root}/usr/share/sounds +%{_scl_root}/usr/share/themes +%{_scl_root}/usr/share/xsessions +%{_scl_root}/usr/share/X11 +%{_scl_root}/usr/src +%{_scl_root}/usr/tmp +%dir %{_localstatedir} +%{_localstatedir}/adm +%{_localstatedir}/cache +%{_localstatedir}/db +%{_localstatedir}/empty +%{_localstatedir}/games +%{_localstatedir}/gopher +%{_localstatedir}/lib +%{_localstatedir}/local +%ghost %dir %attr(755,root,root) %{_localstatedir}/lock +%ghost %{_localstatedir}/lock/subsys +%{_localstatedir}/log +%{_localstatedir}/mail +%{_localstatedir}/nis +%{_localstatedir}/opt +%{_localstatedir}/preserve +%ghost %attr(755,root,root) %{_localstatedir}/run +%dir %{_localstatedir}/spool +%attr(755,root,root) %{_localstatedir}/spool/lpd +%attr(775,root,mail) %{_localstatedir}/spool/mail +%attr(1777,root,root) %{_localstatedir}/tmp +%{_localstatedir}/yp +} + +%scl_install %{expand: +# scl specific stuff +mkdir -p %{buildroot}%{_root_sysconfdir}/{rpm,scl/{prefixes,modulefiles}} +cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl}-config << EOF +%%%%scl %scl +%{?nfsmountable:%%%%nfsmountable %{nfsmountable}} +%{?rh_layout:%%%%rh_layout %{rh_layout}} +EOF +cat >> %{buildroot}%{_root_sysconfdir}/scl/prefixes/%{scl} << EOF +%_scl_prefix +EOF +test -e %{buildroot}%{_scl_scripts}/%{scl} && ln -s %{_scl_scripts}/%{scl} %{buildroot}%{_root_sysconfdir}/scl/modulefiles/%{scl} +# filelist +set +x +cat >> %{buildroot}/lang-exceptions << EOF +af_ZA +am_ET +ast_ES +az_IR +bg_BG +bn_IN +ca@valencia +ca_ES +ca_ES@valencian +cs_CZ +de_AT +de_CH +de_DE +default +el_GR +en_AU +en_CA +en_GB +en_US +en_NZ +es_AR +es_CL +es_CO +es_CR +es_DO +es_EC +es_ES +es_GT +es_HN +es_MX +es_NI +es_PA +es_PE +es_PR +es_SV +es_UY +es_VE +et_EE +eu_ES +fa_IR +fi_FI +fr_BE +fr_CA +fr_CH +fr_FR +gl_ES +he_IL +hr_HR +hu_HU +it_CH +it_IT +ja_JP +ko_KR +ks@devanagari +lv_LV +ms_MY +my_MM +nb_NO +nds_DE +nl_BE +nl_NL +pl_PL +pt_BR +pt_PT +ru_RU +sl_SI +sq_AL +sr_RS +sv_SE +uk_UA +ur_PK +zh_CN +zh_CN.GB2312 +zh_HK +zh_TW +zh_TW.Big5 +en@boldquot +en@quot +nds@NFE +sr@ije +sr@ijekavian +sr@ijekavianlatin +sr@latin +sr@Latn +uz@cyrillic +uz@Latn +be@latin +en@shaw +brx +brx_IN +EOF +cat >> %{buildroot}/iso_639.sed << EOF +1,/\\)!{ + x + s/^$// + # we are on the first iso-code--nothing to process here + t + # process and write to output + s/\\s\\+/ /g + s/!! + # use '%' as a separator of parsed and unparsed input + s/\\(.*\\)iso_639_2T_code="\\([^"]\\+\\)"\\(.*\\)/\\2 % \\1 \\3/ + s/\\([^%]\\+\\)%\\(.*\\)iso_639_2B_code="\\([^"]\\+\\)"\\(.*\\)/\\1\\t\\3 % \\2 \\4/ + # clear subst. memory for the next t + t clear + :clear + s/\\([^%]\\+\\)%\\(.*\\)iso_639_1_code="\\([^"]\\+\\)"\\(.*\\)/\\1\\t\\3 % \\2 \\4/ + t name + # no 639-1 code--write xx + s/%/\\tXX %/ + :name + s/\\([^%]\\+\\)%\\(.*\\)name="\\([^"]\\+\\)"\\(.*\\)/\\1\\t\\3/ + s/ \\t/\\t/g + p + b + :noout +} +H +EOF +cat >> %{buildroot}/iso_3166.sed << EOF +1,/\\)!{ + x + s/^$// + # we are on the first iso-code--nothing to process here + t + # process and write to output + s/\\s\\+/ /g + s/!! + # use '%' as a separator of parsed and unparsed input + s/\\(.*\\)alpha_2_code="\\([^"]\\+\\)"\\(.*\\)/\\2 % \\1 \\3/ + s/\\([^%]\\+\\)%\\(.*\\)alpha_3_code="\\([^"]\\+\\)"\\(.*\\)/\\1% \\2 \\4/ + # clear subst. memory for the next t + t clear + :clear + s/\\([^%]\\+\\)%\\(.*\\)numeric_code="\\([^"]\\+\\)"\\(.*\\)/\\1% \\2 \\4/ + t name + # no 3166 code--write xx + s/%/\\tXX %/ + :name + s/\\([^%]\\+\\)%\\(.*\\)name="\\([^"]\\+\\)"\\(.*\\)/\\1\\t\\3/ + s/ \\t/\\t/g + p + b + :noout +} +H +EOF +mkdir -p %{buildroot}%{_localstatedir} +pushd %{buildroot}%{_localstatedir} +mkdir -p {adm,empty,gopher,lib/{games,misc,rpm-state},local,lock/subsys,log,nis,preserve,run,spool/{mail,lpd,uucp},tmp,db,cache,opt,games,yp} +popd +mkdir -p %{buildroot}%{_sysconfdir} +pushd %{buildroot}%{_sysconfdir} +mkdir -p {X11/{applnk,fontpath.d},xdg/autostart,opt,pm/{config.d,power.d,sleep.d},xinetd.d,skel,sysconfig,pki} +popd +mkdir -p %{buildroot}%{_scl_root} +rm -f $RPM_BUILD_DIR/%{buildsubdir}/filelist +rm -f $RPM_BUILD_DIR/%{buildsubdir}/filesystem +pushd %{buildroot}%{_scl_root} +mkdir -p boot dev \\ + home media mnt opt proc root run/lock srv sys tmp \\ + usr/{bin,etc,games,include,lib/{games,locale,modules,sse2},libexec,local/{bin,etc,games,lib,sbin,src,share/{applications,man/man{1,2,3,4,5,6,7,8,9,n,1x,2x,3x,4x,5x,6x,7x,8x,9x},info},libexec,include,},sbin,share/{aclocal,applications,augeas/lenses,backgrounds,desktop-directories,dict,doc,empty,games,ghostscript/conf.d,gnome,icons,idl,info,licenses,man/man{1,2,3,4,5,6,7,8,9,n,1x,2x,3x,4x,5x,6x,7x,8x,9x,0p,1p,3p},mime-info,misc,omf,pixmaps,sounds,themes,xsessions,X11},src,src/kernels,src/debug} +%ifarch x86_64 ppc ppc64 ppc64le aarch64 sparc sparc64 s390 s390x +mkdir -p usr/{%{_lib}/{games,sse2,tls,X11,pm-utils/{module.d,power.d,sleep.d}},local/%{_lib}} +%endif +ln -snf %{_localstatedir}/tmp usr/tmp +ln -snf spool/mail %{buildroot}%{_localstatedir}/mail +ln -snf usr/bin bin +ln -snf usr/sbin sbin +ln -snf usr/lib lib +%ifarch x86_64 ppc ppc64 ppc64le aarch64 sparc sparc64 s390 s390x +ln -snf usr/%{_lib} %{_lib} +%endif +sed -n -f %{buildroot}/iso_639.sed /usr/share/xml/iso-codes/iso_639.xml >%{buildroot}/iso_639.tab +sed -n -f %{buildroot}/iso_3166.sed /usr/share/xml/iso-codes/iso_3166.xml >%{buildroot}/iso_3166.tab +grep -av "^$" %{buildroot}/iso_639.tab | grep -av "^#" | while read a b c d ; do + [[ "$d" =~ "^Reserved" ]] && continue + [[ "$d" =~ "^No linguistic" ]] && continue + locale=$c + if [ "$locale" = "XX" ]; then + locale=$b + fi + echo "%lang(${locale}) %{_scl_root}/usr/share/locale/${locale}" >> $RPM_BUILD_DIR/%{buildsubdir}/filelist + echo "%lang(${locale}) %ghost %config(missingok) %{_scl_root}/usr/share/man/${locale}" >> $RPM_BUILD_DIR/%{buildsubdir}/filelist +done +cat %{buildroot}/lang-exceptions | grep -v "^#" | grep -v "^$" | while read loc ; do + locale=$loc + locality= + special= + [[ "$locale" =~ "@" ]] && locale=${locale%%%%@*} + [[ "$locale" =~ "_" ]] && locality=${locale##*_} + [[ "$locality" =~ "." ]] && locality=${locality%%%%.*} + [[ "$loc" =~ "_" ]] || [[ "$loc" =~ "@" ]] || special=$loc + # If the locality is not official, skip it + if [ -n "$locality" ]; then + grep -q "^$locality" %{buildroot}/iso_3166.tab || continue + fi + # If the locale is not official and not special, skip it + if [ -z "$special" ]; then + egrep -q "[[:space:]]${locale%%_*}[[:space:]]" \\ + %{buildroot}/iso_639.tab || continue + fi + echo "%lang(${locale}) %{_scl_root}/usr/share/locale/${loc}" >> $RPM_BUILD_DIR/%{buildsubdir}/filelist + echo "%lang(${locale}) %ghost %config(missingok) %{_scl_root}/usr/share/man/${loc}" >> $RPM_BUILD_DIR/%{buildsubdir}/filelist +done +rm -f %{buildroot}/iso_639.tab +rm -f %{buildroot}/iso_639.sed +rm -f %{buildroot}/iso_3166.tab +rm -f %{buildroot}/iso_3166.sed +rm -f %{buildroot}/lang-exceptions +cat $RPM_BUILD_DIR/%{buildsubdir}/filelist | grep "locale" | while read a b ; do + mkdir -p -m 755 %{buildroot}/$b/LC_MESSAGES +done +cat $RPM_BUILD_DIR/%{buildsubdir}/filelist | grep "/share/man" | while read a b c d; do + mkdir -p -m 755 %{buildroot}/$d/man{1,2,3,4,5,6,7,8,9,n,1x,2x,3x,4x,5x,6x,7x,8x,9x,0p,1p,3p} +done +for i in man{1,2,3,4,5,6,7,8,9,n,1x,2x,3x,4x,5x,6x,7x,8x,9x,0p,1p,3p}; do + echo "%{_scl_root}/usr/share/man/$i" >> $RPM_BUILD_DIR/%{buildsubdir}/filelist +done +ln -s $RPM_BUILD_DIR/%{buildsubdir}/filelist $RPM_BUILD_DIR/%{buildsubdir}/filesystem +set -x +popd +} diff --git a/scl-utils-2.0.2-rhbz-1728450.patch b/scl-utils-2.0.2-rhbz-1728450.patch new file mode 100644 index 0000000..0013b0b --- /dev/null +++ b/scl-utils-2.0.2-rhbz-1728450.patch @@ -0,0 +1,54 @@ +From 3538686a21279c60c916e82ece02efcd88ae95b9 Mon Sep 17 00:00:00 2001 +From: Joe Orton +Date: Thu, 8 Aug 2019 09:26:00 +0100 +Subject: [PATCH] Fix crashes in "scl list-enabled": + +* src/lib_common.c (merge_string_arrays): + Ensure elements of returned array are strdup()ed. + +* src/scllib.c (get_enabled_collections): + Ensure all elements of returned array are strdup()ed. + +Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1728450 +--- + src/lib_common.c | 5 +++++ + src/scllib.c | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/lib_common.c b/src/lib_common.c +index 1aa49a0..2e7d116 100644 +--- a/src/lib_common.c ++++ b/src/lib_common.c +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + + #include "errors.h" + #include "scllib.h" +@@ -269,6 +270,10 @@ char **merge_string_arrays(char *const *array1, char *const *array2) + } + merged_array[++prev] = NULL; + ++ for (int i = 0; i < prev; i++) { ++ merged_array[i] = xstrdup(merged_array[i]); ++ } ++ + return merged_array; + } + +diff --git a/src/scllib.c b/src/scllib.c +index ce8df90..3c32d65 100644 +--- a/src/scllib.c ++++ b/src/scllib.c +@@ -107,8 +107,8 @@ scl_rc get_enabled_collections(char ***_enabled_collections) + sizeof(SCL_MODULES_PATH - 1))){ + + enabled_collections[i] += sizeof(SCL_MODULES_PATH); +- enabled_collections[i] = xstrdup(enabled_collections[i]); + } ++ enabled_collections[i] = xstrdup(enabled_collections[i]); + } + + } diff --git a/scl-utils-2.0.2.tar.gz b/scl-utils-2.0.2.tar.gz new file mode 100644 index 0000000..863070b Binary files /dev/null and b/scl-utils-2.0.2.tar.gz differ diff --git a/scl-utils.spec b/scl-utils.spec new file mode 100644 index 0000000..33b6c41 --- /dev/null +++ b/scl-utils.spec @@ -0,0 +1,73 @@ +%global __cmake_in_source_build 1 +%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) +Name: scl-utils +Epoch: 1 +Version: 2.0.2 +Release: 1 +Summary: Utilities for alternative packaging +License: GPLv2+ +URL: https://github.com/sclorg/scl-utils +Source0: https://github.com/sclorg/%{name}/archive/%{version}/%{name}-%{version}.tar.gz +Source1: macros.scl-filesystem +BuildRequires: gcc make +Buildrequires: cmake +Buildrequires: rpm-devel +Requires: %{_bindir}/modulecmd +Patch1: 0003-Scl-utils-layout-patch-from-fedora-famillecollet.com.patch +Patch100: scl-utils-2.0.2-rhbz-1728450.patch +%description +Run-time utility for alternative packaging. + +%package build +Summary: RPM build macros for alternative packaging +Requires: iso-codes redhat-rpm-config +%description build +Essential RPM build macros for alternative packaging. + +%prep +%autosetup -p1 + +%build +%cmake . +make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" + +%install +rm -rf %{buildroot} +make install DESTDIR=%{buildroot} +if [ %{macrosdir} != %{_sysconfdir}/rpm ]; then + mkdir -p %{buildroot}%{macrosdir} + mv %{buildroot}%{_sysconfdir}/rpm/macros.scl %{buildroot}%{macrosdir} + rmdir %{buildroot}%{_sysconfdir}/rpm +fi +cat %SOURCE1 >> %{buildroot}%{macrosdir}/macros.scl +mkdir -p %{buildroot}%{_sysconfdir}/scl +cd %{buildroot}%{_sysconfdir}/scl +mkdir modulefiles +mkdir prefixes +ln -s prefixes conf + +%files +%dir %{_sysconfdir}/scl/modulefiles +%dir %{_sysconfdir}/scl/prefixes +%{_sysconfdir}/scl/conf +%{_sysconfdir}/scl/func_scl.csh +%config %{_sysconfdir}/bash_completion.d/scl +%config %{_sysconfdir}/profile.d/scl-init.sh +%config %{_sysconfdir}/profile.d/scl-init.csh +%{_bindir}/scl +%{_bindir}/scl_enabled +%{_bindir}/scl_source +%{_mandir}/man1/scl.1.gz +%doc LICENSE + +%files build +%{macrosdir}/macros.scl +%{_rpmconfigdir}/scldeps.sh +%{_rpmconfigdir}/fileattrs/scl.attr +%{_rpmconfigdir}/fileattrs/sclbuild.attr +%{_rpmconfigdir}/brp-scl-compress +%{_rpmconfigdir}/brp-scl-python-bytecompile + +%changelog +* Tue Sep 7 2021 zhengyaohui - 2.0.2-1 +- package init