2007-06-30 James Youngman Support GPL v3 in a way which is convenient for apps which treat gnulib files as generated source files. * gnulib-tool: New option, --gpl3, which transforms licenses from GPL 2 to GPL 3 when importing. * doc/gnulib-intro.texi (Copyright): Document it. * doc/gnulib-tool.texi (Modified imports): Ditto. Index: gnulib-tool =================================================================== RCS file: /sources/gnulib/gnulib/gnulib-tool,v retrieving revision 1.233 diff -u -p -r1.233 gnulib-tool --- gnulib-tool 28 May 2007 15:46:55 -0000 1.233 +++ gnulib-tool 30 Jun 2007 16:25:34 -0000 @@ -150,6 +150,7 @@ Options for --import: --avoid=MODULE Avoid including the given MODULE. Useful if you have code that provides equivalent functionality. This option can be repeated. + --gpl3 Modify license template from GPL v2 to GPL v3. --lgpl Abort if modules aren't available under the LGPL. Also modify license template from GPL to LGPL. --makefile-name=NAME Name of makefile in automake syntax in the @@ -424,6 +425,7 @@ func_ln_if_changed () # - inctests true if --with-tests was given, blank otherwise # - avoidlist list of modules to avoid, from --avoid # - lgpl true if --lgpl was given, blank otherwise +# - gpl3 true if --gpl3 was given, blank otherwise # - makefile_name from --makefile-name # - libtool true if --libtool was given, false if --no-libtool was # given, blank otherwise @@ -446,6 +448,7 @@ func_ln_if_changed () auxdir= inctests= avoidlist= + gpl3= lgpl= makefile_name= libtool= @@ -579,6 +582,9 @@ func_ln_if_changed () arg=`echo "X$1" | sed -e 's/^X--avoid=//'` func_append avoidlist " $arg" shift ;; + --gpl3 ) + gpl3=true + shift ;; --lgpl ) lgpl=true shift ;; @@ -639,6 +645,10 @@ func_ln_if_changed () esac done + if test -n "$lgpl" && test -n "$gpl3"; then + echo "gnulib-tool: the --lgpl and --gpl3 options are incompatible." 1>&2 + func_exit 1 + fi if test "$mode" = update; then if test $# != 0; then echo "gnulib-tool: too many arguments in 'update' mode" 1>&2 @@ -650,7 +660,8 @@ func_ln_if_changed () if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \ || test -n "$sourcebase" || test -n "$m4base" \ || test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \ - || test -n "$inctests" || test -n "$avoidlist" || test -n "$lgpl" \ + || test -n "$inctests" || test -n "$avoidlist" \ + || test -n "$lgpl" || test -n "$gpl3" \ || test -n "$makefile_name" || test -n "$macro_prefix"; then echo "gnulib-tool: invalid options for 'update' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 @@ -1545,6 +1556,7 @@ func_emit_initmacro_done () # - auxdir directory relative to destdir where to place build aux files # - inctests true if --with-tests was given, blank otherwise # - avoidlist list of modules to avoid, from --avoid +# - gpl3 true if library's license shall be GPL v3, blank to leave it unchanged # - lgpl true if library's license shall be LGPL, blank otherwise # - makefile_name from --makefile-name # - libtool true if --libtool was given, false if --no-libtool was @@ -1568,6 +1580,7 @@ func_import () cached_testsbase= cached_inctests= cached_libname= + cached_gpl= cached_lgpl= cached_makefile_name= cached_libtool= @@ -1609,6 +1622,9 @@ func_import () /gl_LGPL/ { s,^.*$,cached_lgpl=true,p } + /gl_GPL3/ { + s,^.*$,cached_gpl3=true,p + } /gl_MAKEFILE_NAME(/ { s,^.*gl_MAKEFILE_NAME([[ ]*\([^])]*\).*$,cached_makefile_name="\1",p } @@ -1706,6 +1722,10 @@ func_import () if test -z "$lgpl"; then lgpl="$cached_lgpl" fi + # Require GPL3 if specified either way. + if test -z "$gpl3"; then + gpl3="$cached_gpl3" + fi # The makefile_name defaults to the cached one. if test -z "$makefile_name"; then makefile_name="$cached_makefile_name" @@ -1768,6 +1788,12 @@ func_import () s/version 2\([ ,]\)/version 2.1\1/g ' fi + if test -n "gpl3"; then + # Update license. + sed_transform_lib_file=$sed_transform_lib_file' + s/version 2\([ ,]\)/version 3\1/g + ' + fi # Determine final file list. func_modules_to_filelist Index: doc/gnulib-intro.texi =================================================================== RCS file: /sources/gnulib/gnulib/doc/gnulib-intro.texi,v retrieving revision 1.7 diff -u -p -r1.7 gnulib-intro.texi --- doc/gnulib-intro.texi 16 Jan 2007 01:14:28 -0000 1.7 +++ doc/gnulib-intro.texi 30 Jun 2007 16:25:34 -0000 @@ -262,6 +262,14 @@ passing the option @samp{--lgpl} to @cod replace the GPL header with an LGPL header while copying the source files to your package. +At the moment the parts of Gnulib licensed under the GNU General +Public License are licensed under version 2 of the GPL or later. If +you want to use Gnulib code in a program which is itself licensed +under GPL version 3, you can use @code{gnulib-tool --gpl3}, which +modifies the version of the GPL in the Gnulib source files from 2 to +3 as the files are imported. The version number is the only part of +the copyright banner which is updated. + Keep in mind that when you submit patches to files in Gnulib, you should license them under a compatible license. This means that sometimes the contribution will have to be LGPL, if the original file is available Index: doc/gnulib-tool.texi =================================================================== RCS file: /sources/gnulib/gnulib/doc/gnulib-tool.texi,v retrieving revision 1.15 diff -u -p -r1.15 gnulib-tool.texi --- doc/gnulib-tool.texi 16 May 2007 10:07:20 -0000 1.15 +++ doc/gnulib-tool.texi 30 Jun 2007 16:25:34 -0000 @@ -309,6 +309,10 @@ unit test files. Corresponds to the @sa The argument is the name of the library to be created. Corresponds to the @samp{--lib} command line argument. address@hidden gl_GPL3 +The presence of this macro corresponds to the @samp{--gpl3} command line +argument. It takes no arguments. + @item gl_LGPL The presence of this macro corresponds to the @samp{--lgpl} command line argument. It takes no arguments.