[csw-devel] SF.net SVN: gar:[2363] csw/mgar/gar/v2

dmichelsen at users.sourceforge.net dmichelsen at users.sourceforge.net
Wed Nov 26 16:24:13 CET 2008


Revision: 2363
          http://gar.svn.sourceforge.net/gar/?rev=2363&view=rev
Author:   dmichelsen
Date:     2008-11-26 15:24:13 +0000 (Wed, 26 Nov 2008)

Log Message:
-----------
mgar garv2: Migrate dam/automatic-multiarch-compile

Added Paths:
-----------
    csw/mgar/gar/v2/Makefile
    csw/mgar/gar/v2/README
    csw/mgar/gar/v2/bin/
    csw/mgar/gar/v2/categories/
    csw/mgar/gar/v2/categories/apps/
    csw/mgar/gar/v2/categories/apps/category.mk
    csw/mgar/gar/v2/categories/cpan/
    csw/mgar/gar/v2/categories/cpan/category.mk
    csw/mgar/gar/v2/categories/devel/
    csw/mgar/gar/v2/categories/devel/category.mk
    csw/mgar/gar/v2/categories/gnome/
    csw/mgar/gar/v2/categories/gnome/category.mk
    csw/mgar/gar/v2/categories/kde/
    csw/mgar/gar/v2/categories/kde/category.mk
    csw/mgar/gar/v2/categories/lang/
    csw/mgar/gar/v2/categories/lang/category.mk
    csw/mgar/gar/v2/categories/lib/
    csw/mgar/gar/v2/categories/lib/category.mk
    csw/mgar/gar/v2/categories/meta/
    csw/mgar/gar/v2/categories/meta/category.mk
    csw/mgar/gar/v2/categories/net/
    csw/mgar/gar/v2/categories/net/category.mk
    csw/mgar/gar/v2/categories/server/
    csw/mgar/gar/v2/categories/server/category.mk
    csw/mgar/gar/v2/categories/utils/
    csw/mgar/gar/v2/categories/utils/category.mk
    csw/mgar/gar/v2/categories/xfce/
    csw/mgar/gar/v2/categories/xfce/category.mk
    csw/mgar/gar/v2/categories/xorg/
    csw/mgar/gar/v2/categories/xorg/category.mk
    csw/mgar/gar/v2/categories/xtra/
    csw/mgar/gar/v2/categories/xtra/category.mk
    csw/mgar/gar/v2/category.mk
    csw/mgar/gar/v2/gar.common.mk
    csw/mgar/gar/v2/gar.conf.mk
    csw/mgar/gar/v2/gar.lib.mk
    csw/mgar/gar/v2/gar.mk
    csw/mgar/gar/v2/gar.pkg.mk
    csw/mgar/gar/v2/garrc.sample
    csw/mgar/gar/v2/pkg.db
    csw/mgar/gar/v2/pkglib/

Copied: csw/mgar/gar/v2/Makefile (from rev 2195, csw/branches/dam/automatic-multiarch-compile/Makefile)
===================================================================
--- csw/mgar/gar/v2/Makefile	                        (rev 0)
+++ csw/mgar/gar/v2/Makefile	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,51 @@
+FILTER_DIRS = CVS/ bin/ meta/
+# top-level Makefile for the entire tree.
+%:
+	@for i in $(filter-out $(FILTER_DIRS),$(wildcard */)) ; do \
+		$(MAKE) -C $$i $* ; \
+	done
+
+paranoid-%:
+	@for i in $(filter-out $(FILTER_DIRS),$(wildcard */)) ; do \
+		$(MAKE) -C $$i $@ || exit 2; \
+	done
+
+unbuilt:
+	@(gfind . -mindepth 3 -maxdepth 3 -name work | cut -d/ -f 3; gfind . -mindepth 2 -maxdepth 2 | cut -d/ -f3) | sort | uniq -u
+
+export BUILDLOG ?= $(shell pwd)/buildlog.txt
+
+report-%:
+	@echo "$@ started at $$(date)" >> $(BUILDLOG)
+	@for i in $(filter-out $(FILTER_DIRS),$(wildcard */)) ; do \
+		$(MAKE) -C $$i $@ || echo "	make $@ in category $$i failed" >> $(BUILDLOG); \
+	done
+	@echo "$@ completed at $$(date)" >> $(BUILDLOG)
+
+pkgdesc = `/bin/perl -ne '/DESCRIPTION\s+=\s+(.+)$$/ && print $$1' $(1)/Makefile`
+
+# Rebuild the package database
+rebuildpkgdb:
+	@echo " ==> Rebuilding package database"
+	- at rm -f pkg.db
+	@bin/build_pkgdb > pkg.db
+
+cvsdesc:
+	@for package in $(shell gfind . -type d -mindepth 2 -maxdepth 2 -not -name 'CVS' -a -not -name '00CPAN_Module_Template' | gsed -e 's/^\.\///') ; do \
+		printf "%-36s%s\n" sunx/$$package "$(call pkgdesc,$$package)" ; \
+	done
+
+GARDIR=$(CURDIR)
+include gar.mk
+
+pkgclean:
+	@if test -d "$(DESTBUILD)" ; then \
+		echo " ==> Removing $(DESTBUILD)" ; \
+		rm -rf $(DESTBUILD) ; \
+	fi
+	@if test -d "$(SPKG_SPOOLDIR)" ; then \
+		echo " ==> Removing $(SPKG_SPOOLDIR)" ; \
+		rm -rf $(SPKG_SPOOLDIR) ; \
+	fi
+
+.PHONY: unbuilt

Copied: csw/mgar/gar/v2/README (from rev 2195, csw/branches/dam/automatic-multiarch-compile/README)
===================================================================
--- csw/mgar/gar/v2/README	                        (rev 0)
+++ csw/mgar/gar/v2/README	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,18 @@
+Introduction
+--
+
+Welcome to the CSW build system.  Please visit:
+
+    http://svn.blastwave.org/wiki/GettingStarted
+
+For instructions on how to use this system.
+
+Copyrights
+--
+
+CSW is based on the GAR ports system, Copyright 2001 Nick Moffitt.  All scripts
+and add-on make modules are Copyright 2006 Cory Omand, except where otherwise
+noted.  Packaging content is Copyright 2006 Blastwave.org, except where
+otherwise noted.  Patches and source code are Copyright by their original
+authors, which may or may not be members of the Blastwave project.
+

Copied: csw/mgar/gar/v2/categories/apps/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/apps/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/apps/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/apps/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/cpan/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/cpan/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/cpan/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/cpan/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,109 @@
+
+# Set the CPAN mirror in gar.conf.mk
+MASTER_SITES ?= $(CPAN_MIRRORS)
+
+# This is common to most modules - override in module makefile if different
+MODDIST   ?= $(GARNAME)-$(GARVERSION).tar.gz
+DISTFILES += $(MODDIST)
+CHECKPATH ?= $(firstword $(CPAN_MIRRORS))
+
+# Tests are enabled by default, unless overridden at the test level
+ENABLE_TEST ?= 1
+
+# Every CPAN module depends on Perl
+#DEPENDS += lang/perl
+
+# Standard Perl module configuration script
+CONFIGURE_SCRIPTS ?= $(WORKSRC)/Makefile.PL
+
+# Calculate the CPAN author id
+GEN_AUTHOR_ID  = $(shell echo ${AUTHOR} | cut -c1)
+GEN_AUTHOR_ID := $(GEN_AUTHOR_ID)/$(shell echo ${AUTHOR} | cut -c1,2)
+GEN_AUTHOR_ID := $(GEN_AUTHOR_ID)/$(AUTHOR)
+AUTHOR_ID ?= $(GEN_AUTHOR_ID)
+
+# Source URL
+TOLOWER = $(shell echo $(1) | tr '[A-Z]' '[a-z]')
+SPKG_SOURCEURL  = http://search.cpan.org
+SPKG_SOURCEURL := $(SPKG_SOURCEURL)/~$(call TOLOWER,$(AUTHOR))
+SPKG_SOURCEURL := $(SPKG_SOURCEURL)/$(GARNAME)
+
+include gar/gar.mk
+
+# Canned commands for finding packlist files
+find_packlist = $(shell find $(1) -type f -name .packlist | head -1)
+find_newest_packlist = $(shell find $(1) -type f -name .packlist -cnewer $(TIMESTAMP))
+
+# Fix package packlist for installation
+PERL_PACKLIST ?= $(call find_newest_packlist $(DESTDIR)$(perlpackroot))
+pre-package:
+	@if test -n "$(PERL_PACKLIST)" && test -f "$(PERL_PACKLIST)" ; then \
+		echo " ==> Fixing Perl Packlist: $(PERL_PACKLIST)" ; \
+		gsed -i -e s,$(DESTDIR),,g $(PERL_PACKLIST) ; \
+	fi
+	@$(MAKECOOKIE)
+
+# Enable scripts to see prereqs
+PERL5LIB  = $(DESTDIR)$(libdir)/perl/csw
+PERL5LIB := $(PERL5LIB):$(DESTDIR)$(datadir)/perl/csw
+export PERL5LIB
+
+CONFIGURE_ENV += PERL5LIB=$(PERL5LIB)
+BUILD_ENV     += PERL5LIB=$(PERL5LIB)
+TEST_ENV      += PERL5LIB=$(PERL5LIB)
+INSTALL_ENV   += PERL5LIB=$(PERL5LIB)
+
+# Configure a target using Makefile.PL
+PERL_CONFIGURE_ARGS ?= INSTALLDIRS=vendor
+configure-%/Makefile.PL:
+	@echo " ==> Running Makefile.PL in $*"
+	@( cd $* ; \
+	    $(CONFIGURE_ENV) perl Makefile.PL \
+	        $(CONFIGURE_ARGS) $(PERL_CONFIGURE_ARGS) )
+	@$(MAKECOOKIE)
+
+PERLBUILD_CONFIGURE_ARGS ?= installdirs=vendor
+configure-%/Build.PL:
+	@echo " ==> Running Build.PL in $*"
+	@( cd $* ; \
+	    $(CONFIGURE_ENV) perl Build.PL \
+	        $(PERLBUILD_CONFIGURE_ARGS) $(CONFIGURE_ARGS) )
+	@$(MAKECOOKIE)
+
+build-%/Build:
+	@echo " ==> Running Build in $*"
+	@( cd $* ; $(BUILD_ENV) ./Build )
+	@$(MAKECOOKIE)
+
+test-%/Build:
+	@echo " ==> Running Build test in $*"
+	@( cd $* ; $(TEST_ENV) ./Build test )
+	@$(MAKECOOKIE)
+
+install-%/Build:
+	@echo " ==> Running Build install in $*"
+	@( cd $* ; $(INSTALL_ENV) ./Build install destdir=$(DESTDIR) )
+	@$(MAKECOOKIE)
+
+# Check for a CPAN module version update
+update-check:
+	@echo " ==> Update Check: $(GARNAME) $(GARVERSION)"
+	@if test "x$(MANUAL_UPDATE)" != "x0" ; then \
+	    cpan_check $(CHECKPATH)$(MODDIST) \
+	               $(CURDIR)/../update_results.txt ; \
+	else \
+	    echo " ==> AUTO UPDATE CHECK FOR $(GARNAME) IS DISABLED" ; \
+	fi
+	
+# Print HTML info for modules
+module-info:
+	@echo " ==> Generating module info for $(GARNAME) $(GARVERSION)"
+	@printf "<a href=\"http://search.cpan.org/" \
+		>> ../module_info.html
+	@printf "~$(shell echo $(AUTHOR) | tr '[A-Z]' '[a-z]')/" \
+		>> ../module_info.html
+	@printf "$(GARNAME)-$(GARVERSION)" \
+		>> ../module_info.html
+	@printf "\">$(GARNAME)-$(GARVERSION)</a><br/>\n" \
+		>> ../module_info.html
+

Copied: csw/mgar/gar/v2/categories/devel/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/devel/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/devel/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/devel/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/gnome/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/gnome/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/gnome/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/gnome/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/kde/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/kde/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/kde/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/kde/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,16 @@
+
+# KDE
+KDE_ROOT      = http://download.kde.org
+KDE_VERSION   = 3.5.2
+KDE_DIST      = stable
+KDE_MIRROR    = $(KDE_ROOT)/$(KDE_DIST)/$(KDE_VERSION)/src/
+
+MASTER_SITES ?= $(KDE_MIRROR)
+GARVERSION   ?= $(KDE_VERSION)
+PKGDIST      ?= $(GARNAME)-$(GARVERSION).tar.bz2
+DISTFILES    += $(PKGDIST)
+
+# Compiler
+GARCOMPILER = GNU
+
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/lang/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/lang/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/lang/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/lang/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/lib/category.mk (from rev 2205, csw/branches/dam/automatic-multiarch-compile/lib/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/lib/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/lib/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/meta/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/meta/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/meta/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/meta/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,8 @@
+# No scripts for meta targets by default
+CONFIGURE_SCRIPTS ?=
+BUILD_SCRIPTS ?=
+TEST_SCRIPTS ?=
+INSTALL_SCRIPTS ?=
+
+include gar/gar.mk
+

Copied: csw/mgar/gar/v2/categories/net/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/net/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/net/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/net/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/server/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/server/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/server/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/server/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/utils/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/utils/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/utils/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/utils/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/xfce/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/xfce/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/xfce/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/xfce/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,30 @@
+# XFCE
+XFCE_ROOT      = http://www.us.xfce.org
+XFCE_VERSION   = 4.4.1
+XFCE_MIRROR    = $(XFCE_ROOT)/archive/xfce-$(XFCE_VERSION)/src/
+
+MASTER_SITES ?= $(XFCE_MIRROR)
+GARVERSION   ?= $(XFCE_VERSION)
+PKGDIST      ?= $(GARNAME)-$(GARVERSION).tar.bz2
+DISTFILES    += $(PKGDIST)
+
+include gar/gar.mk
+
+# Compiler options
+# Compiler options
+CFLAGS   += -xlibmil -errtags=yes -erroff=E_EMPTY_DECLARATION
+CXXFLAGS += -xlibmil -xlibmopt -features=tmplife -norunpath
+CPPFLAGS += -I$(DESTDIR)/opt/csw/include/xfce4 
+LDFLAGS  += -L/opt/csw/lib -R/opt/csw/lib
+
+# pkg-config options
+PKG_CONFIG_PATH += $(DESTDIR)/opt/csw/lib/pkgconfig
+
+# Configure common options
+CONFIGURE_ARGS  = $(DIRPATHS)
+# CONFIGURE_ARGS += --prefix=/opt/csw
+CONFIGURE_ARGS += --disable-debug
+CONFIGURE_ARGS += --enable-final
+CONFIGURE_ARGS += --enable-xinerama
+CONFIGURE_ARGS += --enable-dbus
+# CONFIGURE_ARGS += --mandir=/opt/csw/share/man

Copied: csw/mgar/gar/v2/categories/xorg/category.mk (from rev 2344, csw/mgar/gar/v1/categories/xorg/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/xorg/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/xorg/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/categories/xtra/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/xtra/category.mk)
===================================================================
--- csw/mgar/gar/v2/categories/xtra/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/categories/xtra/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1 @@
+include gar/gar.mk

Copied: csw/mgar/gar/v2/category.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/category.mk)
===================================================================
--- csw/mgar/gar/v2/category.mk	                        (rev 0)
+++ csw/mgar/gar/v2/category.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,19 @@
+# vim: ft=make ts=4 sw=4 noet
+# This makefile is to be included from Makefiles in each category
+# directory.
+%:
+	@for i in $(filter-out CVS/,$(wildcard */)) ; do \
+		$(MAKE) -C $$i $* ; \
+	done
+
+paranoid-%:
+	@for i in $(filter-out CVS/,$(wildcard */)) ; do \
+		$(MAKE) -C $$i $* || exit 2; \
+	done
+
+export BUILDLOG ?= $(shell pwd)/buildlog.txt
+
+report-%:
+	@for i in $(filter-out CVS/,$(wildcard */)) ; do \
+		$(MAKE) -C $$i $* || echo "	*** make $* in $$i failed ***" >> $(BUILDLOG); \
+	done

Copied: csw/mgar/gar/v2/gar.common.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/gar.common.mk)
===================================================================
--- csw/mgar/gar/v2/gar.common.mk	                        (rev 0)
+++ csw/mgar/gar/v2/gar.common.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,49 @@
+# vim: ft=make ts=4 sw=4 noet
+#
+# $Id$
+#
+# Copyright 2006 Cory Omand
+#
+# Redistribution and/or use, with or without modification, is
+# permitted.  This software is without warranty of any kind.  The
+# author(s) shall not be liable in the event that use of the
+# software causes damage.
+#
+# gar.common.mk - General routines used by multiple packages.  For instance,
+#                 setting up server instances prior to testing.
+#
+
+#
+# Power up MySQL for testing purposes (used by DBI/DBD CPAN modules)
+#
+mysql-powerup:
+	@echo " ==> Cleaning up mysql directory"
+	@( $(DESTDIR)$(sharedstatedir)/mysql/mysql.server stop || true )
+	@rm -rf $(DESTDIR)$(localstatedir)
+	@echo " ==> Configuring mysql db for tests"
+	@$(DESTDIR)$(bindir)/mysql_install_db
+	@echo " ==> Adding $(DB_USER) user"
+	@if test "X$(shell getent group $(DB_GROUP))" = "X"; then \
+		groupadd $(DB_GROUP) ; \
+	fi
+	@if test "X$(shell getent passwd $(DB_USER))" = "X"; then \
+		useradd -g $(DB_GROUP) \
+				-d $(DESTDIR)$(localstatedir) \
+				-s /bin/false $(DB_USER) ; \
+		passwd -l $(DB_USER) ; \
+	fi
+	@chown -R $(DB_USER):$(DB_GROUP) $(DESTDIR)$(localstatedir)
+	@$(DESTDIR)$(sharedstatedir)/mysql/mysql.server start
+	@echo " ==> Mysql started and ready for testing"
+
+#
+# Power down MySQL after testing (used by DBI/DBD CPAN modules)
+#
+mysql-powerdown:
+	@echo " ==> Cleaning up mysql directory"
+	@( $(DESTDIR)$(sharedstatedir)/mysql/mysql.server stop || true )
+	@echo " ==> Removing $(DB_USER) user"
+	@( userdel $(DB_USER)  || true )
+	@( userdel $(DB_GROUP) || true )
+	@rm -rf $(DESTDIR)$(localstatedir)
+

