diff -r 2aaecc416cc2 -r a9d5b29099c7 bootstrap/README.Cygwin
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bootstrap/README.Cygwin	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,29 @@
+$NetBSD$
+
+* Not tested on Cygwin 1.7.
+T.B.D.
+
+* WARNING! Cygwin is VERY slow
+T.B.D.
+
+* required cygwin packages
+T.B.D.
+
+* Case sensitive file system
+** mount -o managed
+T.B.D.
+
+* su command
+Cygwin has su command but it doesn't work.  Possible workarounds are:
+
+  * Do pkgsrc build as an administrator.
+    You can start Administrator's shell by
+      runas /user:administrator C:\CYGWIN\Cygwin.bat
+
+  * Unprivileged mode.
+    run bootstrap script with --unprivileged
+
+  * Use sysutils/su_cygwin package.
+    I wrote a small script to simulate su command by means of ssh.
+    You need to start SSH server on your machine by
+      cygrunsrv -S sshd
diff -r 2aaecc416cc2 -r a9d5b29099c7 bootstrap/bootstrap
--- a/bootstrap/bootstrap	Fri Jul 03 02:24:13 2009 +0900
+++ b/bootstrap/bootstrap	Sat Jul 11 13:40:56 2009 +0900
@@ -40,7 +40,7 @@
 # tools: CP, GREP, ID, MKDIR, SH, TEST, TOUCH, XARGS
 
 
-BOOTSTRAP_VERSION=20060721
+BOOTSTRAP_VERSION=20081001
 
 # Don't let the bootstrap program get confused by a pre-existing mk.conf
 # file.
@@ -85,6 +85,11 @@
 
 # strip / for BSD/OS, strip - for HP-UX
 opsys=`uname -s | tr -d /-`
+case ${opsys} in
+CYGWIN_*) opsys=Cygwin;;
+esac
+
+SKIP="echo SKIPPING"
 
 mkbinarykit_macpkg()
 {
@@ -239,6 +244,37 @@
 			echo "LDD=			$prefix/sbin/fakeldd" >> ${TARGET_MKCONF}
 		fi
 		;;
+	Cygwin)
+ 		if [ "$unprivileged" = "yes" ]; then
+ 	    	    # Use numeric ID to avoid white spaces in user/group names
+ 		    echo 'UNPRIVILEGED_GROUP= '$(/bin/id -g) >> ${BOOTSTRAP_MKCONF}
+ 		    echo 'UNPRIVILEGED_GROUPS= '$(/bin/id -G) >> ${BOOTSTRAP_MKCONF}
+ 		    echo 'UNPRIVILEGED_USER= '$(/bin/id -u) >> ${BOOTSTRAP_MKCONF}
+		    echo 'SU_CMD=${SH} -c' >> ${BOOTSTRAP_MKCONF}
+
+		    cat >> ${TARGET_MKCONF} <<'EOF'
+.if !defined(UNPIVILEGED_USER)
+UNPRIVILEGED_GROUP!= /bin/id -g
+UNPRIVILEGED_GROUPS!= /bin/id -G
+UNPRIVILEGED_USER!= /bin/id -u
+.endif
+SU_CMD=${SH} -c'
+EOF
+ 		fi
+
+		if test -z "$ID"; then
+		    echo "ID= $pkgsrcdir/sysutils/id_cygwin/files/id_cygwin.sh" >> ${BOOTSTRAP_MKCONF}
+		    echo "TOOLS_PLATFORM.id?= $pkgsrcdir/sysutils/id_cygwin/files/id_cygwin.sh" >> ${BOOTSTRAP_MKCONF}
+		    cat  >> ${TARGET_MKCONF} <<EOF
+.if exists(${prefix}/bin/id)
+ID?=	${prefix}/bin/id
+.else
+ID?=	/usr/bin/id
+.endif
+TOOLS_PLATFORM.id?= \${ID}
+EOF
+		fi
+		;;
 	esac
 }
 
@@ -606,6 +642,32 @@
 	ac_cv_header_poll_h=no; export ac_cv_header_poll_h
 	ac_cv_func_poll=no; export ac_cv_func_poll
 	;;
+Cygwin)
+	is_root () {
+	        if id -nG | grep -q 'Administrators'; then
+			return 1
+		fi
+		return 0
+	}
+	mkdir_p () {
+		mkdir -p "$@" # allows umask to take effect
+	}
+	default_install_mode=0775
+	# use Numeric IDs to avoid whitespaces.
+	root_user=`id -u`
+	root_group=`id -g Administrator`
+	need_bsd_install=no
+	need_awk=no
+	need_sed=no
+	set_opsys=no
+	need_xargs=no
+	# only used for unprivileged builds.
+	whoamiprog='id -u'
+	groupsprog='id -g'
+	# for bootstrap only; pkgsrc uses CPPFLAGS
+	CC="gcc -D_ALL_SOURCE"; export CC
+	;;
+
 UnixWare)
 	root_group=sys
 	need_bsd_install=no
@@ -766,7 +828,7 @@
 # make sure we're using a case-sensitive file system
 if [ $ignorecasecheck = "no" ]; then
 case "$opsys" in
-Interix)
+Interix|Cygwin)
 	echo_msg "Testing file system case sensitivity"
 	for fs in "$prefix"; do
 		testdir="pkgsrc-REQUIRES-case-SENSITIVE-filesystem"
@@ -826,6 +888,7 @@
 # enable unprivileged builds if not root
 if [ "$unprivileged" = "yes" ]; then
 	echo "UNPRIVILEGED=		yes" >> ${TARGET_MKCONF}
+
 fi
 
 # save environment in example mk.conf
@@ -885,17 +948,23 @@
 bootstrap_bmake() {
 	echo_msg "Bootstrapping bmake"
 	copy_src $pkgsrcdir/devel/bmake/files bmake
-	run_cmd "(cd $wrkdir/bmake && env $bmakexenv $shprog ./boot-strap $configure_quiet_flags -q -o $opsys --prefix=$wrkdir --sysconfdir=$wrkdir --mksrc none --with-default-sys-path="$wrkdir/share/mk" $bmakexargs)"
-	run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/bmake/$opsys/bmake $wrkdir/bin/bmake"
+	run_cmd "(cd $wrkdir/bmake && env $bmakexenv $shprog ./boot-strap $configure_quiet_flags -q -o work.$opsys --prefix=$wrkdir --sysconfdir=$wrkdir --mksrc none --with-default-sys-path="$wrkdir/share/mk" $bmakexargs)"
+	run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/bmake/work.$opsys/bmake $wrkdir/bin/bmake"
 }
 bootstrap_bmake
 
 bmake="$wrkdir/bin/bmake $make_quiet_flags"
 
+
+
 # build libnbcompat
-echo_msg "Building libnbcompat"
-copy_src $pkgsrcdir/pkgtools/libnbcompat/files libnbcompat
-run_cmd "(cd $wrkdir/libnbcompat; $shprog ./configure $configure_quiet_flags -C --prefix=$prefix --mandir=$mandir --sysconfdir=$sysconfdir --enable-bsd-getopt --enable-db && $bmake $make_quiet_flags)"
+bootstrap_libnbcompat()
+{
+    echo_msg "Building libnbcompat"
+    copy_src $pkgsrcdir/pkgtools/libnbcompat/files libnbcompat
+    run_cmd "(cd $wrkdir/libnbcompat; $shprog ./configure $configure_quiet_flags -C --prefix=$prefix --mandir=$mandir --sysconfdir=$sysconfdir --enable-bsd-getopt --enable-db && $bmake $make_quiet_flags)"
+}
+bootstrap_libnbcompat
 
 # bootstrap ksh if necessary
 case "$need_ksh" in
@@ -939,17 +1008,21 @@
 esac
 
 # bootstrap pkg_install
-echo_msg "Bootstrapping pkgtools"
-copy_src $pkgsrcdir/pkgtools/pkg_install/files pkg_install
-run_cmd "(cd $wrkdir/pkg_install; env $BSTRAP_ENV \
+bootstrap_pkg_install() {
+    echo_msg "Bootstrapping pkgtools"
+    copy_src $pkgsrcdir/pkgtools/pkg_install/files pkg_install
+    run_cmd "(cd $wrkdir/pkg_install; env $BSTRAP_ENV \
 CPPFLAGS='$CPPFLAGS -I../libnbcompat -I../../libnbcompat' \
 LDFLAGS='$LDFLAGS -L../libnbcompat -L../../libnbcompat' \
 LIBS='-lnbcompat' $shprog ./configure $configure_quiet_flags -C \
 --enable-bootstrap --prefix=$prefix --sysconfdir=$sysconfdir \
 --with-pkgdbdir=$pkgdbdir --mandir=$mandir $pkg_install_args && $bmake)"
-run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/admin/pkg_admin $wrkdir/sbin/pkg_admin"
-run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/create/pkg_create $wrkdir/sbin/pkg_create"
-run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/info/pkg_info $wrkdir/sbin/pkg_info"
+    run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/admin/pkg_admin $wrkdir/sbin/pkg_admin"
+    run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/create/pkg_create $wrkdir/sbin/pkg_create"
+    run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/info/pkg_info $wrkdir/sbin/pkg_info"
+}
+bootstrap_pkg_install
+
 echo "PKG_ADMIN_CMD?=			$wrkdir/sbin/pkg_admin" >> ${BOOTSTRAP_MKCONF}
 echo "PKG_CREATE_CMD?=			$wrkdir/sbin/pkg_create" >> ${BOOTSTRAP_MKCONF}
 echo "PKG_INFO_CMD?=			$wrkdir/sbin/pkg_info" >> ${BOOTSTRAP_MKCONF}
@@ -1011,6 +1084,7 @@
 opsys_finish
 
 echo "WRKOBJDIR=		${wrkdir}/wrk" >> ${BOOTSTRAP_MKCONF}
