From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: draft patch to import md5 module from gnulib Date: Fri, 18 Feb 2011 00:18:13 -0800 Organization: UCLA Computer Science Department Message-ID: <4D5E2B45.10408@cs.ucla.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000201020600070300050207" X-Trace: dough.gmane.org 1298017116 21101 80.91.229.12 (18 Feb 2011 08:18:36 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 18 Feb 2011 08:18:36 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Feb 18 09:18:32 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PqLXq-0001K5-TJ for ged-emacs-devel@m.gmane.org; Fri, 18 Feb 2011 09:18:31 +0100 Original-Received: from localhost ([127.0.0.1]:57272 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PqLXq-0003Dn-3h for ged-emacs-devel@m.gmane.org; Fri, 18 Feb 2011 03:18:30 -0500 Original-Received: from [140.186.70.92] (port=51937 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PqLXd-0003CU-Uq for emacs-devel@gnu.org; Fri, 18 Feb 2011 03:18:19 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PqLXc-00066G-IW for emacs-devel@gnu.org; Fri, 18 Feb 2011 03:18:17 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:43441) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PqLXb-000665-Qe for emacs-devel@gnu.org; Fri, 18 Feb 2011 03:18:16 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id A015939E8083 for ; Fri, 18 Feb 2011 00:18:14 -0800 (PST) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dcmgs4dnDVJQ for ; Fri, 18 Feb 2011 00:18:13 -0800 (PST) Original-Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 8154639E80F7 for ; Fri, 18 Feb 2011 00:18:13 -0800 (PST) User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101208 Thunderbird/3.1.7 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 131.179.128.62 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:136169 Archived-At: This is a multi-part message in MIME format. --------------000201020600070300050207 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Here's a patch to import the md5 module from gnulib into Emacs. I haven't committed this yet, as I would like to test it more, but thought I'd give a heads-up. For Windows, I expect the hand-generated makefiles will need to be changed to compile lib/md5.c instead of src/md5.c, since the file was moved. The patch that I wrote is below. I'm attaching the full patch (including automatically generated changes), as a compressed file. Import crypto/md5 module from gnulib. * Makefile.in (MAKEFILE_MODULES): Add crypto/md5. * admin/notes/copyright: Remove src/md5.c and src/md5.h as special cases. * src/Makefile.in (base_obj): Remove md5.o, since this file is in lib now. * src/deps.mk (md5.o): Remove. * aclocal.m4, configure, lib/Makefile.in, lib/gnulib.mk, m4/gl-comp.m4: Regenerate. * lib/md5.c: Regenerate. This renames the file from src/md5.c, and adds some porting improvements from gnulib. * lib/md5.h: Regenerate, likwise; rename from src/md5.h. * m4/md5.m4: New file, from gnulib. === modified file 'Makefile.in' --- Makefile.in 2011-02-16 01:35:20 +0000 +++ Makefile.in 2011-02-18 07:45:14 +0000 @@ -330,7 +330,8 @@ # Update modules from gnulib, for maintainers, who should have it in # $(gnulib_srcdir) (relative to $(srcdir) and should have build tools # as per $(gnulib_srcdir)/DEPENDENCIES. -GNULIB_MODULES = dtoastr getloadavg getopt-gnu ignore-value mktime strftime +GNULIB_MODULES = \ + crypto/md5 dtoastr getloadavg getopt-gnu ignore-value mktime strftime GNULIB_TOOL_FLAGS = \ --import --no-changelog --no-vc-files --makefile-name=gnulib.mk sync-from-gnulib: $(gnulib_srcdir) === modified file 'admin/notes/copyright' --- admin/notes/copyright 2011-02-16 01:35:20 +0000 +++ admin/notes/copyright 2011-02-18 07:45:14 +0000 @@ -632,8 +632,6 @@ lib/*.[ch] lib/gnulib.mk src/gmalloc.c - src/md5.c - src/md5.h src/termcap.c src/tparam.c === modified file 'src/Makefile.in' --- src/Makefile.in 2011-02-10 03:20:52 +0000 +++ src/Makefile.in 2011-02-18 07:45:14 +0000 @@ -354,7 +354,7 @@ syntax.o $(UNEXEC_OBJ) bytecode.o \ process.o gnutls.o callproc.o \ region-cache.o sound.o atimer.o \ - doprnt.o intervals.o textprop.o composite.o md5.o xml.o \ + doprnt.o intervals.o textprop.o composite.o xml.o \ $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) obj = $(base_obj) $(NS_OBJC_OBJ) === modified file 'src/deps.mk' --- src/deps.mk 2011-02-16 01:35:20 +0000 +++ src/deps.mk 2011-02-18 07:45:14 +0000 @@ -144,7 +144,6 @@ ralloc.o: ralloc.c lisp.h $(config_h) vm-limit.o: vm-limit.c mem-limits.h lisp.h globals.h $(config_h) marker.o: marker.c buffer.h character.h lisp.h globals.h $(config_h) -md5.o: md5.c md5.h $(config_h) minibuf.o: minibuf.c syntax.h frame.h window.h keyboard.h systime.h \ buffer.h commands.h character.h msdos.h $(INTERVALS_H) keymap.h \ termhooks.h lisp.h globals.h $(config_h) coding.h --------------000201020600070300050207 Content-Type: application/x-gzip; name="patch.txt.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch.txt.gz" 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 yDY2/hs74Sm40LIAAA== --------------000201020600070300050207--