Copied: csw/mgar/gar/v2/gar.conf.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/gar.conf.mk)
===================================================================
--- csw/mgar/gar/v2/gar.conf.mk	                        (rev 0)
+++ csw/mgar/gar/v2/gar.conf.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,622 @@
+# vim: ft=make ts=4 sw=4 noet
+
+#
+# $Id$
+#
+
+# This file contains configuration variables that are global to
+# the GAR system.  Users wishing to make a change on a
+# per-package basis should edit the category/package/Makefile, or
+# specify environment variables on the make command-line.
+
+# Pick up user information
+-include $(HOME)/.garrc
+
+MODULATION ?= global
+FILEDIR ?= files
+DOWNLOADDIR ?= download
+PARTIALDIR ?= $(DOWNLOADDIR)/partial
+WORKROOTDIR ?= work
+#WORKDIR ?= $(WORKROOTDIR)/build-$(ISA)
+WORKDIR ?= $(WORKROOTDIR)/build-$(MODULATION)
+COOKIEROOTDIR ?= cookies
+COOKIEDIR ?= $(COOKIEROOTDIR)/$(MODULATION)
+EXTRACTDIR ?= $(WORKDIR)
+WORKSRC ?= $(WORKDIR)/$(DISTNAME)
+INSTALLISADIR ?= $(WORKROOTDIR)/install-$(MODULATION)
+PKGDIR ?= $(WORKROOTDIR)/package
+SCRATCHDIR ?= tmp
+CHECKSUM_FILE ?= checksums
+MANIFEST_FILE ?= manifest
+LOGDIR ?= log
+
+# Outbound proxies
+http_proxy ?= http://svn:8080
+ftp_proxy  ?= http://svn:8080
+export http_proxy ftp_proxy
+
+# Don't do full-dependency builds by default
+SKIPDEPEND ?= 1
+
+# A directory containing cached files. It can be created
+# manually, or with 'make garchive' once you've started
+# downloading required files (say with 'make paranoid-checksum'.
+GARCHIVEDIR ?= /export/medusa/src
+
+# Space separated list of paths to search for DISTFILES.
+GARCHIVEPATH ?= /export/medusa/src
+
+# Select compiler
+# GARCOMPILER can be either GNU/SUN which selects the default
+# Sun or GNU compiler, or the specific verions SOS11/SOS12/GCC3/GCC4
+
+GARCOMPILER ?= SUN
+
+# We have parameters for the following compilers
+GARCOMPILERS = GCC3 GCC4 SOS11 SOS12
+
+ifeq ($(GARCOMPILER),SUN)
+  GARCOMPILER = SOS11
+endif
+
+ifeq ($(GARCOMPILER),GNU)
+  GARCOMPILER = GCC4
+endif
+
+ifeq (,$(filter $(GARCOMPILER),$(GARCOMPILERS)))
+  $(error The compiler '$(GARCOMPILER)' is unknown. Please select one of $(GARCOMPILERS))
+endif
+
+# Build flavor (OPT/DBG)
+GARFLAVOR ?= OPT
+
+# Architecture
+GARCH    ?= $(shell uname -p)
+GAROSREL ?= $(shell uname -r)
+
+
+# These are the standard directory name variables from all GNU
+# makefiles.  They're also used by autoconf, and can be adapted
+# for a variety of build systems.
+BUILD_PREFIX     ?= /opt/csw
+
+prefix           ?= $(BUILD_PREFIX)
+exec_prefix      ?= $(prefix)
+bindir           ?= $(exec_prefix)/bin
+gnudir           ?= $(exec_prefix)/gnu
+sbindir          ?= $(exec_prefix)/sbin
+libexecdir       ?= $(exec_prefix)/libexec
+datadir          ?= $(prefix)/share
+sysconfdir       ?= $(prefix)/etc
+sharedstatedir   ?= $(prefix)/share
+localstatedir    ?= $(prefix)/var
+libdir           ?= $(exec_prefix)/lib
+infodir          ?= $(sharedstatedir)/info
+lispdir          ?= $(sharedstatedir)/emacs/site-lisp
+includedir       ?= $(prefix)/include
+mandir           ?= $(sharedstatedir)/man
+docdir           ?= $(sharedstatedir)/doc
+sourcedir        ?= $(prefix)/src
+licensedir       ?= $(prefix)/licenses
+sharedperl       ?= $(sharedstatedir)/perl
+perllib          ?= $(libdir)/perl
+perlcswlib       ?= $(perllib)/csw
+perlpackroot     ?= $(perlcswlib)/auto
+
+# DESTDIR is used at INSTALL TIME ONLY to determine what the
+# filesystem root should be.
+DESTROOT ?= $(HOME)
+
+# This is the directory from where the package is build from
+PKGROOT ?= $(abspath $(WORKROOTDIR)/pkgroot)
+
+# Each ISA has a separate installation directory inside the
+# working directory for that package. The files are copied
+# over to $(PKGROOT) during pkgmerge.
+DESTDIR  ?= $(abspath $(INSTALLISADIR))
+
+DESTIMG ?= $(LOGNAME)-$(shell hostname)
+
+
+# These are the core packages which must be installed for GAR to function correctly
+PREREQUISITE_BASE_PKGS ?= CSWgmake CSWgtar CSWggrep CSWdiffutils CSWgfile CSWtextutils CSWwget CSWfindutils CSWgsed CSWgawk CSWbzip2
+
+# Supported architectures returned from isalist(1)
+# Not all architectures are detected by all Solaris releases, especially
+# older releases lack precise detection.
+# The list contains the executable ISAs on the specific kernel architecture
+ISALIST_sparc   = sparcv8plus+fmuladd sparcv8plus+vis2 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld
+ISALIST_sparcv9 = sparcv9+fmuladd sparcv9+vis2 sparcv9+vis sparcv9 $(ISALIST_sparc)
+ISALIST_i386    = pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386
+ISALIST_amd64   = amd64 $(ISALIST_i386)
+ISALIST = $(ISALIST_sparcv9) $(ISALIST_amd64)
+
+# Compiler flags for the different compilers to generate code for
+# the specified architecture. If the flags have the value ERROR
+# code can not be compiled for the requested architecture.
+# The MEMORYMODEL_$ARCH is e.g. used for the directoryname to set
+# libdir/pkgconfdir to /usr/lib/$MEMORYMODEL
+ARCHFLAGS_SOS11_sparcv9+fmuladd  = ERROR
+ARCHFLAGS_SOS12_sparcv9+fmuladd  = -m64 -xarch=sparcfmaf -fma=fused
+ ARCHFLAGS_GCC3_sparcv9+fmuladd  = ERROR
+ ARCHFLAGS_GCC4_sparcv9+fmuladd  = ERROR
+    MEMORYMODEL_sparcv9+fmuladd  = 64
+
+ARCHFLAGS_SOS11_sparcv9+vis2     = -xarch=v9b
+ARCHFLAGS_SOS12_sparcv9+vis2     = -m64 -xarch=sparcvis2
+ ARCHFLAGS_GCC3_sparcv9+vis2     = ERROR
+ ARCHFLAGS_GCC4_sparcv9+vis2     = ERROR
+    MEMORYMODEL_sparcv9+vis2     = 64
+
+ARCHFLAGS_SOS11_sparcv9+vis      = -xarch=v9a
+ARCHFLAGS_SOS12_sparcv9+vis      = -m64 -xarch=sparcvis
+ ARCHFLAGS_GCC3_sparcv9+vis      = -m64 -mcpu=v9 -mvis
+ ARCHFLAGS_GCC4_sparcv9+vis      = -m64 -mcpu=v9 -mvis
+    MEMORYMODEL_sparcv9+vis      = 64
+
+ARCHFLAGS_SOS11_sparcv9          = -xarch=v9
+ARCHFLAGS_SOS12_sparcv9          = -m64 -xarch=sparc
+ ARCHFLAGS_GCC3_sparcv9          = -m64 -mcpu=v9
+ ARCHFLAGS_GCC4_sparcv9          = -m64 -mcpu=v9
+    MEMORYMODEL_sparcv9          = 64
+
+ARCHFLAGS_SOS11_sparcv8plus+fmuladd  = ERROR
+ARCHFLAGS_SOS12_sparcv8plus+fmuladd  = -m32 -xarch=xparcfmaf -fma=fused
+ ARCHFLAGS_GCC3_sparcv8plus+fmuladd  = ERROR
+ ARCHFLAGS_GCC4_sparcv8plus+fmuladd  = ERROR
+    MEMORYMODEL_sparcv8plus+fmuladd  = 32
+
+ARCHFLAGS_SOS11_sparcv8plus+vis2 = -xarch=v8plusb
+ARCHFLAGS_SOS12_sparcv8plus+vis2 = -m32 -xarch=sparcvis2
+ ARCHFLAGS_GCC3_sparcv8plus+vis2 = ERROR
+ ARCHFLAGS_GCC4_sparcv8plus+vis2 = ERROR
+    MEMORYMODEL_sparcv8plus+vis2 = 32
+
+ARCHFLAGS_SOS11_sparcv8plus+vis  = -xarch=v8plusa
+ARCHFLAGS_SOS12_sparcv8plus+vis  = -m32 -xarch=sparcvis
+ ARCHFLAGS_GCC3_sparcv8plus+vis  = -mcpu=v8 -mvis
+ ARCHFLAGS_GCC4_sparcv8plus+vis  = -mcpu=v8 -mvis
+    MEMORYMODEL_sparcv8plus+vis  = 32
+
+ARCHFLAGS_SOS11_sparcv8plus      = -xarch=v8plus
+ARCHFLAGS_SOS12_sparcv8plus      = -m32 -xarch=v8plus
+ ARCHFLAGS_GCC3_sparcv8plus      = -mcpu=v8 -mv8plus
+ ARCHFLAGS_GCC4_sparcv8plus      = -mcpu=v8 -mv8plus
+    MEMORYMODEL_sparcv8plus      = 32
+
+ARCHFLAGS_SOS11_sparcv8          = -xarch=v8
+ARCHFLAGS_SOS12_sparcv8          = -m32 -xarch=v8
+ ARCHFLAGS_GCC3_sparcv8          = -mcpu=v8
+ ARCHFLAGS_GCC4_sparcv8          = -mcpu=v8
+    MEMORYMODEL_sparcv8          = 32
+
+ARCHFLAGS_SOS11_sparcv8-fsmuld   = -xarch=v8a
+ARCHFLAGS_SOS12_sparcv8-fsmuld   = -m32 -xarch=v8a
+ ARCHFLAGS_GCC3_sparcv8-fsmuld   = ERROR
+ ARCHFLAGS_GCC4_sparcv8-fsmuld   = ERROR
+    MEMORYMODEL_sparcv8-fsmuld   = 32
+
+ARCHFLAGS_SOS11_amd64            = -xarch=amd64
+ARCHFLAGS_SOS12_amd64            = -m64 -xarch=sse2
+ ARCHFLAGS_GCC3_amd64            = -m64 -march=opteron
+ ARCHFLAGS_GCC4_amd64            = -m64 -march=opteron
+    MEMORYMODEL_amd64            = 64
+
+ARCHFLAGS_SOS11_pentium_pro+mmx  = -xarch=pentium_proa
+ARCHFLAGS_SOS12_pentium_pro+mmx  = -m32 -xarch=pentium_proa
+ ARCHFLAGS_GCC3_pentium_pro+mmx  = -m32 -march=pentium2
+ ARCHFLAGS_GCC4_pentium_pro+mmx  = -m32 -march=pentium2
+    MEMORYMODEL_pentium_pro+mmx  = 32
+
+ARCHFLAGS_SOS11_pentium_pro      = -xarch=pentium_pro
+ARCHFLAGS_SOS12_pentium_pro      = -m32 -xarch=pentium_pro
+ ARCHFLAGS_GCC3_pentium_pro      = -m32 -march=pentiumpro
+ ARCHFLAGS_GCC4_pentium_pro      = -m32 -march=pentiumpro
+    MEMORYMODEL_pentium_pro      = 32
+
+ARCHFLAGS_SOS11_pentium+mmx      = ERROR
+ARCHFLAGS_SOS12_pentium+mmx      = ERROR
+ ARCHFLAGS_GCC3_pentium+mmx      = -m32 -march=pentium-mmx
+ ARCHFLAGS_GCC4_pentium+mmx      = -m32 -march=pentium-mmx
+    MEMORYMODEL_pentium+mmx      = 32
+
+ARCHFLAGS_SOS11_pentium          = ERROR
+ARCHFLAGS_SOS12_pentium          = ERROR
+ ARCHFLAGS_GCC3_pentium          = -m32 -march=pentium
+ ARCHFLAGS_GCC4_pentium          = -m32 -march=pentium
+    MEMORYMODEL_pentium          = 32
+
+ARCHFLAGS_SOS11_i486             = ERROR
+ARCHFLAGS_SOS12_i486             = ERROR
+ ARCHFLAGS_GCC3_i486             = -m32 -march=i486
+ ARCHFLAGS_GCC4_i486             = -m32 -march=i486
+    MEMORYMODEL_i486             = 32
+
+ARCHFLAGS_SOS11_i386             = -xarch=386
+ARCHFLAGS_SOS12_i386             = -m32 -xarch=386
+ ARCHFLAGS_GCC3_i386             = -m32 -march=i386
+ ARCHFLAGS_GCC4_i386             = -m32 -march=i386
+    MEMORYMODEL_i386             = 32
+
+# ISALIST_$(GARCOMPILER) contains all ISAs which are compilable with the selected compiler
+$(foreach C,$(GARCOMPILERS),$(eval ISALIST_$(C) ?= $(foreach I,$(ISALIST),$(if $(filter-out ERROR,$(ARCHFLAGS_$C_$I)),$I))))
+
+# This is the memory model of the currently compiled architecture
+MEMORYMODEL = $(MEMORYMODEL_$(ISA))
+
+# The memory model specific stuff is in these subdirectories
+MEMORYMODEL_LIBDIR_32 = .
+MEMORYMODEL_LIBDIR_64 = 64
+
+MEMORYMODEL_BINDIR_32 = $(ISABINDIR_$(ISA_DEFAULT_$(GARCH)))
+MEMORYMODEL_BINDIR_64 = $(ISABINDIR_$(ISA_DEFAULT64_$(GARCH)))
+
+# This is the subdirectory for the current memorymodel.
+MM_LIBDIR = $(MEMORYMODEL_LIBDIR_$(MEMORYMODEL))
+MM_BINDIR = $(MEMORYMODEL_BINDIR_$(MEMORYMODEL))
+
+OPT_FLAGS_SOS11_sparc ?= -xO3
+OPT_FLAGS_SOS12_sparc ?= -xO3
+ OPT_FLAGS_GCC3_sparc ?= -O2 -pipe
+ OPT_FLAGS_GCC4_sparc ?= -O2 -pipe
+ OPT_FLAGS_SOS11_i386 ?= -xO3
+ OPT_FLAGS_SOS12_i386 ?= -xO3
+  OPT_FLAGS_GCC3_i386 ?= -O2 -pipe
+  OPT_FLAGS_GCC4_i386 ?= -O2 -pipe
+
+# Most of these are empty because '-march' implies '-mtune'
+          OPT_ISAFLAGS_GCC3_amd64 ?=
+          OPT_ISAFLAGS_GCC4_amd64 ?=
+OPT_ISAFLAGS_GCC3_pentium_pro+mmx ?=
+OPT_ISAFLAGS_GCC4_pentium_pro+mmx ?=
+    OPT_ISAFLAGS_GCC3_pentium_pro ?=
+    OPT_ISAFLAGS_GCC4_pentium_pro ?=
+    OPT_ISAFLAGS_GCC3_pentium+mmx ?=
+    OPT_ISAFLAGS_GCC4_pentium+mmx ?=
+        OPT_ISAFLAGS_GCC3_pentium ?=
+        OPT_ISAFLAGS_GCC4_pentium ?=
+           OPT_ISAFLAGS_GCC3_i386 ?= -mtune=i686
+           OPT_ISAFLAGS_GCC4_i386 ?= -mtune=i686
+
+
+DBG_FLAGS_SOS11_sparc ?= -g
+DBG_FLAGS_SOS12_sparc ?= -g
+ DBG_FLAGS_GCC3_sparc ?= -g
+ DBG_FLAGS_GCC4_sparc ?= -g
+ DBG_FLAGS_SOS11_i386 ?= -g
+ DBG_FLAGS_SOS12_i386 ?= -g
+  DBG_FLAGS_GCC3_i386 ?= -g
+  DBG_FLAGS_GCC4_i386 ?= -g
+
+# This variable contains the opt flags for the current compiler on the current architecture
+FLAVOR_FLAGS ?= $($(GARFLAVOR)_ISAFLAGS_$(GARCOMPILER)_$(ISA)) $($(GARFLAVOR)_FLAGS_$(GARCOMPILER)_$(GARCH))
+FLAVOR_FLAGS += $(EXTRA_$(GARFLAVOR)_FLAGS_$(GARCOMPILER)_$(GARCH)) $(EXTRA_$(GARFLAVOR)_FLAGS_$(GARCOMPILER))
+
+# Raise these in your .garrc if needed
+ISA_DEFAULT_sparc   ?= sparcv8
+ISA_DEFAULT_i386    ?= i386
+ISA_DEFAULT64_sparc ?= sparcv9
+ISA_DEFAULT64_i386  ?= amd64
+
+# These are the ISAs that are always build for 32 bit and 64 bit
+# Do not overwrite these as they are used to control expansion at several other places
+ISA_DEFAULT = $(ISA_DEFAULT_$(GARCH))
+ISA_DEFAULT64 = $(ISA_DEFAULT64_$(GARCH))
+
+# This is the architecture we are compiling for
+# Set this to a value from $(ISALIST_$(GARCH)) to compile for another architecture
+# 
+# Name from isalist(5)
+#ISA ?= $(ISA_DEFAULT)
+KERNELISA := $(shell isainfo -k)
+
+# This is a sanity check. Because BUILD_ISAS is carefully computed this error should
+# only occur if BUILD_ISAS is manually overwritten.
+verify-isa:
+ifeq (,$(filter $(ISA),$(ISALIST_$(KERNELISA))))
+	$(error The ISA '$(ISA)' can not be build on this kernel with the arch '$(KERNELISA)')
+endif
+	@$(MAKECOOKIE)
+
+# The package will be built for these architectures
+# We check automatically what can be build on this kernel architecture
+# REQUESTED_ISAS contains all ISAs that should be built
+# NEEDED_ISAS contains all ISAs that must be build for this architecture to make the package
+# BUILD_ISAS contains all ISAs that can be built on the current kernel
+# Set 'BUILD64 = 1' to build 64 bit versions automatically
+REQUESTED_ISAS ?= $(strip $(ISA_DEFAULT_$(GARCH)) $(EXTRA_BUILD_ISAS) $(EXTRA_BUILD_ISAS_$(GARCH)) $(if $(BUILD64),$(ISA_DEFAULT64_$(GARCH))) )
+NEEDED_ISAS ?= $(filter $(ISALIST_$(ISA_DEFAULT64_$(GARCH))),$(REQUESTED_ISAS))
+BUILD_ISAS ?= $(filter $(ISALIST_$(KERNELISA)),$(NEEDED_ISAS))
+
+# Subdirectories for specialized binaries and libraries
+# Use defaults for sparcv8 and i386 as those are symlinks
+ISALIBDIR_sparcv9+fmuladd      ?= sparcv9+fmuladd
+ISALIBDIR_sparcv9+vis2         ?= sparcv9+vis2
+ISALIBDIR_sparcv9+vis          ?= sparcv9+vis
+ISALIBDIR_sparcv9              ?= sparcv9
+ISALIBDIR_sparcv8plus+fmuladd  ?= sparcv8plus+fmuladd
+ISALIBDIR_sparcv8plus+vis2     ?= sparcv8plus+vis2
+ISALIBDIR_sparcv8plus+vis      ?= sparcv8plus+vis
+ISALIBDIR_sparcv8plus          ?= sparcv8plus
+ISALIBDIR_sparcv8              ?= .
+ISALIBDIR_sparcv8-fsmuld       ?= sparcv8-fsmuld
+ISALIBDIR_amd64                ?= amd64
+ISALIBDIR_pentium_pro+mmx      ?= pentium_pro+mmx
+ISALIBDIR_pentium_pro          ?= pentium_pro
+ISALIBDIR_pentium+mmx          ?= pentium+mmx
+ISALIBDIR_pentium              ?= pentium
+ISALIBDIR_i386                 ?= .
+
+# These are the directories where the optimized libraries should go to
+ISALIBDIR ?= $(ISALIBDIR_$(ISA))
+
+# These are the directories where the optimized binaries should go to
+$(foreach ARCH,$(ISALIST), $(eval ISABINDIR_$(ARCH) ?= $(ISALIBDIR_$(ARCH))))
+ISABINDIR ?= $(ISABINDIR_$(ISA))
+
+#
+# Forte Compiler Configuration
+#
+
+GCC3_CC_HOME  ?= /opt/csw/gcc3
+GCC4_CC_HOME  ?= /opt/csw/gcc4
+SOS11_CC_HOME ?= /opt/studio/SOS11/SUNWspro
+SOS12_CC_HOME ?= /opt/studio/SOS12/SUNWspro
+GCC3_CC       ?= $(GCC3_CC_HOME)/bin/gcc
+GCC4_CC       ?= $(GCC4_CC_HOME)/bin/gcc
+SOS11_CC      ?= $(SOS11_CC_HOME)/bin/cc
+SOS12_CC      ?= $(SOS12_CC_HOME)/bin/cc
+GCC3_CXX      ?= $(GCC3_CC_HOME)/bin/g++
+GCC4_CXX      ?= $(GCC4_CC_HOME)/bin/g++
+SOS11_CXX     ?= $(SOS11_CC_HOME)/bin/CC
+SOS12_CXX     ?= $(SOS12_CC_HOME)/bin/CC
+
+GCC3_CC_FLAGS   ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_GCC3_CC_FLAGS) $(EXTRA_GCC_CC_FLAGS) $(EXTRA_CC_FLAGS)
+GCC4_CC_FLAGS   ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_GCC4_CC_FLAGS) $(EXTRA_GCC_CC_FLAGS) $(EXTRA_CC_FLAGS)
+SOS11_CC_FLAGS  ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_SOS11_CC_FLAGS) $(EXTRA_SOS_CC_FLAGS) $(EXTRA_CC_FLAGS)
+SOS12_CC_FLAGS  ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_SOS12_CC_FLAGS) $(EXTRA_SOS_CC_FLAGS) $(EXTRA_CC_FLAGS)
+GCC3_CXX_FLAGS  ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_GCC3_CXX_FLAGS) $(EXTRA_GCC_CXX_FLAGS) $(EXTRA_CXX_FLAGS)
+GCC4_CXX_FLAGS  ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_GCC4_CXX_FLAGS) $(EXTRA_GCC_CXX_FLAGS) $(EXTRA_CXX_FLAGS)
+SOS11_CXX_FLAGS ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_SOS11_CXX_FLAGS) $(EXTRA_SOS_CXX_FLAGS) $(EXTRA_CXX_FLAGS)
+SOS12_CXX_FLAGS ?= $(FLAVOR_FLAGS) $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_SOS12_CXX_FLAGS) $(EXTRA_SOS_CXX_FLAGS) $(EXTRA_CXX_FLAGS)
+GCC3_AS_FLAGS   ?= $(EXTRA_GCC3_AS_FLAGS) $(EXTRA_GCC_AS_FLAGS) $(EXTRA_AS_FLAGS)
+GCC4_AS_FLAGS   ?= $(EXTRA_GCC4_AS_FLAGS) $(EXTRA_GCC_AS_FLAGS) $(EXTRA_AS_FLAGS)
+SOS11_AS_FLAGS  ?= $(EXTRA_SOS11_AS_FLAGS) $(EXTRA_SOS_AS_FLAGS) $(EXTRA_AS_FLAGS)
+SOS12_AS_FLAGS  ?= $(EXTRA_SOS12_AS_FLAGS) $(EXTRA_SOS_AS_FLAGS) $(EXTRA_AS_FLAGS)
+GCC3_LD_FLAGS   ?= -L$(GNU_CC_HOME)/lib $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_GCC3_LD_FLAGS) $(EXTRA_GCC_LD_FLAGS) $(EXTRA_LD_FLAGS)
+GCC4_LD_FLAGS   ?= -L$(GNU_CC_HOME)/lib $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_GCC4_LD_FLAGS) $(EXTRA_GCC_LD_FLAGS) $(EXTRA_LD_FLAGS)
+SOS11_LD_FLAGS  ?= $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_SOS11_LD_FLAGS) $(EXTRA_SOS_LD_FLAGS) $(EXTRA_LD_FLAGS)
+SOS12_LD_FLAGS  ?= $(ARCHFLAGS_$(GARCOMPILER)_$(ISA)) $(EXTRA_SOS12_LD_FLAGS) $(EXTRA_SOS_LD_FLAGS) $(EXTRA_LD_FLAGS)
+
+# Compiler version
+GCC_CC_VERSION  = $(shell $(CC_HOME)/bin/gcc -v 2>&1| ggrep version)
+GCC_CXX_VERSION = $(CC_VERSION)
+GCC3_CC_VERSION = $(GCC_CC_VERSION)
+GCC3_CXX_VERSION = $(GCC_CXX_VERSION)
+GCC4_CC_VERSION = $(GCC_CC_VERSION)
+GCC4_CXX_VERSION = $(GCC_CXX_VERSION)
+
+SOS_CC_VERSION  = $(shell $(CC_HOME)/bin/cc -V 2>&1| ggrep cc: | gsed -e 's/cc: //')
+SOS_CXX_VERSION = $(shell $(CC_HOME)/bin/CC -V 2>&1| ggrep CC: | gsed -e 's/CC: //')
+SOS11_CC_VERSION = $(SOS_CC_VERSION)
+SOS11_CXX_VERSION = $(SOS_CXX_VERSION)
+SOS12_CC_VERSION = $(SOS_CC_VERSION)
+SOS12_CXX_VERSION = $(SOS_CXX_VERSION)
+
+CC_VERSION = $($(GARCOMPILER)_CC_VERSION)
+CXX_VERSION = $($(GARCOMPILER)_CXX_VERSION)
+
+#
+# Construct compiler options
+#
+
+ifeq ($(origin INCLUDE_FLAGS), undefined)
+INCLUDE_FLAGS = $(foreach EINC,$(EXTRA_INC) $(abspath $(includedir)),-I$(EINC))
+# DESTDIR is an old concept, disable for now
+#INCLUDE_FLAGS += $(if $(IGNORE_DESTDIR),,-I$(abspath $(DESTDIR)$(includedir)))
+endif
+
+# The usual library directory structure looks like this:
+# .../lib/32 -> .
+# .../lib/64 -> (sparcv9 | amd64)
+# .../lib/mylib.so
+# .../lib/sparcv9/mylib.so
+# .../lib/sparcv9+vis/mylib.so
+# For optimized builds a runtime-path of '-R.../lib/$ISALIST' should be used. This is
+# however not expanded during compilation, so linker-pathes must directly be accessible
+# without expansion and needs to be differentiated between 32 and 64 bit, therefore
+# the links 32 and 64.
+ifeq ($(origin LINKER_FLAGS), undefined)
+ifdef NOISALIST
+LINKER_FLAGS = $(foreach ELIB,$(libdir)/$(MM_LIBDIR) $(EXTRA_LIB),-L$(ELIB) -R$(ELIB))
+else
+# If we use $ISALIST it is a good idea to also add $MM_LIBDIR as there
+# may not be a subdirectory for the 32-bit standard case (this would normally
+# be a symlink of the form lib/sparcv8 -> . and lib/i386 -> .)
+LINKER_FLAGS = $(foreach ELIB,$(libdir) $(EXTRA_LIB),-L$(ELIB)/$(MM_LIBDIR) -R'$(ELIB)/\$$$$''ISALIST' -R$(ELIB)/$(MM_LIBDIR))
+endif
+#LINKER_FLAGS = $(foreach ELIB,$(EXTRA_LIB) $(abspath $(libdir)/$(MM_LIBDIR)),-L$(ELIB) -R$(ELIB))
+# DESTDIR is an old concept, disable for now
+#LINKER_FLAGS += $(if $(IGNORE_DESTDIR),,-L$(abspath $(DESTDIR)$(libdir)/$(MM_LIBDIR)))
+endif
+
+CC_HOME  = $($(GARCOMPILER)_CC_HOME)
+CC       = $($(GARCOMPILER)_CC)
+CXX      = $($(GARCOMPILER)_CXX)
+CFLAGS   ?= $(strip $($(GARCOMPILER)_CC_FLAGS) $(EXTRA_CFLAGS) $(INCLUDE_FLAGS))
+CXXFLAGS ?= $(strip $($(GARCOMPILER)_CXX_FLAGS) $(EXTRA_CXXFLAGS) $(INCLUDE_FLAGS))
+CPPFLAGS ?= $(strip $($(GARCOMPILER)_CPP_FLAGS) $(EXTRA_CPPFLAGS) $(INCLUDE_FLAGS))
+LDFLAGS  ?= $(strip $($(GARCOMPILER)_LD_FLAGS) $(EXTRA_LDFLAGS) $(LINKER_FLAGS))
+ASFLAGS  ?= $(strip $($(GARCOMPILER)_AS_FLAGS) $(EXTRA_ASFLAGS))
+OPTFLAGS ?= $(strip $($(GARCOMPILER)_CC_FLAGS) $(EXTRA_OPTFLAGS))
+
+#GCC3_LD_OPTIONS = -R$(GNU_CC_HOME)/lib $(EXTRA_GCC3_LD_OPTIONS) $(EXTRA_GCC_LD_OPTIONS) $(EXTRA_LD_OPTIONS)
+#GCC4_LD_OPTIONS = -R$(GNU_CC_HOME)/lib $(EXTRA_GCC4_LD_OPTIONS) $(EXTRA_GCC_LD_OPTIONS) $(EXTRA_LD_OPTIONS)
+#SOS11_LD_OPTIONS = $(strip $(EXTRA_SOS11_LD_OPTIONS) $(EXTRA_SOS_LD_OPTIONS) $(EXTRA_LD_OPTIONS))
+#SOS12_LD_OPTIONS = $(strip $(EXTRA_SOS12_LD_OPTIONS) $(EXTRA_SOS_LD_OPTIONS) $(EXTRA_LD_OPTIONS))
+
+#LD_OPTIONS = $($(GARCOMPILER)_LD_OPTIONS)
+
+# LD_OPTIONS considered harmful. Disable for the moment.
+#LDOPT_LIBS ?= $(libdir)
+#ifdef NOISALIST
+#LD_OPTIONS += $(foreach ELIB,$(addsuffix /$(MM_LIBDIR),$(LDOPT_LIBS)) $(EXTRA_LIB),-R$(abspath $(ELIB)/$(MM_LIBDIR)))
+#else
+#LD_OPTIONS += $(foreach ELIB,$(LDOPT_LIBS) $(EXTRA_LIB),-R$(ELIB)/\$$ISALIST -R$(ELIB)/$(MM_LIBDIR))
+#endif
+
+# 1. Make sure everything works fine for SOS12
+# 2. Allow us to use programs we just built. This is a bit complicated,
+#    but we want PATH to be a recursive variable, or 'gmake isaenv' won't work
+PATH = $(if $(filter SOS12,$(GARCOMPILER)),$(abspath $(GARBIN)/sos12-wrappers):)$(if $(IGNORE_DESTDIR),,$(abspath $(DESTDIR)$(bindir)/$(MM_BINDIR)):$(DESTDIR)$(bindir):$(abspath $(DESTDIR)$(sbindir)/$(MM_BINDIR)):$(DESTDIR)$(sbindir):)$(abspath $(bindir)/$(MM_BINDIR)):$(bindir):$(abspath $(sbindir)/$(MM_BINDIR)):$(sbindir):$(CC_HOME)/bin:$(abspath $(GARBIN)):/usr/bin:/usr/sbin:/usr/java/bin:/usr/ccs/bin
+
+# This is for foo-config chaos
+PKG_CONFIG_PATH := $(abspath $(libdir)/$(MM_LIBDIR)/pkgconfig):$(libdir)/pkgconfig:$(PKG_CONFIG_PATH)
+# DESTDIR is an old concept, disable for now.
+#ifneq ($(IGNORE_DESTDIR),1)
+#PKG_CONFIG_PATH := $(abspath $(DESTDIR)$(libdir)/$(MM_LIBDIR)/pkgconfig):$(DESTDIR)$(libdir)/pkgconfig:$(PKG_CONFIG_PATH)
+#endif
+
+#
+# Mirror Sites
+#
+
+# Gnome
+GNOME_ROOT   = http://ftp.gnome.org/pub/GNOME/sources
+GNOME_SUBV   = $(shell echo $(GARVERSION) | awk -F. '{print $$1"."$$2}')
+GNOME_MIRROR = $(GNOME_ROOT)/$(GARNAME)/$(GNOME_SUBV)/
+
+# SourceForge
+SF_PROJ     ?= $(GARNAME)
+SF_MIRRORS  ?= http://downloads.sourceforge.net/$(SF_PROJ)/
+# Keep this for compatibility
+SF_MIRROR    = $(firstword $(SF_MIRRORS))
+
+# GNU
+GNU_SITE     = http://mirrors.kernel.org/
+GNU_GNUROOT  = $(GNU_SITE)/gnu
+GNU_NGNUROOT = $(GNU_SITE)/non-gnu
+GNU_MIRROR   = $(GNU_GNUROOT)/$(GARNAME)/
+GNU_NMIRROR  = $(GNU_NGNUROOT)/$(GARNAME)/
+
+# CPAN
+CPAN_SITES  += http://search.cpan.org/CPAN
+CPAN_SITES  += ftp://ftp.nrc.ca/pub/CPAN
+CPAN_SITES  += ftp://ftp.nas.nasa.gov/pub/perl/CPAN
+CPAN_SITES  += http://mirrors.ibiblio.org/pub/mirrors/CPAN
+CPAN_SITES  += ftp://cpan.pair.com/pub/CPAN
+CPAN_SITES  += http://mirrors.kernel.org/cpan
+CPAN_MIRRORS = $(foreach S,$(CPAN_SITES),$(S)/authors/id/$(AUTHOR_ID)/)
+CPAN_FIRST_MIRROR = $(firstword $(CPAN_SITES))/authors/id
+
+# Package dir
+GARPACKAGE = $(shell basename $(CURDIR))
+
+# Put these variables in the environment during the
+# configure, build, test, and install stages
+ifeq ($(origin DIRECTORY_EXPORTS), undefined)
+DIRECTORY_EXPORTS  = prefix exec_prefix bindir sbindir libexecdir
+DIRECTORY_EXPORTS += datadir sysconfdir sharedstatedir localstatedir libdir
+DIRECTORY_EXPORTS += infodir lispdir includedir mandir docdir sourcedir
+endif
+
+ifeq ($(origin COMPILER_EXPORTS), undefined)
+COMPILER_EXPORTS  = CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
+#COMPILER_EXPORTS += ASFLAGS OPTFLAGS CC CXX LD_OPTIONS
+COMPILER_EXPORTS += ASFLAGS OPTFLAGS CC CXX
+COMPILER_EXPORTS += CC_HOME CC_VERSION CXX_VERSION
+endif
+
+ifeq ($(origin GARPKG_EXPORTS), undefined)
+#GARPKG_EXPORTS  = VENDORNAME VENDORSTAMP
+GARPKG_EXPORTS += GARCH GAROSREL GARPACKAGE
+endif
+
+COMMON_EXPORTS ?= $(DIRECTORY_EXPORTS) $(COMPILER_EXPORTS) $(GARPKG_EXPORTS) $(EXTRA_COMMON_EXPORTS)
+
+CONFIGURE_EXPORTS ?= $(COMMON_EXPORTS) PKG_CONFIG_PATH DESTDIR
+BUILD_EXPORTS     ?= $(COMMON_EXPORTS)
+TEST_EXPORTS      ?= $(COMMON_EXPORTS)
+INSTALL_EXPORTS   ?= $(COMMON_EXPORTS) DESTDIR
+
+CONFIGURE_ENV ?= $(foreach TTT,$(CONFIGURE_EXPORTS) $(EXTRA_CONFIGURE_EXPORTS),$(TTT)="$($(TTT))")
+BUILD_ENV     ?= $(foreach TTT,$(BUILD_EXPORTS) $(EXTRA_BUILD_EXPORTS),$(TTT)="$($(TTT))")
+TEST_ENV      ?= $(foreach TTT,$(TEST_EXPORTS) $(EXTRA_TEST_EXPORTS),$(TTT)="$($(TTT))")
+INSTALL_ENV   ?= $(foreach TTT,$(INSTALL_EXPORTS) $(EXTRA_INSTALL_EXPORTS),$(TTT)="$($(TTT))")
+
+# Standard Scripts
+CONFIGURE_SCRIPTS ?= $(WORKSRC)/configure
+BUILD_CHECK_SCRIPTS ?= modulated-check
+BUILD_SCRIPTS     ?= $(WORKSRC)/Makefile
+ifeq ($(SKIPTEST),1)
+TEST_SCRIPTS       =
+else
+TEST_SCRIPTS      ?= $(WORKSRC)/Makefile
+endif
+
+INSTALL_SCRIPTS   ?= $(WORKSRC)/Makefile
+
+# Global environment
+export PATH PKG_CONFIG_PATH
+
+# prepend the local file listing
+FILE_SITES = $(foreach DIR,$(FILEDIR) $(GARCHIVEPATH),file://$(DIR)/)
+
+# Extra libraries
+EXTRA_LIBS = gar.pkg.mk gar.common.mk
+
+ccenv:
+	@echo "      Compiler: $(GARCOMPILER)"
+	@echo
+	@echo "    C Compiler: $(CC)"
+	@echo "  C++ Compiler: $(CXX)"
+	@echo
+	@echo "Compiler ISA generation matrix:"
+	@echo
+	@printf "   %20s  MM $(foreach C,$(GARCOMPILERS),%10s )\n" '' $(foreach C,$(GARCOMPILERS),$C )
+	@$(foreach I,$(ISALIST),printf "$(if $(filter $I,$(REQUESTED_ISAS)), R,  )$(if $(filter $I,$(BUILD_ISAS)),B, )%20s  $(MEMORYMODEL_$I) $(foreach C,$(GARCOMPILERS),%10s )\n" $I \
+		$(foreach C,$(GARCOMPILERS),"$(if $(filter ERROR,$(ARCHFLAGS_$C_$I)), No,Yes)" );)
+	@echo
+	@echo " R        = Requested ISAs for this package"
+	@echo "  B       = ISA that can be build on this kernel"
+	@echo
+	@echo "       32 = 32 bit memory model"
+	@echo "       64 = 64 bit memory model"
+	@echo "      Yes = Compiler can generate code for that ISA"
+	@echo "       No = Compiler cannot generate code for that ISA"
+	@echo
+
+isaenv:
+	@echo "          Arch: $(GARCH)"
+	@echo "        Kernel: $(KERNELISA)"
+	@echo
+	@echo "Default ISA 32: $(ISA_DEFAULT)"
+	@echo "Default ISA 64: $(ISA_DEFAULT64)"
+	@echo
+	@echo "Requested ISAs: $(REQUESTED_ISAS)"
+	@echo "   Needed ISAs: $(NEEDED_ISAS)"
+	@echo "    Build ISAs: $(BUILD_ISAS)"
+	@echo
+	@echo "  ISAEXEC dirs: $(ISAEXEC_DIRS)"
+	@echo " ISAEXEC files: $(ISAEXEC_FILES)"
+	@echo " ISA relocated: $(ISA_RELOCATE_FILES)"
+	@echo
+	@echo " Merge include: $(_MERGE_INCLUDE_FILES)"
+	@echo " Merge exclude: $(_MERGE_EXCLUDE_FILES)"
+	@echo
+	@echo "Requested compiler flags:"
+	@$(foreach ISA,$(ISA) $(filter-out $(ISA),$(BUILD_ISAS)),		\
+		$(MAKE) -s ISA=$(ISA) _isaenv;					\
+	)
+
+_isaenv:
+	@echo;								\
+	echo "* ISA $(ISA)";						\
+	echo "       PATH = $(PATH)";					\
+	echo "     CFLAGS = $(CFLAGS)";					\
+	echo "   CXXFLAGS = $(CXXFLAGS)";				\
+	echo "   CPPFLAGS = $(CPPFLAGS)";				\
+	echo "    LDFLAGS = $(LDFLAGS)";				\
+	#echo " LD_OPTIONS = $(LD_OPTIONS)";				\
+	echo "    ASFLAGS = $(ASFLAGS)";				\
+	echo "   OPTFLAGS = $(OPTFLAGS)"

Copied: csw/mgar/gar/v2/gar.lib.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/gar.lib.mk)
===================================================================
--- csw/mgar/gar/v2/gar.lib.mk	                        (rev 0)
+++ csw/mgar/gar/v2/gar.lib.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,626 @@
+# vim: ft=make ts=4 sw=4 noet
+#
+# $Id$
+#
+# Copyright (C) 2001 Nick Moffitt
+# 
+# Redistribution and/or use, with or without modification, is
+# permitted.  This software is without warranty of any kind.  The
+# author(s) shall not be liable in the event that use of the
+# software causes damage.
+#
+
+# cookies go here, so we have to be able to find them for
+# dependency checking.
+VPATH += $(COOKIEDIR)
+
+# convenience variable to make the cookie.
+MAKECOOKIE = mkdir -p $(COOKIEDIR)/$(@D) && date >> $(COOKIEDIR)/$@
+
+#################### FETCH RULES ####################
+
+URLS = $(subst ://,//,$(foreach SITE,$(FILE_SITES) $(MASTER_SITES),$(addprefix $(SITE),$(DISTFILES))) $(foreach SITE,$(FILE_SITES) $(PATCH_SITES) $(MASTER_SITES),$(addprefix $(SITE),$(PATCHFILES))))
+
+# Download the file if and only if it doesn't have a preexisting
+# checksum file.  Loop through available URLs and stop when you
+# get one that doesn't return an error code.
+$(DOWNLOADDIR)/%:  
+	@if test -f $(COOKIEDIR)/checksum-$*; then : ; else \
+		echo " ==> Grabbing $@"; \
+		for i in $(filter %/$*,$(URLS)); do  \
+			echo " 	==> Trying $$i"; \
+			$(MAKE) -s $$i || continue; \
+			mv $(PARTIALDIR)/$* $@; \
+			break; \
+		done; \
+		if test -r $@ ; then : ; else \
+			echo '(!!!) Failed to download $@!' 1>&2; \
+			false; \
+		fi; \
+	fi
+
+# download an http URL (colons omitted)
+http//%: 
+	@wget -T 10 -c -P $(PARTIALDIR) http://$*
+
+# download an ftp URL (colons omitted)
+#ftp//%: 
+#	@wget -T 10 -c --passive-ftp -P $(PARTIALDIR) ftp://$*
+ftp//%: 
+	@wget -T 10 -c -P $(PARTIALDIR) ftp://$*
+
+# link to a local copy of the file
+# (absolute path)
+file///%: 
+	@if test -f /$*; then \
+		gln -sf /$* $(PARTIALDIR)/$(notdir $*); \
+	else \
+		false; \
+	fi
+
+# link to a local copy of the file
+# (relative path)
+file//%: 
+	@if test -f $*; then \
+		gln -sf "$(CURDIR)/$*" $(PARTIALDIR)/$(notdir $*); \
+	else \
+		false; \
+	fi
+
+# Using Jeff Waugh's rsync rule.
+# DOES NOT PRESERVE SYMLINKS!
+rsync//%: 
+	@rsync -azvLP rsync://$* $(PARTIALDIR)/
+
+# Using Jeff Waugh's scp rule
+scp//%:
+	@scp -C $* $(PARTIALDIR)/
+
+# Fetch a SVN repo via http
+svn-http//%:
+	@svn co $(SVNHTTP_CO_ARGS) http://$* $(PARTIALDIR)/$(notdir $*)
+
+#################### CHECKSUM RULES ####################
+
+# check a given file's checksum against $(CHECKSUM_FILE) and
+# error out if it mentions the file without an "OK".
+checksum-%: $(CHECKSUM_FILE) 
+	@echo " ==> Running checksum on $*"
+	@if gegrep -- '/$*$$' $(CHECKSUM_FILE); then \
+		if LC_ALL="C" LANG="C" gmd5sum -c $(CHECKSUM_FILE) 2>&1 | \
+			ggrep -- '$*' | ggrep -v ':[ ]\+OK'; then \
+			echo '(!!!) $* failed checksum test!' 1>&2; \
+			false; \
+		else \
+			echo 'file $* passes checksum test!'; \
+			$(MAKECOOKIE); \
+		fi \
+	else \
+		echo '(!!!) $* not in $(CHECKSUM_FILE) file!' 1>&2; \
+		false; \
+	fi
+		
+
+#################### CHECKNEW RULES ####################
+
+# check a new upstream files are available
+
+UW_ARGS = $(addprefix -u ,$(MASTER_SITES))
+ifneq ($(UFILES_REGEX),)
+	FILES2CHECK = $(shell http_proxy=$(http_proxy) ftp_proxy=$(ftp_proxy) $(GARBIN)/upstream_watch $(UW_ARGS) $(addsuffix ',$(addprefix ',$(UFILES_REGEX))))
+else
+	FILES2CHECK = ""
+endif
+
+check-upstream-and-mail:
+	@if [ -n '$(FILES2CHECK)' ]; then \
+		NEW_FILES=""; \
+		for FILE in $(FILES2CHECK) ""; do \
+			[ -n "$$FILE" ] || continue; \
+			if test -f $(COOKIEDIR)/checknew-$$FILE || echo $(DISTFILES) | grep -w $$FILE >/dev/null; then \
+				: ; \
+			else \
+				NEW_FILES="$$FILE $$NEW_FILES"; \
+			fi; \
+			$(MAKE) checknew-$$FILE >/dev/null; \
+		done; \
+		if [ -n "$$NEW_FILES" ]; then \
+			{ echo ""; \
+			  echo "Hello dear $(GARNAME) maintainer,"; \
+			  echo ""; \
+			  echo "The upstream notification job has detected the availability of new files for $(GARNAME)."; \
+			  echo ""; \
+			  echo "The following upstream file(s):"; \
+			  echo "    $$NEW_FILES"; \
+			  echo ""; \
+			  echo "is/are available at the following url(s):"; \
+			  echo "    $(MASTER_SITES)"; \
+			  echo ""; \
+			  echo "Please consider updating your package." ; \
+			  echo ""; \
+			  echo "---"; \
+			  echo "upstream notification job"; } | $(GARBIN)/mail2maintainer -s '$(GARNAME) upstream update notification' $(GARNAME); \
+		fi; \
+	fi
+	
+
+check-upstream: 
+	@if [ -n '$(FILES2CHECK)' ]; then \
+		NEW_FILES=""; \
+		for FILE in $(FILES2CHECK) ""; do \
+			[ -n "$$FILE" ] || continue; \
+			if test -f $(COOKIEDIR)/checknew-$$FILE || echo $(DISTFILES) | grep -w $$FILE >/dev/null; then \
+				: ; \
+			else \
+				NEW_FILES="$$FILE $$NEW_FILES"; \
+			fi; \
+			$(MAKE) checknew-$$FILE >/dev/null; \
+		done; \
+		if [ -n "$$NEW_FILES" ]; then \
+			echo "$(GARNAME): new upstream files available: $$NEW_FILES"; \
+		fi; \
+	fi
+	
+checknew-%:
+	@$(MAKECOOKIE)
+
+
+#################### GARCHIVE RULES ####################
+
+# while we're here, let's just handle how to back up our
+# checksummed files
+
+$(GARCHIVEDIR)/%: $(GARCHIVEDIR)
+	@if [ -h $(DOWNLOADDIR)/$* ]; then :; else \
+		gcp -Lr $(DOWNLOADDIR)/$* $@; \
+	fi
+
+
+#################### EXTRACT RULES ####################
+
+TAR_ARGS = --no-same-owner
+
+# rule to extract uncompressed tarballs
+tar-extract-%:
+	@echo " ==> Extracting $(DOWNLOADDIR)/$*"
+	@gtar $(TAR_ARGS) -xf $(DOWNLOADDIR)/$* -C $(EXTRACTDIR)
+	@$(MAKECOOKIE)
+
+# rule to extract files with tar xzf
+tar-gz-extract-%:
+	@echo " ==> Extracting $(DOWNLOADDIR)/$*"
+	@gzip -dc $(DOWNLOADDIR)/$* | gtar $(TAR_ARGS) -xf - -C $(EXTRACTDIR)
+	@$(MAKECOOKIE)
+
+# rule to extract files with tar and bzip
+tar-bz-extract-%:
+	@echo " ==> Extracting $(DOWNLOADDIR)/$*"
+	@bzip2 -dc $(DOWNLOADDIR)/$* | gtar $(TAR_ARGS) -xf - -C $(EXTRACTDIR)
+	@$(MAKECOOKIE)
+
+# extract compressed single files
+bz-extract-%:
+	@echo " ==> Decompressing $(DOWNLOADDIR)/$*"
+	@cp $(DOWNLOADDIR)/$* $(WORKDIR)/
+	@bzip2 -d $(WORKDIR)/$*
+	@$(MAKECOOKIE)
+
+gz-extract-%:
+	@echo " ==> Decompressing $(DOWNLOADDIR)/$*"
+	@cp $(DOWNLOADDIR)/$* $(WORKDIR)/
+	@gzip -d $(WORKDIR)/$*
+	@$(MAKECOOKIE)
+
+# rule to extract files with unzip
+zip-extract-%:
+	@echo " ==> Extracting $(DOWNLOADDIR)/$*"
+	@unzip $(DOWNLOADDIR)/$* -d $(EXTRACTDIR)
+	@$(MAKECOOKIE)
+
+# this is a null extract rule for files which are constant and
+# unchanged (not archives)
+cp-extract-%:
+	@echo " ==> Copying $(DOWNLOADDIR)/$*"
+	@cp -rp $(DOWNLOADDIR)/$* $(WORKDIR)/
+	@$(MAKECOOKIE)
+
+#gets the meat of a .deb into $(WORKSRC)
+deb-bin-extract-%:
+	@echo " ==> Extracting $(DOWNLOADDIR)/$*"
+	@ar x $(DOWNLOADDIR)/$*
+	@rm debian-binary && \
+		mv *.tar.gz $(DOWNLOADDIR) && \
+			mkdir $(WORKSRC) && \
+				gtar $(TAR_ARGS) -xvz -C $(WORKSRC) \
+					-f $(DOWNLOADDIR)/data.tar.gz
+	@$(MAKECOOKIE)
+
+### EXTRACT FILE TYPE MAPPINGS ###
+# These rules specify which of the above extract action rules to use for a
+# given file extension.  Often support for a given extract type can be handled
+# by simply adding a rule here.
+
+extract-archive-%.tar: tar-extract-%.tar
+	@$(MAKECOOKIE)
+
+extract-archive-%.tar.gz: tar-gz-extract-%.tar.gz
+	@$(MAKECOOKIE)
+
+extract-archive-%.tar.Z: tar-gz-extract-%.tar.Z
+	@$(MAKECOOKIE)
+
+extract-archive-%.tgz: tar-gz-extract-%.tgz
+	@$(MAKECOOKIE)
+
+extract-archive-%.taz: tar-gz-extract-%.taz
+	@$(MAKECOOKIE)
+
+extract-archive-%.tar.bz: tar-bz-extract-%.tar.bz
+	@$(MAKECOOKIE)
+
+extract-archive-%.tar.bz2: tar-bz-extract-%.tar.bz2
+	@$(MAKECOOKIE)
+
+extract-archive-%.tbz: tar-bz-extract-%.tbz
+	@$(MAKECOOKIE)
+
+extract-archive-%.zip: zip-extract-%.zip
+	@$(MAKECOOKIE)
+
+extract-archive-%.ZIP: zip-extract-%.ZIP
+	@$(MAKECOOKIE)
+
+extract-archive-%.deb: deb-bin-extract-%.deb
+	@$(MAKECOOKIE)
+
+extract-archive-%.bz2: bz-extract-%.bz2
+	@$(MAKECOOKIE)
+
+extract-archive-%.gz: gz-extract-%.gz
+	@$(MAKECOOKIE)
+
+# anything we don't know about, we just assume is already
+# uncompressed and unarchived in plain format
+extract-archive-%: cp-extract-%
+	@$(MAKECOOKIE)
+
+#################### PATCH RULES ####################
+
+PATCHDIR ?= $(WORKSRC)
+PATCHDIRLEVEL ?= 1
+PATCHDIRFUZZ ?= 2
+GARPATCH = gpatch -d$(PATCHDIR) -p$(PATCHDIRLEVEL) -F$(PATCHDIRFUZZ)
+BASEWORKSRC = $(shell basename $(WORKSRC))
+
+# apply bzipped patches
+bz-patch-%:
+	@echo " ==> Applying patch $(DOWNLOADDIR)/$*"
+	@bzip2 -dc $(DOWNLOADDIR)/$* | $(GARPATCH)
+	@$(MAKECOOKIE)
+
+# apply gzipped patches
+gz-patch-%:
+	@echo " ==> Applying patch $(DOWNLOADDIR)/$*"
+	@gzip -dc $(DOWNLOADDIR)/$* | $(GARPATCH)
+	@$(MAKECOOKIE)
+
+# apply normal patches
+normal-patch-%:
+	@echo " ==> Applying patch $(DOWNLOADDIR)/$*"
+	$(GARPATCH) < $(DOWNLOADDIR)/$*
+	@$(MAKECOOKIE)
+
+# This is used by makepatch
+%/gar-base.diff:
+	@echo " ==> Creating patch $@"
+	@EXTRACTDIR=$(SCRATCHDIR) COOKIEDIR=$(SCRATCHDIR)-$(COOKIEDIR) $(MAKE) extract
+	@PATCHDIR=$(SCRATCHDIR)/$(BASEWORKSRC) COOKIEDIR=$(SCRATCHDIR)-$(COOKIEDIR) $(MAKE) patch
+	@mv $(SCRATCHDIR)/$(BASEWORKSRC) $(WORKSRC).orig
+	@( cd $(WORKDIR); \
+		if gdiff --speed-large-files --minimal -Nru $(BASEWORKSRC).orig $(BASEWORKSRC) > gar-base.diff; then :; else \
+			cd $(CURDIR); \
+			mv -f $(WORKDIR)/gar-base.diff $@; \
+		fi )
+
+### PATCH FILE TYPE MAPPINGS ###
+# These rules specify which of the above patch action rules to use for a given
+# file extension.  Often support for a given patch format can be handled by
+# simply adding a rule here.
+
+patch-extract-%.bz: bz-patch-%.bz
+	@$(MAKECOOKIE)
+
+patch-extract-%.bz2: bz-patch-%.bz2
+	@$(MAKECOOKIE)
+
+patch-extract-%.gz: gz-patch-%.gz
+	@$(MAKECOOKIE)
+
+patch-extract-%.Z: gz-patch-%.Z
+	@$(MAKECOOKIE)
+
+patch-extract-%.diff: normal-patch-%.diff
+	@$(MAKECOOKIE)
+
+patch-extract-%.patch: normal-patch-%.patch
+	@$(MAKECOOKIE)
+
+patch-extract-%: normal-patch-%
+	@$(MAKECOOKIE)
+
+#################### CONFIGURE RULES ####################
+
+TMP_DIRPATHS = --prefix=$(prefix) --exec_prefix=$(exec_prefix) --bindir=$(bindir) --sbindir=$(sbindir) --libexecdir=$(libexecdir) --datadir=$(datadir) --sysconfdir=$(sysconfdir) --sharedstatedir=$(sharedstatedir) --localstatedir=$(localstatedir) --libdir=$(libdir) --infodir=$(infodir) --lispdir=$(lispdir) --includedir=$(includedir) --mandir=$(mandir)
+
+NODIRPATHS += --lispdir
+
+DIRPATHS = $(filter-out $(addsuffix %,$(NODIRPATHS)), $(TMP_DIRPATHS))
+
+# configure a package that has an autoconf-style configure
+# script.
+configure-%/configure:
+	@echo " ==> Running configure in $*"
+	cd $* && $(CONFIGURE_ENV) ./configure $(CONFIGURE_ARGS)
+	@$(MAKECOOKIE)
+
+configure-%/autogen.sh:
+	@echo " ==> Running autogen.sh in $*"
+	@cd $* && $(CONFIGURE_ENV) ./autogen.sh $(CONFIGURE_ARGS)
+	@$(MAKECOOKIE)
+
+# configure a package that uses imake
+# FIXME: untested and likely not the right way to handle the
+# arguments
+configure-%/Imakefile: 
+	@echo " ==> Running xmkmf in $*"
+	@cd $* && $(CONFIGURE_ENV) xmkmf $(CONFIGURE_ARGS)
+	@$(MAKECOOKIE)
+
+configure-%/setup.rb:
+	@echo " ==> Running setup.rb config in $*"
+	@( cd $* ; $(CONFIGURE_ENV) ruby ./setup.rb config $(CONFIGURE_ARGS) )
+	@$(MAKECOOKIE)
+
+#################### BUILD RULES ####################
+
+# build from a standard gnu-style makefile's default rule.
+build-%/Makefile:
+	@echo " ==> Running make in $*"
+	@$(BUILD_ENV) $(MAKE) $(PARALLELMFLAGS) $(foreach TTT,$(BUILD_OVERRIDE_DIRS),$(TTT)="$($(TTT))") -C $* $(BUILD_ARGS)
+	@$(MAKECOOKIE)
+
+build-%/makefile:
+	@echo " ==> Running make in $*"
+	@$(BUILD_ENV) $(MAKE) $(PARALLELMFLAGS) $(foreach TTT,$(BUILD_OVERRIDE_DIRS),$(TTT)="$($(TTT))") -C $* $(BUILD_ARGS)
+	@$(MAKECOOKIE)
+
+build-%/GNUmakefile:
+	@echo " ==> Running make in $*"
+	@$(BUILD_ENV) $(MAKE) $(PARALLELMFLAGS) $(foreach TTT,$(BUILD_OVERRIDE_DIRS),$(TTT)="$($(TTT))") -C $* $(BUILD_ARGS)
+	@$(MAKECOOKIE)
+
+build-%/Jamfile:
+	@echo " ==> Running bjam in $*"
+	@( cd $* ; $(BUILD_ENV) bjam $(JAMFLAGS) $(BUILD_ARGS) )
+	@$(MAKECOOKIE)
+
+# Ruby makefiles
+build-%/Rakefile:
+	@echo " ==> Running rake in $*"
+	@( cd $* ; $(BUILD_ENV) rake $(RAKEFLAGS) $(BUILD_ARGS) )
+	@$(MAKECOOKIE)
+
+build-%/rakefile:
+	@echo " ==> Running rake in $*"
+	@( cd $* ; $(BUILD_ENV) rake $(RAKEFLAGS) $(BUILD_ARGS) )
+	@$(MAKECOOKIE)
+
+build-%/setup.rb:
+	@echo " ==> Running setup.rb setup in $*"
+	@( cd $* ; $(BUILD_ENV) ruby ./setup.rb setup $(BUILD_ARGS) )
+	@$(MAKECOOKIE)
+
+# This can be: build, build_py, build_ext, build_clib, build_scripts
+# See setup.py --help-commands for details
+PYBUILD_CMD ?= build
+build-%/setup.py:
+	@echo " ==> Running setup.py $(PYBUILD_TYPE) in $*"
+	@( cd $* ; $(BUILD_ENV) python ./setup.py $(PYBUILD_CMD) $(BUILD_ARGS) )
+	@$(MAKECOOKIE)
+
+#################### TEST RULES ####################
+
+TEST_TARGET ?= test
+
+# Run tests on pre-built sources
+test-%/Makefile:
+	@echo " ==> Running make $(TEST_TARGET) in $*"
+	@$(BUILD_ENV) $(MAKE) -C $* $(TEST_ARGS) $(TEST_TARGET)
+	@$(MAKECOOKIE)
+
+test-%/makefile:
+	@echo " ==> Running make $(TEST_TARGET) in $*"
+	@$(TEST_ENV) $(MAKE) -C $* $(TEST_ARGS) $(TEST_TARGET)
+	@$(MAKECOOKIE)
+
+test-%/GNUmakefile:
+	@echo " ==> Running make $(TEST_TARGET) in $*"
+	@$(TEST_ENV) $(MAKE) -C $* $(TEST_ARGS) $(TEST_TARGET)
+	@$(MAKECOOKIE)
+
+# Ruby makefiles
+test-%/Rakefile:
+	@echo " ==> Running rake $(TEST_TARGET) in $*"
+	@( cd $* ; $(TEST_ENV) rake $(RAKEFLAGS) $(TEST_ARGS) $(TEST_TARGET) )
+	@$(MAKECOOKIE)
+
+test-%/rakefile:
+	@echo " ==> Running rake $(TEST_TARGET) in $*"
+	@( cd $* ; $(TEST_ENV) rake $(RAKEFLAGS) $(TEST_ARGS) $(TEST_TARGET) )
+	@$(MAKECOOKIE)
+
+test-%/setup.py:
+	@echo " ==> Running setup.py test in $*"
+	@( cd $* ; $(TEST_ENV) python ./setup.py test $(TEST_ARGS) )
+	@$(MAKECOOKIE)
+
+################# INSTALL RULES ####################
+
+# just run make install and hope for the best.
+install-%/Makefile:
+	@echo " ==> Running make install in $*"
+	@$(INSTALL_ENV) $(MAKE) DESTDIR=$(DESTDIR) $(foreach TTT,$(INSTALL_OVERRIDE_DIRS),$(TTT)="$(DESTDIR)$($(TTT))") -C $* $(INSTALL_ARGS) install
+	@$(MAKECOOKIE)
+
+install-%/makefile:
+	@echo " ==> Running make install in $*"
+	@$(INSTALL_ENV) $(MAKE) DESTDIR=$(DESTDIR) $(foreach TTT,$(INSTALL_OVERRIDE_DIRS),$(TTT)="$(DESTDIR)$($(TTT))") -C $* $(INSTALL_ARGS) install
+	@$(MAKECOOKIE)
+
+install-%/GNUmakefile:
+	@echo " ==> Running make install in $*"
+	@$(INSTALL_ENV) $(MAKE) DESTDIR=$(DESTDIR) $(foreach TTT,$(INSTALL_OVERRIDE_DIRS),$(TTT)="$(DESTDIR)$($(TTT))") -C $* $(INSTALL_ARGS) install
+	@$(MAKECOOKIE)
+
+# Ruby makefiles
+install-%/Rakefile:
+	@echo " ==> Running rake install in $*"
+	@( cd $* ; $(INSTALL_ENV) rake $(RAKEFLAGS) $(INSTALL_ARGS) )
+	@$(MAKECOOKIE)
+
+install-%/rakefile:
+	@echo " ==> Running rake install in $*"
+	@( cd $* ; $(INSTALL_ENV) rake $(RAKEFLAGS) $(INSTALL_ARGS) )
+	@$(MAKECOOKIE)
+
+install-%/setup.rb:
+	@echo " ==> Running setup.rb install in $*"
+	@( cd $* ; $(INSTALL_ENV) ruby ./setup.rb install --prefix=$(DESTDIR) )
+	@$(MAKECOOKIE)
+
+# This can be: install, install_lib, install_headers, install_scripts,
+# or install_data.  See setup.py --help-commands for details.
+PYINSTALL_CMD ?= install
+install-%/setup.py:
+	@echo " ==> Running setup.py $(PYINSTALL_CMD) in $*"
+	@( cd $* ; $(INSTALL_ENV) python ./setup.py $(PYINSTALL_CMD) $(INSTALL_ARGS) )
+	@$(MAKECOOKIE)
+
+# pkg-config scripts
+install-%-config:
+	mkdir -p $(STAGINGDIR)/$(GARNAME)
+	cp -f $(DESTDIR)$(bindir)/$*-config $(STAGINGDIR)/$(GARNAME)/
+	$(MAKECOOKIE)
+
+######################################
+# Use a manifest file of the format:
+# src:dest[:mode[:owner[:group]]]
+#   as in...
+# ${WORKSRC}/nwall:${bindir}/nwall:2755:root:tty
+# ${WORKSRC}/src/foo:${sharedstatedir}/foo
+# ${WORKSRC}/yoink:${sysconfdir}/yoink:0600
+
+# Okay, so for the benefit of future generations, this is how it
+# works:
+#
+# First of all, we have this file with colon-separated lines.
+# The $(shell cat foo) routine turns it into a space-separated
+# list of words.  The foreach iterates over this list, putting a
+# colon-separated record in $(ZORCH) on each pass through.
+#
+# Next, we have the macro $(MANIFEST_LINE), which splits a record
+# into a space-separated list, and $(MANIFEST_SIZE), which
+# determines how many elements are in such a list.  These are
+# purely for convenience, and could be inserted inline if need
+# be.
+MANIFEST_LINE = $(subst :, ,$(ZORCH)) 
+MANIFEST_SIZE = $(words $(MANIFEST_LINE))
+
+# So the install command takes a variable number of parameters,
+# and our records have from two to five elements.  Gmake can't do
+# any sort of arithmetic, so we can't do any really intelligent
+# indexing into the list of parameters.
+# 
+# Since the last three elements of the $(MANIFEST_LINE) are what
+# we're interested in, we make a parallel list with the parameter
+# switch text (note the dummy elements at the beginning):
+MANIFEST_FLAGS = notused notused --mode= --owner= --group=
+
+# The following environment variables are set before the
+# installation boogaloo begins.  This ensures that WORKSRC is
+# available to the manifest and that all of the location
+# variables are suitable for *installation* (that is, using
+# DESTDIR)
+
+MANIFEST_ENV += WORKSRC=$(WORKSRC)
+# This was part of the "implicit DESTDIR" regime.  However:
+# http://gar.lnx-bbc.org/wiki/ImplicitDestdirConsideredHarmful
+#MANIFEST_ENV += $(foreach TTT,prefix exec_prefix bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir infodir lispdir includedir mandir,$(TTT)=$(DESTDIR)$($(TTT)))
+
+# ...and then we join a slice of it with the corresponding slice
+# of the $(MANIFEST_LINE), starting at 3 and going to
+# $(MANIFEST_SIZE).  That's where all the real magic happens,
+# right there!
+#
+# following that, we just splat elements one and two of
+# $(MANIFEST_LINE) on the end, since they're the ones that are
+# always there.  Slap a semicolon on the end, and you've got a
+# completed iteration through the foreach!  Beaujolais!
+
+# FIXME: using -D may not be the right thing to do!
+install-$(MANIFEST_FILE):
+	@echo " ==> Installing from $(MANIFEST_FILE)"
+	$(MANIFEST_ENV) ; $(foreach ZORCH,$(shell cat $(MANIFEST_FILE)), ginstall -Dc $(join $(wordlist 3,$(MANIFEST_SIZE),$(MANIFEST_FLAGS)),$(wordlist 3,$(MANIFEST_SIZE),$(MANIFEST_LINE))) $(word 1,$(MANIFEST_LINE)) $(word 2,$(MANIFEST_LINE)) ;)
+	@$(MAKECOOKIE)
+
+#################### DEPENDENCY RULES ####################
+
+# These two lines are here to grandfather in all the packages that use
+# BUILDDEPS
+IMGDEPS += build
+build_DEPENDS = $(BUILDDEPS)
+
+# Standard deps install into the standard install dir.  For the
+# BBC, we set the includedir to the build tree and the libdir to
+# the install tree.  Most dependencies work this way.
+
+$(GARDIR)/%/$(COOKIEDIR)/install:
+	@echo ' ==> Building $* as a dependency'
+	@$(MAKE) -C $(GARDIR)/$* install DESTIMG=$(DESTIMG)
+
+# builddeps need to have everything put in the build DESTIMG
+#$(GARDIR)/%/$(COOKIEROOTDIR)/build.d/install:
+#	@echo ' ==> Building $* as a build dependency'
+#	@$(MAKE) -C $(GARDIR)/$* install	DESTIMG=build
+
+# Source Deps grab the source code for another package
+# XXX: nobody uses this, but it should really be more like
+# $(GARDIR)/%/cookies/patch:
+srcdep-$(GARDIR)/%:
+	@echo ' ==> Grabbing source for $* as a dependency'
+	@$(MAKE) -C $(GARDIR)/$* patch-p extract-p > /dev/null 2>&1 || \
+	 $(MAKE) -C $(GARDIR)/$* patch
+
+# Image deps create dependencies on package installations in
+# images other than the current package's DESTIMG.
+IMGDEP_TARGETS = $(foreach TTT,$($*_DEPENDS),$(subst xyzzy,$(TTT),$(GARDIR)/xyzzy/$(COOKIEROOTDIR)/$*.d/install))
+imgdep-%:
+	@test -z "$(strip $(IMGDEP_TARGETS))" || $(MAKE) DESTIMG="$*" $(IMGDEP_TARGETS)
+
+# Igor's info and man gzipper rule
+gzip-info-man: gzip-info gzip-man
+
+gzip-info:
+	gfind $(DESTDIR) -type f -iname *.info* -not -iname *.gz | \
+		gxargs -r gzip --force
+
+gzip-man:
+	gfind $(DESTDIR) -type f -iname *.[1-8] -size +2 -print | \
+		gxargs -r gzip --force
+
+include $(addprefix $(GARDIR)/,$(EXTRA_LIBS))
+
+# Mmm, yesssss.  cookies my preciousssss!  Mmm, yes downloads it
+# is!  We mustn't have nasty little gmakeses deleting our
+# precious cookieses now must we?
+.PRECIOUS: $(DOWNLOADDIR)/% $(COOKIEDIR)/% $(FILEDIR)/%

