Package: cpio
Version: 2.6-17
Severity: wishlist
Tags: patch

Hi

As discussed on IRC, I'd like to obtain win32 binaries of cpio that
win32-loader can Build-Depend on (which will allow me to fix bug #442474).

You'll find attached:

  - debian.diff: Arranges the package to produce a cpio-win32 binary.

  - mingw32.diff: Fixes in upstream code to allow compilation of win32
    binaries via mingw32.  This patch is merged in latest cpio alpha [1]
    release, with some modification.

  - srcdir_objdir.diff: Fixes a small issue when $(srcdir) != $(objdir).
    Just reported to bug-cpio.

Please remember to re-run the autostuff (in this case, the following were
needed: aclocal ; autoheader ; autoconf ; automake).

Thanks!

[1] ftp://download.gnu.org.ua/pub/alpha/cpio/cpio-2.9.90-20071205.tar.gz

-- System Information:
Debian Release: lenny/sid
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-5-amd64
Locale: LANG=ca_AD.UTF-8, LC_CTYPE=ca_AD.UTF-8 (charmap=UTF-8)

Versions of packages cpio depends on:
ii  libc6                  2.3.6.ds1-13etch2 GNU C Library: Shared libraries

cpio recommends no packages.

-- no debconf information
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/debian/control cpio-2.9/debian/control
--- cpio-2.9.old/debian/control 2007-12-05 18:30:29.000000000 +0100
+++ cpio-2.9/debian/control     2007-12-05 18:43:16.000000000 +0100
@@ -2,7 +2,7 @@ Source: cpio
 Section: utils
 Priority: important
 Maintainer: Clint Adams <[EMAIL PROTECTED]>
-Build-Depends: texinfo, gettext
+Build-Depends: texinfo, gettext, mingw32
 Standards-Version: 3.7.2
 XS-VCS-Git: git://git.debian.org/git/private/schizo/cpio
 XS-VCS-Browser: http://git.debian.org/?p=private/schizo/cpio/.git
@@ -16,3 +16,15 @@ Description: GNU cpio -- a program to ma
  GNU cpio is a tool for creating and extracting archives, or copying
  files from one place to another.  It handles a number of cpio formats
  as well as reading and writing tar files.
+
+Package: cpio-win32
+Architecture: all
+Priority: extra
+Suggests: wine
+Description: GNU cpio -- a program to manage archives of files (win32 build)
+ GNU cpio is a tool for creating and extracting archives, or copying
+ files from one place to another.  It handles a number of cpio formats
+ as well as reading and writing tar files.
+ .
+ This is a win32 version of cpio.  It's meant to be used by the win32-loader
+ component of Debian-Installer.
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/debian/rules cpio-2.9/debian/rules
--- cpio-2.9.old/debian/rules   2007-12-05 18:30:29.000000000 +0100
+++ cpio-2.9/debian/rules       2007-12-26 17:29:33.000000000 +0100
@@ -28,9 +28,10 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_
 INSTALL_PROGRAM += -s
 endif
 
-Makefile:
+build/Makefile:
        $(checkdir)
-       CFLAGS='$(CFLAGS)' CPIO_MT_PROG=mt ./configure --prefix=/usr $(CROSS) \
+       mkdir -p build
+       cd build && CFLAGS='$(CFLAGS)' CPIO_MT_PROG=mt ../configure 
--prefix=/usr $(CROSS) \
               --mandir=/usr/share/man \
               --infodir=/usr/share/info \
               --bindir=/bin \
@@ -38,27 +39,61 @@ Makefile:
 
        touch tests/testsuite
 
-build: Makefile
+build-win32/Makefile:
        $(checkdir)
-       $(MAKE)
+       mkdir -p build-win32
+       cd build-win32 && CFLAGS='$(CFLAGS)' ../configure --host 
i586-mingw32msvc
+
+build-stamp: build/Makefile
+       $(checkdir)
+       $(MAKE) -C build
        touch tests/testsuite.at tests/testsuite
 ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
-       $(MAKE) check
+       $(MAKE) -C build check
 endif
-       touch build
+       touch $@
+
+build-win32-stamp: build-win32/Makefile
+       $(checkdir)
+       $(MAKE) -C build-win32
+       touch $@
+
+build: build-stamp build-win32-stamp
 
 clean:
        $(checkdir)
-       $(RM) build
+       $(RM) build-stamp build-win32-stamp
        -$(MAKE) -i distclean
        $(RM) config.cache
-       $(RM) -r *~ debian/tmp debian/*~ debian/files*
+       $(RM) -r *~ debian/tmp debian/tmp-win32 debian/*~ debian/files* build 
build-win32
        $(RM) -f debian/substvars
 
-binary-indep:  checkroot build
+binary-indep:  checkroot build-stamp build-win32-stamp
        $(checkdir)
+       $(RM) -r debian/tmp-win32
+       $(INSTALL_DIR) debian/tmp-win32 debian/tmp-win32/DEBIAN
+       $(INSTALL_DIR) debian/tmp-win32/usr/share/doc/$(package)-win32
+# Install directories
+       $(INSTALL_DIR)  \
+               debian/tmp-win32/usr/share/win32
+# Install files
+       install -m 755 build-win32/src/cpio.exe 
debian/tmp-win32/usr/share/win32/
+# Install changelog & copyright
+       install -m 644 debian/changelog \
+         debian/tmp-win32/usr/share/doc/$(package)-win32/changelog.Debian
+       gzip -9v debian/tmp-win32/usr/share/doc/$(package)-win32/*
+       install -m 644 debian/copyright debian/tmp/usr/share/doc/$(package)/.
+
+# Generate md5sums
+       cd debian/tmp && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs 
-r0 md5sum > DEBIAN/md5sums
+
+# Generate deb file
+       dpkg-gencontrol -pcpio-win32 -Pdebian/tmp-win32
+       chown -R root.root debian/tmp-win32
+       chmod -R g-ws debian/tmp-win32
+       dpkg-deb --build debian/tmp-win32 ..
 
-binary-arch:   checkroot build
+binary-arch:   checkroot build-stamp
        $(checkdir)
        $(RM) -r debian/tmp
        $(INSTALL_DIR) debian/tmp debian/tmp/DEBIAN
@@ -72,7 +107,7 @@ binary-arch: checkroot build
                debian/tmp/usr/share/man/man1   \
                debian/tmp/usr/share/info
 # Install files
-       $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
+       $(MAKE) -C build install DESTDIR=$(CURDIR)/debian/tmp
        rm -rf debian/tmp/usr/libexec
        mv debian/tmp/bin/mt debian/tmp/bin/mt-gnu 
        mv debian/tmp/usr/share/man/man1/mt.1 \
@@ -99,7 +134,7 @@ endif
        cd debian/tmp && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs 
-r0 md5sum > DEBIAN/md5sums
 
 # Generate deb file
-       dpkg-gencontrol -isp
+       dpkg-gencontrol -pcpio -Pdebian/tmp
        chown -R root.root debian/tmp
        chmod -R g-ws debian/tmp
        dpkg-deb --build debian/tmp ..
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/configure.ac cpio-2.9/configure.ac
--- cpio-2.9.old/configure.ac   2007-06-29 12:14:40.000000000 +0200
+++ cpio-2.9/configure.ac       2007-12-05 18:36:21.000000000 +0100
@@ -45,7 +45,7 @@ AC_CHECK_TYPE(gid_t, int)
 AC_HEADER_STDC
 AC_HEADER_DIRENT
 
-AC_CHECK_FUNCS([fchmod fchown])
+AC_CHECK_FUNCS([fchmod fchown chown link symlink getuid geteuid setuid getgid 
setgid mknod pipe])
 
 # gnulib modules
 gl_INIT
@@ -61,7 +61,7 @@ AC_ARG_ENABLE(mt,
   no)  ;;
   esac])
 
-AC_CHECK_HEADERS(unistd.h stdlib.h string.h fcntl.h sys/io/trioctl.h utmp.h 
getopt.h locale.h libintl.h sys/wait.h utime.h locale.h)
+AC_CHECK_HEADERS(unistd.h stdlib.h string.h fcntl.h sys/io/trioctl.h utmp.h 
getopt.h locale.h libintl.h sys/wait.h utime.h locale.h process.h pwd.h grp.h 
sys/ioctl.h)
 
 AC_MSG_CHECKING(for sys_errlist and sys_nerr)
 AC_TRY_RUN(
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/lib/Makefile.am cpio-2.9/lib/Makefile.am
--- cpio-2.9.old/lib/Makefile.am        2007-06-27 16:00:13.000000000 +0200
+++ cpio-2.9/lib/Makefile.am    2007-12-05 18:36:21.000000000 +0100
@@ -32,7 +32,8 @@ libcpio_a_SOURCES += \
  paxexit.c\
  paxlib.h\
  paxnames.c\
- rtapelib.c
+ rtapelib.c\
+ system.c
 
 DISTCLEANFILES += rmt-command.h
 rmt-command.h: Makefile
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/lib/system.c cpio-2.9/lib/system.c
--- cpio-2.9.old/lib/system.c   1970-01-01 01:00:00.000000000 +0100
+++ cpio-2.9/lib/system.c       2007-12-05 18:36:21.000000000 +0100
@@ -0,0 +1,156 @@
+/* System dependent functions for GNU cpio.
+
+   Copyright (C) 2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <errno.h>
+
+#ifndef HAVE_PWUID
+struct passwd *
+getpwuid (uid_t uid __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return NULL;
+}
+#endif
+
+#ifndef HAVE_GETPWNAM
+struct passwd *
+getpwnam (const char *name __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return NULL;
+}
+#endif
+
+#ifndef HAVE_GETGRGID
+struct group *
+getgrgid (gid_t gid __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return NULL;
+}
+#endif
+
+#ifndef HAVE_GETGRNAM
+struct group *
+getgrnam (const char *name __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return NULL;
+}
+#endif
+
+#ifndef HAVE_PIPE
+int
+pipe (int filedes[2] __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_FORK
+int
+fork (void)
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_GETUID
+int
+getuid (void)
+{
+  return 0;
+}
+#endif
+
+#ifndef HAVE_GETEUID
+int
+geteuid (void)
+{
+  return 0;
+}
+#endif
+
+#ifndef HAVE_GETGID
+int
+getgid (void)
+{
+  return 0;
+}
+#endif
+
+#ifndef HAVE_SETUID
+int
+setuid (int newuid __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_SETGID
+int
+setgid (int newgid __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_MKNOD
+int
+mknod (const char *filename __attribute__ ((unused)), int mode __attribute__ 
((unused)), int dev __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_SYMLINK
+int
+symlink (const char *oldname __attribute__ ((unused)), const char *newname 
__attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_LINK
+int
+link (const char *oldname __attribute__ ((unused)), const char *newname 
__attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+#ifndef HAVE_CHOWN
+int
+chown (const char *filename __attribute__ ((unused)), int owner __attribute__ 
((unused)), int group __attribute__ ((unused)))
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/lib/system.h cpio-2.9/lib/system.h
--- cpio-2.9.old/lib/system.h   2007-06-27 15:49:45.000000000 +0200
+++ cpio-2.9/lib/system.h       2007-12-05 18:36:21.000000000 +0100
@@ -453,16 +453,49 @@ char *getenv ();
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
-#if MSDOS
+/* msdos (and win32?) */
+#ifdef HAVE_PROCESS_H
 # include <process.h>
+#endif
+
+/* Everyone else */
+#ifdef HAVE_PWD_H
+# include <pwd.h>
+#else
+/* Borrowed from GNU libc */
+/* The passwd structure.  */
+struct passwd
+{
+  char *pw_name;               /* Username.  */
+  char *pw_passwd;             /* Password.  */
+  int pw_uid;                  /* User ID.  */
+  int pw_gid;                  /* Group ID.  */
+  char *pw_gecos;              /* Real name.  */
+  char *pw_dir;                        /* Home directory.  */
+  char *pw_shell;              /* Shell program.  */
+};
+#endif
+#ifdef HAVE_GRP_H
+# include <grp.h>
+#else
+/* Borrowed from GNU libc */
+/* The group structure.         */
+struct group
+  {
+    char *gr_name;             /* Group name.  */
+    char *gr_passwd;           /* Password.    */
+    int gr_gid;                        /* Group ID.    */
+    char **gr_mem;             /* Member list. */
+  };
+#endif
+
+#if MSDOS
 # define SET_BINARY_MODE(arc) setmode(arc, O_BINARY)
 # define ERRNO_IS_EACCES errno == EACCES
 # define mkdir(file, mode) (mkdir) (file)
 # define TTY_NAME "con"
 # define sys_reset_uid_gid()
 #else
-# include <pwd.h>
-# include <grp.h>
 # define SET_BINARY_MODE(arc)
 # define ERRNO_IS_EACCES 0
 # define TTY_NAME "/dev/tty"
@@ -473,3 +506,8 @@ char *getenv ();
 #if XENIX
 # include <sys/inode.h>
 #endif
+
+#include <signal.h>
+#ifndef SIGPIPE
+# define SIGPIPE -1
+#endif
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/src/idcache.c cpio-2.9/src/idcache.c
--- cpio-2.9.old/src/idcache.c  2007-06-28 12:45:35.000000000 +0200
+++ cpio-2.9/src/idcache.c      2007-12-05 18:36:21.000000000 +0100
@@ -23,10 +23,10 @@
 
 #include <stdio.h>
 #include <sys/types.h>
-#include <pwd.h>
-#include <grp.h>
 #include <xalloc.h>
 
+#include <system.h>
+
 #if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
 #include <string.h>
 #else
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/src/userspec.c cpio-2.9/src/userspec.c
--- cpio-2.9.old/src/userspec.c 2007-06-27 16:00:13.000000000 +0200
+++ cpio-2.9/src/userspec.c     2007-12-05 18:36:21.000000000 +0100
@@ -38,17 +38,22 @@ char *alloca ();
 #include <stdio.h>
 #include <ctype.h>
 #include <sys/types.h>
-#include <pwd.h>
-#include <grp.h>
 
-#if !HAVE_DECL_GETPWNAM
+#ifdef HAVE_PWD_H
+# include <pwd.h>
+# if !HAVE_DECL_GETPWNAM
 extern struct passwd *getpwnam (const char *name);
+# endif
 #endif
-#if !HAVE_DECL_GETGRNAM
+
+#ifdef HAVE_GRP_H
+# include <grp.h>
+# if !HAVE_DECL_GETGRNAM
 extern struct group *getgrnam (const char *name);
-#endif
-#if !HAVE_DECL_GETGRGID
+# endif
+# if !HAVE_DECL_GETGRGID
 extern struct group *getgrgid (gid_t gid);
+# endif
 #endif
 
 #ifndef HAVE_ENDPWENT
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/src/util.c cpio-2.9/src/util.c
--- cpio-2.9.old/src/util.c     2007-06-28 15:04:51.000000000 +0200
+++ cpio-2.9/src/util.c 2007-12-05 18:36:21.000000000 +0100
@@ -33,7 +33,9 @@
 #include <hash.h>
 #include <utimens.h>
 
-#include <sys/ioctl.h>
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
 
 #ifdef HAVE_SYS_MTIO_H
 # ifdef HAVE_SYS_IO_TRIOCTL_H
@@ -1266,7 +1268,10 @@ stat_to_cpio (struct cpio_file_stat *hdr
 }
 
 #ifndef HAVE_FCHOWN
-# define fchown(fd, uid, gid) (-1)
+# define HAVE_FCHOWN 0
+#endif
+#ifndef HAVE_FCHMOD
+# define HAVE_FCHMOD 0
 #endif
 
 int
diff -x testsuite -x Makefile.in -x configure -x config.h.in -x aclocal.m4 
-Nurp cpio-2.9.old/src/Makefile.am cpio-2.9/src/Makefile.am
--- cpio-2.9.old/src/Makefile.am        2007-06-27 16:00:13.000000000 +0200
+++ cpio-2.9/src/Makefile.am    2007-12-26 10:23:07.000000000 +0100
@@ -16,7 +16,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 # 02110-1301 USA.
 
-INCLUDES=-I. -I.. -I$(top_srcdir)/lib 
+INCLUDES=-I. -I.. -I$(top_srcdir)/lib -I../lib
 
 bin_PROGRAMS=cpio @CPIO_MT_PROG@
 EXTRA_PROGRAMS=mt

Reply via email to