XCOMM $OpenBSD: OpenBSDLib.rules,v 1.1 2000/10/09 20:43:58 matthieu Exp $ /* * OpenBSD shared library rules */ XCOMM $XFree86: xc/config/cf/OpenBSDLib.rules,v 1.17 2004/06/01 00:16:53 dawes Exp $ /* * Copyright (c) 1994-2004 by The XFree86 Project, Inc. * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject * to the following conditions: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution, and in the same place and form as other copyright, * license and disclaimer information. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: "This product * includes software developed by The XFree86 Project, Inc * (http://www.xfree86.org/) and its contributors", in the same * place and form as other third-party acknowledgments. Alternately, * this acknowledgment may appear in the software itself, in the * same form and location as other such third-party acknowledgments. * * 4. Except as contained in this notice, the name of The XFree86 * Project, Inc shall not be used in advertising or otherwise to * promote the sale, use or other dealings in this Software without * prior written authorization from The XFree86 Project, Inc. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE XFREE86 PROJECT, INC OR ITS CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UseElfFormat #define UseElfFormat NO #endif #ifndef HasSharedLibraries #define HasSharedLibraries YES #endif #ifndef ForceNormalLib #define ForceNormalLib YES #endif #ifndef UseRpath #define UseRpath YES #endif #ifndef BaseShLibReqs #define BaseShLibReqs /* -lc implied by $(CC) */ #endif #ifndef SharedDataSeparation #define SharedDataSeparation NO #endif #ifndef SharedCodeDef #define SharedCodeDef /**/ #endif #ifndef SharedLibraryDef #define SharedLibraryDef /**/ #endif #ifndef ShLibIncludeFile #define ShLibIncludeFile #endif #ifndef RpathLoadFlags #if UseRpath #define RpathLoadFlags -Wl,-rpath,$(USRLIBDIRPATH) #else #define RpathLoadFlags /**/ #endif #endif #ifndef LibraryRpathLoadFlags #define LibraryRpathLoadFlags RpathLoadFlags #endif #ifndef SharedLibraryLoadFlags #define SharedLibraryLoadFlags -shared PositionIndependentCFlags LibraryRpathLoadFlags #endif #ifndef PositionIndependentCFlags #define PositionIndependentCFlags -fPIC #endif #ifndef PositionIndependentCplusplusFlags #define PositionIndependentCplusplusFlags -fPIC #endif #if UseElfFormat #ifndef ExtraLoadFlags #ifdef UseInstalled #define ExtraLoadFlags RpathLoadFlags #else #define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(BUILDLIBDIR) #endif #endif #ifndef HardCodeLibdirFlag #define HardCodeLibdirFlag RpathLoadFlags #endif #endif /* UseElfFormat */ /* * InstallSharedLibrary - generate rules to install the shared library. * NOTE: file must be executable, hence "INSTBINFLAGS" */ #ifndef InstallSharedLibrary #define InstallSharedLibrary(libname,rev,dest) @@\ install:: @@\ MakeDir($(DESTDIR)dest) @@\ $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat($(LIBPREFIX),libname.so.rev) $(DESTDIR)dest #endif /* InstallSharedLibrary */ /* * InstallSharedLibraryData - generate rules to install the shared library data */ #ifndef InstallSharedLibraryData #define InstallSharedLibraryData(libname,rev,dest) #endif /* InstallSharedLibraryData */ /* * SharedLibraryTarget - generate rules to create a shared library; * build it into a different name so that we do not hose people by having * the library gone for long periods. */ #ifndef SharedLibraryTarget #define SharedLibraryTarget(libname,rev,solist,down,up) @@\ AllTarget(Concat($(LIBPREFIX),libname.so.rev)) @@\ @@\ Concat($(LIBPREFIX),libname.so.rev): solist @@\ $(RM) $@~ @@\ set -x; \ @@\ (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$@\ @@\ solist $(REQUIREDLIBS) BaseShLibReqs); @@\ LinkBuildSonameLibrary($@) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ @@\ clean:: @@\ $(RM) Concat($(LIBPREFIX),libname.so.rev) #endif /* SharedLibraryTarget */ /* * SharedDepLibraryTarget - generate rules to create a shared library. */ #ifndef SharedDepLibraryTarget #define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up) @@\ AllTarget(Concat($(LIBPREFIX),libname.so.rev)) @@\ @@\ Concat($(LIBPREFIX),libname.so.rev): deplist $(EXTRALIBRARYDEPS) @@\ $(RM) $@~ @@\ (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS)) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ LinkBuildLibrary($@) @@\ @@\ clean:: @@\ $(RM) Concat($(LIBPREFIX),libname.so.rev) #endif /* SharedDepLibraryTarget */ #ifndef SharedDepModuleTarget #define SharedDepModuleTarget(name,deps,solist) @@\ AllTarget(name) @@\ @@\ name: deps @@\ $(RM) $@~ @@\ $(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ LinkBuildModule($@,dri) @@\ @@\ clean:: @@\ $(RM) name #endif /* SharedDepModuleTarget */ #ifndef SharedDriModuleTarget #define SharedDriModuleTarget(name,deps,solist) @@\ AllTarget(name) @@\ @@\ name: deps @@\ $(RM) $@~ $@.map @@\ $(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\ $(RM) $@ $@.map @@\ $(MV) $@~ $@ @@\ @@\ clean:: @@\ $(RM) name @@\ $(RM) name.map #endif /* SharedDriModuleTarget */ /* * SharedLibraryDataTarget - generate rules to create shlib data file; */ #ifndef SharedLibraryDataTarget #define SharedLibraryDataTarget(libname,rev,salist) #endif /* SharedLibraryTarget */ /* * DynamicModuleTarget - build a module to be dynamically loaded */ #ifdef DynamicModuleTarget #undef DynamicModuleTarget #define DynamicModuleTarget(module,modlist) @@\ AllTarget(module) @@\ @@\ module: modlist @@\ RemoveFile($@) @@\ $(CC) -o $@ $(SHLIBLDFLAGS) modlist @@\ @@\ clean:: @@\ RemoveFile(module) #endif /* DynamicModuleTarget */