From d72ce06673197dbd21336ca8f5618d98487001c8 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 6 Jul 2013 02:29:51 +0200 Subject: [PATCH] Adjust to changed HaikuPorts repository layout The package kit actually requires the files "repo", "repo.info", "repo.sha256" to be located under the repository base URL, so the approach to name the repository file "repo-" doesn't work. Now there's a directory "" which contains the files. This commit moves the computation of the hash and downloading the repository file from the build_haiku_image script to the jam build system. The repo.info is also downloaded and a repository config file is generated. --- Jamrules | 1 + build/jam/BuildSetup | 15 +++-- build/jam/HaikuImage | 15 ++--- build/jam/RepositoryRules | 73 ++++++++++++++++++++-- build/jam/repositories/HaikuPorts/x86_gcc2 | 1 + build/scripts/build_haiku_image | 18 +----- 6 files changed, 88 insertions(+), 35 deletions(-) diff --git a/Jamrules b/Jamrules index 5c47a6ab59..5e21bab6bb 100644 --- a/Jamrules +++ b/Jamrules @@ -64,6 +64,7 @@ for repository in HaikuPorts { = [ FDirName $(repositoriesDirectory) $(repository) ] ; local file = [ Glob $(repositoryDirectory) : $(HAIKU_PACKAGING_ARCH) ] ; if $(file) { + HAIKU_REPOSITORY_JAMFILE = $(file) ; include $(file) ; } } diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup index 49596630c4..fd4ec32255 100644 --- a/build/jam/BuildSetup +++ b/build/jam/BuildSetup @@ -1240,11 +1240,16 @@ HAIKU_APP_TEST_DIR ?= [ FDirName $(HAIKU_TEST_DIR) apps ] ; HAIKU_APP_TEST_LIB_DIR ?= [ FDirName $(HAIKU_APP_TEST_DIR) lib ] ; HAIKU_TMP_DIR ?= [ FDirName $(HAIKU_OUTPUT_DIR) tmp ] ; -HAIKU_PACKAGES_DIR = [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR) - packages ] ; -HAIKU_PACKAGES_BUILD_DIR = [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR) - packages_build ] ; -HAIKU_PACKAGE_INFOS_DIR = [ FDirName $(HAIKU_TOP) src data package_infos ] ; +HAIKU_PACKAGING_BASE_DIR = [ FDirName $(TARGET_OBJECT_BASE_DIR) + $(HAIKU_PACKAGING_ARCH) packaging ] ; +HAIKU_PACKAGES_DIR = [ FDirName $(HAIKU_PACKAGING_BASE_DIR) + packages ] ; +HAIKU_PACKAGES_BUILD_DIR = [ FDirName $(HAIKU_PACKAGING_BASE_DIR) + packages_build ] ; +HAIKU_PACKAGE_REPOSITORIES_DIR = [ FDirName $(HAIKU_PACKAGING_BASE_DIR) + repositories ] ; +HAIKU_PACKAGE_INFOS_DIR = [ FDirName $(HAIKU_TOP) src data + package_infos ] ; TARGET_TEST_DIR ?= [ FDirName $(HAIKU_TEST_DIR) $(TARGET_PLATFORM) ] ; diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index df1fc226f8..6aac8e0a7d 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -463,20 +463,13 @@ AddTargetVariableToScript $(script) : $(commonPackages) : commonPackages ; # Generate the repository package lists and add variables for the repositories. local repository ; +local repositoryFiles ; for repository in $(HAIKU_REPOSITORIES) { - local packageListFile = $(repository:G=repository-package-list) ; - MakeLocate $(packageListFile) - : [ FDirName $(TARGET_OBJECT_BASE_DIR) $(HAIKU_PACKAGING_ARCH) ] ; - Always $(packageListFile) ; - GeneratedRepositoryPackageList $(packageListFile) : $(repository) ; - - AddTargetVariableToScript $(script) : $(packageListFile) - : repositoryPackageList_$(repository:G=) ; - AddVariableToScript $(script) : repositoryUrl_$(repository:G=) - : [ on $(repository) return $(HAIKU_REPOSITORY_URL) ] ; + repositoryFiles + += [ on $(repository) return $(HAIKU_REPOSITORY_CACHE_FILE) ] ; } -AddVariableToScript $(script) : repositories : $(HAIKU_REPOSITORIES:G=) ; +AddTargetVariableToScript $(script) : $(repositoryFiles) : repositories ; # create the other scripts HAIKU_IMAGE_MAKE_DIRS_SCRIPT = haiku.image-make-dirs ; diff --git a/build/jam/RepositoryRules b/build/jam/RepositoryRules index 7dab8d6ccd..6b65180482 100644 --- a/build/jam/RepositoryRules +++ b/build/jam/RepositoryRules @@ -39,8 +39,8 @@ rule AddRepositoryPackages repository : architecture : packages : sourcePackages } -rule PackageRepository repository : architecture : url : anyPackages : packages - : sourcePackages +rule PackageRepository repository : architecture : repositoryUrl : packagesUrl + : anyPackages : packages : sourcePackages { repository = $(repository:G=repository) ; @@ -49,12 +49,52 @@ rule PackageRepository repository : architecture : url : anyPackages : packages } HAIKU_REPOSITORIES += $(repository) ; - HAIKU_REPOSITORY_URL on $(repository) = $(url) ; + HAIKU_REPOSITORY_URL on $(repository) = $(repositoryUrl) ; + HAIKU_REPOSITORY_PACKAGES_URL on $(repository) = $(packagesUrl) ; + HAIKU_REPOSITORY_DEFINITION_FILE on $(repository) + = $(HAIKU_REPOSITORY_JAMFILE) ; AddRepositoryPackages $(repository) : any : $(anyPackages) : $(sourcePackages) ; AddRepositoryPackages $(repository) : $(architecture) : $(packages) : $(sourcePackages) ; + + # build package list file + local packageListFile = $(repository:G=repository-package-list)-packages ; + MakeLocate $(packageListFile) : $(HAIKU_PACKAGE_REPOSITORIES_DIR) ; + GeneratedRepositoryPackageList $(packageListFile) : $(repository) ; + + # build package list checksum file + local packagesChecksumFile + = $(repository:G=repository-package-checksum)-checksum ; + MakeLocate $(packagesChecksumFile) : $(HAIKU_PACKAGE_REPOSITORIES_DIR) ; + Depends $(packagesChecksumFile) : $(packageListFile) ; + ChecksumFileSHA256 $(packagesChecksumFile) : $(packageListFile) ; + + # download repository info file + local repositoryInfo = $(repository:G=repository-info)-info ; + MakeLocate $(repositoryInfo) : $(HAIKU_PACKAGE_REPOSITORIES_DIR) ; + local repoUrl = [ on $(repository) return $(HAIKU_REPOSITORY_URL) ] ; + DownloadLocatedFile $(repositoryInfo) + : "$(repoUrl)/`cat $source`/repo.info" + : $(packagesChecksumFile) ; + + # download repository file + local repositoryFile = $(repository:G=repository-cache) ; + MakeLocate $(repositoryFile) : $(HAIKU_PACKAGE_REPOSITORIES_DIR) ; + local repoUrl = [ on $(repository) return $(HAIKU_REPOSITORY_URL) ] ; + DownloadLocatedFile $(repositoryFile) + : "$(repoUrl)/`cat $source`/repo" + : $(packagesChecksumFile) ; + + # build repository config file + local repositoryConfig = $(repository:G=repository-config)-config ; + MakeLocate $(repositoryConfig) : $(HAIKU_PACKAGE_REPOSITORIES_DIR) ; + RepositoryConfig $(repositoryConfig) : $(repositoryInfo) + : $(packagesChecksumFile) : $(repository) ; + + HAIKU_REPOSITORY_CACHE_FILE on $(repository) = $(repositoryFile) ; + HAIKU_REPOSITORY_CONFIG_FILE on $(repository) = $(repositoryConfig) ; } @@ -69,6 +109,10 @@ rule GeneratedRepositoryPackageList target : repository fileNames += [ on $(package) return $(HAIKU_PACKAGE_FILE_NAME) ] ; } + local definitionFile + = [ on $(repository) return $(HAIKU_REPOSITORY_DEFINITION_FILE) ] ; + Depends $(target) : $(definitionFile) ; + HAIKU_REPOSITORY_PACKAGE_FILE_NAMES on $(target) = $(fileNames) ; GeneratedRepositoryPackageList1 $(target) ; } @@ -82,6 +126,26 @@ actions GeneratedRepositoryPackageList1 } +rule RepositoryConfig repoConfig : repoInfo : packagesChecksumFile : repository +{ + repository = $(repository:G=repository) ; + + HAIKU_REPOSITORY_URL on $(repoConfig) + = [ on $(repository) return $(HAIKU_REPOSITORY_URL) ] ; + Depends $(repoConfig) + : create_repository_config $(repoInfo) $(packagesChecksumFile) ; + RepositoryConfig1 $(repoConfig) + : create_repository_config $(repoInfo) $(packagesChecksumFile) ; +} + + +actions RepositoryConfig1 +{ + $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) + $(2[1]) $(HAIKU_REPOSITORY_URL)/`cat $(2[3])` $(2[2]) $(1) +} + + rule IsPackageAvailable package { if $(package) in $(HAIKU_AVAILABLE_PACKAGES) { @@ -107,7 +171,8 @@ rule PackageURL packageName = [ on $(packageFamily) return $(HAIKU_PACKAGE_VERSIONS[1]) ] ; local fileName = [ on $(package) return $(HAIKU_PACKAGE_FILE_NAME) ] ; local repository = [ on $(package) return $(HAIKU_PACKAGE_REPOSITORY) ] ; - local baseUrl = [ on $(repository) return $(HAIKU_REPOSITORY_URL) ] ; + local baseUrl + = [ on $(repository) return $(HAIKU_REPOSITORY_PACKAGES_URL) ] ; return $(baseUrl)/$(fileName) ; } diff --git a/build/jam/repositories/HaikuPorts/x86_gcc2 b/build/jam/repositories/HaikuPorts/x86_gcc2 index 3765f5b134..0249ff6114 100644 --- a/build/jam/repositories/HaikuPorts/x86_gcc2 +++ b/build/jam/repositories/HaikuPorts/x86_gcc2 @@ -1,5 +1,6 @@ PackageRepository HaikuPorts : x86_gcc2 + : http://haiku-files.org/files/repo : http://haiku-files.org/files/hpkg : # architecture "any" packages diff --git a/build/scripts/build_haiku_image b/build/scripts/build_haiku_image index 4ee1bd15f1..52f70c23df 100755 --- a/build/scripts/build_haiku_image +++ b/build/scripts/build_haiku_image @@ -8,6 +8,7 @@ set -o errexit # addBuildCompatibilityLibDir # systemPackages, commonPackages - lists of the hpkg packages copied/updated # (in "system" and "common" respectively) +# repositories - all repository files # downloadDir # The following are only for image types: # installDir @@ -306,21 +307,8 @@ done if [ -n "$resolvePackageDependencies" ]; then echo "Resolving package dependencies ..." - repoFiles= - for repository in $repositories; do - eval 'repositoryPackageList=$repositoryPackageList_'$repository - eval 'repositoryUrl=$repositoryUrl_'$repository - packageListHash=`sha256sum $repositoryPackageList \ - | sed -r 's,([^[:space:]]*).*,\1,'` - repoFileName=repo-$packageListHash - repoFileUrl="$repositoryUrl/repos/$repoFileName" - repoFilePath="$downloadDir/$repoFileName" - downloadFile $repoFileUrl $repoFilePath - repoFiles="$repoFiles $repoFilePath" - done - # additional packages for system - packageUrls=`$getPackageDependencies $repoFiles -- $systemPackages` + packageUrls=`$getPackageDependencies $repositories -- $systemPackages` for packageUrl in $packageUrls; do packageFileName=`basename $packageUrl` packageFilePath="$downloadDir/$packageFileName" @@ -330,7 +318,7 @@ if [ -n "$resolvePackageDependencies" ]; then done # additional packages for common - packageUrls=`$getPackageDependencies $repoFiles -- $systemPackages \ + packageUrls=`$getPackageDependencies $repositories -- $systemPackages \ $commonPackages` for packageUrl in $packageUrls; do packageFileName=`basename $packageUrl`