1/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 *
3 * The contents of this file are subject to the Netscape Public
4 * License Version 1.1 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of
6 * the License at http://www.mozilla.org/NPL/
7 *
8 * Software distributed under the License is distributed on an "AS
9 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10 * implied. See the License for the specific language governing
11 * rights and limitations under the License.
12 *
13 * The Original Code is mozilla.org code.
14 *
15 * The Initial Developer of the Original Code is Netscape
16 * Communications Corporation.  Portions created by Netscape are
17 * Copyright (C) 1998 Netscape Communications Corporation. All
18 * Rights Reserved.
19 *
20 * Contributor(s):
21 *
22 *
23 * This Original Code has been modified by IBM Corporation.
24 * Modifications made by IBM described herein are
25 * Copyright (c) International Business Machines
26 * Corporation, 2000
27 *
28 * Modifications to Mozilla code or documentation
29 * identified per MPL Section 3.3
30 *
31 * Date         Modified by     Description of modification
32 * 03/27/2000   IBM Corp.       Set JNICALL to Optlink for
33 *                               use in OS2
34 */
35
36/*******************************************************************************
37 * Netscape version of jni_md.h -- depends on jri_md.h
38 ******************************************************************************/
39
40#ifndef JNI_MD_H
41#define JNI_MD_H
42
43#include "prtypes.h" /* needed for _declspec */
44
45/*******************************************************************************
46 * WHAT'S UP WITH THIS FILE?
47 *
48 * This is where we define the mystical JNI_PUBLIC_API macro that works on all
49 * platforms. If you're running with Visual C++, Symantec C, or Borland's
50 * development environment on the PC, you're all set. Or if you're on the Mac
51 * with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't
52 * matter.
53
54 * Changes by sailesh on 9/26
55
56 * There are two symbols used in the declaration of the JNI functions
57 * and native code that uses the JNI:
58 * JNICALL - specifies the calling convention
59 * JNIEXPORT - specifies export status of the function
60 *
61 * The syntax to specify calling conventions is different in Win16 and
62 * Win32 - the brains at Micro$oft at work here. JavaSoft in their
63 * infinite wisdom cares for no platform other than Win32, and so they
64 * just define these two symbols as:
65
66 #define JNIEXPORT __declspec(dllexport)
67 #define JNICALL __stdcall
68
69 * We deal with this, in the way JRI defines the JRI_PUBLIC_API, by
70 * defining a macro called JNI_PUBLIC_API. Any of our developers who
71 * wish to use code for Win16 and Win32, _must_ use JNI_PUBLIC_API to
72 * be able to export functions properly.
73
74 * Since we must also maintain compatibility with JavaSoft, we
75 * continue to define the symbol JNIEXPORT. However, use of this
76 * internally is deprecated, since it will cause a mess on Win16.
77
78 * We _do not_ need a new symbol called JNICALL. Instead we
79 * redefine JNICALL in the same way JRI_CALLBACK was defined.
80
81 ******************************************************************************/
82
83/* DLL Entry modifiers... */
84#if defined(XP_OS2)
85#  ifdef XP_OS2_VACPP
86#     define JNI_PUBLIC_API(ResultType)      ResultType _System
87#     define JNI_PUBLIC_VAR(VarType)         VarType
88#     define JNICALL                         _Optlink
89#     define JNIEXPORT
90#  else
91#     define JNI_PUBLIC_API(ResultType)	   ResultType
92#     define JNI_PUBLIC_VAR(VarType)         VarType
93#     define JNICALL
94#     define JNIEXPORT
95#  endif
96/* Win32 */
97#elif defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32)
98#	include <windows.h>
99#	if defined(_MSC_VER) || defined(__GNUC__)
100#		if defined(WIN32) || defined(_WIN32)
101#			define JNI_PUBLIC_API(ResultType)	_declspec(dllexport) ResultType __stdcall
102#			define JNI_PUBLIC_VAR(VarType)		VarType
103#			define JNI_NATIVE_STUB(ResultType)	_declspec(dllexport) ResultType
104#			define JNICALL                          __stdcall
105#		else /* !_WIN32 */
106#		    if defined(_WINDLL)
107#			define JNI_PUBLIC_API(ResultType)	ResultType __cdecl __export __loadds
108#			define JNI_PUBLIC_VAR(VarType)		VarType
109#			define JNI_NATIVE_STUB(ResultType)	ResultType __cdecl __loadds
110#			define JNICALL			        __loadds
111#		    else /* !WINDLL */
112#			define JNI_PUBLIC_API(ResultType)	ResultType __cdecl __export
113#			define JNI_PUBLIC_VAR(VarType)		VarType
114#			define JNI_NATIVE_STUB(ResultType)	ResultType __cdecl __export
115#			define JNICALL			        __export
116#                   endif /* !WINDLL */
117#		endif /* !_WIN32 */
118#	elif defined(__BORLANDC__)
119#		if defined(WIN32) || defined(_WIN32)
120#			define JNI_PUBLIC_API(ResultType)	__export ResultType
121#			define JNI_PUBLIC_VAR(VarType)		VarType
122#			define JNI_NATIVE_STUB(ResultType)	 __export ResultType
123#			define JNICALL
124#		else /* !_WIN32 */
125#			define JNI_PUBLIC_API(ResultType)	ResultType _cdecl _export _loadds
126#			define JNI_PUBLIC_VAR(VarType)		VarType
127#			define JNI_NATIVE_STUB(ResultType)	ResultType _cdecl _loadds
128#			define JNICALL			_loadds
129#		endif
130#	else
131#		error Unsupported PC development environment.
132#	endif
133#	ifndef IS_LITTLE_ENDIAN
134#		define IS_LITTLE_ENDIAN
135#	endif
136	/*  This is the stuff inherited from JavaSoft .. */
137#	define JNIEXPORT __declspec(dllexport)
138
139
140/* Mac */
141#elif macintosh || Macintosh || THINK_C
142#	if defined(__MWERKS__)				/* Metrowerks */
143#		if !__option(enumsalwaysint)
144#			error You need to define 'Enums Always Int' for your project.
145#		endif
146#		if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM
147#			if !__option(fourbyteints)
148#				error You need to define 'Struct Alignment: 68k' for your project.
149#			endif
150#		endif /* !GENERATINGCFM */
151#		define JNI_PUBLIC_API(ResultType)	__declspec(export) ResultType
152#		define JNI_PUBLIC_VAR(VarType)		JNI_PUBLIC_API(VarType)
153#		define JNI_NATIVE_STUB(ResultType)	JNI_PUBLIC_API(ResultType)
154#	elif defined(__SC__)				/* Symantec */
155#		error What are the Symantec defines? (warren@netscape.com)
156#	elif macintosh && applec			/* MPW */
157#		error Please upgrade to the latest MPW compiler (SC).
158#	else
159#		error Unsupported Mac development environment.
160#	endif
161#	define JNICALL
162	/*  This is the stuff inherited from JavaSoft .. */
163#	define JNIEXPORT
164
165/* Unix or else */
166#else
167#	define JNI_PUBLIC_API(ResultType)		ResultType
168#       define JNI_PUBLIC_VAR(VarType)                  VarType
169#       define JNI_NATIVE_STUB(ResultType)              ResultType
170#	define JNICALL
171	/*  This is the stuff inherited from JavaSoft .. */
172#	define JNIEXPORT
173#endif
174
175#ifndef FAR		/* for non-Win16 */
176#define FAR
177#endif
178
179/* Get the rest of the stuff from jri_md.h */
180#include "jri_md.h"
181
182#endif /* JNI_MD_H */
183