Graphics with XDarwin on Mac OS X

F. Warren Burton warren-burton@shaw.ca
Tue, 11 Jun 2002 07:13:26 -0700


It looks like libSystem defines bzero.

[localhost:/usr/lib] burton% nm -o libSystem* | grep bzero | grep T
libSystem.B.dylib:bzero.o:70004bd0 T _bzero
libSystem.B_debug.dylib:bzero.o:48da6160 T _bzero
libSystem.B_profile.dylib:bzero.o:48da5010 T _bzero
libSystem.dylib:bzero.o:70004bd0 T _bzero
libSystem_debug.dylib:bzero.o:48da6160 T _bzero
libSystem_profile.dylib:bzero.o:48da5010 T _bzero
[localhost:/usr/lib] burton%

When I make the changes Johan suggests, I get exactly the same problem:

>Hi Alastair,
>
>I've gotten a bit further, I think.
>
>After replacing "-shared" with "-bundle", and setting "LD" to "cc" 
>(which are the RIGHT values, and actually mentioned in the 
>distributed ffi documentation -- blush!), the process fails at load 
>time:
>
>   Reading file "X.hs":
>   ERROR "X.hs":3853 - Unknown primitive reference "prim_X_fontRightToLeft"
>
>However, running
>
>   nm X.so | grep fontRightToLeft
>
>gives
>
>   0001408c t _prim_X_fontRightToLeft
>
>That is, we seem to have run into the leading underscore problem you 
>mentioned.
>
>I don't have GreenCard installed, so I can't regenerate X.c the 
>proper way.  Is there a better way of making a MacOS X compatible 
>distribution than requiring the user to run GreenCard?
>
>-- Johan

My edited Makefile is as follows (so everybody is clear on what 
everybody else is doing):

##############################################################################
# Makefile for Xlib with Hugs on Unix
#
# This makefile is for GNU Make ver. 3.76 or later.
##############################################################################

################################################################
# Configuration parameters.  These may need slight modification.
#
# Rather than edit this file, you can override the settings when you
# invoke Make.  For example:
#
#   make system=SunOS X_dir=/usr/local/X11R6
#
################################################################

# What OS are we using?  Affects choice of linker flags.
# Possible values: Linux, FreeBSD, NetBSD, SunOS and Unixlike
# FWB changed
# system=Linux
# to
system=FreeBSD
# FWB end

# Which directory contains lib/libX11.a and include/X11/X.h?
X_dir=/usr/X11R6

# Which directory is Hugs installed in?
# FWB changed
# hugs_install=/usr/share/hugs
# to
hugs_install=/usr/local/share/hugs
# FWB end
# hugs_install=$(HOME)/local/share/hugs

# Should we rerun GreenCard if GreenCard generated files are out of date?
# (This will usually be set to "no" in distributions and "yes" in
# development copies.)
rerun_GC=no

################################################################
# Tools and how to run them.  Nothing below this line should
# need modified.
################################################################

SHELL = /bin/sh
RM = rm -f

# At least Sun's Workshop C Compiler 5.0 98/12/15 C 5.0 has trouble with
# some of the generated C code.  Insist on gcc for now.
# FWB changed
# CC = gcc
# to
CC = cc
# FWB end

INCLUDES = -I$(X_dir)/include -I$(hugs_install)/include

# FWB changed
# LD = ld
# to
LD = cc
# and
# LDFLAGS	+= -L$(X_dir)/lib -lX11
# to
LDFLAGS	+= -L$(X_dir)/lib -lX11 -lSystem
# FWB end

# The following choices have been found to be appropriate for building
# shared object files on various systems.
# Please let us know if these don't work or if you know the appropriate
# choice for other systems.
LDFLAGS_MKSO.Linux    = -shared
# FWB changed
# LDFLAGS_MKSO.FreeBSD  = -shared
# to
LDFLAGS_MKSO.FreeBSD  = -bundle
# FWB end
LDFLAGS_MKSO.NetBSD   = -shared
LDFLAGS_MKSO.SunOS    = -G
LDFLAGS_MKSO.Unixlike = -shared

LDFLAGS_MKSO = $(LDFLAGS_MKSO.$(system))

GC = green-card
GC_OPTS = --target=hugs

################################################################
# Implicit rules for GreenCard and shared objects
################################################################

ifeq ($(rerun_GC),yes)
%.c %.hs: %.gc
	$(GC) $(GC_OPTS) $<
endif

%.o: %.c
	$(CC) -c $(CPPFLAGS) $(INCLUDES) $(CFLAGS) $< -o $@

%.so: %.o
	$(LD) $(LDFLAGS_MKSO) $(LDFLAGS) $^ -o $@

################################################################
# Source and object files
################################################################

gc_sources = $(wildcard *.gc)
c_sources  = $(wildcard cbits/*.c)

hs_gen_sources = $(gc_sources:.gc=.hs)

all_hs_sources = $(hs_sources) $(hs_gen_sources)

c_gen_sources = $(gc_sources:.gc=.c)

all_c_sources = $(c_sources) $(c_gen_sources)

all_c_objects = $(all_c_sources:.c=.o)

shared_objects = $(gc_sources:.gc=.so)

################################################################
# Main targets
################################################################

.PHONY: all

all: $(hs_gen_sources) $(shared_objects)

ifeq ($(rerun_GC),yes)
clean::
	$(RM) $(hs_gen_sources)
	$(RM) $(c_gen_sources)
endif

clean::
	$(RM) $(all_c_objects)
	$(RM) $(shared_objects)

################################################################
# Auxiliary targets
################################################################

.PRECIOUS: $(hs_gen_sources) $(shared_objects)

.INTERMEDIATE: cbits/auxiliaries.o

# Additional dependences.
Xlib.so    : cbits/auxiliaries.o
Xlib.o X.o : cbits/HsXlib.h

################################################################
# End
################################################################