javawrapper.make   [plain text]


#
# javawrapper.make
#
# Variable definitions and rules for building wrapper libraries.  A wrapper
# library is a library that exposes an Objective C library or framework in
# Java.
#

include $(MAKEFILEDIR)/platform.make
include $(MAKEFILEDIR)/commands-$(OS).make

.PHONE: library all
library: all
PROJTYPE = LIBRARY
override DEBUG_SUFFIX = _g

ifeq "NEXTSTEP" "$(OS)"
DEFAULT_OBJC_LIBRARY_DIR = $(NEXT_ROOT)/usr/lib/java
else
ifeq "MACOS" "$(OS)"
DEFAULT_OBJC_LIBRARY_DIR = $(NEXT_ROOT)/usr/lib/java
else
ifeq "WINDOWS" "$(OS)"
DEFAULT_OBJC_LIBRARY_DIR = $(NEXT_ROOT)$(SYSTEM_DEVELOPER_DIR)/Libraries
else
DEFAULT_OBJC_LIBRARY_DIR = $(NEXT_ROOT)$(SYSTEM_LIBRARY_EXECUTABLES_DIR)
endif
endif
endif

ifeq "" "$(OBJC_JAVA_LIBRARY)"
ifeq "YES-WINDOWS" "$(DEBUG)-$(OS)"
OBJC_JAVA_LIBRARY = -L$(DEFAULT_OBJC_LIBRARY_DIR) -lObjCJava_g
else
OBJC_JAVA_LIBRARY = -L$(DEFAULT_OBJC_LIBRARY_DIR) -lObjCJava
endif
endif


ifneq "" "$(JOBS_FILES)"

VM_INCLUDE_CFLAGS := $(addprefix -I,$(shell javaconfig Headers))

# Radar #2371453 Include FRAMEWORK_PATHS and HEADER_PATHS in the Bridget invocation.
BRIDGET_CFLAGS = -I. -I$(NEXT_ROOT)$(LOCAL_DEVELOPER_DIR)/Java/Headers -I$(NEXT_ROOT)$(SYSTEM_DEVELOPER_DIR)/Java/Headers $(VM_INCLUDE_CFLAGS) $(FRAMEWORK_PATHS) $(HEADER_PATHS)

#
# RDW 09/14/1999 -- Added behavior that will cause an appropriately
#                   named symbolic link to the wrapper library
#                   in its usual place and name to make life easier
#                   for developers building wrappers as shared
#                   libraries.  This addition is for Solaris & 
#                   HP-UX. 
#
#                   Need to define WRAPPER_SHLIB_INSTALLDIR and
#                   PUBLIC_SHLIB_LINK.  Also, need to set
#                   RELATIVE_WRAPPER_SHLIB_PATH in preparation
#                   for the symlink performed in "install-wrapper-
#                   shlib" below.  The assumption here is that
#                   WRAPPER_SHLIB_INSTALLDIR will be under NEXT_ROOT.
#
#     09/17/1999 -- Added logic that will cause an additional
#                   target to be used to support builds better.
#

ifeq "$(OS)" "SOLARIS"
PDO_UNIX_WRAPPER = YES
endif 
ifeq "$(OS)" "HPUX" 
PDO_UNIX_WRAPPER = YES
endif

ifeq "$(PDO_UNIX_WRAPPER)" "YES"
ifneq "$(LIBRARY_STYLE)" "STATIC"

AFTER_INSTALL += install-wrapper-shlib
AFTER_BUILD   += create-shlib-links-for-wrapper-build
PUBLIC_SHLIB_LINK = $(LIBRARY_PREFIX)$(NAME)$(BUILD_TYPE_SUFFIX)$(LIBRARY_EXT)
RELATIVE_WRAPPER_SHLIB_PATH = ../Frameworks/ObjCJava.framework/Resources/
WRAPPER_SHLIB_INSTALLDIR = $(SYSTEM_LIBRARY_EXECUTABLES_DIR)

endif
endif

ifeq "$(PLATFORM_OS)" "solaris"

BRIDGET_CFLAGS += -I$(NEXT_ROOT)$(SYSTEM_DEVELOPER_DIR)/Libraries/gcc-lib/sparc-nextpdo-solaris2/include -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Headers -F$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks
BRIDGET_LIBFLAGS = $(BRIDGET_LIBNAMEFLAGS)

else

ifeq "$(PLATFORM_OS)" "hpux"

#
# RDW 09/10/1999 -- Added "-D__hpux -D__STDC_EXT__" so that Java wrapper
#                   projects, which build against the JDK, are able to
#                   find the right set of definitions and declarations
#                   for types, etc.
#

