Index: mk/cl-package.mk =================================================================== RCS file: /cvsroot/pkgsrc-wip/wip/mk/cl-package.mk,v retrieving revision 1.5 diff -u -r1.5 cl-package.mk --- mk/cl-package.mk 29 Nov 2011 09:25:13 -0000 1.5 +++ mk/cl-package.mk 3 Dec 2011 10:35:36 -0000 @@ -18,10 +18,6 @@ # 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/. @@ -44,35 +40,28 @@ 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) +LISP_PREFIX= ${COMMON_LISP_SYSTEM} 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+= ECL_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} +.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 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})" \ @@ -87,103 +76,14 @@ ${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-//}/ + ${INSTALL_DATA} ${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/ + ${INSTALL_DATA} ${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 - +.include "../../lang/ecl/buildlink3.mk" .else .error "Common Lisp system ${COMMON_LISP_SYSTEM} is not supported." .endif -.endif -.endif Index: mk/cvs-package.mk =================================================================== RCS file: /cvsroot/pkgsrc-wip/wip/mk/cvs-package.mk,v retrieving revision 1.43 diff -u -r1.43 cvs-package.mk --- mk/cvs-package.mk 7 Nov 2011 17:26:53 -0000 1.43 +++ mk/cvs-package.mk 3 Dec 2011 10:35:36 -0000 @@ -1,5 +1,7 @@ -# $Id: cvs-package.mk,v 1.43 2011/11/07 17:26:53 asau Exp $ - +# $Id: cvs-package.mk,v 1.39 2011/10/07 02:52:57 makoto Exp $ +# +# Please update svn-package.mk as well. It is brother Makefile frags. +# # This file provides simple access to CVS repositories, so that packages # can be created from CVS instead of from released tarballs. Whenever a # package is fetched from CVS, an archive is created from it and saved @@ -19,6 +21,8 @@ # following variables define the details of how to access the # CVS repository. # +# CVS_ROOT must be defined. +# # CVS_ROOT.${id} # The CVSROOT for the CVS repository, including anoncvs password, # if applicable. @@ -32,6 +36,11 @@ # # Default value: ${id} # +# CVS_DISTBASE.${id} +# The prefix for cached archive file name. +# +# Default value: ${PKGBASE}-${CVS_MODULE.${repo}} +# # It may define the following variables: # # CVS_TAG.${id} @@ -90,7 +99,7 @@ DISTFILES?= # empty PKGNAME?= ${DISTNAME:C,-[0-9].*,,}-cvs-${_CVS_PKGVERSION} -# Enforce PKGREVISION unless CVS_TAG is set: +# Enforce PKGREVISION unless CVS_TAG is set .if empty(CVS_TAG) . if defined(CHECKOUT_DATE) PKGREVISION?= $(CHECKOUT_DATE:S/-//g) @@ -124,7 +133,7 @@ .for repo in ${CVS_REPOSITORIES} . if !defined(CVS_ROOT.${repo}) -PKG_FAIL_REASON+= "[cvs-package.mk] CVS_ROOT.${repo} must be set." +PKG_FAIL_REASON+= "[cvs-package.mk] CVS_ROOT."${repo:Q}" must be set." . endif .endfor @@ -139,7 +148,7 @@ _CVS_ENV= # empty _CVS_ENV+= CVS_PASSFILE=${_CVS_PASSFILE} _CVS_ENV+= CVS_RSH=${_CVS_RSH:Q} -_CVS_FLAGS= -Q -z3 +_CVS_FLAGS= -q -z3 _CVS_CHECKOUT_FLAGS= -P _CVS_PASSFILE= ${WRKDIR}/.cvs_passwords _CVS_TODAY_CMD= ${DATE} -u +'%Y-%m-%d' @@ -152,6 +161,7 @@ # Generation of repository-specific variables # +# determine appropriate checkout date or tag .for repo in ${CVS_REPOSITORIES} CVS_MODULE.${repo}?= ${repo} @@ -170,23 +180,36 @@ _CVS_TAG.${repo}= ${_CVS_TODAY:Q} . endif +_CVS_TMP_RESULT.${repo}= '/tmp/cvs-${CVS_MODULE.${repo}}-update' + # Cache support: +. if !defined(NO_CVS_CACHE.${repo}) \ + || defined(NO_CVS_CACHE.${repo}) && empty(NO_CVS_CACHE.${repo}:M[Yy][Ee][Ss]) # cache file name -_CVS_DISTFILE.${repo}= ${PKGBASE}-${CVS_MODULE.${repo}}-${_CVS_TAG.${repo}}.tar.gz +. if !defined(CVS_DISTBASE.${repo}) +CVS_DISTBASE.${repo}= ${CVS_MODULE.${repo}} +. endif +_CVS_DISTFILE.${repo}= ${CVS_DISTBASE.${repo}}-${_CVS_TAG.${repo}}.tar.gz # command to extract cache file _CVS_EXTRACT_CACHED.${repo}= \ - if [ -f ${_CVS_DISTDIR}/${_CVS_DISTFILE.${repo}:Q} ]; then \ - ${STEP_MSG} "Extracting cached CVS archive "${_CVS_DISTFILE.${repo}:Q}"."; \ - pax -r -z -f ${_CVS_DISTDIR}/${_CVS_DISTFILE.${repo}:Q}; \ - exit 0; \ + p="$$(ls -td ${_CVS_DISTDIR}/${CVS_DISTBASE.${repo}}-*.tar.gz | head -n 1)"; \ + if [ -n "$$p" ]; then \ + ${STEP_MSG} "(1) Extracting cached CVS archive \"""$$p\"."; \ + pax -r -z -f "$$p"; \ + else \ + ${STEP_MSG} "(1a) No cache file found."; \ fi +_CVS_CHECK_UPDATE.${repo}= \ + "$$(grep ^[ADMU] ${_CVS_TMP_RESULT.${repo}} | head -n 1)" + # create cache archive _CVS_CREATE_CACHE.${repo}= \ - ${STEP_MSG} "Creating cached CVS archive "${_CVS_DISTFILE.${repo}:Q}"."; \ - ${MKDIR} ${_CVS_DISTDIR:Q}; \ + ${STEP_MSG} "(5) Creating cached CVS archive "${_CVS_DISTFILE.${repo}:Q}"."; \ + ${MKDIR} ${_CVS_DISTDIR:Q}; \ pax -w -z -f ${_CVS_DISTDIR}/${_CVS_DISTFILE.${repo}:Q} ${CVS_MODULE.${repo}:Q} +. endif .endfor pre-extract: do-cvs-extract @@ -196,26 +219,38 @@ ${RUN} cd ${WRKDIR}; \ if [ ! -d ${_CVS_DISTDIR} ]; then mkdir -p ${_CVS_DISTDIR:Q}; fi; \ ${_CVS_EXTRACT_CACHED.${repo}}; \ - p="$$(cd ${_CVS_DISTDIR} && ls -t ${PKGBASE}-${CVS_MODULE.${repo}}-* | head -n 1)"; \ - if [ -n "$$p" ]; then \ - ${STEP_MSG} "Extracting cached CVS archive \"""$$p\"."; \ - pax -r -z -f ${_CVS_DISTDIR:Q}/"$$p"; \ - fi; \ case ${CVS_ROOT.${repo}:Q} in \ :pserver:*) \ [ -f ${_CVS_PASSFILE} ] || ${TOUCH} ${_CVS_PASSFILE}; \ ${STEP_MSG} "Logging in to "${CVS_ROOT.${repo}:Q}"."; \ - ${SETENV} ${_CVS_ENV} ${_CVS_CMD} ${_CVS_FLAGS} \ + ${SETENV} ${_CVS_ENV} ${_CVS_CMD} ${_CVS_FLAGS} \ -d ${CVS_ROOT.${repo}:Q} login \ ;; \ *) ;; \ esac; \ - ${STEP_MSG} "Downloading "${CVS_MODULE.${repo}:Q}" from "${CVS_ROOT.${repo}:Q}"."; \ + ${STEP_MSG} "(2) Downloading "${CVS_MODULE.${repo}:Q}" from "${CVS_ROOT.${repo}:Q}"."; \ ${SETENV} ${_CVS_ENV} \ - ${_CVS_CMD} ${_CVS_FLAGS} -d ${CVS_ROOT.${repo}:Q} \ - checkout ${_CVS_CHECKOUT_FLAGS} ${_CVS_TAG_FLAG.${repo}} \ - -d ${repo} ${CVS_MODULE.${repo}:Q}; \ - ${_CVS_CREATE_CACHE.${repo}} + ${_CVS_CMD} \ + ${_CVS_FLAGS} \ + -d \ + ${CVS_ROOT.${repo}:Q} \ + checkout ${_CVS_CHECKOUT_FLAGS} \ + ${_CVS_TAG_FLAG.${repo}} \ + -d ${repo} \ + ${CVS_MODULE.${repo}:Q} > ${_CVS_TMP_RESULT.${repo}}; \ + if [ ! "$$p" = 0 ];then \ + if [ ! -z ${_CVS_TMP_RESULT.${repo}} ];then \ + if [ -n ${_CVS_CHECK_UPDATE.${repo}} ]; then \ + ${_CVS_CREATE_CACHE.${repo}}; \ + else \ + ${STEP_MSG} "(6a) Skip creating cache file for no update."; \ + fi; \ + else \ + ${STEP_MSG} "(6b) Skip creating cache file."; \ + fi; \ + else \ + ${STEP_MSG} "(6c) Skip creating cache file for no update."; \ + fi; .endfor .endif Index: mk/git-package.mk =================================================================== RCS file: /cvsroot/pkgsrc-wip/wip/mk/git-package.mk,v retrieving revision 1.10 diff -u -r1.10 git-package.mk --- mk/git-package.mk 7 Nov 2011 17:26:53 -0000 1.10 +++ mk/git-package.mk 3 Dec 2011 10:35:36 -0000 @@ -23,12 +23,18 @@ _PKG_MK_GIT_PACKAGE_MK= # defined BUILD_DEPENDS+= scmgit-base>=1.6.4:../../devel/scmgit-base +USE_TOOLS+= pax +_GIT_TMP_RESULTS= "/tmp/git-package.$$" + +# switch either (from scratch) clone is necessary or (already cloned) checkout is enough +_GIT_NEED_CLONE= ${WRKDIR}/.need_clone # # defaults for user-visible input variables # GIT_TAG?= tip +GIT_MODULE?= ${PKGBASE} DISTFILES?= # empty .if empty(GIT_TAG) || ${GIT_TAG} == "tip" @@ -37,6 +43,10 @@ PKGREVISION?= ${GIT_TAG} .endif +# +# Input validation +# + .if !defined(GIT_REPOSITORIES) PKG_FAIL_REASON+= "[git-package.mk] GIT_REPOSITORIES must be set." GIT_REPOSITORIES?= # none @@ -55,9 +65,49 @@ _GIT_CMD= git _GIT_ENV= # empty -_GIT_FLAGS= --quiet --depth 1 +_GIT_FLAGS?= --quiet --depth 1 _GIT_PKGVERSION_CMD= ${DATE} -u +'%Y.%m.%d' _GIT_PKGVERSION= ${_GIT_PKGVERSION_CMD:sh} +_GIT_DISTDIR= ${DISTDIR}/git-packages + +_GIT_TODAY_CMD= ${DATE} -u +'%Y-%m-%d' +_GIT_TODAY= ${_GIT_TODAY_CMD:sh} + +.for _repo_ in ${GIT_REPOSITORIES} +GIT_MODULE.${_repo_}?= ${GIT_MODULE} #${_repo_} + +## # determine appropriate checkout date or tag +## . if defined(GIT_TAG.${repo}) +## _GIT_TAG_FLAG.${repo}= -r${GIT_TAG.${repo}} +## _GIT_TAG.${repo}= ${GIT_TAG.${repo}} +## . elif defined(GIT_TAG) +## _GIT_TAG_FLAG.${repo}= -r${GIT_TAG} +## _GIT_TAG.${repo}= ${GIT_TAG} +## . elif defined(CHECKOUT_DATE) +## _GIT_TAG_FLAG.${repo}= -D${CHECKOUT_DATE:Q} +## _GIT_TAG.${repo}= ${CHECKOUT_DATE:Q} +## . else +## _GIT_TAG_FLAG.${repo}= '-D${_GIT_TODAY} 00:00 +0000' +_GIT_TAG.${_repo_}= ${_GIT_TODAY:Q} +## . endif + +# Cache support: +# cache file name (compression is not really effective) +_GIT_DISTFILE.${_repo_}= ${GIT_MODULE.${_repo_}}-${_GIT_TAG.${_repo_}}.tar + +# command to extract cache file +_GIT_EXTRACT_CACHED.${_repo_}= \ + if [ -f ${_GIT_DISTDIR}/${_GIT_DISTFILE.${_repo_}:Q} ]; then \ + ${STEP_MSG} "(1) Extracting cached GIT archive "${_GIT_DISTFILE.${_repo_}:Q}"."; \ + pax -r -f ${_GIT_DISTDIR}/${_GIT_DISTFILE.${_repo_}:Q} && rm -f ${_GIT_NEED_CLONE} ; \ + fi + +# create cache archive +_GIT_CREATE_CACHE.${_repo_}= \ + ${STEP_MSG} "(4) Creating cached GIT archive "${_GIT_DISTFILE.${_repo_}:Q} "on" ${_GIT_DISTDIR:Q}"."; \ + ${MKDIR} ${_GIT_DISTDIR:Q}; \ + pax -w -f ${_GIT_DISTDIR}/${_GIT_DISTFILE.${_repo_}:Q} */.git || rm -f ${_GIT_DISTDIR}/${_GIT_DISTFILE.${_repo_}:Q} +.endfor pre-extract: do-git-extract @@ -66,10 +116,50 @@ .for _repo_ in ${GIT_REPOSITORIES} ${_PKG_SILENT}${_PKG_DEBUG}set -e; \ cd ${WRKDIR}; \ - ${SETENV} ${_GIT_ENV} \ + if [ ! -d ${_GIT_DISTDIR} ]; then mkdir -p ${_GIT_DISTDIR:Q}; fi; \ + ${_GIT_EXTRACT_CACHED.${_repo_}}; \ + p="$$(cd ${_GIT_DISTDIR} && ls -t ${GIT_MODULE.${_repo_}}-[0-9-]*.tar | head -n 1)"; \ + if [ -n "$$p" ]; then \ + q="$$(cd ${_GIT_DISTDIR} && ls -t ${GIT_MODULE.${_repo_}}-[0-9]*.tar | wc -l)" && \ + if [ $$(($$q)) -gt 3 ] ; then \ + ${STEP_MSG} "(1a) more than 3 generation files found in ${_GIT_DISTDIR}, you may"; \ + ${STEP_MSG} " delete them manually to avoid getting them fat --> $$p etc" ; \ + ${STEP_MSG} " suggesting to leave just any one of these," ; \ + ${STEP_MSG} " or delete them all. (But it would take time at next clone.)" ; \ + fi; \ + if [ "$$p" != ${_GIT_DISTFILE.${_repo_}:Q} ]; then \ + ${STEP_MSG} "(2) Extracting cached GIT archive \"""$$p\"."; \ + pax -r -f ${_GIT_DISTDIR:Q}/"$$p" && rm -f ${_GIT_NEED_CLONE}; \ + fi \ + else \ + touch ${_GIT_NEED_CLONE}; \ + fi; \ + if [ -r ${_GIT_NEED_CLONE} ]; then \ + ${STEP_MSG} "(3a) git clone from "${GIT_MODULE.${_repo_}:Q}" with "${_GIT_FLAGS}"." ; \ ${_GIT_CMD} clone \ ${_GIT_FLAGS} \ - ${GIT_REPO.${_repo_}:Q} + ${GIT_REPO.${_repo_}:Q}; \ + else \ + ${STEP_MSG} "(3b) git pull origin master from "${GIT_MODULE.${_repo_}:Q} "." ; \ + (cd ${GIT_MODULE}; \ + ${_GIT_CMD} pull ${GIT_FLAGS} origin master \ + | tee ${_GIT_TMP_RESULTS}; \ + ${_GIT_CMD} checkout -f master ; ) \ + fi; \ + if [ -z ${_GIT_TMP_RESULTS} ]; then \ + ${_GIT_CREATE_CACHE.${_repo_}}; \ + fi; \ + r="$$(grep 'Already up-to-date' ${_GIT_TMP_RESULTS} | head -n 1)"; \ + if [ ! -n "$$r" ]; then \ + if [ "$$p" != ${_GIT_DISTFILE.${_repo_}:Q} ] || [ -r ${_GIT_NEED_CLONE} ]; then \ + ${_GIT_CREATE_CACHE.${_repo_}}; \ + else \ + ${STEP_MSG} "(5) Skipping write cache, the same date or newly cloned";\ + fi; \ + else \ + ${STEP_MSG} "(6) Skipping write cache, said -> Already up-to-date.";\ + fi .endfor .endif +# ${SETENV} ${_GIT_ENV} \ Index: mk/svn-package.mk =================================================================== RCS file: /cvsroot/pkgsrc-wip/wip/mk/svn-package.mk,v retrieving revision 1.16 diff -u -r1.16 svn-package.mk --- mk/svn-package.mk 7 Nov 2011 05:51:45 -0000 1.16 +++ mk/svn-package.mk 3 Dec 2011 10:35:36 -0000 @@ -1,7 +1,11 @@ -# $Id: svn-package.mk,v 1.16 2011/11/07 05:51:45 asau Exp $ - +# $Id: svn-package.mk,v 1.15 2011/10/06 03:57:03 makoto Exp $ +# +# Please update cvs-package.mk as well. It is brother Makefile frags. +# # This file provides simple access to Subversion repositories, so that packages -# can be created from Subversion instead of from released tarballs. +# can be created from Subversion instead of from released tarballs. Whenever a +# package is fetched from Subversion, an archive is created from it and saved +# in ${DISTDIR}/svn-packages, to save bandwidth. # # === User-settable variables === # @@ -85,6 +89,7 @@ # DISTFILES?= # empty +PKGNAME?= ${DISTNAME:C,-[0-9].*,,}-svn-${_SVN_PKGVERSION} # Enforce PKGREVISION unless SVN_TAG is set .if empty(SVN_TAG) . if defined(CHECKOUT_DATE) @@ -130,7 +135,7 @@ _SVN_CMD= svn _SVN_ENV= # empty _SVN_ENV+= SVN_RSH=${_SVN_RSH:Q} -_SVN_FLAGS= -q +_SVN_FLAGS= _SVN_CHECKOUT_FLAGS= --config-dir=${_SVN_CONFIG_DIR} --non-interactive _SVN_CONFIG_DIR= ${WRKDIR}/.subversion _SVN_TODAY_CMD= ${DATE} -u +'%Y-%m-%d' @@ -139,7 +144,6 @@ _SVN_PKGVERSION= ${_SVN_PKGVERSION_CMD:sh} _SVN_DISTDIR= ${DISTDIR}/svn-packages -# # Generation of repository-specific variables # @@ -160,26 +164,33 @@ _SVN_TAG.${repo}= ${_SVN_TODAY} . endif +_SVN_TMP_RESULT.${repo}= '/tmp/svn-${SVN_MODULE.${repo}}-update' + # Cache support: . if !defined(NO_SVN_CACHE.${repo}) \ || defined(NO_SVN_CACHE.${repo}) && empty(NO_SVN_CACHE.${repo}:M[Yy][Ee][Ss]) # cache file name . if !defined(SVN_DISTBASE.${repo}) -SVN_DISTBASE.${repo}= ${PKGBASE}-${SVN_MODULE.${repo}} +SVN_DISTBASE.${repo}= ${SVN_MODULE.${repo}} . endif _SVN_DISTFILE.${repo}= ${SVN_DISTBASE.${repo}}-${_SVN_TAG.${repo}}.tar.gz # command to extract cache file _SVN_EXTRACT_CACHED.${repo}= \ - if [ -f ${_SVN_DISTDIR}/${_SVN_DISTFILE.${repo}:Q} ]; then \ - ${STEP_MSG} "Extracting cached Subversion archive "${_SVN_DISTFILE.${repo}:Q}"."; \ - pax -r -z -f ${_SVN_DISTDIR}/${_SVN_DISTFILE.${repo}:Q}; \ - exit 0; \ + p="$$(ls -td ${_SVN_DISTDIR}/${SVN_DISTBASE.${repo}}-*.tar.gz | head -n 1)"; \ + if [ -n "$$p" ]; then \ + ${STEP_MSG} "(1) Extracting cached SVN archive \"""$$p\"."; \ + pax -r -z -f "$$p"; \ + else \ + ${STEP_MSG} "(1a) No cache file found."; \ fi +_SVN_CHECK_UPDATE.${repo}= \ + "$$(grep ^[ADMU] ${_SVN_TMP_RESULT.${repo}} | head -n 1)" + # create cache archive _SVN_CREATE_CACHE.${repo}= \ - ${STEP_MSG} "Creating cached Subversion archive "${_SVN_DISTFILE.${repo}:Q}"."; \ + ${STEP_MSG} "(5) Creating cached Subversion archive "${_SVN_DISTFILE.${repo}:Q}"."; \ ${MKDIR} ${_SVN_DISTDIR:Q}; \ pax -w -z -f ${_SVN_DISTDIR}/${_SVN_DISTFILE.${repo}:Q} ${SVN_MODULE.${repo}:Q} . else @@ -201,14 +212,33 @@ ${RUN} cd ${WRKDIR}; \ if [ ! -d ${_SVN_DISTDIR} ]; then mkdir -p ${_SVN_DISTDIR:Q}; fi; \ ${_SVN_EXTRACT_CACHED.${repo}}; \ - ${STEP_MSG} "Downloading "${SVN_MODULE.${repo}:Q}" from "${SVN_ROOT.${repo}:Q}"."; \ + ${STEP_MSG} "(2) Downloading "${SVN_MODULE.${repo}:Q}" from "${SVN_ROOT.${repo}:Q}"."; \ ${SETENV} ${_SVN_ENV} \ - ${_SVN_CMD} checkout ${_SVN_CHECKOUT_FLAGS} \ + ${_SVN_CMD} \ + checkout ${_SVN_CHECKOUT_FLAGS} \ ${_SVN_TAG_FLAG.${repo}:Q} \ - ${_SVN_FLAGS} \ + ${_SVN_FLAGS} \ ${SVN_ROOT.${repo}:Q} \ - ${SVN_MODULE.${repo}:Q}; \ - ${_SVN_CREATE_CACHE.${repo}} + ${SVN_MODULE.${repo}:Q} > ${_SVN_TMP_RESULT.${repo}}; \ + if [ ! "$$p" = 0 ];then \ + if [ ! -z ${_SVN_TMP_RESULT.${repo}} ];then \ + if [ -n ${_SVN_CHECK_UPDATE.${repo}} ]; then \ + ${_SVN_CREATE_CACHE.${repo}}; \ + else \ + ${STEP_MSG} "(6a) Skip creating cache file for no update."; \ + fi; \ + else \ + ${STEP_MSG} "(6b) Skip creating cache file."; \ + fi; \ + else \ + ${STEP_MSG} "(6c) Skip creating cache file for no update."; \ + fi; .endfor .endif + +# test is four way +# no any cache file yet -> write cache +# cache file exist and no update -> no write cache +# cache file exist, file added/delete -> write cache +# cache file exist and update there -> write cache