;;; -*- Mode: lisp -*-
-(setf
- (logical-pathname-translations "clg")
- '(("**;*.*.*" "/home/espen/src/clg/**/*.*.*")))
+(defpackage "CLG-SYSTEM"
+ (:use "COMMON-LISP" "EXTENSIONS" "ALIEN")
+ (:export "*GTK-LIBRARY-PATH*"))
+
+(in-package "CLG-SYSTEM")
+
+;; Suggested by Marco Antoniotti
+(eval-when (:load-toplevel :execute :compile-toplevel)
+ (unless (find-package "MAKE")
+ (error "CLG requires the MK:DEFSYSTEM to be properly compiled ~
+ and loaded.~%~
+ You can download MK:DEFSYSTEM from the CLOCC.~@
+ <http://sourceforge.net/projects/clocc/.")))
+
+
+;; We used to do this, but I think it's better if everybody puts such
+;; definitions in his/her own Lisp startup files so that clg.system
+;; can be used without local modifications.
+;(setf
+; (logical-pathname-translations "clg")
+; '(("**;*.*.*" "/home/espen/src/clg/**/*.*.*")))
;; Uncomment and edit the next line if pkg-config needs to search for
;; .pc files in directories other than the default (/usr/lib/pkgconfig)
-:(push '(:PKG_CONFIG_PATH . "/opt/gnome/lib/pkgconfig") ext:*environment-list*)
+;(push '(:PKG_CONFIG_PATH . "/opt/gnome/lib/pkgconfig") ext:*environment-list*)
(load "clg:tools;config")
(load "clg:tools;sharedlib")
-(import 'alien:load-shared-library)
-
-(defvar gtk-library-path (pkg-variable "gtk+-2.0" "libdir"))
-(defvar cmucl-include-path "/usr/src/cmucl-2.4.20/src/lisp")
-
-
-;; A hack to get around a bug in gdk's init code
-(defvar argc (alien:make-alien c-call:int))
-(defvar progname (alien:make-alien c-call:char))
-(defvar argv0 (alien:make-alien (* c-call:char)))
-(defvar argv (alien:make-alien (* (* c-call:char))))
-(setf (alien:deref argc) 1)
-(setf (alien:deref progname) 0)
-(setf (alien:deref argv0) progname)
-(setf (alien:deref argv) argv0)
+(defvar *gtk-library-path* (pkg-variable "gtk+-2.0" "libdir"))
+(defvar *cmucl-include-path* (ext:unix-namestring "target:lisp"))
+;; Without this, MAKE uses "CLG:glib;.err" as a namestring, which fails.
+;; TODO: Find and fix the bug, then remove this.
(setq mk::*cmu-errors-to-file* nil)
-(eval
- `(mk:defsystem clg
- :initially-do
- (progn
- (pkg-exists-p "glib-2.0" :atleast-version "1.3.9")
- (pkg-exists-p "pango" :atleast-version "0.20")
- (pkg-exists-p "gtk+-2.0" :atleast-version "1.3.9"))
- :source-pathname "clg:"
- :binary-pathname "clg:"
- :components
- ((:module tools
- :components ("autoexport"))
- (:file "pcl" :source-pathname "glib;" :binary-pathname "glib;")
- (:module glib
- :initially-do
- (progn
- (load-shared-library "libglib-1.3.so")
- (load-shared-library "libgobject-1.3.so" :init "g_type_init"))
- :components
- ((:file "callback"
- :language :c
- :source-extension "c"
- :binary-extension "o"
- :compiler-options
- (:cflags ,(pkg-cflags "glib-2.0")
- :optimize 2
- :definitions (#+cmu CMUCL)
- :include-paths (,cmucl-include-path)))
- (:file "glib-package")
- (:file "gutils" :depends-on ("glib-package"))
- (:file "gforeign" :depends-on ("gutils"))
- (:file "glib" :depends-on ("gforeign"))
- (:file "proxy" :depends-on ("glib"))
- (:file "gtype" :depends-on ("proxy"))
- (:file "gboxed" :depends-on ("gtype"))
- (:file "genums" :depends-on ("gtype"))
- (:file "gparam" :depends-on ("genums"))
- (:file "gobject" :depends-on ("gparam"))
- (:file "gcallback" :depends-on ("gtype" "gparam" "gobject" "callback"))
- (:file "glib-export"
- :depends-on
- ("gutils" "glib" "proxy" "gboxed" "gtype" "gparam" "gcallback"
- "genums" "gobject")))
- :depends-on (tools "pcl"))
- (:file "gdkglue"
- :source-pathname "gdk;"
- :binary-pathname "gdk;"
- :initially-do
- (progn
- (load-shared-library "libgdk_pixbuf-1.3.so")
- (load-shared-library "libgdk-x11-1.3.so"
- :init "gdk_init"
- :prototype '(function
- c-call:void (* c-call:int) (* (* (* char))))
- :initargs (list argc argv)))
- :language :c
- :source-extension "c"
- :binary-extension "o"
- :compiler-options (:cflags ,(pkg-cflags "gtk+-2.0")
- :optimize 2))
- (:module gdk
- :components
- ((:file "gdk-package")
- (:file "gdk-export" :depends-on ("gdkevents" "gdktypes" "gdk"))
- (:file "gdktypes" :depends-on ("gdk-package"))
- (:file "gdkevents" :depends-on ("gdktypes"))
- (:file "gdk" :depends-on ("gdkevents")))
- :depends-on (glib "gdkglue"))
- (:module pango
- :initially-do (load-shared-library "libpango.so")
- :components
- ((:file "pango-package")
- (:file "pango" :depends-on ("pango-package"))
- (:file "pango-export" :depends-on ("pango")))
- :depends-on (glib))
- (:file "gtkglue"
- :source-pathname "gtk;"
- :binary-pathname "gtk;"
- :initially-do
- (progn
- (load-shared-library
- "libgtk-x11-1.3.so"
- :init "gtk_init"
- :prototype '(function
- c-call:void
- alien:system-area-pointer
- alien:system-area-pointer)
- :initargs (list (system:int-sap 0) (system:int-sap 0))))
- :language :c
- :source-extension "c"
- :binary-extension "o"
- :compiler-options (:cflags ,(pkg-cflags "gtk+-2.0")
- :optimize 2
- :definitions (#+cmu CMUCL)
- :include-paths (,cmucl-include-path)))
- (:module gtk
- :components
- ((:file "gtk-package")
- (:file "gtk-export" :depends-on ("gtktypes" "gtk"))
- (:file "gtkobject" :depends-on ("gtk-package"))
- (:file "gtktypes" :depends-on ("gtkobject"))
- (:file "gtkwidget" :depends-on ("gtktypes"))
- (:file "gtkcontainer" :depends-on ("gtktypes"))
- (:file "gtk" :depends-on ("gtktypes"))
- (:file "gtkutils" :depends-on ("gtk")))
- :depends-on (glib gdk pango "gtkglue")))))
-
-
-
+(mk:defsystem clg
+ :initially-do
+ (progn
+ (pkg-exists-p "glib-2.0" :atleast-version "2.0.0")
+ (pkg-exists-p "pango" :atleast-version "1.0.0")
+ (pkg-exists-p "atk" :atleast-version "1.0.0")
+ (pkg-exists-p "gtk+-2.0" :atleast-version "2.0.0"))
+ :source-pathname "clg:"
+ :binary-pathname "clg:"
+ :components
+ ((:module tools
+ :components ("autoexport"))
+ (:file "pcl" :source-pathname "glib;" :binary-pathname "glib;")
+ (:module glib
+ :initially-do
+ (progn
+ (load-shared-library "libglib-2.0.so")
+ (load-shared-library "libgobject-2.0.so" :init "g_type_init"))
+ :components
+ ((:file "callback"
+ :language :c
+ :source-extension "c"
+ :binary-extension "o"
+ :compiler-options (:cflags #.(pkg-cflags "glib-2.0")
+ :optimize 2
+ :definitions (#+cmu CMUCL)
+ :include-paths (#.*cmucl-include-path*)))
+ (:file "glib-package")
+ (:file "gutils" :depends-on ("glib-package"))
+ (:file "gforeign" :depends-on ("gutils"))
+ (:file "glib" :depends-on ("gforeign"))
+ (:file "proxy" :depends-on ("glib"))
+ (:file "gtype" :depends-on ("proxy"))
+ (:file "gboxed" :depends-on ("gtype"))
+ (:file "genums" :depends-on ("gtype"))
+ (:file "gparam" :depends-on ("genums"))
+ (:file "ginterface" :depends-on ("gtype"))
+ (:file "gobject" :depends-on ("gparam"))
+ (:file "gcallback" :depends-on ("gtype" "gparam" "gobject" "callback"))
+ (:file "glib-export" :depends-on ("gutils" "glib" "proxy" "gboxed" "gtype"
+ "gparam" "gcallback" "genums" "gobject")))
+ :depends-on (tools "pcl"))
+ (:file "gdkglue"
+ :source-pathname "gdk;"
+ :binary-pathname "gdk;"
+ :initially-do
+ (progn
+ (load-shared-library "libgdk_pixbuf-2.0.so")
+ (load-shared-library "libgdk-x11-2.0.so"
+ :init "gdk_init"
+ :prototype '(function
+ c-call:void
+ system-area-pointer
+ system-area-pointer)
+ :initargs (list (system:int-sap 0) (system:int-sap 0))))
+ :language :c
+ :source-extension "c"
+ :binary-extension "o"
+ :compiler-options (:cflags #.(pkg-cflags "gtk+-2.0")
+ :optimize 2))
+ (:module gdk
+ :components
+ ((:file "gdk-package")
+ (:file "gdk-export" :depends-on ("gdkevents" "gdktypes" "gdk"))
+ (:file "gdktypes" :depends-on ("gdk-package"))
+ (:file "gdkevents" :depends-on ("gdktypes"))
+ (:file "gdk" :depends-on ("gdkevents")))
+ :depends-on (glib "gdkglue"))
+ (:module pango
+ :initially-do (load-shared-library "libpango-1.0.so")
+ :components
+ ((:file "pango-package")
+ (:file "pango" :depends-on ("pango-package"))
+ (:file "pango-export" :depends-on ("pango")))
+ :depends-on (glib))
+ (:module atk
+ :initially-do (load-shared-library "libatk-1.0.so")
+ :components
+ ((:file "atk-package")
+ (:file "atk" :depends-on ("atk-package"))
+ (:file "atk-export" :depends-on ("atk")))
+ :depends-on (glib))
+ (:file "gtkglue"
+ :source-pathname "gtk;"
+ :binary-pathname "gtk;"
+ :initially-do
+ (progn
+ (load-shared-library
+ "libgtk-x11-2.0.so"
+ :init "gtk_init"
+ :prototype '(function
+ c-call:void
+ system-area-pointer
+ system-area-pointer)
+ :initargs (list (system:int-sap 0) (system:int-sap 0))))
+ :language :c
+ :source-extension "c"
+ :binary-extension "o"
+ :compiler-options (:cflags #.(pkg-cflags "gtk+-2.0")
+ :optimize 2
+ :definitions (#+cmu CMUCL)
+ :include-paths (#.*cmucl-include-path*)))
+ (:module gtk
+ :components
+ ((:file "gtk-package")
+ (:file "gtk-export" :depends-on ("gtktypes" "gtk"))
+ (:file "gtkobject" :depends-on ("gtk-package"))
+ (:file "gtktypes" :depends-on ("gtkobject"))
+ (:file "gtkwidget" :depends-on ("gtktypes"))
+ (:file "gtkcontainer" :depends-on ("gtktypes"))
+ (:file "gtk" :depends-on ("gtktypes"))
+ (:file "gtkutils" :depends-on ("gtk")))
+ :depends-on (glib gdk pango atk "gtkglue"))))