BRIDGET_CFLAGS += -I$(NEXT_ROOT)$(SYSTEM_DEVELOPER_DIR)/Libraries/gcc-lib/hppa1.1-nextpdo-hpux/2.7.2.1/include -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Headers -F$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks -D__hpux -D__STDC_EXT__
BRIDGET_LIBFLAGS = $(BRIDGET_LIBNAMEFLAGS)

else

BRIDGET_LIBFLAGS = $(BRIDGET_LIBNAMEFLAGS) $(BRIDGET_LIBVERSIONFLAGS)

endif
endif

BRIDGET_FLAGS = $(BRIDGET_LIBFLAGS)

ALL_BRIDGET_CFLAGS = $(BRIDGET_CFLAGS) $(OTHER_BRIDGET_CFLAGS)
ALL_BRIDGET_FLAGS = $(ALL_BRIDGET_CFLAGS) $(BRIDGET_FLAGS) $(OTHER_BRIDGET_FLAGS)

OTHER_CFLAGS += $(ALL_BRIDGET_CFLAGS)

OTHER_LIBS += $(OBJC_JAVA_LIBRARY)

#
# Need to work around a crasher in cpp-precomp by using the traditional cpp
#
ifeq "NEXTSTEP" "$(OS)"
OTHER_CFLAGS += -traditional-cpp
else
ifeq "MACOS" "$(OS)"
OTHER_CFLAGS += -no-cpp-precomp
endif
endif

override NAME := $(shell $(BRIDGET) $(ALL_BRIDGET_FLAGS) -listlibname $(JOBS_FILES))

BRIDGET_GENERATED_SRCFILES := $(shell $(BRIDGET) $(ALL_BRIDGET_FLAGS) -listobjc $(JOBS_FILES))
OTHER_GENERATED_SRCFILES += $(BRIDGET_GENERATED_SRCFILES)

BRIDGET_GENERATED_OFILES = $(BRIDGET_GENERATED_SRCFILES:.m=.o)
OFILELIST_PRODUCT = $(OFILE_DIR)/bridget_generated.ofileList
OTHER_OFILELISTS += $(OFILELIST_PRODUCT)

BRIDGET_GENERATED_JAVA_CLASSES := $(shell $(BRIDGET) $(ALL_BRIDGET_FLAGS) -listjava $(JOBS_FILES))
OTHER_GENERATED_JAVA_CLASSES += $(addprefix $(SFILE_DIR)/,$(BRIDGET_GENERATED_JAVA_CLASSES))

BEFORE_PREBUILD += generate_stub_code

ifneq "NO" "$(INSTALL_JOBS_FILE)"
BEFORE_INSTALL += install-jobs-file
endif

ifneq "NEXTSTEP" "$(OS)"
ifneq "MACOS" "$(OS)"
ifneq "YES" "$(DEBUG)"
ifneq "YES" "$(SUPPRESS_JAVA_DEBUG_INSTALLATION)"
AFTER_INSTALL += install_java_debug
endif
endif
endif
endif

ifneq "" "$(wildcard $(NAME).h)"
OBJCJAVA_HEADERS = $(NAME).h
endif

OBJCJAVA_HEADERS += $(OTHER_OBJCJAVA_HEADERS)

ifneq "NO" "$(INSTALL_OBJCJAVA_HEADERS)"
ifneq "" "$(OBJCJAVA_HEADERS)"
BEFORE_INSTALL += install-objcjava-headers
endif
endif

endif

ARCHIVE_JAVA_CLASSES = NO

#
# RDW 09/17/1999 -- Use versioned names for the product on HP-UX
#                   and Solaris. If versioning is enabled, DYLIB_INSTALL_NAME is changed in versions.make.
#
ifeq "$(PDO_UNIX_WRAPPER)" "YES"
PRODUCT = $(PRODUCT_DIR)/$(DYLIB_INSTALL_NAME)
else
PRODUCT = $(PRODUCT_DIR)/$(LIBRARY_PREFIX)$(NAME)$(BUILD_TYPE_SUFFIX)$(LIBRARY_EXT)
endif
PRODUCTS = $(PRODUCT)
STRIPPED_PRODUCTS = $(PRODUCT)
JAVA_RESOURCE_DIR = $(PRODUCT_DIR)
JAVA_RESOURCE_DIR_CLIENT = $(PRODUCT_DIR)

LINK_SUBPROJECTS = NO
RECURSIVE_FLAG += "LINK_SUBPROJECTS = NO"