Copied: csw/mgar/gar/v2/gar.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/gar.mk)
===================================================================
--- csw/mgar/gar/v2/gar.mk	                        (rev 0)
+++ csw/mgar/gar/v2/gar.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,737 @@
+
+#
+# $Id$
+#
+# Copyright (C) 2001 Nick Moffitt
+# 
+# Redistribution and/or use, with or without modification, is
+# permitted.  This software is without warranty of any kind.  The
+# author(s) shall not be liable in the event that use of the
+# software causes damage.
+
+# Comment this out to make much verbosity
+#.SILENT:
+
+#ifeq ($(origin GARDIR), undefined)
+#GARDIR := $(CURDIR)/../..
+#endif
+
+#GARDIR ?= ../..
+#ifeq ($(origin GARDIR), undefined)
+#GARDIR := $(CURDIR)/../..
+#endif
+
+GARDIR ?= ../..
+GARBIN  = $(GARDIR)/bin
+
+DIRSTODOTS = $(subst . /,./,$(patsubst %,/..,$(subst /, ,/$(1))))
+ROOTFROMDEST = $(call DIRSTODOTS,$(DESTDIR))
+MAKEPATH = $(shell echo $(1) | perl -lne 'print join(":", split)')
+TOLOWER = $(shell echo $(1) | tr '[A-Z]' '[a-z]')
+
+PARALLELMFLAGS ?= $(MFLAGS)
+export PARALLELMFLAGS
+
+DISTNAME ?= $(GARNAME)-$(GARVERSION)
+
+ALLFILES ?= $(DISTFILES) $(PATCHFILES)
+
+ifeq ($(MAKE_INSTALL_DIRS),1)
+INSTALL_DIRS = $(addprefix $(DESTDIR),$(prefix) $(exec_prefix) $(bindir) $(sbindir) $(libexecdir) $(datadir) $(sysconfdir) $(sharedstatedir) $(localstatedir) $(libdir) $(infodir) $(lispdir) $(includedir) $(mandir) $(foreach NUM,1 2 3 4 5 6 7 8, $(mandir)/man$(NUM)) $(sourcedir))
+else
+INSTALL_DIRS =
+endif
+
+# For rules that do nothing, display what dependencies they
+# successfully completed
+#DONADA = @echo "	[$@] complete.  Finished rules: $+"
+#DONADA = @touch $(COOKIEDIR)/$@; echo "	[$@] complete for $(GARNAME)."
+DONADA = @touch $(COOKIEDIR)/$(patsubst $(COOKIEDIR)/%,%,$@); echo "	[$@] complete for $(GARNAME)."
+
+# TODO: write a stub rule to print out the name of a rule when it
+# *does* do something, and handle indentation intelligently.
+
+# Default sequence for "all" is:  fetch checksum extract patch configure build
+all: build
+
+# include the configuration file to override any of these variables
+include $(GARDIR)/gar.conf.mk
+include $(GARDIR)/gar.lib.mk
+
+#################### DIRECTORY MAKERS ####################
+
+# This is to make dirs as needed by the base rules
+$(sort $(DOWNLOADDIR) $(PARTIALDIR) $(COOKIEDIR) $(WORKSRC) $(WORKDIR) $(EXTRACTDIR) $(FILEDIR) $(SCRATCHDIR) $(PKGROOT) $(INSTALL_DIRS) $(INSTALLISADIR) $(GARCHIVEDIR) $(GARPKGDIR) $(STAGINGDIR)) $(COOKIEDIR)/%:
+	@if test -d $@; then : ; else \
+		ginstall -d $@; \
+		echo "ginstall -d $@"; \
+	fi
+
+# These stubs are wildcarded, so that the port maintainer can
+# define something like "pre-configure" and it won't conflict,
+# while the configure target can call "pre-configure" safely even
+# if the port maintainer hasn't defined it.
+# 
+# in addition to the pre-<target> rules, the maintainer may wish
+# to set a "pre-everything" rule, which runs before the first
+# actual target.
+pre-%:
+	@true
+
+post-%:
+	@true
+
+# Call any arbitrary rule recursively for all dependencies
+deep-%: %
+	@for target in "" $(DEPEND_LIST) ; do \
+		test -z "$$target" && continue ; \
+		$(MAKE) -C ../../$$target DESTIMG=$(DESTIMG) $@ ; \
+	done
+	@$(foreach IMG,$(filter-out $(DESTIMG),$(IMGDEPS)),for dep in "" $($(IMG)_DEPENDS); do test -z "$$dep" && continue ; $(MAKE) -C ../../$$dep DESTIMG=$(IMG) $@; done; )
+
+# ========================= MODULATIONS ======================== 
+
+# The default is to modulate over ISAs
+MODULATORS ?= ISA $(EXTRA_MODULATORS) $(EXTRA_MODULATORS_$(GARCH))
+MODULATIONS_ISA = $(NEEDED_ISAS)
+
+tolower = $(shell echo $(1) | tr '[A-Z]' '[a-z]')
+expand_modulator_1 = $(addprefix $(call tolower,$(1))-,$(MODULATIONS_$(1)))
+# This expands to the list of all modulators with their respective modulations
+modulations = $(if $(word 2,$(1)),\
+	$(foreach P,$(call expand_modulator_1,$(firstword $(1))),\
+		$(addprefix $(P)-,$(call modulations,$(wordlist 2,$(words $(1)),$(1))))\
+	),\
+	$(call expand_modulator_1,$(1)))
+
+MODULATIONS ?= $(strip $(call modulations,$(strip $(MODULATORS))))
+
+# _modulate(ISA STATIC,,,)
+# -> _modulate2(STATIC,isa-i386,ISA,ISA=i386)
+#    -> _modulate2(,,isa-i386-static-yes,ISA STATIC,ISA=i386 STATIC=yes)
+#       -> xxx-isa-i386-static-yes: @gmake xxx ISA=i386 STATIC=yes
+#    -> _modulate2(,,isa-i386-static-no,ISA STATIC,ISA=i386 STATIC=no)
+#       -> xxx-isa-i386-static-no: @gmake xxx ISA=i386 STATIC=no
+# -> _modulate2(STATIC,isa-amd64,ISA,ISA=amd64)
+#    -> _modulate2(,,isa-amd64-static-yes,ISA STATIC,ISA=amd64 STATIC=yes)
+#       -> xxx-isa-amd64-static-yes: @gmake xxx ISA=amd64 STATIC=yes
+#    -> _modulate2(,,isa-amd64-static-no,ISA STATIC,ISA=amd64 STATIC=no)
+#       -> xxx-isa-amd64-static-no: @gmake xxx ISA=amd64 STATIC=no
+
+define _modulate_target
+$(1)-$(2):
+	@gmake MODULATION=$(2) $(3) pre-$(1)-$(2) $(1)-modulated post-$(1)-$(2)
+	@# This is MAKECOOKIE expanded to use the name of the rule explicily as the rule has
+	@# not been evaluated yet. XXX: Use function _MAKECOOKIE for both
+	@mkdir -p $(COOKIEDIR)/$(dir $(1)-$(2)) && date >> $(COOKIEDIR)/$(1)-$(2)
+	@# The next line has intentionally been left blank to explicitly terminate this make rule
+
+endef
+
+define _modulate_target_nocookie
+$(1)-$(2):
+	@gmake -s MODULATION=$(2) $(3) pre-$(1)-$(2) $(1)-modulated post-$(1)-$(2)
+	@# The next line has intentionally been left blank to explicitly terminate this make rule
+
+endef
+
+define _modulate_do
+xtest-$(2):
+	@gmake -s MODULATION=$(2) $(4) _pmod
+	@# The next line has intentionally been left blank
+
+$(call _modulate_target,extract,$(2),$(4))
+$(call _modulate_target,patch,$(2),$(4))
+$(call _modulate_target,configure,$(2),$(4))
+$(call _modulate_target_nocookie,reset-configure,$(2),$(4))
+$(call _modulate_target,build,$(2),$(4))
+$(call _modulate_target_nocookie,reset-build,$(2),$(4))
+$(call _modulate_target,test,$(2),$(4))
+$(call _modulate_target,install,$(2),$(4))
+$(call _modulate_target_nocookie,reset-install,$(2),$(4))
+$(call _modulate_target,merge,$(2),$(4))
+$(call _modulate_target_nocookie,reset-merge,$(2),$(4))
+$(call _modulate_target_nocookie,clean,$(2),$(4))
+endef
+
+# This evaluates to the make rules for all modulations passed as first argument
+# Usage: _modulate( <MODULATORS> )
+define _modulate
+$(foreach M,$(MODULATIONS_$(firstword $(1))),\
+	$(call _modulate2,\
+		$(wordlist 2,$(words $(1)),$(1)),\
+		$(call tolower,$(firstword $(1)))-$(M),\
+		$(firstword $(1)),\
+		$(firstword $(1))=$(M)\
+	)\
+)
+endef
+
+# This is a helper for the recursive _modulate
+define _modulate2
+$(if $(strip $(1)),\
+	$(foreach M,$(MODULATIONS_$(firstword $(1))),\
+		$(call _modulate2,\
+			$(wordlist 2,$(words $(1)),$(1)),\
+			$(addprefix $(2)-,$(call tolower,$(firstword $(1)))-$(M)),\
+			$(3) $(firstword $(1)),\
+			$(4) $(firstword $(1))=$(M)\
+		)\
+	),\
+	$(call _modulate_do,,$(strip $(2)),$(3),$(4))\
+)
+endef
+
+define _pmod
+	@echo "[ $1 for modulation $(MODULATION): $(foreach M,$(MODULATORS),$M=$($M)) ]"
+endef
+
+$(eval $(call _modulate,$(MODULATORS)))
+
+moddebug:
+	@echo $(strip $(strip $(call _modulate,$(MODULATORS))))
+
+allmod: $(foreach M,$(MODULATIONS),xtest-$(M))
+
+
+modenv:
+	@echo " Modulators: $(MODULATORS)"
+	@echo "Modulations: $(MODULATIONS)"
+	@echo "M: $(call expand_modulator_1,ISA)"
+
+#patch-isa-%:
+#	@echo " ==> Patching for ISA $*"
+#	@$(MAKE) ISA=$* pre-patch-isa-$* patch-isa post-patch-isa-$*
+#	@$(DONADA)
+
+
+
+# ========================= MAIN RULES ========================= 
+# The main rules are the ones that the user can specify as a
+# target on the "make" command-line.  Currently, they are:
+#	prereq fetch-list fetch checksum makesum extract checkpatch patch
+#	build install reinstall uninstall package
+# (some may not be complete yet).
+#
+# Each of these rules has dependencies that run in the following
+# order:
+# 	- run the previous main rule in the chain (e.g., install
+# 	  depends on build)
+#	- run the pre- rule for the target (e.g., configure would
+#	  then run pre-configure)
+#	- generate a set of files to depend on.  These are typically
+#	  cookie files in $(COOKIEDIR), but in the case of fetch are
+#	  actual downloaded files in $(DOWNLOADDIR)
+# 	- run the post- rule for the target
+# 
+# The main rules also run the $(DONADA) code, which prints out
+# what just happened when all the dependencies are finished.
+
+announce:
+	@echo "[===== NOW BUILDING: $(DISTNAME) =====]"
+
+#announce-isa:
+#	@echo "[===== NOW BUILDING: $(DISTNAME) ISA: $(ISA) =====]"
+
+announce-modulation:
+	@echo "[===== NOW BUILDING: $(DISTNAME) MODULATION $(MODULATION): $(foreach M,$(MODULATORS),$M=$($M)) =====]"
+
+# prerequisite	- Make sure that the system is in a sane state for building the package
+PREREQUISITE_TARGETS = $(addprefix prerequisitepkg-,$(PREREQUISITE_BASE_PKGS) $(PREREQUISITE_PKGS)) $(addprefix prerequisite-,$(PREREQUISITE_SCRIPTS))
+
+prerequisite: announce pre-everything $(COOKIEDIR) $(DOWNLOADDIR) $(PARTIALDIR) $(addprefix dep-$(GARDIR)/,$(FETCHDEPS)) pre-prerequisite $(PREREQUISITE_TARGETS) post-prerequisite
+	$(DONADA)
+
+prerequisitepkg-%:
+	@echo " ==> Verifying for installed package $*: \c"
+	@(pkginfo -q $*; if [ $$? -eq 0 ]; then echo "installed"; else echo "MISSING"; exit 1; fi)
+	@$(MAKECOOKIE)
+
+# fetch-list	- Show list of files that would be retrieved by fetch.
+# NOTE: DOES NOT RUN pre-everything!
+fetch-list:
+	@echo "Distribution files: "
+	@for i in $(DISTFILES); do echo "	$$i"; done
+	@echo "Patch files: "
+	@for i in $(PATCHFILES); do echo "	$$i"; done
+
+# fetch			- Retrieves $(DISTFILES) (and $(PATCHFILES) if defined)
+#				  into $(DOWNLOADDIR) as necessary.
+FETCH_TARGETS =  $(addprefix $(DOWNLOADDIR)/,$(ALLFILES))
+
+fetch: prerequisite pre-fetch $(FETCH_TARGETS) post-fetch
+	@$(DONADA)
+
+# returns true if fetch has completed successfully, false
+# otherwise
+fetch-p:
+	@$(foreach COOKIEFILE,$(FETCH_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# checksum		- Use $(CHECKSUMFILE) to ensure that your
+# 				  distfiles are valid.
+CHECKSUM_TARGETS = $(addprefix checksum-,$(filter-out $(NOCHECKSUM),$(ALLFILES)))
+
+checksum: fetch $(COOKIEDIR) pre-checksum $(CHECKSUM_TARGETS) post-checksum
+	@$(DONADA)
+
+# The next rule handles the dependency from the modulated context to
+# the contextless checksumming. The rule is called when the cookie
+# to the global checksum is requested. If the global checksum has not run,
+# then run it. Otherwise it is silently accepted.
+checksum-modulated: $(COOKIEDIR)
+	@$(MAKE) -s ISA=global checksum
+	@$(DONADA)
+
+# returns true if checksum has completed successfully, false
+# otherwise
+checksum-p:
+	@$(foreach COOKIEFILE,$(CHECKSUM_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# makesum		- Generate distinfo (only do this for your own ports!).
+MAKESUM_TARGETS =  $(addprefix $(DOWNLOADDIR)/,$(filter-out $(NOCHECKSUM),$(ALLFILES))) 
+
+makesum: fetch $(MAKESUM_TARGETS)
+	@if test "x$(MAKESUM_TARGETS)" != "x "; then \
+		gmd5sum $(MAKESUM_TARGETS) > $(CHECKSUM_FILE) ; \
+		echo "Checksums made for $(MAKESUM_TARGETS)" ; \
+		cat $(CHECKSUM_FILE) ; \
+	fi
+
+# I am always typing this by mistake
+makesums: makesum
+
+GARCHIVE_TARGETS =  $(addprefix $(GARCHIVEDIR)/,$(ALLFILES))
+
+garchive: checksum $(GARCHIVE_TARGETS) ;
+
+# extract		- Unpacks $(DISTFILES) into $(EXTRACTDIR) (patches are "zcatted" into the patch program)
+EXTRACT_TARGETS = $(addprefix extract-archive-,$(filter-out $(NOEXTRACT),$(DISTFILES)))
+
+# We call an additional extract-modulated without resetting any variables so
+# a complete unpacked set goes to the global dir for packaging (like gspec)
+#extract: checksum $(COOKIEDIR) pre-extract extract-isa $(addprefix extract-isa-,$(BUILD_ISAS)) post-extract
+extract: checksum $(COOKIEDIR) pre-extract extract-modulated $(addprefix extract-,$(MODULATIONS)) post-extract
+	@$(DONADA)
+
+extract-modulated: checksum-modulated $(EXTRACTDIR) $(COOKIEDIR) \
+		$(addprefix dep-$(GARDIR)/,$(EXTRACTDEPS)) \
+		announce-modulation \
+		pre-extract-modulated $(EXTRACT_TARGETS) post-extract-modulated
+	@$(DONADA)
+
+#extract-isa-%:
+#	@$(MAKE) ISA=$* pre-extract-isa-$* extract-isa post-extract-isa-$*
+#	@$(MAKECOOKIE)
+
+# returns true if extract has completed successfully, false
+# otherwise
+extract-p:
+	@$(foreach COOKIEFILE,$(EXTRACT_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# checkpatch	- Do a "patch -C" instead of a "patch".  Note
+# 				  that it may give incorrect results if multiple
+# 				  patches deal with the same file.
+# TODO: actually write it!
+checkpatch: extract
+	@echo "$@ NOT IMPLEMENTED YET"
+
+# patch			- Apply any provided patches to the source.
+PATCH_TARGETS = $(addprefix patch-extract-,$(PATCHFILES))
+
+#patch: pre-patch $(addprefix patch-isa-,$(BUILD_ISAS)) post-patch
+patch: pre-patch $(addprefix patch-,$(MODULATIONS)) post-patch
+	@$(DONADA)
+
+#patch-isa: extract-isa $(WORKSRC) pre-patch-isa $(PATCH_TARGETS) post-patch-isa
+patch-modulated: extract-modulated $(WORKSRC) pre-patch-modulated $(PATCH_TARGETS) post-patch-modulated
+
+#patch-isa-%:
+#	@echo " ==> Patching for ISA $*"
+#	@$(MAKE) ISA=$* pre-patch-isa-$* patch-isa post-patch-isa-$*
+#	@$(DONADA)
+
+# returns true if patch has completed successfully, false
+# otherwise
+patch-p:
+	@$(foreach COOKIEFILE,$(PATCH_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# makepatch		- Grab the upstream source and diff against $(WORKSRC).  Since
+# 				  diff returns 1 if there are differences, we remove the patch
+# 				  file on "success".  Goofy diff.
+makepatch: $(SCRATCHDIR) $(FILEDIR) $(FILEDIR)/gar-base.diff
+	$(DONADA)
+
+# XXX: Allow patching of pristine sources separate from ISA directories
+# XXX: Use makepatch on global/
+
+# this takes the changes you've made to a working directory,
+# distills them to a patch, updates the checksum file, and tries
+# out the build (assuming you've listed the gar-base.diff in your
+# PATCHFILES).  This is way undocumented.  -NickM
+beaujolais: makepatch makesum clean build
+	$(DONADA)
+
+update: makesum garchive clean
+
+# configure		- Runs either GNU configure, one or more local
+# 				  configure scripts or nothing, depending on
+# 				  what's available.
+CONFIGURE_TARGETS = $(addprefix configure-,$(CONFIGURE_SCRIPTS))
+
+# Limit dependencies to all but one category or to exclude one category
+ALL_CATEGORIES = apps cpan devel gnome lang lib net server utils extra
+ifneq ($(BUILD_CATEGORY),)
+NOBUILD_CATEGORY = $(filter-out $(BUILD_CATEGORY),$(ALL_CATEGORIES))
+endif
+
+DEPEND_LIST = $(filter-out $(addsuffix /%,$(NOBUILD_CATEGORY)),$(DEPENDS) $(LIBDEPS) $(BUILDDEPS))
+
+ifneq ($(SKIPDEPEND),1)
+CONFIGURE_DEPS = $(addprefix $(GARDIR)/,$(addsuffix /$(COOKIEDIR)/install,$(DEPEND_LIST)))
+CONFIGURE_IMGDEPS = $(addprefix imgdep-,$(filter-out $(DESTIMG),$(IMGDEPS)))
+#CONFIGURE_BUILDDEPS = $(addprefix $(GARDIR)/,$(addsuffix /$(COOKIEROOTDIR)/build.d/install,$(BUILDDEPS)))
+endif
+
+configure: pre-configure $(addprefix configure-,$(MODULATIONS)) post-configure
+	$(DONADA)
+
+#configure-isa: patch-isa $(CONFIGURE_IMGDEPS) $(CONFIGURE_BUILDDEPS) $(CONFIGURE_DEPS) \
+#		$(addprefix srcdep-$(GARDIR)/,$(SOURCEDEPS)) \
+#		pre-configure-isa $(CONFIGURE_TARGETS) post-configure-isa
+configure-modulated: verify-isa patch-modulated $(CONFIGURE_IMGDEPS) $(CONFIGURE_BUILDDEPS) $(CONFIGURE_DEPS) \
+		$(addprefix srcdep-$(GARDIR)/,$(SOURCEDEPS)) \
+		pre-configure-modulated $(CONFIGURE_TARGETS) post-configure-modulated
+
+#configure-isa-%:
+#	@echo " ==> Configuring for ISA $*"
+#	@$(MAKE) ISA=$* pre-configure-isa-$* configure-isa post-configure-isa-$*
+#	@$(DONADA)
+
+.PHONY: reset-configure reset-configure-modulated
+reconfigure: reset-configure configure
+
+reset-configure: 
+
+reconfigure-isa-%:
+
+reset-configure:
+	@$(foreach ISA,$(NEEDED_ISAS),$(MAKE) -s ISA=$(ISA) reset-configure-isa;)
+
+reconfigure-isa-%:
+	@$(MAKE) -s ISA=$* reset-configure-isa configure-isa
+
+#reset-configure-isa:
+#	@echo " ==> Reset configure state for ISA $(ISA)"
+#	@rm -rf xxx
+#	@$(MAKE) -s ISA=$* reset-configure-isa
+
+# returns true if configure has completed successfully, false
+# otherwise
+configure-p:
+	@$(foreach COOKIEFILE,$(CONFIGURE_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# build			- Actually compile the sources.
+BUILD_TARGETS = $(addprefix build-,$(BUILD_CHECK_SCRIPTS)) $(addprefix build-,$(BUILD_SCRIPTS))
+
+build: pre-build $(addprefix build-,$(MODULATIONS)) post-build
+	$(DONADA)
+
+# Build for a specific architecture
+#build-isa: configure-isa pre-build-isa $(BUILD_TARGETS) post-build-isa
+#	@$(MAKECOOKIE)
+build-modulated-check:
+	$(if $(filter ERROR,$(ARCHFLAGS_$(GARCOMPILER)_$*)),                                            \
+		$(error Code for the architecture $* can not be produced with the compiler $(GARCOMPILER))      \
+	)
+
+build-modulated: verify-isa configure-modulated pre-build-modulated $(BUILD_TARGETS) post-build-modulated
+	@$(MAKECOOKIE)
+
+# Build for a certain architecture
+#build-isa-%:
+#	@echo " ==> Building for ISA $*"
+#	$(if $(filter ERROR,$(ARCHFLAGS_$(GARCOMPILER)_$*)),                                            \
+#		$(error Code for the architecture $* can not be produced with the compiler $(GARCOMPILER))      \
+#	)
+#	@$(MAKE) ISA=$* pre-build-isa-$* build-isa post-build-isa-$*
+#	@$(MAKECOOKIE)
+
+# returns true if build has completed successfully, false
+# otherwise
+build-p:
+	@$(foreach COOKIEFILE,$(BUILD_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+TEST_TARGETS = $(addprefix test-,$(TEST_SCRIPTS))
+
+test: $(addprefix test-,$(MODULATIONS))
+	$(DONADA)
+
+test-modulated: build-modulated pre-test $(TEST_TARGETS) post-test
+	$(DONADA)
+
+#test-isa-%:
+#	@echo " ==> Testing for ISA $*"
+#	@$(MAKE) ISA=$* test-isa
+#	@$(MAKECOOKIE)
+
+# strip - Strip executables
+POST_INSTALL_TARGETS := strip $(POST_INSTALL_TARGETS)
+strip:
+	@for target in $(STRIP_DIRS) $(DESTDIR)$(bindir) $(DESTDIR)$(sbindir) ; \
+	do \
+		stripbin $$target ; \
+	done
+	$(DONADA)
+
+# fixconfig - Remove build-time paths config files
+POST_INSTALL_TARGETS := fixconfig $(POST_INSTALL_TARGETS)
+FIXCONFIG_DIRS    ?= $(DESTDIR)$(libdir) $(DESTDIR)$(bindir)
+FIXCONFIG_RMPATHS ?= $(DESTDIR) $(CURDIR)/$(WORKSRC)
+fixconfig:
+	@if test "x$(FIXCONFIG_DIRS)" != "x" ; then \
+		for path in $(FIXCONFIG_DIRS) ; do \
+			if test -d $$path ; then \
+				echo "  ==> fixconfig: $$path" ; \
+				replacer $$path $(FIXCONFIG_RMPATHS) ; \
+			fi ; \
+		done ; \
+	fi
+
+# install		- Test and install the results of a build.
+INSTALL_TARGETS = $(addprefix install-,$(INSTALL_SCRIPTS)) $(addprefix install-license-,$(subst /, ,$(LICENSE)))
+
+install: pre-install $(addprefix install-,$(MODULATIONS)) post-install
+	$(DONADA)
+
+install-modulated: build-modulated $(addprefix dep-$(GARDIR)/,$(INSTALLDEPS)) test-modulated $(INSTALL_DIRS) $(PRE_INSTALL_TARGETS) pre-install-modulated $(INSTALL_TARGETS) post-install-modulated $(POST_INSTALL_TARGETS) 
+	@$(MAKECOOKIE)
+
+# returns true if install has completed successfully, false
+# otherwise
+install-p:
+	@$(foreach COOKIEFILE,$(INSTALL_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+
+
+# reinstall		- Install the results of a build, ignoring
+# 				  "already installed" flag.
+.PHONY: reinstall reset-install reset-install-modulated
+reinstall: reset-install install
+
+reset-install: reset-merge $(addprefix reset-install-,$(MODULATIONS))
+	@rm -f $(foreach M,$(MODULATIONS),$(COOKIEDIR)/install-$M) $(COOKIEDIR)/install $(COOKIEDIR)/post-install
+
+reset-install-modulated:
+	@$(call _pmod,Reset install state)
+	@rm -rf $(INSTALLISADIR) $(COOKIEDIR)/install-work
+	@rm -f $(COOKIEDIR)/install-modulated
+
+# merge in all isas to the package directory after installation
+
+# Merging in general allows the selection of parts from different ISA builds into the package
+# Per default merging is done differently depending on
+# (a) if the sources are build for more than one ISA
+# (b) if the executables should be replaced by isaexec or not
+# 
+# - If there is only one ISA to build for everything is copied verbatim to PKGROOT.
+# - If there are builds for more than one ISA the destination differs depending on if
+#   the binaries should be executed by isaexec. This is usually bin, sbin and libexec.
+#
+# default:        relocate to ISA subdirs if more than one ISA, use isaexec-wrapper for bin/, etc.
+# NO_ISAEXEC = 1: ISA_DEFAULT gets installed in bin/..., all others in bin/$ISA/
+#
+# Automatic merging is only possible if you have the default modulation "ISA"
+# Otherwise you *must* specify merge scripts for all modulations.
+
+ifeq ($(NEEDED_ISAS),$(ISA_DEFAULT))
+MERGE_SCRIPTS_isa-$(ISA_DEFAULT) ?= copy-all $(EXTRA_MERGE_SCRIPTS_$(ISA_DEFAULT)) $(EXTRA_MERGE_SCRIPTS)
+else
+ISAEXEC_DIRS ?= $(if $(NO_ISAEXEC),,$(bindir) $(sbindir) $(libexecdir))
+MERGE_DIRS_isa-$(ISA_DEFAULT) ?=
+MERGE_DIRS_isa-$(ISA) ?= $(bindir) $(sbindir) $(libexecdir) $(libdir)
+MERGE_SCRIPTS_isa-$(ISA_DEFAULT) ?= copy-relocate $(EXTRA_MERGE_SCRIPTS_isa-$(ISA)) $(EXTRA_MERGE_SCRIPTS)
+MERGE_SCRIPTS_isa-$(ISA) ?= copy-relocated-only $(EXTRA_MERGE_SCRIPTS_isa-$(ISA)) $(EXTRA_MERGE_SCRIPTS)
+_EXTRA_GAR_PKGS += CSWisaexec
+endif
+
+# These directories get relocated into their ISA subdirectories
+#ISA_RELOCATE_DIRS ?= $(ISA_RELOCATE_DIRS_$(ISA))
+MERGE_DIRS ?= $(MERGE_DIRS_$(MODULATION))
+
+# These files get relocated and will be replaced by the isaexec-wrapper
+_ISAEXEC_FILES = $(wildcard $(foreach D,$(ISAEXEC_DIRS),$(PKGROOT)$(D)/* ))
+ISAEXEC_FILES ?= $(if $(_ISAEXEC_FILES),$(patsubst $(PKGROOT)%,%,		\
+	$(shell for F in $(_ISAEXEC_FILES); do		\
+		if test -f "$$F"; then echo $$F; fi;	\
+	done)),)
+
+# These files get relocated.
+# MERGE_DIRS is expanded to individual files here. All further
+# processing is done using these files.
+ISA_RELOCATE_FILES ?= $(patsubst $(PKGROOT)%,%,$(wildcard $(foreach D,$(MERGE_DIRS),$(PKGROOT)$(D)/*))) $(ISAEXEC_FILES) $(EXTRA_ISA_RELOCATE_FILES)
+
+# These merge-rules are actually processed for the current modulation
+MERGE_TARGETS ?= $(addprefix merge-,$(MERGE_SCRIPTS_$(MODULATION))) $(EXTRA_MERGE_TARGETS)
+
+# Include only these files
+ifeq ($(origin MERGE_INCLUDE_FILES_$(MODULATION)), undefined)
+_MERGE_INCLUDE_FILES = $(MERGE_INCLUDE_FILES)
+else
+_MERGE_INCLUDE_FILES = $(MERGE_INCLUDE_FILES_$(MODULATION))
+endif
+_MERGE_INCLUDE_FILES += $(EXTRA_MERGE_INCLUDE_FILES) $(EXTRA_MERGE_INCLUDE_FILES_$(MODULATION))
+
+MERGE_EXCLUDE_INFODIR ?= $(sharedstatedir)/info/dir
+MERGE_EXCLUDE_DEFAULT ?= $(MERGE_EXCLUDE_INFODIR) $(libdir)/.*\.a $(libdir)/.*\.la
+
+# Exclude these files
+ifeq ($(origin MERGE_EXCLUDE_FILES_$(MODULATION)), undefined)
+_MERGE_EXCLUDE_FILES = $(MERGE_EXCLUDE_FILES)
+else
+_MERGE_EXCLUDE_FILES = $(MERGE_EXCLUDE_FILES_$(MODULATION))
+endif
+_MERGE_EXCLUDE_FILES += $(EXTRA_MERGE_EXCLUDE_FILES) $(EXTRA_MERGE_EXCLUDE_FILES_$(MODULATION)) $(MERGE_EXCLUDE_DEFAULT)
+
+# This variable contains parameter for pax to honor global file inclusion/exclusion
+# Exclude by replacing files with the empty string
+_INC_EXT_RULE = $(foreach F,$(_MERGE_EXCLUDE_FILES),-s ',^\.$F$$,,')
+# Replace files by itself terminating on first match
+_INC_EXT_RULE += $(foreach F,$(_MERGE_INCLUDE_FILES),-s ",^\(\.$F\)\$,\1,")
+
+_PAX_ARGS = $(_INC_EXT_RULE) $(EXTRA_PAX_ARGS)
+
+# The basic merge merges the compiles for all ISAs on the current architecture
+merge: checksum pre-merge $(addprefix merge-,$(MODULATIONS)) post-merge
+	@$(DONADA)
+
+# This merges the 
+merge-modulated: install-modulated pre-merge-modulated $(MERGE_TARGETS) post-merge-modulated
+	@$(MAKECOOKIE)
+
+# Copy the whole tree verbatim
+merge-copy-all: $(PKGROOT) $(INSTALLISADIR)
+	@(cd $(INSTALLISADIR); pax -r -w -v $(_PAX_ARGS) . $(PKGROOT))
+	@$(MAKECOOKIE)
+
+# Copy only the merge directories
+merge-copy-only: $(PKGROOT)
+	@(cd $(INSTALLISADIR); pax -r -w -v $(_PAX_ARGS) \
+		$(foreach DIR,$(MERGE_DIRS),-s ",^\(\.$(DIR)/\),\1,p") -s ",.*,," \
+		. $(PKGROOT) \
+	)
+	@$(MAKECOOKIE)
+
+# Copy the whole tree and relocate the directories in $(MERGE_DIRS)
+merge-copy-relocate: $(PKGROOT) $(INSTALLISADIR)
+	@(cd $(INSTALLISADIR); pax -r -w -v $(_PAX_ARGS) \
+		$(foreach DIR,$(MERGE_DIRS),-s ",^\(\.$(DIR)/\),\1$(ISA)/,p") \
+		. $(PKGROOT) \
+	)
+	@$(MAKECOOKIE)
+
+# Copy only the relocated directories
+merge-copy-relocated-only: $(PKGROOT) $(INSTALLISADIR)
+	@(cd $(INSTALLISADIR); pax -r -w -v $(_PAX_ARGS) \
+		$(foreach DIR,$(MERGE_DIRS),-s ",^\(\.$(DIR)/\),\1$(ISA)/,p") -s ",.*,," \
+		 . $(PKGROOT) \
+	)
+	@$(MAKECOOKIE)
+
+.PHONY: remerge reset-merge reset-merge-modulated
+remerge: reset-merge merge
+
+reset-merge: reset-package $(addprefix reset-merge-,$(MODULATIONS))
+	@rm -f $(foreach M,$(MODULATIONS),$(COOKIEDIR)/merge-$M) $(COOKIEDIR)/merge
+	@rm -rf $(PKGROOT)
+
+reset-merge-modulated:
+	@$(call _pmod,Reset merge state)
+	@rm -f $(COOKIEDIR)/merge-*
+
+# The clean rule.  It must be run if you want to re-download a
+# file after a successful checksum (or just remove the checksum
+# cookie, but that would be lame and unportable).
+
+clean: $(addprefix clean-,$(MODULATIONS))
+	@rm -rf $(WORKROOTDIR)
+
+clean-modulated:
+	$(call _pmod,Cleaning )
+	@rm -rf $(WORKSRC) $(EXTRACTDIR) \
+		   $(SCRATCHDIR) $(SCRATCHDIR)-$(COOKIEDIR) \
+		   $(SCRATCHDIR)-build $(SCRATCHDIR)-$(COOKIEROOTDIR) \
+		   $(LOGDIR) *~
+	@rm -rf $(COOKIEDIR)
+	@rm -rf $(COOKIEROOTDIR)
+	@rm -rf $(DOWNLOADDIR)
+
+
+SRC_CLEAN_TARGET ?= clean
+clean-source:
+	@if test -d $(WORKSRC) ; then \
+		( $(MAKE) -C $(WORKSRC) $(SRC_CLEAN_TARGET) || true ) ; \
+	fi
+
+# Remove specified files/directories
+clean-dirs:
+	@for target in "" $(REMOVE_DIRS) ; do \
+		test -z "$$target" && continue ; \
+		rm -rf $$target ; \
+	done ; \
+
+# Clean an image
+imageclean:
+	@echo " ==> Removing $(COOKIEDIR)"
+	@-rm -rf $(COOKIEDIR)
+	@echo " ==> Removing $(WORKDIR)"
+	@-rm -rf $(WORKDIR)
+
+spotless: imageclean
+	@echo " ==> Removing $(DESTDIR)"
+	@-rm -rf $(DESTDIR)
+
+# Print package dependencies
+PKGDEP_LIST = $(filter-out $(BUILDDEPS),$(DEPEND_LIST))
+printdepends:
+	@for depend in "" $(PKGDEP_LIST) ; do \
+		test -z "$$depend" && continue ; \
+		echo "  $$depend" ; \
+		if test -n "$(DEPFILE)" ; then \
+			check_pkgdb -o $(DEPFILE) $$depend ; \
+		else \
+			check_pkgdb $$depend ; \
+		fi ; \
+	done
+
+# Update inter-package depends
+makedepend:
+	@for gspec in `gfind $(CURDIR) -type f -name '*.gspec' | ggrep files`; do \
+		pkgname=`basename $$gspec .gspec` ; \
+		pkgfiles=`dirname $$gspec` ; \
+		pkgdir=`dirname $$pkgfiles` ; \
+		pkgbuild=`basename $$pkgdir` ; \
+		pkgdep="$$pkgname.depend" ; \
+		echo " ==> $$pkgbuild ($$pkgname)" ; \
+		( cd $$pkgdir ; \
+		  rm -f /tmp/$$pkgdep ; \
+		  if test -f $$pkgfiles/$$pkgdep ; then \
+		  	cat $$pkgfiles/$$pkgdep > /tmp/$$pkgdep ; \
+		  fi ; \
+		  DEPFILE=/tmp/$$pkgdep $(MAKE) printdepends ; \
+		  if test -f /tmp/$$pkgdep ; then \
+		  	sort /tmp/$$pkgdep | uniq > $$pkgfiles/$$pkgname.depend ; \
+		  fi ) ; \
+	done
+
+buildstatus:
+
+love:
+	@echo "not war!"
+
+# these targets do not have actual corresponding files
+.PHONY: all fetch-list beaujolais fetch-p checksum-p extract-p patch-p configure-p build-p install-p package-p love
+
+# apparently this makes all previous rules non-parallelizable,
+# but the actual builds of the packages will be, according to
+# jdub.
+.NOTPARALLEL:

Copied: csw/mgar/gar/v2/gar.pkg.mk (from rev 2195, csw/branches/dam/automatic-multiarch-compile/gar.pkg.mk)
===================================================================
--- csw/mgar/gar/v2/gar.pkg.mk	                        (rev 0)
+++ csw/mgar/gar/v2/gar.pkg.mk	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,245 @@
+# vim: ft=make ts=4 sw=4 noet
+#
+# $Id$
+#
+# Copyright 2006 Cory Omand
+#
+# Redistribution and/or use, with or without modification, is
+# permitted.  This software is without warranty of any kind.  The
+# author(s) shall not be liable in the event that use of the
+# software causes damage.
+#
+# gar.pkg.mk - Build Solaris packages
+#
+#
+
+PKGINFO ?= /usr/bin/pkginfo
+
+SPKG_SPECS     ?= $(basename $(filter %.gspec,$(DISTFILES)))
+_PKG_SPECS      = $(filter-out $(NOPACKAGE),$(SPKG_SPECS))
+
+SPKG_DESC      ?= $(DESCRIPTION)
+SPKG_VERSION   ?= $(GARVERSION)
+SPKG_CATEGORY  ?= application
+SPKG_SOURCEURL ?= $(firstword $(MASTER_SITES))
+SPKG_PACKAGER  ?= Unknown
+SPKG_VENDOR    ?= $(SPKG_SOURCEURL) packaged for CSW by $(SPKG_PACKAGER)
+SPKG_EMAIL     ?= Unknown
+SPKG_PSTAMP    ?= $(LOGNAME)@$(shell hostname)-$(shell date '+%Y%m%d%H%M%S')
+SPKG_BASEDIR   ?= $(prefix)
+SPKG_CLASSES   ?= none
+SPKG_OSNAME    ?= $(shell uname -s)$(shell uname -r)
+
+SPKG_SPOOLROOT ?= $(DESTROOT)
+SPKG_SPOOLDIR  ?= $(SPKG_SPOOLROOT)/spool.$(GAROSREL)-$(GARCH)
+SPKG_EXPORT    ?= $(WORKDIR)
+SPKG_PKGROOT   ?= $(PKGROOT)
+SPKG_PKGBASE   ?= $(CURDIR)/$(WORKDIR)
+SPKG_WORKDIR   ?= $(CURDIR)/$(WORKDIR)
+
+SPKG_DEPEND_DB  = $(GARDIR)/csw/depend.db
+
+PKGGET_DESTDIR ?=
+
+DEPMAKER_EXTRA_ARGS = --noscript --nodep SUNW
+
+# Construct a revision stamp
+ifeq ($(GARFLAVOR),DBG)
+SPKG_FULL_REVSTAMP=1
+endif
+
+ifeq ($(SPKG_FULL_REVSTAMP),1)
+SPKG_REVSTAMP  ?= ,REV=$(shell date '+%Y.%m.%d.%H.%M')
+else
+SPKG_REVSTAMP  ?= ,REV=$(shell date '+%Y.%m.%d')
+endif
+
+# Is this a full or incremental build?
+SPKG_INCREMENTAL ?= 1
+
+# Where we find our mkpackage global templates
+PKGLIB = $(CURDIR)/$(GARDIR)/pkglib
+
+PKG_EXPORTS  = GARNAME GARVERSION DESCRIPTION CATEGORIES GARCH GARDIR GARBIN
+PKG_EXPORTS += CURDIR WORKDIR WORKSRC
+PKG_EXPORTS += SPKG_REVSTAMP SPKG_PKGNAME SPKG_DESC SPKG_VERSION SPKG_CATEGORY
+PKG_EXPORTS += SPKG_VENDOR SPKG_EMAIL SPKG_PSTAMP SPKG_BASEDIR SPKG_CLASSES
+PKG_EXPORTS += SPKG_OSNAME SPKG_SOURCEURL SPKG_PACKAGER TIMESTAMP
+PKG_EXPORTS += DEPMAKER_EXTRA_ARGS PKGLIB DESTDIR
+
+PKG_ENV  = $(BUILD_ENV)
+PKG_ENV += $(foreach EXP,$(PKG_EXPORTS),$(EXP)="$($(EXP))")
+
+# Canned command for generating admin file names
+# Usage: $(call admfiles,SUNWpackage,depend copyright)
+# pkg.gspec is added by default.
+admfiles = $(1).gspec $(foreach PKG,$(1),$(foreach ADM,$(2),$(PKG).$(ADM)))
+
+# Standard sets of admin files for use with admfiles
+ADMSTANDARD = prototype depend
+ADMISCRIPTS = preinstall postinstall
+ADMUSCRIPTS = preremove postremove
+ADMSCRIPTS  = $(ADMISCRIPTS) $(ADMUSCRIPTS)
+ADMFULLSTD  = $(ADMSTANDARD) $(ADMSCRIPTS) space
+ADMADDON    = $(ADMSTANDARD) postinstall preremove
+
+# This is a helper function which inserts subdirectories for each ISA
+# between the prefix and the suffix.
+# usage: $(call isadirs,<prefix>,<suffix>)
+# expands to <prefix>/<isa1>/<suffix> <prefix>/<isa2>/<suffix> ...
+isadirs = $(foreach ISA,$(ISALIST),$(1)/$(ISA)/$(2))
+
+# This is a helper function just like isadirs, but also contains the
+# prefix and suffix without an ISA subdirectories inserted.
+# usage: $(call isadirs,<prefix>,<suffix>)
+# expands to <prefix>/<suffix> <prefix>/<isa1>/<suffix> <prefix>/<isa2>/<suffix> ...
+baseisadirs = $(1)/$(2) $(call isadirs,$(1),$(2))
+
+# PKGFILES_RT selects files belonging to a runtime package
+PKGFILES_RT += $(call baseisadirs,$(libdir),[^/]*\.so(\.\d+)*)
+
+# PKGFILES_DEVEL selects files belonging to a developer package
+PKGFILES_DEVEL += $(call baseisadirs,$(bindir),[^/]*-config)
+PKGFILES_DEVEL += $(call baseisadirs,$(libdir),[^/]*\.(a|la))
+PKGFILES_DEVEL += $(call baseisadirs,$(libdir),pkgconfig(/.*)?)
+PKGFILES_DEVEL += $(includedir)/.*
+PKGFILES_DEVEL += $(sharedstatedir)/aclocal/.*
+PKGFILES_DEVEL += $(mandir)/man1/.*-config\.1.*
+PKGFILES_DEVEL += $(mandir)/man3/.*
+
+
+# PKGFILES_DOC selects files beloging to a documentation package
+PKGFILES_DOC  = $(docdir)/.*
+
+# _PKGFILES_EXCLUDE_<spec> contains the files to be excluded from that package
+$(foreach SPEC,$(_PKG_SPECS), \
+  $(eval \
+      _PKGFILES_EXCLUDE_$(SPEC)= \
+      $(foreach S,$(filter-out $(SPEC),$(_PKG_SPECS)), \
+        $(PKGFILES_$(S)_EXCLUSIVE)) \
+        $(EXTRA_PKGFILES_EXCLUDED) \
+        $(EXTRA_PKGFILES_EXCLUDED_$(SPEC) \
+        $(_EXTRA_PKGFILES_EXCLUDED) \
+       ) \
+   ) \
+ )
+
+#
+# Targets
+#
+
+# prototype - Generate prototype for all installed files
+# This can be used to automatically distribute the files to different packages
+#
+
+# This file contains all installed pathes. This can be used as a starting point
+# for distributing files to individual packages.
+PROTOTYPE = $(WORKDIR)/prototype
+
+# Pulled in from pkglib/csw_prototype.gspec
+$(PROTOTYPE): $(WORKDIR) merge
+	@cswproto -r $(PKGROOT) $(PKGROOT)$(prefix) >$@
+
+.PRECIOUS: $(WORKDIR)/%.prototype $(WORKDIR)/%.prototype-$(GARCH)
+$(WORKDIR)/%.prototype: | $(PROTOTYPE)
+	@if [ -n "$(PKGFILES_$*)" -o \
+	      -n "$(PKGFILES_$*_EXCLUSIVE)" -o \
+	      -n "$(_PKGFILES_EXCLUDE_$*)" -o \
+	      -n "$(ISAEXEC_FILES_$*)" -o \
+	      -n "$(ISAEXEC_FILES)" ]; then \
+	  (pathfilter $(foreach FILE,$(PKGFILES_$*) $(PKGFILES_$*_EXCLUSIVE),-i '$(FILE)') \
+	              $(foreach FILE,$(_PKGFILES_EXCLUDE_$*), -x '$(FILE)') \
+	              $(foreach IE,$(abspath $(ISAEXEC_FILES_$*) $(ISAEXEC_FILES)), \
+	                  -e '$(IE)=$(dir $(IE))$(ISA_DEFAULT)/$(notdir $(IE))' \
+	               ) \
+	              <$(PROTOTYPE); \
+	   if [ -n "$(EXTRA_PKGFILES_$*)" ]; then echo "$(EXTRA_PKGFILES_$*)"; fi \
+	  ) >$@; \
+	else \
+	  cp $(PROTOTYPE) $@; \
+	fi
+
+$(WORKDIR)/%.prototype-$(GARCH): | $(WORKDIR)/%.prototype
+	@cp $(WORKDIR)/$*.prototype $@
+
+# $_EXTRA_GAR_PKGS is for dynamic dependencies added by GAR itself (like CSWisaexec or CSWcswclassutils)
+.PRECIOUS: $(WORKDIR)/%.depend
+$(WORKDIR)/%.depend:
+	$(GARDIR)/bin/dependon $(_EXTRA_GAR_PKGS) $(REQUIRED_PKGS_$*) $(REQUIRED_PKGS) > $@
+
+# package - Use the mkpackage utility to create Solaris packages
+#
+
+ifneq ($(ENABLE_CHECK),0)
+PACKAGE_TARGETS = $(foreach SPEC,$(_PKG_SPECS), package-$(SPEC) pkgcheck-$(SPEC))
+else
+PACKAGE_TARGETS = $(foreach SPEC,$(_PKG_SPECS), package-$(SPEC))
+endif
+
+SPKG_DESTDIRS = $(SPKG_SPOOLDIR) $(SPKG_EXPORT)
+
+$(SPKG_DESTDIRS):
+	ginstall -d $@
+
+# We depend on extract as the additional package files (like .gspec) must be
+# unpacked to global/ for packaging. E. g. 'merge' depends only on the specific
+# modulations and does not fill global/.
+package: extract merge $(SPKG_DESTDIRS) pre-package $(PACKAGE_TARGETS) post-package
+	$(DONADA)
+
+package-%: $(WORKDIR)/%.prototype-$(GARCH) $(WORKDIR)/%.depend
+	@echo " ==> Processing $*.gspec"
+	@( $(PKG_ENV) mkpackage --spec $(WORKDIR)/$*.gspec \
+						 --spooldir $(SPKG_SPOOLDIR) \
+						 --destdir  $(SPKG_EXPORT) \
+						 --workdir  $(SPKG_WORKDIR) \
+						 --pkgbase  $(SPKG_PKGBASE) \
+						 --pkgroot  $(SPKG_PKGROOT) \
+						 --compress \
+						 $(MKPACKAGE_ARGS) ) || exit 2
+	@$(MAKECOOKIE)
+
+package-p:
+	@$(foreach COOKIEFILE,$(PACKAGE_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# pkgcheck - check if the package is compliant
+#
+pkgcheck: $(addprefix pkgcheck-,$(_PKG_SPECS))
+	$(DONADA)
+
+pkgcheck-%:
+	@echo " ==> Checking compliance: $*"
+	@( checkpkg $(SPKG_EXPORT)/`$(PKG_ENV) mkpackage -qs $(WORKDIR)/$*.gspec -D pkgfile`.gz ) || exit 2
+
+pkgcheck-p:
+	@$(foreach COOKIEFILE,$(PKGCHECK_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
+
+# pkgreset - reset working directory for repackaging
+#
+pkgreset: $(addprefix pkgreset-,$(_PKG_SPECS))
+	@rm -f $(COOKIEDIR)/extract
+	@rm -f $(COOKIEDIR)/extract-archive-*
+	$(DONADA)
+
+reset-package: pkgreset
+
+pkgreset-%:
+	@echo " ==> Reset packaging state for $* ($(DESTIMG))"
+	@rm -rf $(foreach T,extract checksum package pkgcheck,$(COOKIEDIR)/*$(T)-$**)
+	@rm -rf $(COOKIEDIR)/pre-package $(COOKIEDIR)/post-package
+	@rm -rf $(WORKDIR)/$*.* $(WORKDIR)/prototype
+
+repackage: pkgreset package
+
+# dependb - update the dependency database
+#
+dependb:
+	@dependb --db $(SPKG_DEPEND_DB) \
+             --parent $(CATEGORIES)/$(GARNAME) \
+             --add $(DEPENDS)
+
+# pkgenv - dump the packaging environment
+#
+pkgenv:
+	@$(PKG_ENV) env
+

Copied: csw/mgar/gar/v2/garrc.sample (from rev 2195, csw/branches/dam/automatic-multiarch-compile/garrc.sample)
===================================================================
--- csw/mgar/gar/v2/garrc.sample	                        (rev 0)
+++ csw/mgar/gar/v2/garrc.sample	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,21 @@
+# vim: ft=make
+#
+# ~/.garrc - Local settings file for the Blastwave build system.
+#
+# For the most part, any setting found in gar.conf.mk can be overridden by
+# setting (or unsetting) the variable in this file.  The system gar.conf.mk
+# provides a reasonable set of defaults, but customizations may be required to
+# build packages outside of the Blastwave build stack.
+#
+
+# Packaging information
+SPKG_PACKAGER   = Joe Developer
+SPKG_EMAIL      = jdev at blastwave.org
+
+# Where to put finished packages
+SPKG_EXPORT     = /export/medusa/jdev/staging/build-$(shell date '+%d.%b.%Y')
+
+# Proxy settings
+#http_proxy =
+#ftp_proxy =
+

Copied: csw/mgar/gar/v2/pkg.db (from rev 2195, csw/branches/dam/automatic-multiarch-compile/pkg.db)
===================================================================
--- csw/mgar/gar/v2/pkg.db	                        (rev 0)
+++ csw/mgar/gar/v2/pkg.db	2008-11-26 15:24:13 UTC (rev 2363)
@@ -0,0 +1,790 @@
+apps/bugzilla|CSWbugzilla|bugzilla - Bugzilla defect tracking system.
+apps/daimonin|CSWdaimonin|daimonin - FREE online role playing game (MMORPG)
+apps/easytag|CSWeasytag|easytag - Tag editor for MP3, Ogg Vorbis files and more
+apps/firefox|CSWfirefox|firefox - Firefox Community Edition web browser
+apps/firefox|CSWfirefoxdevel|firefoxdevel - Firefox Community Edition web browser
+apps/firefox|CSWfirefoxrt|firefoxrt - Firefox Community Edition web browser
+apps/flphoto|CSWflphoto|flphoto - basic image management and display program based on the FLTK toolkit
+apps/freeciv|CSWfreeciv|freeciv - a free turn-based multiplayer strategy game (gcc3)
+apps/gtkpod|CSWgtkpod|gtkpod - gtk2 application for Apple iPods
+apps/kdesvn|CSWkdesvn|kdesvn - A Subversion client for KDE
+apps/kile|CSWkile|kile - An integrated LaTeX environment
+apps/listadmin|CSWlistadmin|listadmin - Command line utility for processing the moderator queue on Mailman lists
+apps/lyx|CSWlyx|lyx - WYSIWYM document processor
+apps/mantis|CSWmantis|mantis - Mantis is a free popular web-based bugtracking system
+apps/mplayer|CSWmplayer|mplayer - MPlayer is a movie player which runs on many systems
+apps/ncmpc|CSWncmpc|ncmpc - ncurses client for controlling Music Player Daemons (MPD)
+apps/ogle|CSWogle|ogle - opensource DVD player with DVD menu support
+apps/openoffice|CSWooouizu|ooouizu - An Open Source version of StarOffice.
+apps/openoffice|CSWooouigl|ooouigl - An Open Source version of StarOffice.
+apps/openoffice|CSWooouies|ooouies - An Open Source version of StarOffice.
+apps/openoffice|CSWooouiptbr|ooouiptbr - An Open Source version of StarOffice.
+apps/openoffice|CSWooouienus|ooouienus - An Open Source version of StarOffice.
+apps/openoffice|CSWooouisl|ooouisl - An Open Source version of StarOffice.
+apps/openoffice|CSWoooui|oooui - An Open Source version of StarOffice.
+apps/openoffice|CSWooouida|ooouida - An Open Source version of StarOffice.
+apps/openoffice|CSWooouide|ooouide - An Open Source version of StarOffice.
+apps/openoffice|CSWooouisv|ooouisv - An Open Source version of StarOffice.
+apps/openoffice|CSWooocore|ooocore - An Open Source version of StarOffice.
+apps/openoffice|CSWooouinb|ooouinb - An Open Source version of StarOffice.
+apps/openoffice|CSWooouifr|ooouifr - An Open Source version of StarOffice.
+apps/openoffice|CSWooouinl|ooouinl - An Open Source version of StarOffice.
+apps/openoffice|CSWooouinn|ooouinn - An Open Source version of StarOffice.
+apps/openoffice|CSWooouihu|ooouihu - An Open Source version of StarOffice.
+apps/openoffice|CSWooouica|ooouica - An Open Source version of StarOffice.
+apps/openoffice|CSWooouiaf|ooouiaf - An Open Source version of StarOffice.
+apps/openoffice|CSWooocommon|ooocommon - An Open Source version of StarOffice.

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the devel mailing list