+mkdir_p ${wrkdir}/wrk
 
 echo "" >> ${TARGET_MKCONF}
 echo "" >> ${BOOTSTRAP_MKCONF}
@@ -1021,6 +1095,7 @@
 echo ".endif			# end pkgsrc settings" >> ${TARGET_MKCONF}
 echo ".endif			# end pkgsrc settings" >> ${BOOTSTRAP_MKCONF}
 
+
 # register packages
 # usage: register_package <packagedirectory> [additional arguments]
 build_package() {
@@ -1049,6 +1124,12 @@
 case "$need_extras" in
 yes)	build_package "pkgtools/bootstrap-extras";;
 esac
+case ${OPSYS} in
+Cygwin)
+	build_package "sysutils/id_cygwin"
+	build_package "sysutils/su_cygwin"
+	;;
+esac
 build_package "pkgtools/pkg_install"
 
 etc_mk_conf="$sysconfdir/mk.conf"
diff -r 2aaecc416cc2 -r a9d5b29099c7 devel/bmake/Makefile
--- a/devel/bmake/Makefile	Fri Jul 03 02:24:13 2009 +0900
+++ b/devel/bmake/Makefile	Sat Jul 11 13:40:56 2009 +0900
@@ -26,7 +26,7 @@
 
 INSTALLATION_DIRS=	bin ${PKGMANDIR}/man1
 
-BOOTSTRAP_ARGS=		-q -o ${OPSYS} --prefix=${PREFIX} \
+BOOTSTRAP_ARGS=		-q -o work.${OPSYS} --prefix=${PREFIX} \
 			--with-default-sys-path=${makesyspath} \
 			--mksrc none --sysconfdir=${PKG_SYSCONFDIR:Q}
 
@@ -47,7 +47,7 @@
 		${SETENV} ${MAKE_ENV} ${SH} ./bmake/boot-strap ${BOOTSTRAP_ARGS}
 
 do-install:
-	${INSTALL_PROGRAM} ${WRKDIR}/${OPSYS}/bmake ${DESTDIR}${PREFIX}/bin
+	${INSTALL_PROGRAM} ${WRKDIR}/work.${OPSYS}/bmake ${DESTDIR}${PREFIX}/bin
 	${INSTALL_MAN} ${WRKSRC}/bmake.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
 
 .include "../../mk/bsd.pkg.mk"
diff -r 2aaecc416cc2 -r a9d5b29099c7 devel/bmake/files/machine.sh
--- a/devel/bmake/files/machine.sh	Fri Jul 03 02:24:13 2009 +0900
+++ b/devel/bmake/files/machine.sh	Sat Jul 11 13:40:56 2009 +0900
@@ -23,6 +23,10 @@
 machine=`uname -p 2>/dev/null || uname -m`
 MACHINE=
 
+case "$OS" in
+Cygwin_*) OS=Cygwin;;
+esac
+
 case "$machine" in
 unknown)
         machine=`uname -m`
@@ -62,7 +66,7 @@
 HP-UX)
 	MACHINE_ARCH=`IFS="/-."; set $machine; echo $1`
 	;;
-Interix)
+Interix|Cygwin)
 	MACHINE=i386
 	MACHINE_ARCH=i386
 	;;
diff -r 2aaecc416cc2 -r a9d5b29099c7 graphics/xpm/builtin.mk
--- a/graphics/xpm/builtin.mk	Fri Jul 03 02:24:13 2009 +0900
+++ b/graphics/xpm/builtin.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -23,7 +23,7 @@
 	fi
 .    elif ${OPSYS} == "IRIX"
 IS_BUILTIN.xpm=		yes
-.    elif ${OPSYS} == "Darwin"
+.    elif ${OPSYS} == "Darwin" || ${OPSYS} == "Cygwin"
 IS_BUILTIN.xpm=		yes
 .    else
 BUILTIN_IMAKE_CHECK:=	xpm:NormalLibXpm
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/bsd.prefs.mk
--- a/mk/bsd.prefs.mk	Fri Jul 03 02:24:13 2009 +0900
+++ b/mk/bsd.prefs.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -70,7 +70,7 @@
 .endif
 
 .if !defined(OPSYS)