ifndef LIBRARY_LIB_INSTALLDIR
LIBRARY_LIB_INSTALLDIR = $(SYSTEM_DEVELOPER_DIR)/Libraries
endif

DYLIB_INSTALL_DIR = $(DYLIB_ROOT)$(INSTALLDIR)
DYLIB_INSTALL_NAME = $(LIBRARY_PREFIX)$(NAME)$(BUILD_TYPE_SUFFIX)$(LIBRARY_EXT)
INSTALL_NAME_DIRECTIVE = -install_name $(DYLIB_INSTALL_DIR)/$(DYLIB_INSTALL_NAME)

ifneq "STATIC" "$(LIBRARY_STYLE)"
PROJTYPE_LDFLAGS = -dynamic -compatibility_version $(COMPATIBILITY_PROJECT_VERSION) -current_version $(CURRENT_PROJECT_VERSION) $(INSTALL_NAME_DIRECTIVE)
else
PROJTYPE_LDFLAGS = -static
endif

BEFORE_INSTALL += verify-install-name-directive
BEFORE_INSTALL += copy-java-classes

ifeq "WINDOWS" "$(OS)"
ifneq "STATIC" "$(LIBRARY_STYLE)"

PRODUCT_CRUFT = $(PRODUCT_DIR)/$(LIBRARY_PREFIX)$(NAME)$(BUILD_TYPE_SUFFIX)$(EXP_EXT)
BEFORE_INSTALL += install-lib
OS_LDFLAGS += -def $(WINDOWS_DEF_FILE)

endif
endif

include $(MAKEFILEDIR)/common.make

ifneq "" "$(ENABLE_VERSIONING)"
BRIDGET_LIBVERSIONFLAGS = -libversion "$(VERSION_NAME)"
endif

SRCFILES += $(JOBS_FILES) $(HIDDEN_JOBS_FILES)

ifneq "NO" "$(INSTALL_JOBS_FILE)"
ifeq "" "$(JOBS_INSTALL_DIR)"
JOBS_INSTALL_DIR = $(SYSTEM_DEVELOPER_DIR)/Java/Jobs
endif
endif

ifneq "NO" "$(INSTALL_OBJCJAVA_HEADERS)"
ifeq "" "$(OBJCJAVA_HEADERS_INSTALL_DIR)"
OBJCJAVA_HEADERS_INSTALL_DIR = $(SYSTEM_DEVELOPER_DIR)/Java/Headers
endif
endif

ifeq "" "$(JAVA_INSTALL_DIR)"
JAVA_INSTALL_DIR = $(SYSTEM_LIBRARY_DIR)/Java
endif

-include $(LOCAL_MAKEFILEDIR)/javawrapper.make.preamble

ifeq "STATIC" "$(LIBRARY_STYLE)"

$(PRODUCT): $(DEPENDENCIES)
ifeq "$(USE_AR)" "YES"
	$(AR) ru $(PRODUCT) $(LOADABLES)
	$(RANLIB) $(PRODUCT)
else
	$(LIBTOOL) $(ALL_LIBTOOL_FLAGS) -o $(PRODUCT) $(LOADABLES)
endif

else

$(PRODUCT): $(DEPENDENCIES) $(WINDOWS_DEF_FILE)
	$(LIBTOOL) $(filter-out -g, $(ALL_LDFLAGS)) -o $(PRODUCT) $(LOADABLES)
ifneq "$(PRODUCT_CRUFT)" ""
	$(RM) -f $(PRODUCT_CRUFT)
endif
endif

verify-install-name-directive:
ifeq "" "$(INSTALL_NAME_DIRECTIVE)"
	$(SILENT) $(ECHO) You must restore the INSTALL_NAME_DIRECTIVE variable
	$(SILENT) $(ECHO) before installing a framework.
	$(SILENT) exit 1
endif

install-lib: $(DSTROOT)$(LIBRARY_LIB_INSTALLDIR)
	$(RM) -f $(DSTROOT)$(INSTALLDIR)/$(NAME)$(BUILD_TYPE_SUFFIX).lib
	$(CP) $(PRODUCT_DIR)/$(NAME)$(BUILD_TYPE_SUFFIX).lib $(DSTROOT)$(LIBRARY_LIB_INSTALLDIR)

