3 # import-gnulib.sh -- imports a copy of gnulib into findutils
4 # Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc.
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 ##########################################################################
21 # This script is intended to populate the "gnulib" directory
22 # with a subset of the gnulib code, as provided by "gnulib-tool".
24 # To use it, just run this script with the top-level sourec directory
25 # as your working directory.
27 # If CDPATH is set, it will sometimes print the name of the directory
28 # to which you have moved. Unsetting CDPATH prevents this, as does
29 # prefixing it with ".".
33 # cvsdir=/doesnotexist
34 configfile
="./import-gnulib.config"
38 # Remember arguments for comments we inject into output files
39 original_cmd_line_args
="$@"
43 usage: $0 [-d gnulib-directory]
45 The default behaviour is to check out the Gnulib code via anonymous
46 CVS (or update it if there is a version already checked out). The
47 checkout or update is performed to the gnulib version indicated in
48 the configuration file $configfile.
50 If you wish to work with a different version of gnulib, use the -d option
51 to specify the directory containing the gnulib code.
58 echo checking out gnulib from CVS
in $cvsdir
60 if [ -z "$gnulib_version" ] ; then
61 echo "Error: There should be a gnulib_version setting in $configfile, but there is not." >&2
66 if ! [ -d "$cvsdir" ] ; then
67 if mkdir
"$cvsdir" ; then
68 echo "Created $cvsdir"
70 echo "Failed to create $cvsdir" >&2
75 # Decide if gnulib_version is probably a date or probably a tag.
76 if date -d yesterday
>/dev
/null
; then
77 # It looks like GNU date is available
78 if date -d "$gnulib_version" >/dev
/null
; then
80 cvs_sticky_option
="-D"
82 echo "Warning: assuming $gnulib_version is a CVS tag rather than a date" >&2
83 cvs_sticky_option
="-r"
86 # GNU date unavailable, assume the version is a date
87 cvs_sticky_option
="-D"
93 # Change directory unconditionally (rater than using checkout
94 # -d) so that cvs does not pick up defaults from ./CVS. Those
95 # defaults refer to our own CVS repository for our code, not
98 if test -d gnulib
/CVS
; then
101 root
="" # use previous
103 root
="-d :pserver:anonymous@cvs.sv.gnu.org:/sources/gnulib"
108 cvs
-q -z3 $root $cmd $cvs_sticky_option "$gnulib_version" $args
119 echo "$tool does not exist, did you specify the right directory?" >&2
127 echo "$tool is not executable" >&2
134 echo "Warning: directory gnulib already exists." >&2
140 if "$tool" --import --symlink --with-tests --dir=.
--lib=libgnulib
--source-base=gnulib
/lib
--m4-base=gnulib
/m4 $modules
145 echo "$tool failed, exiting." >&2
149 # gnulib-tool does not remove broken symlinks leftover from previous runs;
150 # this assumes GNU find, but should be a safe no-op if it is not
151 find -L gnulib
-lname '*' -delete 2>/dev
/null ||
:
155 echo "Updating the license of $1"
156 # Use cp to get the permissions right first
159 's/Free Software Foundation\([;,]\) either version [2]/Free Software Foundation\1 either version 3/' < "$1" > "$1".new
160 if cmp "$1" "$1".new
>/dev
/null
164 rm -f "$1" && mv "$1".new
"$1"
176 dst
="$dst"/"$(basename $src)"
178 cp -fp "$src" "$dst" && rehack
"$dst"
184 for f
in $gpl3_update_files
192 hack_gnulib_tool_output
() {
193 local gnulibdir
="${1}"
194 for file in $extra_files; do
196 */mdate-sh |
*/texinfo.tex
) dest
=doc
;;
199 copyhack
"${gnulibdir}"/"$file" "$dest" ||
exit
205 cat > gnulib
/Makefile.am
<<EOF
206 # Copyright (C) 2004 Free Software Foundation, Inc.
208 # This file is free software, distributed under the terms of the GNU
209 # General Public License. As a special exception to the GNU General
210 # Public License, this file may be distributed as part of a program
211 # that contains a configuration script generated by Automake, under
212 # the same distribution terms as the rest of that program.
214 # This file was generated by $0 $original_cmd_line_args.
221 refresh_output_files
() {
222 aclocal
-I m4 -I gnulib
/m4 &&
225 automake
--add-missing --copy
229 update_version_file
() {
231 outfile
="lib/gnulib-version.c"
232 if [ -z "$gnulib_version" ] ; then
233 ver
="unknown (locally modified code; no version number available)"
235 ver
="$gnulib_version"
239 cat > "${outfile}".new
<<EOF
240 /* This file is automatically generated by $0 and simply records which version of gnulib we used. */
241 const char * const gnulib_version = "$ver";
243 if test -f "$outfile" ; then
244 if diff "${outfile}".new
"${outfile}" > /dev
/null
; then
249 mv "${outfile}".new
"${outfile}"
255 local gnulibdir
=/doesnotexist
256 while getopts "d:a" opt
259 d
) gnulibdir
="$OPTARG" ; need_checkout
=no
;;
260 a
) refresh_output_files
&& update_licenses
; exit $?
;;
265 # We need the config file to tell us which modules
266 # to use, even if we don't want to know the CVS version.
267 .
$configfile ||
exit 1
269 ## If -d was not given, do CVS checkout/update
270 if [ $need_checkout = yes ] ; then
271 do_checkout gnulib-cvs
272 gnulibdir
=gnulib-cvs
/gnulib
274 echo "Warning: using gnulib code which already exists in $gnulibdir" >&2
277 ## Invoke gnulib-tool to import the code.
278 local tool
="${gnulibdir}"/gnulib-tool
280 if run_gnulib_tool
"${tool}" &&
281 hack_gnulib_tool_output
"${gnulibdir}" &&
282 refresh_output_files
&&
284 update_version_file
; then