library.make   [plain text]


##
# Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
#
# @APPLE_LICENSE_HEADER_START@
# 
# The contents of this file constitute Original Code as defined in and
# are subject to the Apple Public Source License Version 1.1 (the
# "License").  You may not use this file except in compliance with the
# License.  Please obtain a copy of the License at
# http://www.apple.com/publicsource and read it before using this file.
# 
# This Original Code and all software distributed under the License are
# distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
# License for the specific language governing rights and limitations
# under the License.
# 
# @APPLE_LICENSE_HEADER_END@
##
#
# library.make
#
# Variable definitions and rules for building library projects.  An
# application is a directory which contains an executable and any resources
# that executable requires.  See wrapped.make for more information about
# projects whose product is a directory.
#
# PUBLIC TARGETS
#    library: synonymous with all
#
# IMPORTED VARIABLES
#    PUBLIC_HEADER_DIR:  Determines where public exported header files
#	should be installed.  Do not include $(DSTROOT) in this value --
#	it is prefixed automatically.
#    PRIVATE_HEADER_DIR:  Determines where private exported header files
#  	should be installed.  Do not include $(DSTROOT) in this value --
#	it is prefixed automatically.
#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
#  	whether the libraries produces are statically linked when they
#	are used or if they are dynamically loadable.
#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
#	where to put the library's DLL.  This variable defaults to 
#	$(INSTALLDIR)/../Executables
#
# OVERRIDABLE VARIABLES
#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
#	against the shlib will run against the correct version even if
#	the current version of the shlib changes.  You may override this
#	to "" as an alternative to using the DYLD_LIBRARY_PATH during your
#	development cycle, but be sure to restore it before installing.
#
# EXPORTED VARIABLES
#    none
#

.PHONY: library all
library: all
PROJTYPE = LIBRARY

PRODUCT = $(PRODUCT_DIR)/$(LIBRARY_PREFIX)$(NAME)$(BUILD_TYPE_SUFFIX)$(LIBRARY_EXT)
PRODUCTS = $(PRODUCT)
STRIPPED_PRODUCTS = $(PRODUCT)

# libraries do not have a debug suffix, but java packages do...
ifeq "library.make" "$(MAKEFILE)"
override DEBUG_SUFFIX =
endif

ifndef LIBRARY_DLL_INSTALLDIR
LIBRARY_DLL_INSTALLDIR = $(INSTALLDIR)/../Executables
endif

DYLIB_INSTALL_DIR = $(DYLIB_ROOT)$(INSTALLDIR)
DYLIB_INSTALL_NAME = $(LIBRARY_PREFIX)$(NAME)$(LIBRARY_EXT)
INSTALL_NAME_DIRECTIVE = -install_name `echo $(DYLIB_INSTALL_DIR)/$(DYLIB_INSTALL_NAME) | sed 's/\/\//\//g'`

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

ifeq "WINDOWS" "$(OS)"

ifneq "STATIC" "$(LIBRARY_STYLE)"

PRODUCT_CRUFT = $(PRODUCT_DIR)/$(LIBRARY_PREFIX)$(NAME)$(EXP_EXT)
AFTER_INSTALL += install-dll
OS_LDFLAGS += -def $(WINDOWS_DEF_FILE)

endif
endif

include $(MAKEFILEDIR)/common.make
-include $(LOCAL_MAKEFILEDIR)/library.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-dll: $(DSTROOT)$(LIBRARY_DLL_INSTALLDIR)
	$(RM) -f $(DSTROOT)$(LIBRARY_DLL_INSTALLDIR)/$(NAME)$(DLL_EXT)
	$(MV) $(DSTROOT)$(INSTALLDIR)/$(NAME)$(BUILD_TYPE_SUFFIX)$(DLL_EXT) $(DSTROOT)$(LIBRARY_DLL_INSTALLDIR)

#
# creating directories
#

$(DSTROOT)$(LIBRARY_DLL_INSTALLDIR):
	$(MKDIRS) $@

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