194 lines
7.8 KiB
Makefile
194 lines
7.8 KiB
Makefile
# This file provides default compilation and installation functionality for
|
|
# Common Lisp packages.
|
|
#
|
|
# A package using this file shall define the following variables:
|
|
#
|
|
# SHORTNAME
|
|
# Name of the package, prefix "cl-" will be automaticaly ignored
|
|
# respectively replaced by "${COMMON_LISP_SYSTEM}-".
|
|
#
|
|
# COMMON_LISP_SYSTEM
|
|
# Defines the system for which this package should be.
|
|
# At the moment only "ecl" is supported, "sbcl" and "clisp" will
|
|
# be supported in the future.
|
|
#
|
|
# It may define the following variables:
|
|
#
|
|
# COMMON_LISP_PACKAGES
|
|
# List of Common Lisp packages provided by this pkgsrc package,
|
|
# default is ${SHORTNAME}.
|
|
#
|
|
# COMMON_LISP_EXTRAFILES
|
|
# Defines files which will be copied from ${FILESDIR} to ${WRKSRC},
|
|
# for use with COMMON_LISP_DOCFILES or COMMON_LISP_EXAMPLES.
|
|
#
|
|
# COMMON_LISP_DOCFILES
|
|
# Defines files which should be installed to
|
|
# share/doc/<name>.
|
|
#
|
|
# COMMON_LISP_EXAMPLES
|
|
# Defines files which should be installed to
|
|
# share/doc/<name>/examples.
|
|
#
|
|
# For ECL the package should provide folowing files:
|
|
#
|
|
# ${FILESDIR}/${COMMON_LISP_SYSTEM}-<package>.asd
|
|
# The ASDF file, that should be installed in ECL library path. It
|
|
# will be automatically renamed to "<package>.asd".
|
|
#
|
|
|
|
PKGNAME?= ${LISP_PREFIX}-${SHORTNAME:S/^cl-//}-${VERSION}
|
|
COMMON_LISP_SYSTEM?= unsupported
|
|
COMMON_LISP_PACKAGES?= ${SHORTNAME}
|
|
COMMON_LISP_DOCFILES?= # empty
|
|
COMMON_LISP_EXAMPLES?= # empty
|
|
USE_LANGUAGES?= # empty
|
|
|
|
LISP_PREFIX= ${COMMON_LISP_SYSTEM}
|
|
.if !empty(COMMON_LISP_DOCFILES)
|
|
INSTALLATION_DIRS+= share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}
|
|
.endif
|
|
.if !empty(COMMON_LISP_EXAMPLES)
|
|
INSTALLATION_DIRS+= share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/examples
|
|
.endif
|
|
|
|
.if !empty(COMMON_LISP_SYSTEM:Mecl)
|
|
USE_LANGUAGES+= c
|
|
USE_TOOLS+= install find
|
|
ECL_DEFAULT_PACKAGE?= lang/ecl
|
|
ECL_VERSION!= cd ../../${ECL_DEFAULT_PACKAGE} && ${MAKE} show-var VARNAME=PKGVERSION_NOREV
|
|
ECL_CENTRAL_REGISTRY= lib/ecl-${ECL_VERSION}/
|
|
PLIST_SUBST+= CL_PATH="${ECL_CENTRAL_REGISTRY}"
|
|
PLIST_SUBST+= LISP="${LISP_PREFIX}"
|
|
PLIST_SUBST+= ECL=""
|
|
PLIST_SUBST+= SBCL="@comment "
|
|
PLIST_SUBST+= CLISP="@comment "
|
|
PLIST_SUBST+= CL="@comment "
|
|
PLIST_SUBST+= EXT="fas"
|
|
INSTALLATION_DIRS+= ${ECL_CENTRAL_REGISTRY}
|
|
DEPENDS+= ecl-${ECL_VERSION}{,nb*}:../../${ECL_DEFAULT_PACKAGE}
|
|
|
|
do-build:
|
|
.for pkg in ${COMMON_LISP_PACKAGES}
|
|
( cd ${WRKSRC} && ${PREFIX}/bin/ecl -q -norc \
|
|
-eval "(format t \"### Build package ~S in directory: ~S~%\" \"${pkg}\" #P\"${WRKSRC}/\")" \
|
|
-eval "(let ((*load-verbose* nil)) (require 'asdf))" \
|
|
-eval "(setf asdf:*asdf-verbose* t *compile-verbose* t *load-verbose* t)" \
|
|
-eval "(setf asdf::*user-cache* \"${WRKSRC}/build/\")" \
|
|
-eval "(push #P\"${WRKSRC}/\" asdf::*central-registry*)" \
|
|
-eval "(asdf:oos 'asdf:load-fasl-op :${pkg})" \
|
|
-eval "(quit)" </dev/null )
|
|
.endfor
|
|
${FIND} ${WRKSRC} -name '*.fasb' -exec ${CP} {} ${WRKSRC}/build/ \;
|
|
${FIND} ${WRKSRC} -name 'lib*.a' -exec ${CP} {} ${WRKSRC}/build/ \;
|
|
|
|
do-install:
|
|
.for pkg in ${COMMON_LISP_PACKAGES}
|
|
${INSTALL_PROGRAM} ${WRKSRC}/build/${pkg}.fasb \
|
|
${DESTDIR}${PREFIX}/${ECL_CENTRAL_REGISTRY}${pkg}.fas
|
|
${INSTALL_DATA} ${WRKSRC}/build/lib${pkg}.a \
|
|
${DESTDIR}${PREFIX}/${ECL_CENTRAL_REGISTRY}lib${pkg}.a
|
|
${INSTALL_DATA} ${FILESDIR}/ecl-${pkg:S/^cl-//}.asd \
|
|
${DESTDIR}${PREFIX}/${ECL_CENTRAL_REGISTRY}${pkg}.asd
|
|
.endfor
|
|
.for extra in ${COMMON_LISP_EXTRAFILES}
|
|
${CP} ${FILESDIR}/${extra} ${WRKSRC}/
|
|
.endfor
|
|
.for doc in ${COMMON_LISP_DOCFILES}
|
|
${INSTALL_DATA} ${WRKSRC}/${doc} ${DESTDIR}${PREFIX}/share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/
|
|
.endfor
|
|
.for example in ${COMMON_LISP_EXAMPLES}
|
|
${INSTALL_DATA} ${WRKSRC}/${example} ${DESTDIR}${PREFIX}/share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/examples/
|
|
.endfor
|
|
|
|
.include "../../${ECL_DEFAULT_PACKAGE}/buildlink3.mk"
|
|
.include "../../devel/libffi/buildlink3.mk"
|
|
.else
|
|
.if !empty(COMMON_LISP_SYSTEM:Msbcl)
|
|
USE_TOOLS+= install find mkdir
|
|
SBCL_DEFAULT_PACKAGE?= lang/sbcl
|
|
SBCL_CENTRAL_REGISTRY= lib/sbcl/site-systems/
|
|
PLIST_SUBST+= CL_PATH="${SBCL_CENTRAL_REGISTRY}"
|
|
PLIST_SUBST+= LISP="${LISP_PREFIX}"
|
|
PLIST_SUBST+= ECL="@comment "
|
|
PLIST_SUBST+= SBCL=""
|
|
PLIST_SUBST+= CLISP="@comment "
|
|
PLIST_SUBST+= CL=""
|
|
PLIST_SUBST+= EXT="fasl"
|
|
INSTALLATION_DIRS+= ${SBCL_CENTRAL_REGISTRY}
|
|
DEPENDS+= sbcl-[0-9]*:../../${SBCL_DEFAULT_PACKAGE}
|
|
|
|
do-build:
|
|
.for pkg in ${COMMON_LISP_PACKAGES}
|
|
( cd ${WRKSRC} && ${PREFIX}/bin/sbcl --no-userinit \
|
|
--eval "(format t \"### Build package ~S in directory: ~S~%\" \"${pkg}\" #P\"${WRKSRC}/\")" \
|
|
--eval "(let ((*load-verbose* nil)) (require 'asdf))" \
|
|
--eval "(setf asdf:*asdf-verbose* t *compile-verbose* t *load-verbose* t)" \
|
|
--eval "(setf asdf:*central-registry* '(#P\"${PREFIX}/${SBCL_CENTRAL_REGISTRY}\" #P\"${WRKSRC}/\"))" \
|
|
--eval "(setf asdf::*user-cache* \"${WRKSRC}/\")" \
|
|
--eval "(asdf:compile-system :${pkg})" \
|
|
--non-interactive )
|
|
.endfor
|
|
|
|
do-install:
|
|
( cd ${WRKSRC} && ${FIND} . -type d -exec ${MKDIR} -p ${DESTDIR}${PREFIX}/${SBCL_CENTRAL_REGISTRY}${SHORTNAME}/{} \; )
|
|
( cd ${WRKSRC} && ${FIND} * -type f -exec ${INSTALL_DATA} {} ${DESTDIR}${PREFIX}/${SBCL_CENTRAL_REGISTRY}${SHORTNAME}/{} \; )
|
|
.for extra in ${COMMON_LISP_EXTRAFILES}
|
|
${CP} ${FILESDIR}/${extra} ${DESTDIR}${PREFIX}/${SBCL_CENTRAL_REGISTRY}${SHORTNAME}/
|
|
.endfor
|
|
.for doc in ${COMMON_LISP_DOCFILES}
|
|
${MV} ${DESTDIR}${PREFIX}/${SBCL_CENTRAL_REGISTRY}${SHORTNAME}/${doc} ${DESTDIR}${PREFIX}/share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/
|
|
.endfor
|
|
.for example in ${COMMON_LISP_EXAMPLES}
|
|
${MV} ${DESTDIR}${PREFIX}/${SBCL_CENTRAL_REGISTRY}${SHORTNAME}/${example} ${DESTDIR}${PREFIX}/share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/examples/
|
|
.endfor
|
|
${FIND} -d ${DESTDIR}${PREFIX}/${SBCL_CENTRAL_REGISTRY}${SHORTNAME} -type d -exec ${RMDIR} {} \; >/dev/null 2>&1 || true
|
|
|
|
.else
|
|
.if !empty(COMMON_LISP_SYSTEM:Mclisp)
|
|
USE_TOOLS+= install find mkdir
|
|
CLISP_DEFAULT_PACKAGE?= lang/clisp
|
|
CLISP_CENTRAL_REGISTRY= lib/clisp/asdfmod/
|
|
PLIST_SUBST+= CL_PATH="${CLISP_CENTRAL_REGISTRY}"
|
|
PLIST_SUBST+= LISP="${LISP_PREFIX}"
|
|
PLIST_SUBST+= ECL="@comment "
|
|
PLIST_SUBST+= SBCL="@comment "
|
|
PLIST_SUBST+= CLISP=""
|
|
PLIST_SUBST+= CL=""
|
|
PLIST_SUBST+= EXT="fas"
|
|
INSTALLATION_DIRS+= ${CLISP_CENTRAL_REGISTRY}
|
|
DEPENDS+= clisp-[0-9]*:../../${CLISP_DEFAULT_PACKAGE}
|
|
DEPENDS+= clisp-asdf-[0-9]*:../../wip/clisp-asdf
|
|
|
|
do-build:
|
|
.for pkg in ${COMMON_LISP_PACKAGES}
|
|
( cd ${WRKSRC} && ${PREFIX}/bin/clisp -q -norc \
|
|
-x "(format t \"### Build package ~S in directory: ~S~%\" \"${pkg}\" #P\"${WRKSRC}/\")" \
|
|
-x "(let ((*load-verbose* nil)) (require \"asdf\"))" \
|
|
-x "(setf asdf:*asdf-verbose* t *compile-verbose* t *load-verbose* t)" \
|
|
-x "(setf asdf:*central-registry* '(#P\"${PREFIX}/${CLISP_CENTRAL_REGISTRY}\" #P\"${WRKSRC}/\"))" \
|
|
-x "(setf asdf::*user-cache* \"${WRKSRC}/\")" \
|
|
-x "(asdf:compile-system :${pkg})" \
|
|
-on-error exit )
|
|
.endfor
|
|
|
|
do-install:
|
|
( cd ${WRKSRC} && ${FIND} . -type d -exec ${MKDIR} -p ${DESTDIR}${PREFIX}/${CLISP_CENTRAL_REGISTRY}${SHORTNAME}/{} \; )
|
|
( cd ${WRKSRC} && ${FIND} * -type f ! -name "ASDF-TMP*" -exec ${INSTALL_DATA} {} ${DESTDIR}${PREFIX}/${CLISP_CENTRAL_REGISTRY}${SHORTNAME}/{} \; )
|
|
.for extra in ${COMMON_LISP_EXTRAFILES}
|
|
${CP} ${FILESDIR}/${extra} ${DESTDIR}${PREFIX}/${CLISP_CENTRAL_REGISTRY}${SHORTNAME}/
|
|
.endfor
|
|
.for doc in ${COMMON_LISP_DOCFILES}
|
|
${MV} ${DESTDIR}${PREFIX}/${CLISP_CENTRAL_REGISTRY}${SHORTNAME}/${doc} ${DESTDIR}${PREFIX}/share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/
|
|
.endfor
|
|
.for example in ${COMMON_LISP_EXAMPLES}
|
|
${MV} ${DESTDIR}${PREFIX}/${CLISP_CENTRAL_REGISTRY}${SHORTNAME}/${example} ${DESTDIR}${PREFIX}/share/doc/${LISP_PREFIX}-${SHORTNAME:S/^cl-//}/examples/
|
|
.endfor
|
|
${FIND} -d ${DESTDIR}${PREFIX}/${CLISP_CENTRAL_REGISTRY}${SHORTNAME} -type d -exec ${RMDIR} {} \; >/dev/null 2>&1 || true
|
|
|
|
.else
|
|
PKG_FAIL_REASON+= "Common Lisp system ${COMMON_LISP_SYSTEM} is not supported."
|
|
.endif
|
|
.endif
|
|
.endif
|