Fix make-array transforms.
[sbcl.git] / contrib / asdf-module.mk
index c646b9d..e211f0c 100644 (file)
@@ -1,45 +1,49 @@
-CC=gcc
-
-# Need to set CFLAGS and LDFLAGS here. sb-posix, sb-grovel, and
-# sb-bsd-sockets depends upon these being set on x86_64. Setting these
-# in their Makefile's is not adequate since their asd files are
-# invoked when loaded from other modules which don't require these
-# environmental values in their Makefile's.
-
-UNAME:=$(shell uname -m)
-export CFLAGS=-fPIC
-ifeq (solaris,$(UNAME))
-  export LDFLAGS=-shared -lresolv -lsocket -lnsl
-else
-  ifeq (Darwin,$(UNAME))
-    export LDFLAGS=-bundle
-  else
-    ifeq (x86_64,$(UNAME))
-      export LDFLAGS=-m32 -shared
-      export CFLAGS+= -m32
-    else
-      export LDFLAGS=-shared
-    endif
-  endif
+# We need to extend flags to the C compiler and the linker
+# here. sb-posix, sb-grovel, and sb-bsd-sockets depends upon these
+# being set on x86_64. Setting these in their Makefiles is not
+# adequate since, while we're building contrib, they can be compiled
+# directly via ASDF from a non-C-aware module which has these tricky
+# ones as dependencies.
+
+UNAME:=$(shell uname -s)
+DEST=$(SBCL_PWD)/obj/sbcl-home/contrib/
+FASL=$(DEST)/$(SYSTEM).fasl
+ASD=$(DEST)/$(SYSTEM).asd
+
+ifeq (SunOS,$(UNAME))
+  EXTRA_CFLAGS=-D_XOPEN_SOURCE=500 -D__EXTENSIONS__
+  PATH:=/usr/xpg4/bin:${PATH}
+endif
+ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
+  EXTRA_CFLAGS=-mno-cygwin
+  # GCC 4.x doesn't accept -mno-cygwin.
+  CC:=gcc-3
+  # SBCL can't read cygwin symlinks, and cygwin likes to symlink
+  # gcc.  To further complicate things, SBCL can't handle cygwin
+  # paths, either.
+  CC:=$(shell cygpath -m $(shell readlink -fn $(shell which $(CC))))
 endif
+ifeq (Linux,$(UNAME))
+  EXTRA_CFLAGS=-D_GNU_SOURCE
+endif
+
+export CC SBCL EXTRA_CFLAGS EXTRA_LDFLAGS
 
-export CC SBCL CFLAGS LDFLAGS
+all: $(FASL) $(ASD) $(EXTRA_ALL_TARGETS)
 
-all: $(EXTRA_ALL_TARGETS)
+$(FASL)::
        $(MAKE) -C ../asdf
-       $(SBCL) --eval '(load "../asdf/asdf")' \
-         --eval "(setf asdf::*central-registry* '((MERGE-PATHNAMES \"systems/\" (TRUENAME (SB-EXT:POSIX-GETENV \"SBCL_HOME\")))))" \
-         --eval "(push :sb-building-contrib *features*)" \
-         --eval "(asdf:operate 'asdf:load-op :$(SYSTEM))" \
-         --eval "(progn (when (probe-file \"$(SYSTEM).fasl\") (error \"fasl file exists\")) (with-open-file (s \"$(SYSTEM).lisp\" :direction :output :if-exists :error) (print (quote (require :asdf)) s) (print (quote (require :$(SYSTEM))) s)) (compile-file \"$(SYSTEM).lisp\") (delete-file \"$(SYSTEM).lisp\"))" \
-         --eval "(quit)"
+       $(SBCL) --load ../asdf-stub.lisp \
+               --eval '(asdf::build-asdf-contrib "$(SYSTEM)")'
 
-test: all
-       echo "(asdf:operate (quote asdf:load-op) :$(SYSTEM))" \
-            "(asdf:operate (quote asdf:test-op) :$(SYSTEM))" | \
-         $(SBCL) --eval '(load "../asdf/asdf")'
+$(ASD)::
+       echo "(defsystem :$(SYSTEM) :class require-system)" > $@
 
+test: $(FASL) $(ASD)
+       $(SBCL) --load ../asdf-stub.lisp \
+               --eval '(asdf::test-asdf-contrib "$(SYSTEM)")'
 
+# KLUDGE: There seems to be no portable way to tell tar to not to
+# preserve owner, so chown after installing for the current user.
 install: $(EXTRA_INSTALL_TARGETS)
-       tar cf - . | ( cd $(BUILD_ROOT)$(INSTALL_DIR) && tar xpvf - )
-       ( cd  $(BUILD_ROOT)$(SBCL_HOME)/systems && ln -fs ../$(SYSTEM)/$(SYSTEM).asd . )
+       cp $(FASL) $(ASD) "$(BUILD_ROOT)$(INSTALL_DIR)"