-OPSYS:=			${:!${UNAME} -s!:S/-//g:S/\///g}
+OPSYS:=			${:!${UNAME} -s!:S/-//g:S/\///g:C/^CYGWIN_.*$/Cygwin/}
 MAKEFLAGS+=		OPSYS=${OPSYS:Q}
 .endif
 
@@ -121,6 +121,13 @@
 .elif ${OPSYS} == "BSDOS"
 LOWER_OPSYS?=		bsdi
 
+.elif ${OPSYS} == "Cygwin"
+LOWER_OPSYS?=		cygwin
+LOWER_VENDOR?=		pc
+LOWER_ARCH!=		uname -m
+_OS_VERSION!=		uname -r
+OS_VERSION=		${_OS_VERSION:C/(.*)//}
+
 .elif ${OPSYS} == "Darwin"
 LOWER_OPSYS?=		darwin
 LOWER_ARCH!=		${UNAME} -p
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/compiler/gcc.mk
--- a/mk/compiler/gcc.mk	Fri Jul 03 02:24:13 2009 +0900
+++ b/mk/compiler/gcc.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -521,4 +521,8 @@
 .  include "../../mk/compiler/f2c.mk"
 .endif
 
+.if ${OPSYS} == "Cygwin"
+LDFLAGS+=	-Wl,--enable-auto-import
+.endif
+
 .endif	# COMPILER_GCC_MK
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/flavor/pkg/metadata.mk
--- a/mk/flavor/pkg/metadata.mk	Fri Jul 03 02:24:13 2009 +0900
+++ b/mk/flavor/pkg/metadata.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -275,11 +275,17 @@
 _SIZE_ALL_FILE=		${PKG_DB_TMPDIR}/+SIZE_ALL
 _METADATA_TARGETS+=	${_SIZE_ALL_FILE}
 
+_XARGS_OPTS=	-n 256
+.if ${OPSYS} == "Cygwin"
+#  GNU xarg needs -r to make it do nothing when input is empty.
+_XARGS_OPTS+= 	-r
+.endif
+
 ${_SIZE_ALL_FILE}: ${_RDEPENDS_FILE}
 	${RUN}${MKDIR} ${.TARGET:H}
 	${RUN}								\
 	${_FULL_DEPENDS_CMD} | ${SORT} -u |				\
-	${XARGS} -n 256 ${PKG_INFO} -qs |				\
+	${XARGS} ${_XARGS_OPTS} ${PKG_INFO} -qs |			\
 	${AWK} 'BEGIN { s = 0 } /^[0-9]+$$/ { s += $$1 } END { print s }' \
 		> ${.TARGET}
 
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/platform/Cygwin.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/platform/Cygwin.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,174 @@
+# $NetBSD: Interix.mk,v 1.56 2008/03/04 06:45:34 jlam Exp $
+#
+# Variable definitions for Windows with Cygwin
+# Derived from Interix.mk
+
+# SHLIB BASE ADDRESSES:
+# XXX: TBD
+#
+
+###
+### Overrides to standard BSD .mk files
+###
+
+# "catinstall" not yet supported as there's no shipped [gn]roff
+MANINSTALL=	maninstall
+MAKE_FLAGS+=	MKCATPAGES=no NOLINT=1
+
+###
+### Alternate defaults to global pkgsrc settings, to help avoid
+### some of the excessive Interix fork(2) overhead, and reduce the
+### amount of settings required in the user's mk.conf
+###
+
+# NetBSD's faster, vfork-capable shell (not yet in pkgsrc)
+#BULK_PREREQ+=		shells/nbsh
+.if exists(${PREFIX}/bin/nbsh)
+TOOLS_SHELL?=		${PREFIX}/bin/nbsh
+WRAPPER_SHELL?=		${PREFIX}/bin/nbsh
+.endif
+
+INSTALL?=		/usr/bin/install
+PAX?=			${PREFIX}/bin/pax
+#SED?=			${PREFIX}/bin/nbsed
+SED?=			/usr/bin/sed
+
+GCC_USE_SYMLINKS?=	yes
+WRAPPER_DEBUG?=		no
+
+.if defined(BATCH)
+BULK_PREREQ+=		lang/perl5
+USE_BULK_BROKEN_CHECK?=	no
+USE_BULK_TIMESTAMPS?=	no
+.endif
+
+###
+### Platform definitions common to pkgsrc/mk/platform/*.mk
+###
+
+ECHO_N?=	${ECHO} -n			# does not support "echo -n"
+IMAKE_MAKE?=	${GMAKE}			# program which gets invoked by imake
+IMAKEOPTS+=	-DBuildHtmlManPages=NO
+PKGLOCALEDIR?=	share
+PS?=		/bin/ps
+SU?=		/usr/pkg/bin/su 		# /bin/su doesn't work on Cygwin
+#TYPE?=		type				# Shell builtin
+
+#XXX
+USERADD?=		${LOCALBASE}/sbin/useradd
+GROUPADD?=		${LOCALBASE}/sbin/groupadd
+_PKG_USER_HOME?=	# empty by default
+_USER_DEPENDS=		user>=20040426:../../sysutils/user_interix
+
+CPP_PRECOMP_FLAGS?=	# unset
+CONFIG_RPATH_OVERRIDE?=	config.rpath */config.rpath */*/config.rpath
+DEF_UMASK?=		002
+EXPORT_SYMBOLS_LDFLAGS?=-Wl,-E	# add symbols to the dynamic symbol table
+
+MOTIF_TYPE_DEFAULT?=	openmotif	# default 2.0 compatible libs type
+NOLOGIN?=		/bin/false
+PKG_TOOLS_BIN?=		${LOCALBASE}/sbin
+PKGDIRMODE?=		775
+# ROOT_USER might be numeric in the special case of Administrator; canonify it:
+ROOT_CMD?=		${SU} - "$$(${ID} -un ${ROOT_USER})" -c
+ROOT_USER?=		${BINOWN}
+ROOT_GROUP!=		${ID} -g Administrators
+TOUCH_FLAGS?=
+ULIMIT_CMD_datasize?=	ulimit -d `ulimit -H -d`
+ULIMIT_CMD_stacksize?=	ulimit -s `ulimit -H -s`
+ULIMIT_CMD_memorysize?=	ulimit -v `ulimit -H -v`
+
+# imake installs manpages in weird places
+IMAKE_MAN_SOURCE_PATH=	man/man
+IMAKE_MAN_SUFFIX=	n
+IMAKE_LIBMAN_SUFFIX=	3
+IMAKE_KERNMAN_SUFFIX=	4
+IMAKE_FILEMAN_SUFFIX=	5
+IMAKE_GAMEMAN_SUFFIX=	6
+IMAKE_MISCMAN_SUFFIX=	7
+IMAKE_MAN_DIR=		${IMAKE_MAN_SOURCE_PATH}n
+IMAKE_LIBMAN_DIR=	${IMAKE_MAN_SOURCE_PATH}3
+IMAKE_KERNMAN_DIR=	${IMAKE_MAN_SOURCE_PATH}4
+IMAKE_FILEMAN_DIR=	${IMAKE_MAN_SOURCE_PATH}5
+IMAKE_GAMEMAN_DIR=	${IMAKE_MAN_SOURCE_PATH}6
+IMAKE_MISCMAN_DIR=	${IMAKE_MAN_SOURCE_PATH}7
+IMAKE_MANNEWSUFFIX=	${IMAKE_MAN_SUFFIX}
+IMAKE_MANINSTALL?=	maninstall
+IMAKE_TOOLS=		gmake	# extra tools required when we use imake
+
+.if exists(/usr/include/netinet6)
+_OPSYS_HAS_INET6=	yes	# IPv6 is standard
+.else
+_OPSYS_HAS_INET6=	no	# IPv6 is not standard
+.endif
+_OPSYS_HAS_JAVA=	no	# Java is not standard
+_OPSYS_HAS_MANZ=	yes	# MANZ controls gzipping of man pages
+_OPSYS_HAS_OSSAUDIO=	no	# libossaudio is available
+_OPSYS_LIBTOOL_REQD=	1.5.18nb6
+_OPSYS_PERL_REQD=	5.8.3nb1 # base version of perl required
+_OPSYS_PTHREAD_AUTO=	no	# -lpthread needed for pthreads
+_OPSYS_SHLIB_TYPE=	cygwin	# shared lib type
+_PATCH_CAN_BACKUP=	yes	# native patch(1) can make backups
+_PATCH_BACKUP_ARG?=	-b -V simple -z	# switch to patch(1) for backup suffix
+# XXX
+_USE_RPATH=		no	# add rpath to LDFLAGS
+
+# flags passed to the linker to extract all symbols from static archives.
+# this is GNU ld.
+_OPSYS_WHOLE_ARCHIVE_FLAG=	-Wl,--whole-archive
+_OPSYS_NO_WHOLE_ARCHIVE_FLAG=	-Wl,--no-whole-archive
+
+_STRIPFLAG_CC?=		${_INSTALL_UNSTRIPPED:D:U-s}	# cc(1) option to strip
+_STRIPFLAG_INSTALL?=	${_INSTALL_UNSTRIPPED:D:U-s}	# install(1) option to strip
+
+# XXX
+#DEFAULT_SERIAL_DEVICE?=	/dev/tty00
+#SERIAL_DEVICES?=	/dev/tty00 /dev/tty01 /dev/tty02 /dev/tty03
+
+# poll(2) is broken; try to work around it by making autoconf believe
+# it's missing.  (Packages without autoconf will need explicit fixing.)
+#CONFIGURE_ENV+=		${GNU_CONFIGURE:Dac_cv_header_poll_h=no ac_cv_func_poll=no}
+
+# Interix has a hstrerror(3), but it's a macro, not a function.
+#CONFIGURE_ENV+=		${GNU_CONFIGURE:Dac_cv_func_hstrerror=yes}
+
+# XXX
+# check for maximum command line length and set it in configure's environment,
+# to avoid a test required by the libtool script that takes forever.
+_OPSYS_MAX_CMDLEN_CMD=	${ECHO} 262144
+
+# If games are to be installed setgid, then SETGIDGAME is set to 'yes'
+# (it defaults to 'no' as per defaults/mk.conf).
+# Set the group and mode to meaningful values in that case (defaults to
+# BINOWN, BINGRP and BINMODE as per defaults/mk.conf).
+# FIXME: Adjust to work on this system and enable the lines below.
+#.if !(empty(SETGIDGAME:M[yY][eE][sS]))
+#GAMES_USER=		games
+#GAMES_GROUP=		games
+#GAMEOWN=		${GAMES_USER}
+#GAMEGRP=		${GAMES_GROUP}
+#GAMEMODE=		2555
+#GAMEDIRMODE=		0775
+#.endif
+
+#
+# On cygwin, even privileged users are not allowed to modify files if
+# file permission bits are not set.  (Unlike on Unix where root can
+# always write or delete files regardless with file permissions).
+#
+# We need to change file permissions so that privileged user can add
+# new files or modify files under ${WRKDIR}.
+#
+# XXX: This takes VERY long time on cygwin.
+#
+.if !defined(UNPRIVILEGED) || empty(UNPRIVILEGED:M[Yy][Ee][Ss])
+unprivileged-install-hook: change-permission-of-workdir
+.endif
+
+.PHONY: change-permission-of-workdir
+change-permission-of-workdir:
+	@${ECHO_MSG} Changing workdir permission for su-install.
+	${RUN} /bin/find ${WRKDIR:Q} \! -user ${BINOWN:Q} \! -type l | \
+		while read file; do \
+		${CHGRP} ${BINGRP:Q} $$file; \
+		${CHMOD} g+w $$file; done
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/plist/libtool-expand
--- a/mk/plist/libtool-expand	Fri Jul 03 02:24:13 2009 +0900
+++ b/mk/plist/libtool-expand	Sat Jul 11 13:40:56 2009 +0900
@@ -89,5 +89,17 @@
 			fi
 			${ECHO} "$libpath"
 		done
+
+		if ${TEST} "${OPSYS}" = "Cygwin"; then
+		    if ${TEST} -n "${dlname}"; then
+			dir=`dirname "$lapath"`
+			if ${TEST} -f "$dir/$dlname"; then
+			    # This will generate messy path like
+			    #   ./lib/../bin/cygfoo.dll
+			    # It will be cleaned up by shlib-cygwin.awk
+			    ${ECHO} "$dir/$dlname"
+			fi
+		    fi
+		fi
 	fi
 done | ${SORT} -u
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/plist/plist-cygwin.awk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/plist/plist-cygwin.awk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,18 @@
+# $NetBSD$
+#
+### Executable binary files on Cygwin:
+###    Executable binary files have .exe suffix.
+###    Cygwin's /bin/install automatically adds .exe when necessary.
+###    "test -f foo" succeeds when foo.exe exists.
+
+BEGIN {
+	PREFIX = ENVIRON["PREFIX"] ? ENVIRON["PREFIX"] : "/usr/pkg"
+	TEST = ENVIRON["TEST"] ? ENVIRON["TEST"] : "test"
+}
+
+!/^@/ {
+	cmd = TEST " -f " PREFIX "/" $0 ".exe"
+	if (system(cmd) == 0) {
+		$0 = $0 ".exe"
+	}
+}
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/plist/plist.mk
--- a/mk/plist/plist.mk	Fri Jul 03 02:24:13 2009 +0900
+++ b/mk/plist/plist.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -181,6 +181,9 @@
 _PLIST_AWK+=		-f ${.CURDIR}/../../mk/plist/plist-info.awk
 _PLIST_AWK+=		-f ${.CURDIR}/../../mk/plist/plist-man.awk
 _PLIST_AWK+=		-f ${.CURDIR}/../../mk/plist/plist-libtool.awk
+.if ${OPSYS} == "Cygwin"
+_PLIST_AWK+=		-f ${.CURDIR}/../../mk/plist/plist-cygwin.awk
+.endif
 _PLIST_AWK+=		-f ${.CURDIR}/../../mk/plist/plist-default.awk
 
 _PLIST_INFO_AWK+=	-f ${.CURDIR}/../../mk/plist/plist-functions.awk
@@ -192,6 +195,7 @@
 _SHLIB_AWKFILE.SOM=	${.CURDIR}/../../mk/plist/shlib-som.awk
 _SHLIB_AWKFILE.aixlib=	${.CURDIR}/../../mk/plist/shlib-elf.awk
 _SHLIB_AWKFILE.a.out=	${.CURDIR}/../../mk/plist/shlib-aout.awk
+_SHLIB_AWKFILE.cygwin=	${.CURDIR}/../../mk/plist/shlib-cygwin.awk
 _SHLIB_AWKFILE.dylib=	${.CURDIR}/../../mk/plist/shlib-dylib.awk
 _SHLIB_AWKFILE.none=	${.CURDIR}/../../mk/plist/shlib-none.awk
 
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/plist/shlib-cygwin.awk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/plist/shlib-cygwin.awk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,25 @@
+# $NetBSD$
+#
+### 
+### Shared libraries on Cygwin:
+###    libfoo.dll.a and libfoo.la are installed to ${PREFIX}/lib
+###    cygfoo.dll is installed to ${PREFIX}/bin
+### This script cleans up the entries for *.dll added by ./libtool-expand
+###
+
+# 
+
+/^\.\// {
+	# remove leading "./"
+	gsub(/^(\.\/)+/, "")
+}
+
+/\.\./ {
+	# remove foo/../
+	gsub(/[^\/]+\/\.\.\//, "")
+	gsub(/[^\/]+\/\.\.$/, "")
+}
+
+{
+	print
+}
diff -r 2aaecc416cc2 -r a9d5b29099c7 mk/tools/tools.Cygwin.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/tools/tools.Cygwin.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,96 @@
+# $NetBSD: tools.Interix.mk,v 1.21 2006/11/06 19:18:42 tv Exp $
+#
+# System-supplied tools for the Interix operating system.
+
+TOOLS_PLATFORM.[?=		/bin/[
+TOOLS_PLATFORM.awk?=		/bin/awk
+TOOLS_PLATFORM.basename?=	/bin/basename
+TOOLS_PLATFORM.bash?=		/bin/bash
+.if exists(/bin/bison)
+TOOLS_PLATFORM.bison?=		/bin/bison
+TOOLS_PLATFORM.bison-yacc?=	/bin/bison -y
+.endif
+.if exists(/bin/bzcat)
+TOOLS_PLATFORM.bzcat?=		/bin/bzcat
+.elif exists(/bin/bzip2)
+TOOLS_PLATFORM.bzcat?=		/bin/bzip2 -cd
+.endif
+.if exists(/bin/bzip2)
+TOOLS_PLATFORM.bzip2?=		/bin/bzip2
+.endif
+
+TOOLS_PLATFORM.cat?=		/bin/cat
+TOOLS_PLATFORM.chgrp?=		/bin/chgrp
+TOOLS_PLATFORM.chmod?=		/bin/chmod
+TOOLS_PLATFORM.chown?=		/bin/chown
+TOOLS_PLATFORM.cmp?=		/bin/cmp
+TOOLS_PLATFORM.cp?=		/bin/cp
+TOOLS_PLATFORM.csh?=		/bin/csh
+TOOLS_PLATFORM.cut?=		/bin/cut
+TOOLS_PLATFORM.date?=		/bin/date
+TOOLS_PLATFORM.diff?=		/bin/diff
+TOOLS_PLATFORM.dirname?=	/bin/dirname
+TOOLS_PLATFORM.echo?=		echo			# shell builtin
+TOOLS_PLATFORM.egrep?=		/bin/egrep
+TOOLS_PLATFORM.env?=		/bin/env
+TOOLS_PLATFORM.expr?=		/bin/expr
+TOOLS_PLATFORM.false?=		false			# shell builtin
+TOOLS_PLATFORM.fgrep?=		/bin/fgrep
+TOOLS_PLATFORM.file?=		/bin/file
+TOOLS_PLATFORM.find?=		/bin/find
+.if exists(/bin/flex)
+TOOLS_PLATFORM.flex?=		/bin/flex
+TOOLS_PLATFORM.lex?=		/bin/flex
+.endif
+TOOLS_PLATFORM.grep?=		/bin/grep
+TOOLS_PLATFORM.gunzip?=		/bin/gunzip -f
+TOOLS_PLATFORM.gzcat?=		/bin/zcat
+TOOLS_PLATFORM.gzip?=		/bin/gzip -nf ${GZIP}
+TOOLS_PLATFORM.head?=		/bin/head
+TOOLS_PLATFORM.hostname?=	/bin/hostname
+TOOLS_PLATFORM.id?=		/bin/id
+TOOLS_PLATFORM.install?=	/bin/install
+.if exists(/bin/install-info)
+TOOLS_PLATFORM.install-info?=	/bin/install-info
+.endif
+TOOLS_PLATFORM.ln?=		/bin/ln
+TOOLS_PLATFORM.ls?=		/bin/ls
+TOOLS_PLATFORM.m4?=		/bin/m4
+TOOLS_PLATFORM.mail?=		/bin/mail
+.if exists(/bin/make)
+TOOLS_PLATFORM.gmake?=		/bin/make
+.endif
+.if exists(/bin/makeinfo)
+TOOLS_PLATFORM.makeinfo?=	/bin/makeinfo
+.endif
+TOOLS_PLATFORM.mkdir?=		/bin/mkdir -p
+TOOLS_PLATFORM.mktemp?=		/bin/mktemp
+TOOLS_PLATFORM.mv?=		/bin/mv
+TOOLS_PLATFORM.nice?=		/bin/nice
+.if exists(/bin/perl)
+TOOLS_PLATFORM.perl?=		/bin/perl
+.endif
+.if exists(/bin/patch)
+TOOLS_PLATFORM.patch?=		/bin/patch
+.endif
+.if exists(/bin/pkg-config)
+TOOLS_PLATFORM.pkg-config?=	/bin/pkg-config
+.endif
+TOOLS_PLATFORM.printf?=		/bin/printf
+TOOLS_PLATFORM.pwd?=		/bin/pwd
+TOOLS_PLATFORM.rm?=		/bin/rm
+TOOLS_PLATFORM.rmdir?=		/bin/rmdir
+TOOLS_PLATFORM.sh?=		/bin/sh
+TOOLS_PLATFORM.sleep?=		/bin/sleep
+TOOLS_PLATFORM.sort?=		/bin/sort
+TOOLS_PLATFORM.strip?=		/bin/strip
+TOOLS_PLATFORM.tail?=		/bin/tail
+TOOLS_PLATFORM.tee?=		/bin/tee
+TOOLS_PLATFORM.test?=		test			# shell builtin
+TOOLS_PLATFORM.touch?=		/bin/touch
+TOOLS_PLATFORM.tr?=		/bin/tr
+TOOLS_PLATFORM.true?=		true			# shell builtin
+TOOLS_PLATFORM.tsort?=		/bin/tsort
+TOOLS_PLATFORM.wc?=		/bin/wc
+TOOLS_PLATFORM.xargs?=		/bin/xargs
+TOOLS_PLATFORM.sed?=		/bin/sed
diff -r 2aaecc416cc2 -r a9d5b29099c7 net/libfetch/files/common.h
--- a/net/libfetch/files/common.h	Fri Jul 03 02:24:13 2009 +0900
+++ b/net/libfetch/files/common.h	Sat Jul 11 13:40:56 2009 +0900
@@ -47,7 +47,7 @@
 
 #if !defined(__sun) && !defined(__hpux) && !defined(__INTERIX) && \
     !defined(__digital__) && !defined(__linux) && !defined(__MINT__) && \
-    !defined(__sgi)
+    !defined(__sgi) && !defined(__CYGWIN__)
 #define HAVE_SA_LEN
 #endif
 
diff -r 2aaecc416cc2 -r a9d5b29099c7 net/libfetch/files/ftp.c
--- a/net/libfetch/files/ftp.c	Fri Jul 03 02:24:13 2009 +0900
+++ b/net/libfetch/files/ftp.c	Sat Jul 11 13:40:56 2009 +0900
@@ -134,6 +134,7 @@
 	    isdigit((unsigned char)foo[2]) &&	\
 	    foo[3] == '-')
 
+#ifdef INET6
 /*
  * Translate IPv4 mapped IPv6 address to IPv4 address
  */
@@ -159,6 +160,7 @@
 	sin4->sin_len = sizeof(struct sockaddr_in);
 #endif
 }
+#endif /* INET6 */
 
 /*
  * Get server response
@@ -621,7 +623,9 @@
     int mode, off_t offset, const char *flags)
 {
 	struct sockaddr_storage sa;
+#ifdef	INET6
 	struct sockaddr_in6 *sin6;
+#endif
 	struct sockaddr_in *sin4;
 	const char *bindaddr;
 	const char *filename;
@@ -653,8 +657,10 @@
 	l = sizeof(sa);
 	if (getsockname(conn->sd, (struct sockaddr *)&sa, &l) == -1)
 		goto sysouch;
+#ifdef	INET6
 	if (sa.ss_family == AF_INET6)
 		unmappedaddr((struct sockaddr_in6 *)&sa, &l);
+#endif /* INET6 */
 
 retry_mode:
 
@@ -678,6 +684,7 @@
 			if ((e = ftp_cmd(conn, "PASV")) != FTP_PASSIVE_MODE)
 				goto ouch;
 			break;
+#ifdef	INET6
 		case AF_INET6:
 			if ((e = ftp_cmd(conn, "EPSV")) != FTP_EPASSIVE_MODE) {
 				if (e == -1)
@@ -687,6 +694,7 @@
 					goto ouch;
 			}
 			break;
+#endif
 		default:
 			e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */
 			goto ouch;
@@ -749,9 +757,12 @@
 		l = sizeof(sa);
 		if (getpeername(conn->sd, (struct sockaddr *)&sa, &l) == -1)
 			goto sysouch;
+#ifdef	INET6
 		if (sa.ss_family == AF_INET6)
 			unmappedaddr((struct sockaddr_in6 *)&sa, &l);
+#endif
 		switch (sa.ss_family) {
+#ifdef	INET6
 		case AF_INET6:
 			sin6 = (struct sockaddr_in6 *)&sa;
 			if (e == FTP_EPASSIVE_MODE)
@@ -761,6 +772,7 @@
 				memcpy(&sin6->sin6_port, addr + 19, 2);
 			}
 			break;
+#endif
 		case AF_INET:
 			sin4 = (struct sockaddr_in *)&sa;
 			if (e == FTP_EPASSIVE_MODE)
@@ -803,10 +815,13 @@
 		int arg;
 #endif
 		int d;
+#ifdef	INET6
 		char *ap;
 		char hname[INET6_ADDRSTRLEN];
+#endif
 
 		switch (sa.ss_family) {
+#ifdef	INET6
 		case AF_INET6:
 			((struct sockaddr_in6 *)&sa)->sin6_port = 0;
 #ifdef IPV6_PORTRANGE
@@ -816,6 +831,7 @@
 				goto sysouch;
 #endif
 			break;
+#endif
 		case AF_INET:
 			((struct sockaddr_in *)&sa)->sin_port = 0;
 #ifdef IP_PORTRANGE
@@ -846,6 +862,7 @@
 			    (a >> 8) & 0xff, a & 0xff,
 			    (p >> 8) & 0xff, p & 0xff);
 			break;
+#ifdef	INET6
 		case AF_INET6:
 #define UC(b)	(((int)b)&0xff)
 			e = -1;
@@ -873,6 +890,7 @@
 				    ntohs(sin6->sin6_port)        & 0xff);
 			}
 			break;
