-#
-# TODO: move here from FHS.spec all dirs not covered by FHS, update descs
-#
-
-%define _enable_debug_packages 0
-
+# NOTE
+# - do not use any other user/group than "root", as then we have to depend on "setup" package.
+# see the gid_xxx macros and post scriptlet
+# FIXME: verify shows changed groups of dirs changed this way
Summary: Common directories
-Summary(pl): Wspólne katalogi
+Summary(pl.UTF-8): Wspólne katalogi
Name: filesystem
-Version: 3.0
-Release: 10
+Version: 4.1
+Release: 19
License: GPL
Group: Base
-Requires: FHS >= 2.3-14.2
BuildRequires: automake
+BuildRequires: mktemp
+BuildRequires: rpm >= 4.4.9-56
+Requires: FHS >= 3.0
+Provides: browser-plugins(%{_target_base_arch})
+%ifarch %{x8664}
+Provides: browser-plugins(i386)
+%endif
+%ifarch ppc64
+Provides: browser-plugins(ppc)
+%endif
+%ifarch s390x
+Provides: browser-plugins(s390)
+%endif
+%ifarch sparc64
+Provides: browser-plugins(sparc)
+%endif
+Provides: filesystem-debuginfo = %{version}-%{release}
+Obsoletes: filesystem-debuginfo < 3.0-36
+%if "%{pld_release}" != "ac"
+Conflicts: X11-libs < 1:7.7
+%endif
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
-%description
-This package contains common directories for packages that extend
-some programs functionality, but don't require them themselves.
+# Adapter: This file does not like to be adapterized!
+
+# disable rpm generated debug package, we handle it differently here
+%define _enable_debug_packages 0
+
+%if "%{_lib}" == "lib64"
+%define with_lib64 1
+%endif
+%if "%{_lib}" == "libx32"
+%define with_libx32 1
+%define with_lib64 1
+%else
+%ifarch %{x8664}
+# x32 as additional ABI
+%define with_libx32 1
+%endif
+%endif
-%description -l pl
-Ten pakiet zawiera wspólne katalogi dla pakietów rozszerzaj±cych
-funkcjonalno¶æ programów, ale nie wymagaj±cych ich.
+# avoid rpm 4.4.9 adding rm -rf buildroot
+%define __spec_clean_body %{nil}
-%package debuginfo
-Summary: Common directories for debug information
-Summary(pl): Wspólne katalogi dla plików z informacjami dla debuggera
-Group: Development/Debug
-Requires: %{name} = %{version}-%{release}
+# directory for "privilege separation" chroot
+%define _privsepdir /usr/share/empty
+# directory for *.idl files (for CORBA implementations)
+%define _idldir /usr/share/idl
-%description debuginfo
-This package provides common directories for debug information.
+# we have to use numeric uids/groups. see comment beginning of the spec
+%define gid_logs 124
+%define gid_crontab 117
-%description debuginfo -l pl
-Ten pakiet udostêpnia wspólne katalogi dla plików z informacjami dla
-debuggera.
+%description
+This package contains common directories for packages that extend some
+programs functionality, but don't require them themselves.
+
+%description -l pl.UTF-8
+Ten pakiet zawiera wspólne katalogi dla pakietów rozszerzających
+funkcjonalność programów, ale nie wymagających ich.
%prep
+%setup -qcT
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT/etc/{sysconfig,xdg/autostart} \
- $RPM_BUILD_ROOT%{_prefix}/share/{gnome/help,icons,pixmaps,pkgconfig,sounds,themes/Default,wallpapers,wm-properties,xsessions} \
- $RPM_BUILD_ROOT%{_prefix}/lib/debug \
- $RPM_BUILD_ROOT%{_usrsrc}/debug \
- $RPM_BUILD_ROOT{%{_aclocaldir},%{_pkgconfigdir}} \
- $RPM_BUILD_ROOT/etc/X11/xinit/xinitrc.d \
- $RPM_BUILD_ROOT%{_desktopdir}/docklets \
- $RPM_BUILD_ROOT/etc/sysconfig/wmstyle
+install -d \
+ $RPM_BUILD_ROOT/{initrd,selinux} \
+ $RPM_BUILD_ROOT/etc/{NetworkManager/dispatcher.d,X11/xinit/{xinput,xinitrc}.d,certs,cron.d,default,logrotate.d,fonts/conf.d,modprobe.d,pki/{CA,tls},security,skel,sysconfig,tmpwatch,xdg/colors} \
+ $RPM_BUILD_ROOT/home/{users,services} \
+ $RPM_BUILD_ROOT/lib/{firmware,security,udev/{hwdb.d,rules.d},systemd/system} \
+ $RPM_BUILD_ROOT/usr/include/{security,X11} \
+ $RPM_BUILD_ROOT/usr/lib/{ConsoleKit/run-session.d,browser-plugins,cgi-bin,cmake,mozilla/extensions,pkcs11,pkgconfig,initrd,tmpfiles.d,binfmt.d} \
+ $RPM_BUILD_ROOT/usr/share/{appdata,augeas/lenses/tests,backgrounds,bash-completion/completions,cmake/Modules,defaults,doc/gi-doc,factory/etc/pam.d,fish/vendor_completions.d,fontconfig/conf.avail,gnome/help,mate/help,man/man{n,l},man/pl/mann,metainfo,pkgconfig,soundfonts,sounds,themes/Default,thumbnailers,vala/vapi,wallpapers,wayland-sessions,xdg-desktop-portal/portals,xsessions,zsh/site-functions} \
+ $RPM_BUILD_ROOT/usr/src/examples \
+ $RPM_BUILD_ROOT/var/lock/subsys \
+ $RPM_BUILD_ROOT/var/log/archive \
+ $RPM_BUILD_ROOT%{_aclocaldir} \
+ $RPM_BUILD_ROOT%{_fontsdir}/{{100,75}dpi,OTF,Speedo,Type1/{afm,pfm},TTF,cyrillic,local,misc} \
+ $RPM_BUILD_ROOT{%{_idldir},%{_privsepdir}} \
+ $RPM_BUILD_ROOT/boot/efi/EFI \
+ $RPM_BUILD_ROOT/etc/OpenCL/vendors
+
+# XDG Autostart specs: https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html
+install -d $RPM_BUILD_ROOT/etc/xdg/autostart
+
+# XDG Desktop Menus specs: https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html
+# (+custom AppDir hierarchy)
+install -d $RPM_BUILD_ROOT{/etc/xdg/menus/applications-merged,/usr/share/desktop-directories,%{_desktopdir}/{docklets,screensavers}}
+
+# XDG Icon Theme specs: https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
+# (top level only)
+install -d $RPM_BUILD_ROOT{%{_iconsdir},%{_pixmapsdir}}
+
+# XDG Sound Theme specs: https://specifications.freedesktop.org/sound-theme-spec/sound-theme-spec-latest.html
+# (top level only)
+install -d $RPM_BUILD_ROOT/usr/share/sounds
+
+> %{name}.lang
+install -d $RPM_BUILD_ROOT/usr/share/help/C
+
+for lang in aa aa@saaho af ak am an ang anp ar ar_TN as ast az az_IR \
+ be be@latin be@tarask bem bg bho bn bn_IN bo br brx bs byn \
+ ca ca@valencia ce chr ckb cmn crh cs csb cv cy \
+ da de de_AT de_CH doi dv dz \
+ el en en_AU en_CA en_GB en_NZ en@shaw en_US eo es \
+ es_AR es_CL es_CO es_CR es_DO es_EC es_GT es_HN es_MX es_NI es_PA es_PE es_PR es_SV es_UY es_VE \
+ et eu fa ff fi fil fo fr fr_BE fr_CA fr_CH fur fy ga gd gez gl gu gv \
+ ha he hi hne hr hsb ht hu hy ia id ig ik is it it_CH iu ja \
+ ka kab kg kk kl km kn ko kok ks ks@devanagari ku kw ky la lb lg li ln lo lt lv \
+ mai mg mhr mi mk ml mn mni mr ms mt my nan nb nds ne nl nl_BE nn nr nso oc om or \
+ pa pap pl ps pt pt_BR quz rm ro ru rw \
+ sa sat sc sd sd@devanagari se shn si sid sk sl so sq \
+ sr sr@ijekavian sr@ijekavianlatin sr@latin ss st sv sw szl \
+ ta te tg th ti tig tk tl tlh tn tpi tr ts tt tt@iqtelif \
+ ug uk ur uz uz@cyrillic ve vi wa wal wo xh yi yo zh_CN zh_HK zh_TW zu; do
+ install -d $RPM_BUILD_ROOT/usr/share/help/${lang}
+ echo "%%lang($lang) %dir /usr/share/help/${lang}" >> %{name}.lang
+done
+
+%if %{with lib64}
+install -d \
+ $RPM_BUILD_ROOT/lib64/security \
+ $RPM_BUILD_ROOT/usr/lib64/{browser-plugins,cmake,initrd,mozilla/extensions,pkcs11,pkgconfig} \
+ $RPM_BUILD_ROOT/usr/lib/debug/lib64/security
+%endif
+%if %{with libx32}
+install -d \
+ $RPM_BUILD_ROOT/libx32/security \
+ $RPM_BUILD_ROOT/usr/libx32/{browser-plugins,cmake,initrd,mozilla/extensions,pkcs11,pkgconfig} \
+ $RPM_BUILD_ROOT/usr/lib/debug/libx32/security
+%endif
-%if "%{_lib}" != "lib"
-install -d $RPM_BUILD_ROOT/usr/lib/pkgconfig
+%if "%{pld_release}" == "ac"
+rmdir $RPM_BUILD_ROOT/usr/include/X11
+# X11
+install -d $RPM_BUILD_ROOT/usr/X11R6/share
+for manp in man{1,2,3,4,5,6,7,8} ; do
+ install -d $RPM_BUILD_ROOT/usr/X11R6/man/$manp
+ for mloc in it ko pl; do
+ install -d $RPM_BUILD_ROOT/usr/X11R6/man/$mloc/$manp
+ done
+done
+install -d $RPM_BUILD_ROOT/usr/share/wm-properties
%endif
+install -d \
+ $RPM_BUILD_ROOT/usr/lib/debug/%{_lib} \
+ $RPM_BUILD_ROOT/usr/lib/debug%{_libdir} \
+ $RPM_BUILD_ROOT/usr/lib/debug/{bin,sbin} \
+ $RPM_BUILD_ROOT/usr/lib/debug/usr/{bin,sbin} \
+ $RPM_BUILD_ROOT/usr/lib/debug/lib/security \
+ $RPM_BUILD_ROOT/usr/src/debug
+
%clean
cd $RPM_BUILD_ROOT
-# %{_rpmfilename} is not expanded, so use
-# %{name}-%{version}-%{release}.%{buildarch}.rpm
-RPMFILE=%{name}-%{version}-%{release}.%{_target_cpu}.rpm
-TMPFILE=%{name}-%{version}.tmp$$
-find . | sed -e 's|^\.||g' -e 's|^$||g' | sort | grep -v $TMPFILE > $TMPFILE
+check_filesystem_dirs() {
+ RPMFILE=%{_rpmdir}/%{name}-%{version}-%{release}.%{_target_cpu}.rpm
+ TMPFILE=$(mktemp)
+ # note: we must exclude from check all existing dirs belonging to FHS
+ find | sed -e 's|^\.||g' -e '/^$/d' | LC_ALL=C sort | grep -v $TMPFILE | \
+ grep -E -v '^/(boot|etc|etc/X11|home|lib|lib64|libx32|usr|usr/include|usr/lib|usr/lib64|usr/libx32|usr/share|usr/share/doc|usr/share/man|usr/share/man/pl|usr/src|var|var/lib|var/lock|var/log)$' > $TMPFILE
-# find finds also '.', so use option -B for diff
-rpm -qpl %{_rpmdir}/$RPMFILE | grep -v '^/$' | sort | diff -uB $TMPFILE - || :
+ if rpm -qpl $RPMFILE | grep -v '^/$' | LC_ALL=C sort | diff -u $TMPFILE - ; then
+ rm -rf $RPM_BUILD_ROOT
+ else
+ echo -e "\nNot so good, some directories are not included in package\n"
+ exit 1
+ fi
+ rm -f $TMPFILE
+}
-rm -rf $RPM_BUILD_ROOT
+check_filesystem_dirs
+
+%if "%{pld_release}" != "ac"
+%pretrans -p <lua>
+-- this needs to be a dir
+if posix.stat("/usr/include/X11", "type") == "link" then
+ posix.umask("0755");
+ os.rename("/usr/include/X11", "/usr/include/X11.rpmsave")
+ posix.mkdir("/usr")
+ posix.mkdir("/usr/include")
+ posix.mkdir("/usr/include/X11")
+ oldpwd = posix.getcwd()
+ posix.chdir("/usr/include/X11.rpmsave")
+ for i,j in pairs(posix.glob("*")) do
+ os.rename(j, "/usr/include/X11/" .. j)
+ end
+ posix.chdir(oldpwd)
+end
+%endif
-%files
+%post -p <lua>
+posix.chown("/var/log/archive", 0, %{gid_logs})
+posix.chown("/etc/cron.d", 0, %{gid_crontab})
+
+%files -f %{name}.lang
%defattr(644,root,root,755)
-%dir /etc/sysconfig
+%dir /boot/efi
+%dir /boot/efi/EFI
%dir /etc/X11/xinit
%dir /etc/X11/xinit/xinitrc.d
+%dir /etc/X11/xinit/xinput.d
+%dir /etc/OpenCL
+%dir /etc/OpenCL/vendors
+%attr(751,root,root) %dir /etc/certs
+# root:crontab
+%attr(750,root,root) %dir /etc/cron.d
+%dir /etc/default
+%dir /etc/fonts
+%dir /etc/fonts/conf.d
+%dir /etc/logrotate.d
+%dir /etc/modprobe.d
+%dir /etc/pki
+%dir /etc/pki/CA
+%dir /etc/pki/tls
+%attr(751,root,root) %dir /etc/security
+%dir /etc/skel
+%dir /etc/sysconfig
+%dir /etc/tmpwatch
%dir /etc/xdg
%dir /etc/xdg/autostart
-%dir %{_pkgconfigdir}
-%if "%{_lib}" != "lib"
-%dir /usr/lib/pkgconfig
+%dir /etc/xdg/colors
+%dir /etc/xdg/menus
+%dir /etc/xdg/menus/applications-merged
+%dir /etc/NetworkManager
+%dir /etc/NetworkManager/dispatcher.d
+%dir /home/users
+%dir /home/services
+%dir /initrd
+%dir /lib/firmware
+%dir /lib/security
+%dir /lib/systemd
+%dir /lib/systemd/system
+# for library packages or other software with optional udev support not to pull udev
+%dir /lib/udev
+%dir /lib/udev/hwdb.d
+%dir /lib/udev/rules.d
+%dir /selinux
+%if "%{pld_release}" != "ac"
+%dir /usr/include/X11
%endif
-%dir %{_aclocaldir}
-%dir %{_desktopdir}/docklets
-%dir /etc/sysconfig/wmstyle
+%dir /usr/include/security
+%dir /usr/lib/ConsoleKit
+%dir /usr/lib/ConsoleKit/run-session.d
+%dir /usr/lib/binfmt.d
+%dir /usr/lib/browser-plugins
+%dir /usr/lib/cgi-bin
+%dir /usr/lib/cmake
+%dir /usr/lib/initrd
+%dir /usr/lib/mozilla
+%dir /usr/lib/mozilla/extensions
+%dir /usr/lib/pkcs11
+%dir /usr/lib/pkgconfig
+%dir /usr/lib/tmpfiles.d
+%dir /usr/share/appdata
+%dir /usr/share/augeas
+%dir /usr/share/augeas/lenses
+%dir /usr/share/augeas/lenses/tests
+%dir /usr/share/backgrounds
+%dir /usr/share/bash-completion
+%dir /usr/share/bash-completion/completions
+%dir /usr/share/cmake
+%dir /usr/share/cmake/Modules
+%dir /usr/share/defaults
+%dir /usr/share/desktop-directories
+%dir /usr/share/doc/gi-doc
+%dir /usr/share/factory
+%dir /usr/share/factory/etc
+%dir /usr/share/factory/etc/pam.d
+%dir /usr/share/fish
+%dir /usr/share/fish/vendor_completions.d
+%dir /usr/share/fontconfig
+%dir /usr/share/fontconfig/conf.avail
%dir /usr/share/gnome
%dir /usr/share/gnome/help
-%dir /usr/share/icons
-%dir /usr/share/pixmaps
+%dir /usr/share/mate
+%dir /usr/share/mate/help
+%dir /usr/share/metainfo
+%dir /usr/share/help
+%dir /usr/share/help/C
+%dir /usr/share/man/man[nl]
+%lang(pl) %dir /usr/share/man/pl/mann
%dir /usr/share/pkgconfig
+%dir /usr/share/soundfonts
%dir /usr/share/sounds
%dir /usr/share/themes
%dir /usr/share/themes/Default
+%dir /usr/share/thumbnailers
+%dir /usr/share/vala
+%dir /usr/share/vala/vapi
%dir /usr/share/wallpapers
-%dir /usr/share/wm-properties
+%dir /usr/share/wayland-sessions
+%dir /usr/share/xdg-desktop-portal
+%dir /usr/share/xdg-desktop-portal/portals
%dir /usr/share/xsessions
+%dir /usr/share/zsh
+%dir /usr/share/zsh/site-functions
+%dir /usr/src/examples
+%attr(700,root,root) %dir /var/lock/subsys
+%attr(751,root,root) %dir /var/log/archive
+%dir %{_aclocaldir}
+%dir %{_desktopdir}
+%dir %{_desktopdir}/docklets
+%dir %{_desktopdir}/screensavers
+%dir %{_iconsdir}
+%dir %{_pixmapsdir}
+%{_fontsdir}
+%dir %{_idldir}
+%dir %{_privsepdir}
+%if %{with lib64}
+%dir /lib64/security
+%dir /usr/lib64/browser-plugins
+%dir /usr/lib64/cmake
+%dir /usr/lib64/initrd
+%dir /usr/lib64/mozilla
+%dir /usr/lib64/mozilla/extensions
+%dir /usr/lib64/pkcs11
+%dir /usr/lib64/pkgconfig
+%endif
+%if %{with libx32}
+%dir /libx32/security
+%dir /usr/libx32/browser-plugins
+%dir /usr/libx32/cmake
+%dir /usr/libx32/initrd
+%dir /usr/libx32/mozilla
+%dir /usr/libx32/mozilla/extensions
+%dir /usr/libx32/pkcs11
+%dir /usr/libx32/pkgconfig
+%endif
-%files debuginfo
-%defattr(644,root,root,755)
-%dir %{_prefix}/lib/debug
-%dir %{_usrsrc}/debug
+%if "%{pld_release}" == "ac"
+%dir /usr/X11R6
+%dir /usr/X11R6/man
+/usr/X11R6/man/man*
+%lang(it) /usr/X11R6/man/it
+%lang(ko) /usr/X11R6/man/ko
+%lang(pl) /usr/X11R6/man/pl
+%dir /usr/X11R6/share
+
+%dir /usr/share/wm-properties
+%endif
+
+# debuginfo
+%dir /usr/lib/debug
+/usr/lib/debug/*
+
+%dir /usr/src/debug