]> git.ipfire.org Git - ipfire-3.x.git/blob - bash/bash.nm
845eca8da6f8f96ec323495c17253ef8e71eae41
[ipfire-3.x.git] / bash / bash.nm
1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
5
6 name = bash
7 version = 5.2.9
8 release = 2
9
10 groups = System/Tools
11 url = http://www.gnu.org/software/bash/
12 license = GPLv2+
13 summary = Bash is short for born again shell.
14
15 description
16 Bash is the shell, or command language interpreter, that will appear in
17 the GNU operating system. Bash is an sh-compatible shell that incorporates
18 useful features from the Korn shell (ksh) and C shell (csh). It is intended
19 to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard.
20 end
21
22 source_dl = https://ftp.gnu.org/gnu/bash/
23
24 build
25 requires
26 autoconf
27 automake
28 bison
29 filesystem >= 002
30 ncurses-devel
31 readline-devel >= 8.0
32 texinfo
33 end
34
35 prepare_cmds
36 # Bash uses the RTLD_LAZY option when loading libraries. We want to use
37 # RTLD_NOW (it is defined from <dlfcn.h>:
38 sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \
39 -i builtins/enable.def
40 end
41
42 CPPFLAGS += -D_GNU_SOURCE %(getconf LFS_CFLAGS)
43
44 CPPFLAGS += -DNON_INTERACTIVE_LOGIN_SHELLS
45 CPPFLAGS += -DSSH_SOURCE_BASHRC
46
47 # Recycles pids is neccessary. When bash's last fork's pid was X
48 # and new fork's pid is also X, bash has to wait for this same pid.
49 # Without Recycles pids bash will not wait.
50 CPPFLAGS += -DRECYCLES_PIDS
51
52 CPPFLAGS += \
53 -DDEFAULT_PATH_VALUE='\"/usr/local/bin:/usr/bin\"' \
54 -DSTANDARD_UTILS_PATH='\"/bin:/usr/bin:/sbin:/usr/sbin\"' \
55 -DSYS_BASH_LOGOUT='\"/etc/bash.bash_logout\"'
56
57 configure_options += \
58 --with-installed-readline \
59 --with-afs \
60 --with-bash-malloc=no
61
62 make_build_targets += CPPFLAGS="%{CPPFLAGS}"
63
64 test
65 make tests
66 end
67
68 install_cmds
69 mkdir -pv %{BUILDROOT}%{sysconfdir}/{profile.d,skel}
70 install -v -m 700 -d %{BUILDROOT}/root
71
72 # Bash startup files
73 cp -vf %{DIR_SOURCE}/dot_bash_logout %{BUILDROOT}%{sysconfdir}/skel/.bash_logout
74 cp -vf %{DIR_SOURCE}/dot_bash_profile %{BUILDROOT}%{sysconfdir}/skel/.bash_profile
75 cp -vf %{DIR_SOURCE}/dot_bashrc %{BUILDROOT}%{sysconfdir}/skel/.bashrc
76
77 cp -vf %{DIR_SOURCE}/dot_bash_logout %{BUILDROOT}/root/.bash_logout
78 cp -vf %{DIR_SOURCE}/dot_bash_profile %{BUILDROOT}/root/.bash_profile
79 cp -vf %{DIR_SOURCE}/dot_bashrc %{BUILDROOT}/root/.bashrc
80
81 # /etc/profile.d
82 cp -vf %{DIR_SOURCE}/profile.d/* %{BUILDROOT}/etc/profile.d
83
84 ln -svf bash %{BUILDROOT}%{bindir}/sh
85
86 # https://bugzilla.redhat.com/show_bug.cgi?id=820192
87 # bug #820192, need to add execable alternatives for regular built-ins
88 for f in alias bg cd command fc fg getopts jobs read umask unalias wait; do
89 (
90 echo "#!/bin/sh"
91 echo "builtin \"${f}\" \"\$@\""
92 ) > "%{BUILDROOT}/%{bindir}/${f}"
93 chmod +x "%{BUILDROOT}%{bindir}/${f}"
94 done
95
96 # Set correct permissions for binaries.
97 find %{BUILDROOT}%{bindir} -type f -executable -exec chmod 755 {} \;
98 end
99 end
100
101 packages
102 package %{name}
103 groups += Base Build
104
105 requires
106 coreutils
107 /etc/bashrc
108 /etc/profile
109 end
110
111 provides
112 /bin/bash
113 /bin/sh
114 end
115
116 conflicts
117 filesystem < 002
118 end
119
120 script posttransin
121 # Create /etc/shells, if it does not exist.
122 [ -f "/etc/shells" ] || touch /etc/shells
123
124 found_sh=0
125 found_bash=0
126 while read line; do
127 if [ "/bin/bash" = "${line}" ]; then
128 found_bash=1
129 elif [ "/bin/sh" = "${line}" ]; then
130 found_sh=1
131 fi
132 done < /etc/shells
133
134 if [ "${found_bash}" = "0" ]; then
135 echo "/bin/bash" >> /etc/shells
136 fi
137
138 if [ "${found_sh}" = "0" ]; then
139 echo "/bin/sh" >> /etc/shells
140 fi
141 end
142
143 script postun
144 [ -e "/etc/shells" ] || exit 0
145
146 # Remove /bin/bash and /bin/sh from /etc/shells.
147 while read line; do
148 if [ "/bin/bash" = "${line}" ]; then
149 continue
150 elif [ "/bin/sh" = "${line}" ]; then
151 continue
152 fi
153
154 echo "${line}"
155 done < /etc/shells > /etc/shells.$$
156
157 mv -f /etc/shells{.$$,}
158 end
159 end
160
161 package %{name}-debuginfo
162 template DEBUGINFO
163 end
164 end