1# BEGIN LICENSE BLOCK
2# Version: CMPL 1.1
3#
4# The contents of this file are subject to the Cisco-style Mozilla Public
5# License Version 1.1 (the "License"); you may not use this file except
6# in compliance with the License.  You may obtain a copy of the License
7# at www.eclipse-clp.org/license.
8# 
9# Software distributed under the License is distributed on an "AS IS"
10# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See
11# the License for the specific language governing rights and limitations
12# under the License. 
13# 
14# The Original Code is  The ECLiPSe Constraint Logic Programming System. 
15# The Initial Developer of the Original Code is  Cisco Systems, Inc. 
16# Portions created by the Initial Developer are
17# Copyright (C) 2006 Cisco Systems, Inc.  All Rights Reserved.
18# 
19# Contributor(s): 
20# 
21# END LICENSE BLOCK
22
23# Makefile for Eclipse JavaInterface module.
24#
25# Author: Josh Singer
26
27ARCH = @ARCH@
28OSTYPE = @OSTYPE@
29OSCLASS = @OSCLASS@
30top_srcdir = @top_srcdir@
31PREFIX = @prefix@
32MAKEFILE = Makefile.$(ARCH)
33
34CC = @CC@
35CFLAGS = @CFLAGS@
36OPT_FLAGS = @OPT_FLAGS@
37DYLD = @DYLD@
38DYNLDFLAGS = @DYNLDFLAGS@
39OBJECTS_SUFFIX = @OBJECTS_SUFFIX@
40LIB_PREFIX = @LIB_PREFIX@
41JAVA_HOME = @JAVA_HOME@
42JAVA_BIN = $(JAVA_HOME)/bin
43
44GMP_LD = @GMP_LD@
45
46RUNPATH_DYLDFLAG = @RUNPATH_DYLDFLAG@
47
48SOURCEDIR=./src/com/parctechnologies/eclipse
49
50DOCSDIR=./doc/public
51
52REL_EC_DIR=$(PREFIX)
53
54AUX_ECLIPSE=$(REL_EC_DIR)/bin/$(ARCH)/eclipse
55
56JAVA_DOCS=$(REL_EC_DIR)/doc/javadoc/JavaEclipseInterface/index.html
57
58EXAMPLESDIR=$(REL_EC_DIR)/doc/examples/JavaInterface
59
60JAVA_EXAMPLES=$(EXAMPLESDIR)/QuickTest.java $(EXAMPLESDIR)/DataExample1.java  $(EXAMPLESDIR)/DataExample2.java $(EXAMPLESDIR)/QueueExample1.java  $(EXAMPLESDIR)/QueueExample2.java $(EXAMPLESDIR)/queue_example_1.pl  $(EXAMPLESDIR)/queue_example_2.pl $(EXAMPLESDIR)/EclipseMapColourer.java $(EXAMPLESDIR)/ic-parc.gif
61
62JAVA_CLASSES=$(REL_EC_DIR)/lib/eclipse.jar
63
64PERM = a+r,u+w,go-w
65
66CP=/bin/cp
67
68# install is configured as either install_all or install_cross
69install:	@MAKE_TARGET@
70install_all:	@ALL_WITH_JAVA@
71install_cross:	@ALL_CROSS_WITH_JAVA@
72
73all_with_java:  all_cross_with_java \
74	$(JAVA_CLASSES) $(JAVA_DOCS) $(JAVA_EXAMPLES) \
75	$(REL_EC_DIR)/lib/joop_boot.eco \
76	$(REL_EC_DIR)/lib/joop_boot.pl
77
78all_cross_with_java: \
79	$(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java.$(OBJECTS_SUFFIX) \
80	$(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java_load.$(OBJECTS_SUFFIX)
81
82$(JAVA_CLASSES): eclipse.jar
83	$(CP) eclipse.jar $(JAVA_CLASSES)
84
85$(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java.$(OBJECTS_SUFFIX): $(ARCH)/$(LIB_PREFIX)ec_java.$(OBJECTS_SUFFIX)
86	$(CP) $(ARCH)/$(LIB_PREFIX)ec_java.$(OBJECTS_SUFFIX) $(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java.$(OBJECTS_SUFFIX)
87
88$(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java_load.$(OBJECTS_SUFFIX): $(ARCH)/$(LIB_PREFIX)ec_java_load.$(OBJECTS_SUFFIX)
89	$(CP) $(ARCH)/$(LIB_PREFIX)ec_java_load.$(OBJECTS_SUFFIX) $(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java_load.$(OBJECTS_SUFFIX)
90
91$(REL_EC_DIR)/lib/joop_boot.eco: joop_boot.pl
92	$(AUX_ECLIPSE) -e 'lib(fcompile), set_flag(variable_names,off), fcompile("joop_boot", [outdir:"$(REL_EC_DIR)/lib"])'
93	-@/bin/chmod $(PERM) $(REL_EC_DIR)/lib/joop_boot.eco
94
95$(REL_EC_DIR)/lib/joop_boot.pl: joop_boot.pl
96	$(CP) joop_boot.pl $(REL_EC_DIR)/lib/joop_boot.pl
97	-@/bin/chmod $(PERM) $(REL_EC_DIR)/lib/joop_boot.pl
98
99$(JAVA_DOCS): $(DOCSDIR)/index.html
100	# make sure directories are set up for the API documentation
101	mkdir -p $(REL_EC_DIR)/doc/javadoc/
102	mkdir -p $(REL_EC_DIR)/doc/javadoc/JavaEclipseInterface/
103
104	# copy the API documentation to the Eclipse installation
105	$(CP) -r doc/public/* $(REL_EC_DIR)/doc/javadoc/JavaEclipseInterface/
106
107$(EXAMPLESDIR)/QuickTest.java: tests/QuickTest.java
108	mkdir -p $(EXAMPLESDIR)
109	$(CP) tests/QuickTest.java $(EXAMPLESDIR)
110
111$(EXAMPLESDIR)/DataExample1.java: tests/DataExample1.java
112	mkdir -p $(EXAMPLESDIR)
113	$(CP) tests/DataExample1.java $(EXAMPLESDIR)
114
115$(EXAMPLESDIR)/DataExample2.java: tests/DataExample2.java
116	mkdir -p $(EXAMPLESDIR)
117	$(CP) tests/DataExample2.java $(EXAMPLESDIR)
118
119$(EXAMPLESDIR)/QueueExample1.java: tests/QueueExample1.java
120	mkdir -p $(EXAMPLESDIR)
121	$(CP) tests/QueueExample1.java $(EXAMPLESDIR)
122
123$(EXAMPLESDIR)/QueueExample2.java: tests/QueueExample2.java
124	mkdir -p $(EXAMPLESDIR)
125	$(CP) tests/QueueExample2.java $(EXAMPLESDIR)
126
127$(EXAMPLESDIR)/queue_example_1.pl: tests/queue_example_1.pl
128	mkdir -p $(EXAMPLESDIR)
129	$(CP) tests/queue_example_1.pl $(EXAMPLESDIR)
130
131$(EXAMPLESDIR)/queue_example_2.pl: tests/queue_example_2.pl
132	mkdir -p $(EXAMPLESDIR)
133	$(CP) tests/queue_example_2.pl $(EXAMPLESDIR)
134
135$(EXAMPLESDIR)/EclipseMapColourer.java: tests/EclipseMapColourer.java
136	mkdir -p $(EXAMPLESDIR)
137	$(CP) tests/EclipseMapColourer.java $(EXAMPLESDIR)
138
139$(EXAMPLESDIR)/ic-parc.gif: tests/ic-parc.gif
140	mkdir -p $(EXAMPLESDIR)
141	$(CP) tests/ic-parc.gif $(EXAMPLESDIR)
142
143
144# convenience rule: does not play a part in make all
145docs: 
146	mkdir -p $(DOCSDIR)
147	"$(JAVA_BIN)/javadoc" -author -public -d $(DOCSDIR) -sourcepath ./src com.parctechnologies.eclipse
148
149
150$(DOCSDIR)/index.html: $(SOURCEDIR)/*
151	mkdir -p $(DOCSDIR)
152	"$(JAVA_BIN)/javadoc" -author -public -d $(DOCSDIR) -sourcepath ./src com.parctechnologies.eclipse
153
154ecoclean:
155	rm -rf joop_boot.eco $(REL_EC_DIR)/lib/joop_boot.eco
156
157archclean:
158	rm -rf $(ARCH)
159	rm -f *.o
160	rm -f $(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java.$(OBJECTS_SUFFIX) 
161	rm -f $(REL_EC_DIR)/lib/$(ARCH)/$(LIB_PREFIX)ec_java_load.$(OBJECTS_SUFFIX) 
162
163clean:	ecoclean archclean
164	rm -f eclipse.jar
165	rm -rf classes doc
166	rm -f com_parctechnologies_eclipse_NativeEclipse.h 
167
168eclipse.jar: $(SOURCEDIR)/*.java
169	mkdir -p ./classes
170	"$(JAVA_BIN)/javac" -O -deprecation -d ./classes -sourcepath ./src/ -classpath ./classes/ $(SOURCEDIR)/*.java
171	"$(JAVA_BIN)/jar" cf eclipse.jar -C classes com
172
173
174# libec_java.so
175#	The java interface proper. It depends on other eclipse libraries.
176#	Must be linked with a relative run-path of '.' to avoid the need
177#	to set LD_LIBRARY_PATH when loading it, provided it gets loaded
178#	from the right current directory.
179#
180# libec_java_load.so
181#	An auxiliary library which should not depend on anything else.
182#	Containing just chdir() functions (Java has no chdir), which are
183#	used to change the current directory while loading libec_java.so
184
185ifneq "$(OSCLASS)" "win"
186
187# -lc needed for MacOS X
188 ifeq "$(ARCH)" "i386_macosx"
189    LIBC="-lc"
190 else
191  ifeq "$(ARCH)" "x86_64_macosx"
192    LIBC="-lc"
193  else
194   ifeq "$(ARCH)" "ppc_macosx"
195     LIBC="-lc"
196   else
197     LIBC=
198   endif
199  endif
200 endif
201
202$(ARCH)/libec_java.$(OBJECTS_SUFFIX): ec_java.c com_parctechnologies_eclipse_NativeEclipse.h 
203	mkdir -p $(ARCH)
204	$(CC) $(CFLAGS) -I$(REL_EC_DIR)/include/$(ARCH) -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/$(OSTYPE)" -c ec_java.c
205	$(DYLD) $(DYNLDFLAGS) -L$(REL_EC_DIR)/lib/$(ARCH)  ec_java.o $(RUNPATH_DYLDFLAG). $(GMP_LD) -leclipse -o $(ARCH)/libec_java.$(OBJECTS_SUFFIX)
206	rm ec_java.o
207
208$(ARCH)/libec_java_load.$(OBJECTS_SUFFIX): ec_java_load.c com_parctechnologies_eclipse_NativeEclipse.h 
209	mkdir -p $(ARCH)
210	$(CC) $(CFLAGS) -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/$(OSTYPE)" -c ec_java_load.c 
211	$(DYLD) $(DYNLDFLAGS) ec_java_load.o $(LIBC) -o $(ARCH)/libec_java_load.$(OBJECTS_SUFFIX)
212	rm ec_java_load.o
213
214else
215# OSCLASS = win, i.e. ARCH = i386_nt/x86_64_nt
216# CAUTION: for the case that $(JAVA_HOME)/include/win32 does not exist
217# (because we are cross-compiling) we have our own include/win32/jni_md.h
218# It's a simple file that will hopefully not change much between Java versions.
219# MinGW FAQ says we should use -D_JNI_IMPLEMENTATION -Wl,--kill-at
220
221$(ARCH)/ec_java.dll: ec_java.c com_parctechnologies_eclipse_NativeEclipse.h 
222	mkdir -p $(ARCH)
223	$(CC) -shared -I$(REL_EC_DIR)/include/$(ARCH) -I"$(JAVA_HOME)/include" \
224		-I"$(JAVA_HOME)/include/win32" -Iinclude/win32 \
225		-D_JNI_IMPLEMENTATION -Wl,--kill-at \
226		-Wl,--output-def,$(ARCH)/ec_java.def \
227		ec_java.c \
228		-L$(REL_EC_DIR)/lib/$(ARCH) -leclipse \
229		-o $(ARCH)/ec_java.dll
230
231$(ARCH)/ec_java_load.dll: ec_java_load.c com_parctechnologies_eclipse_NativeEclipse.h 
232	mkdir -p $(ARCH)
233	$(CC) -shared -I"$(JAVA_HOME)/include" \
234		-I"$(JAVA_HOME)/include/win32" -Iinclude/win32 \
235		-D_JNI_IMPLEMENTATION -Wl,--kill-at \
236		-Wl,--output-def,$(ARCH)/ec_java_load.def \
237		ec_java_load.c -o $(ARCH)/ec_java_load.dll
238
239endif
240
241com_parctechnologies_eclipse_NativeEclipse.h : ./src/com/parctechnologies/eclipse/NativeEclipse.java 
242	mkdir -p ./classes
243	"$(JAVA_BIN)/javac" ./src/com/parctechnologies/eclipse/NativeEclipse.java -d ./classes
244	"$(JAVA_BIN)/javah" -jni -classpath ./classes com.parctechnologies.eclipse.NativeEclipse
245
246