+#endif
 		default:
 			e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */
 			goto ouch;
@@ -989,8 +1007,10 @@
 	verbose = CHECK_FLAG('v');
 	if (CHECK_FLAG('4'))
 		af = AF_INET;
+#ifdef	AF_INET6
 	else if (CHECK_FLAG('6'))
 		af = AF_INET6;
+#endif
 
 	if (direct)
 		purl = NULL;
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/bootstrap-mk-files/Makefile
--- a/pkgtools/bootstrap-mk-files/Makefile	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/bootstrap-mk-files/Makefile	Sat Jul 11 13:40:56 2009 +0900
@@ -36,9 +36,9 @@
 	else								\
 		own_mk=mods/bsd.own.mk.in;				\
 	fi;								\
-	${SED}	-e 's|@ROOT_GROUP@|'${REAL_ROOT_GROUP}'|g'			\
-		-e 's|@ROOT_USER@|'${REAL_ROOT_USER}'|g'			\
-		-e 's|@SYSCONFDIR@|'${PKG_SYSCONFDIR}'|g'		\
+	${SED}	-e "s|@ROOT_GROUP@|${REAL_ROOT_GROUP}|g"			\
+		-e "s|@ROOT_USER@|${REAL_ROOT_USER}|g"			\
+		-e "s|@SYSCONFDIR@|${PKG_SYSCONFDIR}|g"			\
 		$$own_mk > bsd.own.mk
 
 do-install:
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/bootstrap-mk-files/files/mods/Cygwin.bsd.lib.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/bootstrap-mk-files/files/mods/Cygwin.bsd.lib.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,524 @@
+#	$NetBSD: Linux.bsd.lib.mk,v 1.3 2008/03/13 17:28:23 joerg Exp $
+#	@(#)bsd.lib.mk	8.3 (Berkeley) 4/22/94
+
+.if !target(__initialized__)
+__initialized__:
+.if exists(${.CURDIR}/../Makefile.inc)
+.include "${.CURDIR}/../Makefile.inc"
+.endif
+.include <bsd.own.mk>
+.include <bsd.obj.mk>
+.include <bsd.depall.mk>
+.MAIN:		all
+.endif
+
+.PHONY:		checkver cleanlib libinstall
+realinstall:	checkver libinstall
+clean cleandir: cleanlib
+
+.if exists(${SHLIB_VERSION_FILE})
+SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major
+SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor
+SHLIB_TEENY != . ${SHLIB_VERSION_FILE} ; echo $$teeny
+
+# Check for higher installed library versions.
+.if !defined(NOCHECKVER) && !defined(NOCHECKVER_${LIB}) && \
+	exists(${BSDSRCDIR}/lib/checkver)
+checkver:
+	@(cd ${.CURDIR} && \
+		sh ${BSDSRCDIR}/lib/checkver -v ${SHLIB_VERSION_FILE} \
+		    -d ${DESTDIR}${LIBDIR} ${LIB})
+.endif
+.endif
+
+.if !target(checkver)
+checkver:
+.endif
+
+print-shlib-major:
+.if defined(SHLIB_MAJOR)
+	@echo ${SHLIB_MAJOR}
+.else
+	@false
+.endif
+
+print-shlib-minor:
+.if defined(SHLIB_MINOR)
+	@echo ${SHLIB_MINOR}
+.else
+	@false
+.endif
+
+print-shlib-teeny:
+.if defined(SHLIB_TEENY)
+	@echo ${SHLIB_TEENY}
+.else
+	@false
+.endif
+
+.if defined(SHLIB_MAJOR) && !empty(SHLIB_MAJOR)
+.if defined(SHLIB_MINOR) && !empty(SHLIB_MINOR)
+.if defined(SHLIB_TEENY) && !empty(SHLIB_TEENY)
+SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}.${SHLIB_TEENY}
+.else
+SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}
+.endif
+.else
+SHLIB_FULLVERSION=${SHLIB_MAJOR}
+.endif
+.endif
+
+# add additional suffixes not exported.
+# .po is used for profiling object files.
+# .so is used for PIC object files.
+.SUFFIXES: .out .a .ln .so .po .o .s .S .c .cc .C .m .F .f .r .y .l .cl .p .h
+.SUFFIXES: .sh .m4 .m
+
+
+# Set PICFLAGS to cc flags for producing position-independent code,
+# if not already set.  Includes -DPIC, if required.
+
+# Data-driven table using make variables to control how shared libraries
+# are built for different platforms and object formats.
+# OBJECT_FMT:		currently either "ELF" or "a.out", from <bsd.own.mk>
+# SHLIB_SOVERSION:	version number to be compiled into a shared library
+#			via -soname. Usualy ${SHLIB_MAJOR} on ELF.
+#			NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR}
+#			[.${SHLIB_TEENY}]]
+# SHLIB_SHFLAGS:	Flags to tell ${LD} to emit shared library.
+#			with ELF, also set shared-lib version for ld.so.
+# SHLIB_LDSTARTFILE:	support .o file, call C++ file-level constructors
+# SHLIB_LDENDFILE:	support .o file, call C++ file-level destructors
+# FPICFLAGS:		flags for ${FC} to compile .[fF] files to .so objects.
+# CPPICFLAGS:		flags for ${CPP} to preprocess .[sS] files for ${AS}
+# CPICFLAGS:		flags for ${CC} to compile .[cC] files to .so objects.
+# CAPICFLAGS		flags for {$CC} to compiling .[Ss] files
+#		 	(usually just ${CPPPICFLAGS} ${CPICFLAGS})
+# APICFLAGS:		flags for ${AS} to assemble .[sS] to .so objects.
+
+.if ${MACHINE_ARCH} == "alpha"
+		# Alpha-specific shared library flags
+FPICFLAGS ?= -fPIC
+CPICFLAGS ?= -fPIC -DPIC
+CPPPICFLAGS?= -DPIC 
+CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
+APICFLAGS ?=
+.elif ${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb"
+		# mips-specific shared library flags
+
+# On mips, all libs are compiled with ABIcalls, not just sharedlibs.
+MKPICLIB= no
+
+# so turn shlib PIC flags on for ${AS}.
+AINC+=-DABICALLS
+AFLAGS+= -fPIC
+AS+=	-KPIC
+
+.elif ${MACHINE_ARCH} == "vax" && ${OBJECT_FMT} == "ELF"
+# On the VAX, all object are PIC by default, not just sharedlibs.
+MKPICLIB= no
+
+.elif (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") && \
+       ${OBJECT_FMT} == "ELF"
+
+FPICFLAGS ?= -fPIC
+CPICFLAGS ?= -fPIC -DPIC
+CPPPICFLAGS?= -DPIC 
+CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
+APICFLAGS ?= -KPIC
+
+.else
+
+# Platform-independent flags for NetBSD a.out shared libraries (and PowerPC)
+SHLIB_LDSTARTFILE=
+SHLIB_LDENDFILE=
+SHLIB_SOVERSION=${SHLIB_FULLVERSION}
+SHLIB_SHFLAGS=
+FPICFLAGS ?= -fPIC
+CPICFLAGS?= -fPIC -DPIC
+CPPPICFLAGS?= -DPIC 
+CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
+APICFLAGS?= -k
+
+.endif
+
+MKPICLIB?= yes
+
+# Platform-independent linker flags for ELF shared libraries
+.if ${OBJECT_FMT} == "ELF"
+SHLIB_SOVERSION=	${SHLIB_MAJOR}
+SHLIB_SHFLAGS=		-soname lib${LIB}.so.${SHLIB_SOVERSION}
+SHLIB_LDSTARTFILE?=	${DESTDIR}/usr/lib/crtbeginS.o
+SHLIB_LDENDFILE?=	${DESTDIR}/usr/lib/crtendS.o
+.endif
+
+CFLAGS+=	${COPTS}
+FFLAGS+=	${FOPTS}
+
+.c.o:
+.if defined(COPTS) && !empty(COPTS:M*-g*)
+	${COMPILE.c} ${.IMPSRC}
+.else
+	@echo ${COMPILE.c:Q} ${.IMPSRC}
+	@${COMPILE.c} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.c.po:
+.if defined(COPTS) && !empty(COPTS:M*-g*)
+	${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.c:Q} -pg ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.c.so:
+.if defined(COPTS) && !empty(COPTS:M*-g*)
+	${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.c:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.c.ln:
+	${LINT} ${LINTFLAGS} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC}
+
+.cc.o .C.o:
+.if defined(COPTS) && !empty(COPTS:M*-g*)
+	${COMPILE.cc} ${.IMPSRC}
+.else
+	@echo ${COMPILE.cc:Q} ${.IMPSRC}
+	@${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.cc.po .C.po:
+.if defined(COPTS) && !empty(COPTS:M*-g*)
+	${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.cc:Q} -pg ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.cc.so .C.so:
+.if defined(COPTS) && !empty(COPTS:M*-g*)
+	${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.cc:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.f.o:
+.if defined(FOPTS) && !empty(FOPTS:M*-g*)
+	${COMPILE.f} ${.IMPSRC}
+.else
+	@echo ${COMPILE.f:Q} ${.IMPSRC}
+	@${COMPILE.f} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.f.po:
+.if defined(FOPTS) && !empty(FOPTS:M*-g*)
+	${COMPILE.f} -pg ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.f:Q} -pg ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.f} -pg ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.f.so:
+.if defined(FOPTS) && !empty(FOPTS:M*-g*)
+	${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.f:Q} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.f.ln:
+	${ECHO} Skipping lint for Fortran libraries.
+
+.m.o:
+.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*)
+	${COMPILE.m} ${.IMPSRC}
+.else
+	@echo ${COMPILE.m:Q} ${.IMPSRC}
+	@${COMPILE.m} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.m.po:
+.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*)
+	${COMPILE.m} -pg ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.m:Q} -pg ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.m} -pg ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.m.so:
+.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*)
+	${COMPILE.m} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+.else
+	@echo ${COMPILE.m:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.m} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+.endif
+
+.S.o .s.o:
+	@echo ${COMPILE.S:Q} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC}
+	@${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+
+.S.po .s.po:
+	@echo ${COMPILE.S:Q} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+
+.S.so .s.so:
+	@echo ${COMPILE.S:Q} ${CAPICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
+	@${COMPILE.S} ${CAPICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
+	@${LD} -r ${.TARGET}.o -o ${.TARGET}
+	@rm -f ${.TARGET}.o
+
+.if ${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \
+	|| ${MKLINKLIB} != "no"
+_LIBS=lib${LIB}.a
+.else
+_LIBS=
+.endif
+
+OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g}
+
+.if ${MKPROFILE} != "no"
+_LIBS+=lib${LIB}_p.a
+POBJS+=${OBJS:.o=.po}
+.endif
+
+.if ${MKPIC} != "no"
+.if ${MKPICLIB} == "no"
+SOLIB=lib${LIB}.a
+.else
+SOLIB=lib${LIB}_pic.a
+_LIBS+=${SOLIB}
+SOBJS+=${OBJS:.o=.so}
+.endif
+.if defined(SHLIB_FULLVERSION)
+_LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION}
+.endif
+.endif
+
+LOBJS+=${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
+.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS)
+_LIBS+=llib-l${LIB}.ln
+.endif
+
+.if ${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \
+	|| ${MKLINKLIB} != "no"
+ALLOBJS=${OBJS} ${POBJS} ${SOBJS}
+.else
+ALLOBJS=${POBJS} ${SOBJS} 
+.endif
+.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS)
+ALLOBJS+=${LOBJS}
+.endif
+.NOPATH: ${ALLOBJS} ${_LIBS}
+
+realall: ${SRCS} ${ALLOBJS:O} ${_LIBS}
+
+__archivebuild: .USE
+	@rm -f ${.TARGET}
+	${AR} cq ${.TARGET} ${.ALLSRC:M*o}
+	${RANLIB} ${.TARGET}
+
+__archiveinstall: .USE
+	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} -o ${LIBOWN} \
+	    -g ${LIBGRP} -m 600 ${.ALLSRC} ${.TARGET}
+	${RANLIB} -t ${.TARGET}
+	chmod ${LIBMODE} ${.TARGET}
+
+DPSRCS+=	${SRCS:M*.l:.l=.c} ${SRCS:M*.y:.y=.c}
+CLEANFILES+=	${DPSRCS}
+.if defined(YHEADER)
+CLEANFILES+=	${SRCS:M*.y:.y=.h}
+.endif
+
+lib${LIB}.a:: ${OBJS} __archivebuild
+	@echo building standard ${LIB} library
+
+lib${LIB}_p.a:: ${POBJS} __archivebuild
+	@echo building profiled ${LIB} library
+
+lib${LIB}_pic.a:: ${SOBJS} __archivebuild
+	@echo building shared object ${LIB} library
+
+lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOLIB} ${DPADD} \
+    ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE}
+	@echo building shared ${LIB} library \(version ${SHLIB_FULLVERSION}\)
+	@rm -f lib${LIB}.so.${SHLIB_FULLVERSION}
+.if defined(DESTDIR)
+	$(LD) -nostdlib -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \
+	    ${SHLIB_LDSTARTFILE} \
+	    --whole-archive ${SOLIB} \
+	    --no-whole-archive ${LDADD} \
+	    -L${DESTDIR}${LIBDIR} -R${LIBDIR} \
+	    ${SHLIB_LDENDFILE}
+.else
+	$(LD) -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \
+	    ${SHLIB_LDSTARTFILE} \
+	    --whole-archive ${SOLIB} --no-whole-archive ${LDADD} \
+	    ${SHLIB_LDENDFILE}
+.endif
+.if ${OBJECT_FMT} == "ELF"
+	ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp
+	mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR}
+	ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp
+	mv -f lib${LIB}.so.tmp lib${LIB}.so
+.endif
+
+.if !empty(LOBJS)
+LLIBS?=		-lc
+llib-l${LIB}.ln: ${LOBJS}
+	@echo building llib-l${LIB}.ln
+	@rm -f llib-l${LIB}.ln
+	@${LINT} -C${LIB} ${.ALLSRC} ${LLIBS}
+.endif
+
+cleanlib:
+	rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES}
+	rm -f lib${LIB}.a ${OBJS}
+	rm -f lib${LIB}_p.a ${POBJS}
+	rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${SOBJS}
+	rm -f llib-l${LIB}.ln ${LOBJS}
+
+.if defined(SRCS)
+afterdepend: .depend
+	@(TMP=/tmp/_depend$$$$; \
+	    sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so \1.ln:/' \
+	      < .depend > $$TMP; \
+	    mv $$TMP .depend)
+.endif
+
+.if !target(libinstall)
+# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no
+libinstall::
+
+.if ${MKLINKLIB} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a
+.if !defined(UPDATE)
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}.a
+.endif
+
+.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a)
+${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE
+.endif
+${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall
+.endif
+
+.if ${MKPROFILE} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+.if !defined(UPDATE)
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+.endif
+
+.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a)
+${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE
+.endif
+${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall
+.endif
+
+.if ${MKPIC} != "no" && ${MKPICINSTALL} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.if !defined(UPDATE)
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.endif
+
+.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a)
+${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE
+.endif
+.if ${MKPICLIB} == "no"
+${DESTDIR}${LIBDIR}/lib${LIB}_pic.a:
+	rm -f ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+	ln -s lib${LIB}.a ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.else
+${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall
+.endif
+.endif
+
+.if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION)
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION}
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION}
+.if !defined(UPDATE)
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION}
+.endif
+
+.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION})
+${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE
+.endif
+${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION}
+	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} -o ${LIBOWN} \
+	    -g ${LIBGRP} -m ${LIBMODE} ${.ALLSRC} ${.TARGET}
+.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR)
+	/sbin/ldconfig -m ${LIBDIR}
+.endif
+.if ${OBJECT_FMT} == "ELF"
+	ln -sf lib${LIB}.so.${SHLIB_FULLVERSION}\
+	    ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.tmp
+	mv -f ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}.tmp\
+	    ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
+.if ${MKLINKLIB} != "no"
+	ln -sf lib${LIB}.so.${SHLIB_FULLVERSION}\
+	    ${DESTDIR}${LIBDIR}/lib${LIB}.so.tmp
+	mv -f ${DESTDIR}${LIBDIR}/lib${LIB}.so.tmp\
+	    ${DESTDIR}${LIBDIR}/lib${LIB}.so
+.endif
+.endif
+.endif
+
+.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS)
+libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
+.PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
+.if !defined(UPDATE)
+.PHONY: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
+.endif
+
+.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln)
+${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE
+.endif
+${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln
+	${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} -o ${LIBOWN} \
+	    -g ${LIBGRP} -m ${LIBMODE} ${.ALLSRC} ${DESTDIR}${LINTLIBDIR}
+.endif
+.endif
+
+.include <bsd.man.mk>
+.include <bsd.nls.mk>
+.include <bsd.files.mk>
+.include <bsd.inc.mk>
+.include <bsd.links.mk>
+.include <bsd.dep.mk>
+.include <bsd.sys.mk>
+
+# Make sure all of the standard targets are defined, even if they do nothing.
+lint regress:
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/bootstrap-mk-files/files/mods/Cygwin.sys.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/bootstrap-mk-files/files/mods/Cygwin.sys.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,196 @@
+#	$NetBSD: Interix.sys.mk,v 1.2 2006/11/11 18:24:52 jschauma Exp $
+
+unix?=		We run Unix
+OS!=		uname -s
+
+.SUFFIXES: .out .a .ln .o .s .S .c .cc .cpp .cxx .C .F .f .r .y .l .cl .p .h
+.SUFFIXES: .sh .m4
+
+.LIBS:		.a
+
+AR?=		ar
+ARFLAGS?=	rl
+RANLIB?=	ranlib
+
+AS?=		as
+AFLAGS?=
+COMPILE.s?=	${CC} ${AFLAGS} -c
+LINK.s?=	${CC} ${AFLAGS} ${LDFLAGS}
+COMPILE.S?=	${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp
+LINK.S?=	${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS}
+
+# Unless told otherwise, assume GNU CC
+CC?=		gcc
+
+DBG?=		-O
+
+CFLAGS?=	-D_ALL_SOURCE ${DBG}
+COMPILE.c?=	${CC} ${CFLAGS} ${CPPFLAGS} -c
+LINK.c?=	${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
+
+CXX?=		c++
+CXXFLAGS?=	${CFLAGS}
+COMPILE.cc?=	${CXX} ${CXXFLAGS} ${CPPFLAGS} -c
+LINK.cc?=	${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
+
+OBJC?=		${CC}
+OBJCFLAGS?=	${CFLAGS}
+COMPILE.m?=	${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
+LINK.m?=	${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
+
+CPP?=		cpp
+CPPFLAGS?=	
+
+FC?=		f77
+FFLAGS?=	-O
+RFLAGS?=
+COMPILE.f?=	${FC} ${FFLAGS} -c
+LINK.f?=	${FC} ${FFLAGS} ${LDFLAGS}
+COMPILE.F?=	${FC} ${FFLAGS} ${CPPFLAGS} -c
+LINK.F?=	${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
+COMPILE.r?=	${FC} ${FFLAGS} ${RFLAGS} -c
+LINK.r?=	${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
+
+INSTALL?=	${LOCALBASE}/bin/install-sh
+
+LEX?=		lex
+LFLAGS?=
+LEX.l?=		${LEX} ${LFLAGS}
+
+LD?=		ld
+LDFLAGS?=
+
+LINT?=		lint
+LINTFLAGS?=	-chapbxzF
+
+# Cygwin doesn't have lorder
+LORDER?=	echo
+
+MAKE?=		make
+
+NM?=		nm
+
+PC?=		pc
+PFLAGS?=
+COMPILE.p?=	${PC} ${PFLAGS} ${CPPFLAGS} -c
+LINK.p?=	${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
+
+SHELL?=		sh
+
+SIZE?=		size
+
+# Cygwin's tsort doesn't have -q
+TSORT?= 	tsort
+
+YACC?=		yacc
+YFLAGS?=
+YACC.y?=	${YACC} ${YFLAGS}
+
+# C
+.c:
+	${LINK.c} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.c.o:
+	${COMPILE.c} ${.IMPSRC}
+.c.a:
+	${COMPILE.c} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+.c.ln:
+	${LINT} ${LINTFLAGS} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC}
+
+# C++
+.cc .cpp .cxx .C:
+	${LINK.cc} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.cc.o .cpp.o .cxx.o .C.o:
+	${COMPILE.cc} ${.IMPSRC}
+.cc.a .cpp.a .cxx.a .C.a:
+	${COMPILE.cc} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+
+# Fortran/Ratfor
+.f:
+	${LINK.f} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.f.o:
+	${COMPILE.f} ${.IMPSRC}
+.f.a:
+	${COMPILE.f} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+
+.F:
+	${LINK.F} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.F.o:
+	${COMPILE.F} ${.IMPSRC}
+.F.a:
+	${COMPILE.F} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+
+.r:
+	${LINK.r} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.r.o:
+	${COMPILE.r} ${.IMPSRC}
+.r.a:
+	${COMPILE.r} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+
+# Pascal
+.p:
+	${LINK.p} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.p.o:
+	${COMPILE.p} ${.IMPSRC}
+.p.a:
+	${COMPILE.p} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+
+# Assembly
+.s:
+	${LINK.s} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.s.o:
+	${COMPILE.s} ${.IMPSRC}
+.s.a:
+	${COMPILE.s} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+.S:
+	${LINK.S} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+.S.o:
+	${COMPILE.S} ${.IMPSRC}
+.S.a:
+	${COMPILE.S} ${.IMPSRC}
+	${AR} ${ARFLAGS} $@ $*.o
+	rm -f $*.o
+
+# Lex
+.l:
+	${LEX.l} ${.IMPSRC}
+	${LINK.c} -o ${.TARGET} lex.yy.c ${LDLIBS} -ll
+	rm -f lex.yy.c
+.l.c:
+	${LEX.l} ${.IMPSRC}
+	mv lex.yy.c ${.TARGET}
+.l.o:
+	${LEX.l} ${.IMPSRC}
+	${COMPILE.c} -o ${.TARGET} lex.yy.c 
+	rm -f lex.yy.c
+
+# Yacc
+.y:
+	${YACC.y} ${.IMPSRC}
+	${LINK.c} -o ${.TARGET} y.tab.c ${LDLIBS}
+	rm -f y.tab.c
+.y.c:
+	${YACC.y} ${.IMPSRC}
+	mv y.tab.c ${.TARGET}
+.y.o:
+	${YACC.y} ${.IMPSRC}
+	${COMPILE.c} -o ${.TARGET} y.tab.c
+	rm -f y.tab.c
+
+# Shell
+.sh:
+	rm -f ${.TARGET}
+	cp ${.IMPSRC} ${.TARGET}
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/libnbcompat/files/__glob13.c
--- a/pkgtools/libnbcompat/files/__glob13.c	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/libnbcompat/files/__glob13.c	Sat Jul 11 13:40:56 2009 +0900
@@ -83,6 +83,13 @@
 #include <nbcompat/string.h>
 #include <nbcompat/unistd.h>
 
+#ifndef ARG_MAX
+#ifdef HAVE_SYS_SYSLIMITS_H
+/* for cygwin */
+#include <sys/syslimits.h>
+#endif
+#endif
+
 #if 0
 #ifdef __weak_alias
 #ifdef __LIBC12_SOURCE__
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/libnbcompat/files/configure
--- a/pkgtools/libnbcompat/files/configure	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/libnbcompat/files/configure	Sat Jul 11 13:40:56 2009 +0900
@@ -4230,6 +4230,7 @@
 
 
 
+
 for ac_header in alloca.h assert.h ctype.h dirent.h err.h errno.h fcntl.h \
 	fnmatch.h fts.h grp.h inttypes.h libutil.h limits.h \
 	machine/endian.h ndir.h netdb.h paths.h pwd.h signal.h \
@@ -4238,7 +4239,7 @@
 	sys/file.h sys/mkdev.h sys/ndir.h sys/param.h sys/socket.h sys/stat.h \
 	sys/statfs.h sys/statvfs.h sys/time.h sys/ttycom.h sys/types.h \
 	sys/uio.h sys/vfs.h sysexits.h termcap.h time.h tzfile.h unistd.h \
-	util.h utime.h
+	util.h utime.h sys/syslimits.h
 
 do
 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -5992,6 +5993,78 @@
 fi
 
 
+{ $as_echo "$as_me:$LINENO: checking whether optarg is declared" >&5
+$as_echo_n "checking whether optarg is declared... " >&6; }
+if test "${ac_cv_have_decl_optarg+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+	#include <stdio.h>
+	#include <stdlib.h>
+	#include <unistd.h>
+
+
+int
+main ()
+{
+#ifndef optarg
+  (void) optarg;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_optarg=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl_optarg=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_optarg" >&5
+$as_echo "$ac_cv_have_decl_optarg" >&6; }
+if test "x$ac_cv_have_decl_optarg" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_OPTARG 1
+_ACEOF
+
+:
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_OPTARG 0
+_ACEOF
+
+:
+fi
 { $as_echo "$as_me:$LINENO: checking whether optind is declared" >&5
 $as_echo_n "checking whether optind is declared... " >&6; }
 if test "${ac_cv_have_decl_optind+set}" = set; then
@@ -12021,7 +12094,7 @@
 done
 
 
-if test $need_setmode = yes; then
+if test "$need_setmode" = yes; then
 	case " $LIBOBJS " in
   *" setmode.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS setmode.$ac_objext"
@@ -12164,6 +12237,73 @@
 
 
 fi
+{ $as_echo "$as_me:$LINENO: checking whether setpassent is declared" >&5
+$as_echo_n "checking whether setpassent is declared... " >&6; }
+if test "${ac_cv_have_decl_setpassent+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+#ifndef setpassent
+  (void) setpassent;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_setpassent=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl_setpassent=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_setpassent" >&5
+$as_echo "$ac_cv_have_decl_setpassent" >&6; }
+if test "x$ac_cv_have_decl_setpassent" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SETPASSENT 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SETPASSENT 0
+_ACEOF
+
+
+fi
 
 
 
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/libnbcompat/files/configure.ac
--- a/pkgtools/libnbcompat/files/configure.ac	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/libnbcompat/files/configure.ac	Sat Jul 11 13:40:56 2009 +0900
@@ -41,7 +41,7 @@
 	sys/file.h sys/mkdev.h sys/ndir.h sys/param.h sys/socket.h sys/stat.h \
 	sys/statfs.h sys/statvfs.h sys/time.h sys/ttycom.h sys/types.h \
 	sys/uio.h sys/vfs.h sysexits.h termcap.h time.h tzfile.h unistd.h \
-	util.h utime.h
+	util.h utime.h sys/syslimits.h
 ])
 AC_CHECK_HEADERS([sys/mount.h], [:], [:], [
 	AC_INCLUDES_DEFAULT
@@ -142,7 +142,7 @@
 	[AS_HELP_STRING([--enable-bsd-getopt],
 			[force use of BSDish getopt implementation])])
 
-AC_CHECK_DECLS([optind, optreset], [:], [:], [
+AC_CHECK_DECLS([optarg, optind, optreset], [:], [:], [
 	#include <stdio.h>
 	#include <stdlib.h>
 	#include <unistd.h>
@@ -295,11 +295,11 @@
 need_setmode=no
 AC_CHECK_FUNCS([getmode setmode], [:], [need_setmode=yes])
 
-if test $need_setmode = yes; then
+if test "$need_setmode" = yes; then
 	AC_LIBOBJ(setmode)
 fi
 
-AC_CHECK_DECLS([endgrent, endpwent])
+AC_CHECK_DECLS([endgrent, endpwent, setpassent])
 
 need_pwcache=no
 AC_CHECK_FUNCS([gid_from_group group_from_gid pwcache_groupdb \
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/libnbcompat/files/nbcompat/config.h.in
--- a/pkgtools/libnbcompat/files/nbcompat/config.h.in	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/libnbcompat/files/nbcompat/config.h.in	Sat Jul 11 13:40:56 2009 +0900
@@ -32,6 +32,10 @@
    don't. */
 #undef HAVE_DECL_ENDPWENT
 
+/* Define to 1 if you have the declaration of `optarg', and to 0 if you don't.
+   */
+#undef HAVE_DECL_OPTARG
+
 /* Define to 1 if you have the declaration of `optind', and to 0 if you don't.
    */
 #undef HAVE_DECL_OPTIND
@@ -40,6 +44,10 @@
    don't. */
 #undef HAVE_DECL_OPTRESET
 
+/* Define to 1 if you have the declaration of `setpassent', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SETPASSENT
+
 /* Define to 1 if you have the declaration of `snprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_SNPRINTF
@@ -444,6 +452,9 @@
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
+/* Define to 1 if you have the <sys/syslimits.h> header file. */
+#undef HAVE_SYS_SYSLIMITS_H
+
 /* Define to 1 if you have the <sys/time.h> header file. */
 #undef HAVE_SYS_TIME_H
 
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/libnbcompat/files/nbcompat/pwd.h
--- a/pkgtools/libnbcompat/files/nbcompat/pwd.h	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/libnbcompat/files/nbcompat/pwd.h	Sat Jul 11 13:40:56 2009 +0900
@@ -40,7 +40,7 @@
  * Declare functions that may be missing in <pwd.h>.
  */
 
-#if !HAVE_SETPASSENT
+#if !HAVE_SETPASSENT || !HAVE_DECL_SETPASSENT
 int setpassent(int);
 #endif
 
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/x11-links/Makefile
--- a/pkgtools/x11-links/Makefile	Fri Jul 03 02:24:13 2009 +0900
+++ b/pkgtools/x11-links/Makefile	Sat Jul 11 13:40:56 2009 +0900
@@ -30,7 +30,9 @@
 PKG_FAIL_REASON+=	"${PKGNAME} requires X headers to be installed"
 .endif
 
-.if ${OPSYS} == "IRIX"
+.if ${OPSYS} == "Cygwin"
+.  include "cygwin.mk"
+.elif ${OPSYS} == "IRIX"
 .  include "xsgi.mk"
 .elif ${OPSYS} == "OSF1"
 .  include "xdec.mk"
diff -r 2aaecc416cc2 -r a9d5b29099c7 pkgtools/x11-links/cygwin.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/x11-links/cygwin.mk	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,38 @@
+# $NetBSD$
+
+#USE_BUILTIN.libX11?= yes
+
+.include "xfree.mk"
+_FILES_LIST_XFREE:= ${FILES_LIST}
+
+pre-build: ${WRKDIR}/cygwin
+
+#
+# Convert entries in files lists.
+#    lib/libfoo.so -> lib/libfoo.dll.a
+#    lib/libfoo.so.N -> lib/libfoo-N.dll.a
+#    lib/libfoo.so.N.M -> lib/libfoo-N.dll.a
+#
+# (The last one is necessary because some libraries are listed only as
+# *.so.N.M in files lists)
+#
+
+${WRKDIR}/cygwin: ${_FILES_LIST_XFREE}
+	${AWK} '					\
+	{ sub(/@ABI@/,"") }				\
+	/lib\/lib.*\.so/ {				\
+		l = $$0;				\
+		sub(/\.so.*$$/, "", l);			\
+		sub(/lib\/lib.*\.so\.?/, "");		\
+		if ($$0 == "") {			\
+			print l ".dll.a";		\
+		} else if ($$0 ~ /^[0-9]+(\.[0-9]+)?$$/ ) {	\
+			v = $$0;			\
+			sub(/\.[0-9]+$$/, "", v);	\
+			print l "-" v ".dll.a"		\
+	}  }'						\
+	${_FILES_LIST_XFREE} > ${.TARGET}
+
+
+FILES_LIST+=	${WRKDIR}/cygwin
+
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/id_cygwin/DESCR
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/id_cygwin/DESCR	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,3 @@
+Cygwin's id command can't handle numeric IDs.
+This is a wrapper script to work around it.
+
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/id_cygwin/Makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/id_cygwin/Makefile	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,26 @@
+# $NetBSD: Makefile,v 1.7 2007/04/04 14:37:53 tv Exp $
+#
+
+DISTNAME=		id_cygwin-20080925
+CATEGORIES=		sysutils
+MASTER_SITES=		# empty
+DISTFILES=		# empty
+
+MAINTAINER=		pkgsrc@NetBSD.org
+COMMENT=		Wrapper for Cygwin's id command
+
+ONLY_FOR_PLATFORM=	Cygwin-*-*
+
+PKG_INSTALLATION_TYPES=	overwrite pkgviews
+
+NO_CHECKSUM=		yes
+NO_CONFIGURE=		yes
+NO_BUILD=		yes
+PKG_PRESERVE=		yes
+
+INSTALLATION_DIRS=	bin
+
+do-install:
+	${INSTALL_SCRIPT} ${FILESDIR}/id_cygwin.sh ${PREFIX}/bin/id
+
+.include "../../mk/bsd.pkg.mk"
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/id_cygwin/PLIST
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/id_cygwin/PLIST	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,2 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2004/04/27 01:45:22 tv Exp $
+bin/id
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/id_cygwin/files/id_cygwin.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/id_cygwin/files/id_cygwin.sh	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# Cygwin's id command can't handle numeric IDs.
+# This is a wrapper script to work around it.
+
+get_user_name () {
+    awk -F: '$3 == '"$1"' {print $1; exit}' /etc/passwd
+}
+
+
+newargs=
+sep=
+for arg
+do
+  case "$arg" in
+  [0-9]*)
+      ans="$(get_user_name "$arg")"
+      if [ -z "$ans" ]; then
+	  echo >&2 "Unknown user $arg"
+	  exit 1
+      fi
+      arg="$ans"
+  esac
+  newarg="$newarg$sep$arg"
+  sep=:
+done
+
+IFS=:
+set -- $newarg
+/bin/id "$@"
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/su_cygwin/DESCR
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/su_cygwin/DESCR	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,7 @@
+SU command doesn't work on Cygwin.
+
+see http://....TBD
+
+This script simulates su using ssh.  You need to enable sshd to make this work.
+
+
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/su_cygwin/MESSAGE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/su_cygwin/MESSAGE	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,3 @@
+This program requires SSH server running on your machine.
+To start SSH server, execute following command on cygwin terminal.
+# cygrunsrv -S sshd
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/su_cygwin/Makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/su_cygwin/Makefile	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,25 @@
+# $NetBSD: Makefile,v 1.7 2007/04/04 14:37:53 tv Exp $
+#
+
+DISTNAME=		su_cygwin-20081017
+CATEGORIES=		sysutils
+MASTER_SITES=		# empty
+DISTFILES=		# empty
+
+MAINTAINER=		pkgsrc@NetBSD.org
+COMMENT=		Simulates su by means of ssh
+
+ONLY_FOR_PLATFORM=	Cygwin-*-*
+
+PKG_INSTALLATION_TYPES=	overwrite pkgviews
+
+NO_CHECKSUM=		yes
+NO_CONFIGURE=		yes
+NO_BUILD=		yes
+PKG_PRESERVE=		yes
+
+
+do-install:
+	${INSTALL_SCRIPT} ${FILESDIR}/su_cygwin.sh ${PREFIX}/bin/su
+
+.include "../../mk/bsd.pkg.mk"
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/su_cygwin/PLIST
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/su_cygwin/PLIST	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,2 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2004/04/27 01:45:22 tv Exp $
+bin/su
diff -r 2aaecc416cc2 -r a9d5b29099c7 sysutils/su_cygwin/files/su_cygwin.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysutils/su_cygwin/files/su_cygwin.sh	Sat Jul 11 13:40:56 2009 +0900
@@ -0,0 +1,101 @@
+#!/bin/sh
+
+#
+# Simulate SU command by SSH
+#
+
+login=NO
+currentuser="$(/bin/id -u -n)"
+
+while getopts "l" opt; do
+	case $opt in
+	l) login=YES;;
+	*)
+		echo >&2 "$0: Unknown option $opt"
+		exit 1
+	esac
+done
+
+shift $[$OPTIND - 1]
+
+if [ X"$1" = X- ]; then
+	login=YES
+	shift
+fi
+
+if [ $# -le 0 ]; then
+    user="${CYGWIN_ROOT_USER-Administrator}"
+else
+    user="$1";
+    shift
+fi
+
+if [ -n "$command" ]; then
+	set -- "$command" "$@"
+fi
+
+
+pwd=$(/bin/pwd)
+
+# XXX: get target user's login shell
+shell=/bin/sh
+tmpscript=/tmp/su_script.$$
+umask=$(umask)
+umask 022
+
+trap "rm -f $tmpscript" 0 INT QUIT TERM
+
+cat >$tmpscript <<EOF
+#!/bin/sh
+
+root=NO
+if id -nG | grep -q Administrators; then
+	root=YES
+fi
+
+SU_FROM="$currentuser"
+export SU_FROM
+SHELL="$shell"
+PATH="$PATH"
+umask $umask
+
+EOF
+
+if [ $login = NO ]; then
+    cat >> $tmpscript <<EOF
+if [ \$root = YES ]; then
+USER="$currentuser"
+else
+USER="$user"
+fi
+LOGNAME="\$USER"
+
+cd "$pwd"
+EOF
+else
+    cat >> $tmpscript <<EOF
+USER="$user"
+LOGNAME="\$USER"
+EOF
+fi
+
+echo -n "$shell " >> $tmpscript
+if [ $login = YES ]; then
+    echo -n "-l " >> $tmpscript
+fi
+
+if [ $# -le 0 ]; then
+    echo -n "-i " >> $tmpscript
+    sshopt='-t'
+else
+    sshopt=''
+    for a
+    do
+         b=$(echo "$a" | sed 's/"/\\"/g')
+         echo -n "\"$b\" " >> $tmpscript
+    done
+fi
+echo >> $tmpscript
+
+chmod +x $tmpscript
+ssh $sshopt "$user"@localhost $tmpscript
