From 6805245679a6f614ed551183075c9d8c45743924 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Tue, 4 Jul 2017 23:59:01 -0700 Subject: Allow VCS versions to be patched via some unique revision ID Signed-off-by: Alexey Neyman diff --git a/TODO b/TODO index f4f7ca9..3957934 100644 --- a/TODO +++ b/TODO @@ -1,13 +1,3 @@ -TBD -packages todo -[X] convert gen-kconfig to use templates -[ ] some way of patching development sources - version based? or just directory with "apply-to-any-revision" patches. -[X] mention custom glibc addons are no longer handled (even though they never fully were, ct-ng would be unable to fetch them unless they were secretly placed into the download area) -[x] mention incompatibility of sample options -[X] version-locked packages - [X] make glibc-ports package for glibc <2.17 (it has its own repo) -[x] dependencies like cloog - A (slightly) ordered set of tasks for crosstool-NG. Written in a cryptic language; contact me if you want to help with any of these :) -- Alexey Neyman (@stilor) diff --git a/packages/duma/package.desc b/packages/duma/package.desc index 7bae98c..0abd534 100644 --- a/packages/duma/package.desc +++ b/packages/duma/package.desc @@ -1,4 +1,4 @@ repository='cvs :pserver:anonymous@duma.cvs.sourceforge.net:/cvsroot/duma duma' -mirrors='http://downloads.sourceforge.net/project/duma/duma/${CT_DUMA_VERSION}' +mirrors='http://downloads.sourceforge.net/project/duma/duma/${CT_DUMA_VERSION//_/.}' archive_filename='@{pkg_name}_@{version}' archive_dirname='@{pkg_name}_@{version}' diff --git a/scripts/functions b/scripts/functions index cea001f..7ec6e83 100644 --- a/scripts/functions +++ b/scripts/functions @@ -1529,7 +1529,7 @@ CT_GetVersion_cvs() ;; esac fi - basename="${pkg_name}-${devel_branch:-trunk}-${devel_revision//[^0-9]/}" + unique_id="${devel_branch:-trunk}-${devel_revision//[^0-9]/}" } # Check out sources from CVS. Variables are set by CT_PackageRun. @@ -1564,7 +1564,7 @@ CT_GetVersion_svn() version="${version#_}" version="${version%_}" version="${version}-${devel_revision}" - basename="${pkg_name}-${version}" + unique_id="${version}" } # Retrieve sources from Subversion. @@ -1588,10 +1588,10 @@ CT_GetVersion_hg() devel_revision=`hg identify "${devel_url}"` else CT_DoLog WARN "${pkg_name}: Mercurial cannot query non-default branch, will clone" - devel_revision="TBD" + devel_revision="to.be.determined" fi fi - basename="${pkg_name}-${devel_revision}" + unique_id="${devel_revision}" } # Retrieve sources from Mercurial. @@ -1602,10 +1602,10 @@ CT_Download_hg() if [ -n "${devel_branch}" ]; then CT_DoExecLog ALL hg update "${devel_branch}" fi - if [ "${devel_revision}" = "TBD" ]; then + if [ "${devel_revision}" = "to.be.determined" ]; then # Report what we found out (as common message lacks the revision) devel_revision=`hg identify -i` - basename="${pkg_name}-${devel_revision}" + unique_id="${devel_revision}" CT_DoLog EXTRA "Retrieved revision ${devel_revision}" else CT_DoExecLog ALL hg update "${devel_revision}" @@ -1651,7 +1651,7 @@ CT_GetVersion_git() devel_revision=`echo "${best}" | cut -c1-8` CT_DoLog DEBUG "ref ${devel_branch} at ${devel_url} has cset of ${devel_revision}" fi - basename="${pkg_name}-${devel_revision}" + unique_id="${devel_revision}" } # Retrieve sources from Git. @@ -1684,9 +1684,10 @@ CT_PackageRun() use="${use:-${sym}}" # Variables that are per-fork - for v in basename pkg_name version src_release mirrors archive_filename archive_dirname \ - src_devel src_custom devel_vcs devel_url devel_branch devel_revision \ - devel_subdir devel_bootstrap custom_location; do + for v in basename pkg_name version \ + src_release mirrors archive_filename archive_dirname \ + src_devel devel_vcs devel_url devel_branch devel_revision devel_subdir devel_bootstrap \ + src_custom custom_location; do eval "local ${v}=\${CT_${use}_${v^^}}" done @@ -1703,8 +1704,9 @@ CT_PackageRun() # Save certain variables that may be modified by the callback. # Fetching the sources is run in the main process, so no need to # use CT_EnvModify. - for v in devel_branch devel_revision basename; do + for v in devel_branch devel_revision basename version; do eval "CT_${use}_${v^^}=\${${v}}" + eval "CT_DoLog DEBUG \"Override CT_${use}_${v^^}=\${CT_${use}_${v^^}}\"" done } @@ -1725,6 +1727,7 @@ CT_DoFetch() fi elif [ "${src_devel}" = "y" ]; then + local unique_id if [ -z "${devel_revision}" -a "${CT_FORBID_DOWNLOAD}" = "y" ]; then CT_Abort "${pkg_name}: cannot find most recent revisions with downloads prohibited" @@ -1740,43 +1743,35 @@ CT_DoFetch() # "most current revision", respectively. CT_GetVersion_${devel_vcs} - if [ -z "${basename}" ]; then - CT_Abort "${pkg_name}: ${devel_vcs} did not set base name" + if [ -z "${unique_id}" ]; then + CT_Abort "${pkg_name}: ${devel_vcs} did not set unique ID for branch/revision" fi + basename="${pkg_name}-${devel_vcs}-${unique_id}" + version="${devel_vcs}-${unique_id}" # Try getting the tarball with empty list of URLs: it will only # attempt getting it from local storage or from the mirror if configured. - # TBD extra "Retrieving" message from CT_GetFile - if CT_GetFile "${basename}" .tar.bz2; then + if [ "${unique_id}" != "to.be.determined" ] && \ + CT_GetFile "${basename}" .tar.bz2; then return 0 fi - CT_DoLog EXTRA "Retrieving '${basename}' (${devel_vcs} ${devel_url} ${devel_branch} ${devel_revision})" if [ "${CT_FORBID_DOWNLOAD}" = "y" ]; then CT_DoLog WARN "Downloads forbidden, not trying ${devel_vcs} retrieval" return 1 fi + CT_DoLog EXTRA "Retrieving '${basename}' (${devel_vcs} ${devel_url} ${devel_branch} ${devel_revision})" CT_MktempDir tmp_dir CT_Pushd "${tmp_dir}" CT_Download_${devel_vcs} - CT_DoExecLog ALL mv "${pkg_name}${devel_subdir:+/${devel_subdir}}" "${basename}" - # Post-download scripts. - # FIXME: This currently means we end up using host's autotools, - # but changing this requires reworking the order of operations in crosstool-NG: - # we'd need to defer the download/extraction/patching of a package until after - # the companion tools are built. - local remains="${devel_bootstrap}" - while [ -n "${remains}" ]; do - CT_Pushd "${basename}" - CT_DoExecLog ALL ${remains%%&&*} - case "${remains}" in - *\&\&*) remains="${remains#*&&}";; - *) remains=;; - esac - CT_Popd - done + # First setting above may not have determined the version (e.g. with Mercurial) + # Set the final, downloaded version. + version="${devel_vcs}-${unique_id}" + basename="${pkg_name}-${version}" + + CT_DoExecLog ALL mv "${pkg_name}${devel_subdir:+/${devel_subdir}}" "${basename}" CT_DoExecLog ALL tar cjf "${CT_TARBALLS_DIR}/${basename}.tar.bz2" "${basename}" CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}.tar.bz2" CT_Popd @@ -1784,6 +1779,8 @@ CT_DoFetch() elif [ "${src_custom}" = "y" ]; then # Will be handled during extraction/patching + version="local" + basename="${pkg_name}-${version}" :; else CT_Abort "No known source for ${pkg_name}" @@ -1880,10 +1877,7 @@ CT_DoExtractPatch() CT_DoExecLog ALL touch "${CT_COMMON_SRC_DIR}/.${basename}.extracted" CT_DoExecLog ALL rm -f "${CT_COMMON_SRC_DIR}/.${basename}.extracting" fi - fi - # Patch the released tarballs - if [ "${src_release}" = "y" ]; then if [ -f "${CT_COMMON_SRC_DIR}/.${basename}.patched" ]; then CT_DoLog DEBUG "Already patched ${basename}" else @@ -1913,7 +1907,7 @@ CT_DoExtractPatch() fi done - # TBD meta-package for config.sub/config.guess with replacement script + # TBD create meta-package for config.sub/config.guess with replacement script if [ "${CT_OVERRIDE_CONFIG_GUESS_SUB}" = "y" ]; then CT_DoLog ALL "Overiding config.guess and config.sub" for cfg in config.guess config.sub; do @@ -1924,6 +1918,14 @@ CT_DoExtractPatch() done fi + # FIXME: This currently means we end up using host's autotools, + # but changing this requires reworking the order of operations in crosstool-NG: + # we'd need to defer the download/extraction/patching of a package until after + # the companion tools are built. + if [ -n "${devel_bootstrap}" ]; then + CT_DoExecLog ALL "${CT_CONFIG_SHELL}" -c "${devel_bootstrap}" + fi + if [ -n "${patchfunc}" ]; then ${patchfunc} fi @@ -1934,7 +1936,7 @@ CT_DoExtractPatch() CT_DoExecLog ALL rm -f "${CT_COMMON_SRC_DIR}/.${basename}.patching" fi else - CT_DoLog WARN "${pkg_name}: not using a released version, no patches applied" + CT_DoLog WARN "${pkg_name}: using custom location, no patches applied" fi # Symlink/copy/overlay into per-target source directory -- cgit v0.10.2-6-g49f6