#
# RDW 09/14/1999 -- Added behavior that will cause an appropriately
#                   named symbolic link to the wrapper library 
#                   in its usual place and name to make life easier
#                   for developers building frameworks as shared
#                   libraries.  This addition is for Solaris &
#                   HP-UX.
#
#                   This behavior is represented by
#                   "install-wrapper-shlib".
#
#     09/17/1999 -- Added versioning support.  Also, added an
#                   an additional target "create-shlib-links-for-
#                   wrapper-build" to support builds better.
#
install-wrapper-shlib: $(DSTROOT)$(WRAPPER_SHLIB_INSTALLDIR)
	[ -h "$(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(DYLIB_INSTALL_NAME)" ] && $(RM) -f $(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(DYLIB_INSTALL_NAME) || :
	[ ! -f "$(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(DYLIB_INSTALL_NAME)" ] && $(SYMLINK) $(RELATIVE_WRAPPER_SHLIB_PATH)/$(DYLIB_INSTALL_NAME) $(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(DYLIB_INSTALL_NAME) || :
	[ -h "$(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(PUBLIC_SHLIB_LINK)" ] && $(RM) -f $(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(PUBLIC_SHLIB_LINK) || :
	[ ! -f "$(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(PUBLIC_SHLIB_LINK)" ] && $(SYMLINK) $(DYLIB_INSTALL_NAME) $(DSTROOT)/$(WRAPPER_SHLIB_INSTALLDIR)/$(PUBLIC_SHLIB_LINK) || :

create-shlib-links-for-wrapper-build:
	[ -h "$(PRODUCT_DIR)/$(PUBLIC_SHLIB_LINK)" ] && $(RM) -f $(PRODUCT_DIR)/$(PUBLIC_SHLIB_LINK) || :
	[ ! -f "$(PRODUCT_DIR)/$(PUBLIC_SHLIB_LINK)" ] && $(SYMLINK) $(DYLIB_INSTALL_NAME) $(PRODUCT_DIR)/$(PUBLIC_SHLIB_LINK) || :

#
# creating directories
#

$(DSTROOT)$(LIBRARY_LIB_INSTALLDIR) $(DSTROOT)$(JAVA_INSTALL_DIR) $(DSTROOT)$(JOBS_INSTALL_DIR) $(DSTROOT)$(OBJCJAVA_HEADERS_INSTALL_DIR) $(DSTROOT)$(WRAPPER_SHLIB_INSTALLDIR):
	$(MKDIRS) $@

generate_stub_code: $(SFILE_DIR) $(SFILE_DIR)/.bridget

$(SFILE_DIR)/.bridget: $(JOBS_FILES) $(OTHER_JOBS_FILES)
	$(BRIDGET) -o $(SFILE_DIR) $(ALL_BRIDGET_FLAGS) $(JOBS_FILES)
	touch $(SFILE_DIR)/.bridget

$(OFILELIST_PRODUCT): $(BRIDGET_GENERATED_OFILES) Makefile
	$(OFILE_LIST_TOOL) $(BRIDGET_GENERATED_OFILES) -o $(OFILELIST_PRODUCT)

install-jobs-file: $(DSTROOT)$(JOBS_INSTALL_DIR)
	$(SILENT) $(FASTCP) $(JOBS_FILES) $(OTHER_JOBS_FILES) $(DSTROOT)$(JOBS_INSTALL_DIR)

install-objcjava-headers: $(DSTROOT)$(OBJCJAVA_HEADERS_INSTALL_DIR)
	$(SILENT) $(FASTCP) $(OBJCJAVA_HEADERS) $(DSTROOT)$(OBJCJAVA_HEADERS_INSTALL_DIR)

ifeq "$(JAVA_PRODUCT)" ""
install-projtype-specific-products:
	$(MKDIRS) $(DSTROOT)$(JAVA_INSTALL_DIR)
	-cd $(JAVA_OBJ_DIR) && files=`find . -print` && $(CD) $(DSTROOT)$(JAVA_INSTALL_DIR) && $(CHMOD) +w $$files > $(NULL) 2>&1
	-cd $(JAVA_OBJ_DIR) && files=`find . -type f -print` && $(CD) $(DSTROOT)$(JAVA_INSTALL_DIR) && $(RM) -f $$files
	($(CD) $(JAVA_OBJ_DIR) && $(TAR) cf - . ) | ($(CD) $(DSTROOT)$(JAVA_INSTALL_DIR) && $(TAR) xf -)
else
install-projtype-specific-products: $(DSTROOT)$(INSTALLDIR)
	-$(CHMOD) -R +w $(INSTALLED_JAVA_PRODUCT)
	$(RM) -rf $(INSTALLED_JAVA_PRODUCT)
	($(CD) $(PRODUCT_DIR) && $(TAR) cf - $(notdir $(JAVA_PRODUCT))) | ($(CD) $(DSTROOT)$(INSTALLDIR) && $(TAR) xf -)
endif

-include $(LOCAL_MAKEFILEDIR)/javawrapper.make.postamble